From 3a3f9bececfeaa448009583b42813b4778d75fb0 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Wed, 13 Jan 2016 09:25:46 +0000 Subject: [PATCH] Add api_token model and dao --- app/dao/api_tokens_dao.py | 17 +++++++++++++++++ app/models.py | 9 +++++++++ app/schemas.py | 6 ++++++ app/service/views/rest.py | 7 ++++++- tests/app/dao/test_tokens_dao.py | 16 ++++++++++++++++ 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/dao/api_tokens_dao.py create mode 100644 tests/app/dao/test_tokens_dao.py diff --git a/app/dao/api_tokens_dao.py b/app/dao/api_tokens_dao.py new file mode 100644 index 000000000..7a49ab5da --- /dev/null +++ b/app/dao/api_tokens_dao.py @@ -0,0 +1,17 @@ +from app import db +from app.models import ApiToken + + +def save_token_model(token, update_dict={}): + if update_dict: + del update_dict['id'] + db.session.query(ApiToken).filter_by(id=token.id).update(update_dict) + else: + db.session.add(token) + db.session.commit() + + +def get_model_api_tokens(token=None): + if token: + return ApiToken.query.filter_by(token=token).one() + return ApiToken.query.filter_by().all() diff --git a/app/models.py b/app/models.py index fd11d36d6..22efc2aea 100644 --- a/app/models.py +++ b/app/models.py @@ -61,6 +61,15 @@ class Service(db.Model): restricted = db.Column(db.Boolean, index=False, unique=False, nullable=False) +class ApiToken(db.Model): + __tablename__ = 'api_tokens' + + id = db.Column(db.Integer, primary_key=True) + token = db.Column(db.String, unique=True, nullable=False) + service_id = db.Column(db.Integer, db.ForeignKey('services.id'), index=True, nullable=False) + expiry_date = db.Column(db.DateTime) + + TEMPLATE_TYPES = ['sms', 'email', 'letter'] diff --git a/app/schemas.py b/app/schemas.py index a06fff497..07eb357b6 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -28,9 +28,15 @@ class TemplateSchema(ma.ModelSchema): exclude = ("updated_at", "created_at", "service_id") +class ApiTokenSchema(ma.ModelSchema): + class Meta: + model = models.ApiToken + user_schema = UserSchema() users_schema = UserSchema(many=True) service_schema = ServiceSchema() services_schema = ServiceSchema(many=True) +api_token_schema = ApiTokenSchema() +api_tokens_schema = ApiTokenSchema(many=True) template_schema = TemplateSchema() templates_schema = TemplateSchema(many=True) diff --git a/app/service/views/rest.py b/app/service/views/rest.py index 1df38bd15..b3d48d04a 100644 --- a/app/service/views/rest.py +++ b/app/service/views/rest.py @@ -5,7 +5,6 @@ from app.dao.services_dao import ( save_model_service, get_model_services, delete_model_service) from app.dao.templates_dao import ( save_model_template, get_model_templates) -from app.dao.users_dao import get_model_users from app.dao import DAOException from .. import service from app import db @@ -72,6 +71,12 @@ def get_service(service_id=None): return jsonify(data=data) +# TODO auth to be added +@service.route('//token', methods=['POST']) +def create_token(): + request.get_json() + + # TODO auth to be added. @service.route('//template/', methods=['POST']) def create_template(service_id): diff --git a/tests/app/dao/test_tokens_dao.py b/tests/app/dao/test_tokens_dao.py new file mode 100644 index 000000000..3c3d2fec7 --- /dev/null +++ b/tests/app/dao/test_tokens_dao.py @@ -0,0 +1,16 @@ +import uuid + +from app.dao import api_tokens_dao +from app.models import ApiToken + + +def test_should_create_token(notify_api, notify_db, notify_db_session, sample_service): + token = uuid.uuid4() + api_token = ApiToken(**{'token': token, 'service_id': sample_service.id}) + + api_tokens_dao.save_token_model(api_token) + + all_tokens = api_tokens_dao.get_model_api_tokens() + + assert len(all_tokens) == 1 + assert all_tokens[0].token == str(token)