summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2017-10-05 18:05:21 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2017-10-05 18:05:21 +0200
commit9994319ea5c86bad2f88ab737b9b82dfae43cd6a (patch)
tree92943c5ef789d3be375f630e74040535d01cc37e
parent975b647a3274f299df7260b6597aa88be90a7bb8 (diff)
downloadarchivist-9994319ea5c86bad2f88ab737b9b82dfae43cd6a.tar.gz
archivist-9994319ea5c86bad2f88ab737b9b82dfae43cd6a.tar.bz2
archivist-9994319ea5c86bad2f88ab737b9b82dfae43cd6a.zip
Webservice to create a new tag
-rw-r--r--archivist/bl.py22
-rw-r--r--archivist/model.py1
-rw-r--r--archivist/server/__init__.py14
-rw-r--r--archivist/server/tag.py14
4 files changed, 38 insertions, 13 deletions
diff --git a/archivist/bl.py b/archivist/bl.py
index 0815cf6..849f2bb 100644
--- a/archivist/bl.py
+++ b/archivist/bl.py
@@ -34,19 +34,19 @@ class PrefixTag:
def load(self):
return m.Tag.get(name = self.name, prefix = self.prefix)
+ @db.atomic()
def create(self):
- with db.atomic():
- if self.prefix:
- prefix, created = m.Prefix.get_or_create(name = self.prefix)
+ if self.prefix:
+ prefix, created = m.Prefix.get_or_create(name = self.prefix)
- if not created and prefix.virtual:
- raise BusinessException("Prefix '%s' is not allowed to carry additional tags." % self.prefix)
- else:
- prefix = None
+ if not created and prefix.virtual:
+ raise BusinessException("Prefix '%s' is not allowed to carry additional tags." % self.prefix)
+ else:
+ prefix = None
- tag, created = m.Tag.create_or_get(name = self.name, prefix = self.prefix, description = self.description)
+ tag, created = m.Tag.create_or_get(name = self.name, prefix = self.prefix, description = self.description)
- if prefix is not None:
- m.TagImplications.try_create(tag = tag, implies_tag = prefix.default_tag)
+ if prefix is not None:
+ m.TagImplications.try_create(tag = tag, implies_tag = prefix.default_tag)
- return tag, created
+ return tag, created
diff --git a/archivist/model.py b/archivist/model.py
index 2d9476a..1544f3f 100644
--- a/archivist/model.py
+++ b/archivist/model.py
@@ -13,6 +13,7 @@ from .peewee_fixes import * # dummy to force evaluation of those fixes
db = SqliteExtDatabase('test.db', pragmas=[('foreign_keys', 'ON')])
db.load_extension(resource_filename(__name__, 'sqlext/closure'))
+db.set_autocommit(False)
__tables__ = []
__all__ = ['create_tables', 'drop_tables']
diff --git a/archivist/server/__init__.py b/archivist/server/__init__.py
index f5ae194..913cff3 100644
--- a/archivist/server/__init__.py
+++ b/archivist/server/__init__.py
@@ -4,6 +4,9 @@ from flask.cli import FlaskGroup, ScriptInfo
from flask import Flask
from flask_restplus import Api, Resource, fields
+from ..model import db
+
+app = Flask('archivist')
api = Api(version='0.1', title='Archivist API',
description='API for the Archivist Document System')
@@ -12,9 +15,16 @@ NAMESPACES=(
'prefix',
)
-def create_app(info):
- app = Flask('archivist')
+@app.before_request
+def before_request():
+ db.connect()
+@app.after_request
+def after_request(response):
+ db.close()
+ return response
+
+def create_app(info):
for ns in NAMESPACES:
mod = import_module('.' + ns, __name__)
api.add_namespace(mod.api)
diff --git a/archivist/server/tag.py b/archivist/server/tag.py
index 96fafcd..8142cd1 100644
--- a/archivist/server/tag.py
+++ b/archivist/server/tag.py
@@ -1,6 +1,8 @@
+from flask import request
from flask_restplus import Resource, fields, Namespace
from .. import model as m
+from .. import bl
api = Namespace('tag', description = 'Operations on tags')
@@ -17,3 +19,15 @@ class TagList(Resource):
def get(self):
"""List all available tags."""
return list(m.Tag.select().where(~m.Tag.default).dicts().iterator())
+
+ @api.expect(tag, validate=True)
+ @api.response(201, "Tag created")
+ @api.response(409, "Tag already exists")
+ def put(self):
+ """Create a new tag."""
+ data = request.get_json()
+ tag, created = bl.PrefixTag(**data).create()
+ if created:
+ return '',201
+ else:
+ return '',409