Skip to content
This repository has been archived by the owner on Mar 24, 2021. It is now read-only.

Stagecraft integration #252

Merged
merged 7 commits into from
Mar 10, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 4 additions & 3 deletions backdrop/admin/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
from ..core import cache_control, log_handler, database
from ..core.bucket import Bucket
from ..core.errors import ParseError, ValidationError
from ..core.log_handler \
import create_request_logger, create_response_logger
from ..core.repository \
import BucketConfigRepository, UserConfigRepository
from ..core.flaskutils import BucketConverter
Expand All @@ -35,7 +33,10 @@
app.config['DATABASE_NAME']
)

bucket_repository = BucketConfigRepository(db)
bucket_repository = BucketConfigRepository(
app.config['STAGECRAFT_URL'],
app.config['STAGECRAFT_DATA_SET_QUERY_TOKEN'])

user_repository = UserConfigRepository(db)


Expand Down
3 changes: 3 additions & 0 deletions backdrop/admin/config/development.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@
from development_environment import *
except ImportError:
from development_environment_sample import *

STAGECRAFT_URL = 'http://localhost:8080'
STAGECRAFT_DATA_SET_QUERY_TOKEN = 'stagecraft-data-set-query-token-fake'
2 changes: 2 additions & 0 deletions backdrop/admin/config/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@
MONGO_PORT = 27017

from test_environment import *

from development import STAGECRAFT_URL, STAGECRAFT_DATA_SET_QUERY_TOKEN
74 changes: 59 additions & 15 deletions backdrop/core/repository.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@

import json

import requests

from backdrop.core.bucket import BucketConfig
from backdrop.core.user import UserConfig

Expand Down Expand Up @@ -42,27 +47,66 @@ def _create_model(self, doc):

class BucketConfigRepository(object):

def __init__(self, db):
self._db = db
self._repository = _Repository(db, BucketConfig, "buckets", "name")

def save(self, bucket_config, create_bucket=True):
self._repository.save(bucket_config)

if bucket_config.realtime and create_bucket:
self._db.create_capped_collection(bucket_config.name,
bucket_config.capped_size)
def __init__(self, stagecraft_url, stagecraft_token):
self._stagecraft_url = stagecraft_url
self._stagecraft_token = stagecraft_token

def get_all(self):
return self._repository.get_all()
data_set_url = '{url}/data-sets/'.format(url=self._stagecraft_url)

data_sets = _decode_json(_get_url(data_set_url))
return [_make_bucket_config(data_set) for data_set in data_sets]

def retrieve(self, name):
return self._repository.retrieve(name)
if len(name) == 0:
raise ValueError('Name must not be empty')
data_set_url = ('{url}/data-sets/{data_set_name}'.format(
url=self._stagecraft_url,
data_set_name=name))

data_set = _decode_json(_get_url(data_set_url))
return _make_bucket_config(data_set)

def get_bucket_for_query(self, data_group, data_type):
return self._repository.find_first_instance_of(
{"data_group": data_group,
"data_type": data_type})
empty_vars = []
if len(data_group) == 0:
empty_vars += ['Data Group']
if len(data_type) == 0:
empty_vars += ['Data Type']
if len(empty_vars) > 0:
raise ValueError(' and '.join(empty_vars) + 'must not be empty')
data_set_url = ('{url}/data-sets?data-group={data_group_name}'
'&data-type={data_type_name}'.format(
url=self._stagecraft_url,
data_group_name=data_group,
data_type_name=data_type))

data_sets = _decode_json(_get_url(data_set_url))
if len(data_sets) > 0:
return _make_bucket_config(data_sets[0])
return None


def _make_bucket_config(stagecraft_dict):
if stagecraft_dict is None:
return None
return BucketConfig(**stagecraft_dict)


def _decode_json(string):
return json.loads(string) if string is not None else None


def _get_url(url):
response = requests.get(url)
try:
response.raise_for_status()
except requests.HTTPError as e:
if e.response.status_code == 404:
return None
raise e

return response.content


class UserConfigRepository(object):
Expand Down
8 changes: 4 additions & 4 deletions backdrop/read/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
from os import getenv
from bson import ObjectId

from flask import Flask, jsonify, request, redirect
from flask import Flask, jsonify, request
from flask_featureflags import FeatureFlag
from backdrop.core.log_handler \
import create_request_logger, create_response_logger
from backdrop.read.query import Query

from .validation import validate_request_args
Expand All @@ -32,7 +30,9 @@
app.config['DATABASE_NAME']
)

bucket_repository = BucketConfigRepository(db)
bucket_repository = BucketConfigRepository(
app.config['STAGECRAFT_URL'],
app.config['STAGECRAFT_DATA_SET_QUERY_TOKEN'])

log_handler.set_up_logging(app, GOVUK_ENV)

Expand Down
83 changes: 43 additions & 40 deletions backdrop/read/config/development.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,47 @@
MONGO_PORT = 27017
LOG_LEVEL = "DEBUG"
RAW_QUERIES_ALLOWED = {
"government_annotations": True,
"govuk_realtime": True,
"licence_finder_monitoring": True,
"licensing": False,
"licensing_journey": True,
"licensing_monitoring": True,
"licensing_realtime": True,
"lpa_volumes": True,
"lpa_monitoring": True,
# electronic vehicle licensing
"electronic_vehicle_licensing_monitoring": True,
"evl_customer_satisfaction": True,
"evl_volumetrics": True,
"sorn_monitoring": True,
"sorn_realtime": True,
"tax_disc_monitoring": True,
"tax_disc_realtime": True,
# fco
"deposit_foreign_marriage_journey": True,
"deposit_foreign_marriage_monitoring": True,
"deposit_foreign_marriage_realtime": True,
"pay_foreign_marriage_certificates_journey": True,
"pay_foreign_marriage_certificates_monitoring": True,
"pay_foreign_marriage_certificates_realtime": True,
"pay_legalisation_drop_off_journey": True,
"pay_legalisation_drop_off_monitoring": True,
"pay_legalisation_drop_off_realtime": True,
"pay_legalisation_post_journey": True,
"pay_legalisation_post_monitoring": True,
"pay_legalisation_post_realtime": True,
"pay_register_birth_abroad_journey": True,
"pay_register_birth_abroad_monitoring": True,
"pay_register_birth_abroad_realtime": True,
"pay_register_death_abroad_journey": True,
"pay_register_death_abroad_monitoring": True,
"pay_register_death_abroad_realtime": True,
# HMRC preview
"hmrc_preview": True,
# LPA / Lasting Power of Attorney
"lpa_journey": True,
"government_annotations": True,
"govuk_realtime": True,
"licence_finder_monitoring": True,
"licensing": False,
"licensing_journey": True,
"licensing_monitoring": True,
"licensing_realtime": True,
"lpa_volumes": True,
"lpa_monitoring": True,
# electronic vehicle licensing
"electronic_vehicle_licensing_monitoring": True,
"evl_customer_satisfaction": True,
"evl_volumetrics": True,
"sorn_monitoring": True,
"sorn_realtime": True,
"tax_disc_monitoring": True,
"tax_disc_realtime": True,
# fco
"deposit_foreign_marriage_journey": True,
"deposit_foreign_marriage_monitoring": True,
"deposit_foreign_marriage_realtime": True,
"pay_foreign_marriage_certificates_journey": True,
"pay_foreign_marriage_certificates_monitoring": True,
"pay_foreign_marriage_certificates_realtime": True,
"pay_legalisation_drop_off_journey": True,
"pay_legalisation_drop_off_monitoring": True,
"pay_legalisation_drop_off_realtime": True,
"pay_legalisation_post_journey": True,
"pay_legalisation_post_monitoring": True,
"pay_legalisation_post_realtime": True,
"pay_register_birth_abroad_journey": True,
"pay_register_birth_abroad_monitoring": True,
"pay_register_birth_abroad_realtime": True,
"pay_register_death_abroad_journey": True,
"pay_register_death_abroad_monitoring": True,
"pay_register_death_abroad_realtime": True,
# HMRC preview
"hmrc_preview": True,
# LPA / Lasting Power of Attorney
"lpa_journey": True,
}

STAGECRAFT_URL = 'http://localhost:8080'
STAGECRAFT_DATA_SET_QUERY_TOKEN = 'stagecraft-data-set-query-token-fake'
2 changes: 2 additions & 0 deletions backdrop/read/config/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@
"rawr": True,
"month": True,
}

from development import STAGECRAFT_URL, STAGECRAFT_DATA_SET_QUERY_TOKEN
5 changes: 4 additions & 1 deletion backdrop/write/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@
app.config['DATABASE_NAME']
)

bucket_repository = BucketConfigRepository(db)
bucket_repository = BucketConfigRepository(
app.config['STAGECRAFT_URL'],
app.config['STAGECRAFT_DATA_SET_QUERY_TOKEN'])

user_repository = UserConfigRepository(db)

log_handler.set_up_logging(app, GOVUK_ENV)
Expand Down
3 changes: 3 additions & 0 deletions backdrop/write/config/development.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@
from development_environment import *
except ImportError:
from development_environment_sample import *

STAGECRAFT_URL = 'http://localhost:8080'
STAGECRAFT_DATA_SET_QUERY_TOKEN = 'stagecraft-data-set-query-token-fake'
3 changes: 2 additions & 1 deletion backdrop/write/config/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
"evl_volumetrics": ["_timestamp", "service", "transaction"],
}

from development import CREATE_COLLECTION_ENDPOINT_TOKEN
from development import (CREATE_COLLECTION_ENDPOINT_TOKEN, STAGECRAFT_URL,
STAGECRAFT_DATA_SET_QUERY_TOKEN)
from test_environment import *
15 changes: 9 additions & 6 deletions features/admin/csv_upload.feature
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
Feature: CSV Upload

Scenario: Upload CSV data
Given I have a bucket named "my_bucket"
And bucket setting upload_format is "csv"
Given I have a bucket named "my_bucket" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "my_bucket"
And a file named "data.csv"
Expand All @@ -28,8 +29,9 @@ Feature: CSV Upload
city,città
coffee,caffè
"""
And I have a bucket named "my_bucket"
And bucket setting upload_format is "csv"
And I have a bucket named "my_bucket" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "my_bucket"
When I go to "/my_bucket/upload"
Expand Down Expand Up @@ -59,8 +61,9 @@ Feature: CSV Upload
2013-01-01,2013-01-07,abc,287
2013-01-01,2013-01-07,def,425
"""
And I have a bucket named "bucket_with_auto_id"
And bucket setting upload_format is "csv"
And I have a bucket named "bucket_with_auto_id" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "bucket_with_auto_id"
When I go to "/bucket_with_auto_id/upload"
Expand Down
20 changes: 12 additions & 8 deletions features/admin/csv_upload_validation.feature
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ Feature: csv upload validation
Pawel,27,Polish,male
Max,35,Italian,male
"""
And I have a bucket named "foo"
And bucket setting upload_format is "csv"
And I have a bucket named "foo" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "foo"
When I go to "/foo/upload"
Expand All @@ -25,8 +26,9 @@ Feature: csv upload validation
Pawel,27,Polish,male
Max,35,Italian
"""
And I have a bucket named "foo"
And bucket setting upload_format is "csv"
And I have a bucket named "foo" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "foo"
When I go to "/foo/upload"
Expand All @@ -37,8 +39,9 @@ Feature: csv upload validation

Scenario: file too large
Given a file named "data.csv" of size "1000000" bytes
And I have a bucket named "foo"
And bucket setting upload_format is "csv"
And I have a bucket named "foo" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "foo"
When I go to "/foo/upload"
Expand All @@ -49,8 +52,9 @@ Feature: csv upload validation

Scenario: non UTF8 characters
Given a file named "data.csv" with fixture "bad-characters.csv"
And I have a bucket named "foo"
And bucket setting upload_format is "csv"
And I have a bucket named "foo" with settings
| key | value |
| upload_format | "csv" |
And I am logged in
And I can upload to "foo"
When I go to "/foo/upload"
Expand Down
10 changes: 6 additions & 4 deletions features/admin/excel_upload.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ Feature: excel upload

Scenario: Upload XLSX file
Given a file named "data.xlsx" with fixture "data.xlsx"
And I have a bucket named "my_xlsx_bucket"
And bucket setting upload_format is "excel"
And I have a bucket named "my_xlsx_bucket" with settings
| key | value |
| upload_format | "excel" |
And I am logged in
And I can upload to "my_xlsx_bucket"
When I go to "/my_xlsx_bucket/upload"
Expand All @@ -18,8 +19,9 @@ Feature: excel upload

Scenario: using _timestamp for an auto id
Given a file named "LPA_MI_EXAMPLE.xls" with fixture "LPA_MI_EXAMPLE.xls"
And I have a bucket named "bucket_with_timestamp_auto_id"
And bucket setting upload_format is "excel"
And I have a bucket named "bucket_with_timestamp_auto_id" with settings
| key | value |
| upload_format | "excel" |
And I am logged in
And I can upload to "bucket_with_timestamp_auto_id"
When I go to "/bucket_with_timestamp_auto_id/upload"
Expand Down