summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-04-25 13:06:24 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-04-25 13:06:24 -0700
commit8c7258205fad8230e236709c20469ff390426cbf (patch)
tree4273d493e1bf5df205be8e71783c093508fd7f72
parentd34970e368a303f5d25d05384abb44e04b73d5b7 (diff)
downloadfatcat-8c7258205fad8230e236709c20469ff390426cbf.tar.gz
fatcat-8c7258205fad8230e236709c20469ff390426cbf.zip
refactor out ExtraJson table
-rw-r--r--fatcat/api.py18
-rw-r--r--fatcat/models.py69
-rw-r--r--fatcat/sql.py6
-rw-r--r--tests/api.py2
4 files changed, 30 insertions, 65 deletions
diff --git a/fatcat/api.py b/fatcat/api.py
index 24ec8011..0712081e 100644
--- a/fatcat/api.py
+++ b/fatcat/api.py
@@ -43,8 +43,7 @@ def api_work_create():
ident = WorkIdent(is_live=False, rev=rev)
edit = WorkEdit(editgroup=editgroup, ident=ident, rev=rev)
if params.get('extra', None):
- ser = json.dumps(params['extra'], indent=False).encode('utf-8')
- rev.extra_json = ExtraJson(json=ser, sha1=hashlib.sha1(ser).hexdigest())
+ rev.extra_json = json.dumps(params['extra'], indent=False).encode('utf-8')
db.session.add_all([edit, ident, rev])
db.session.commit()
return work_schema.jsonify(ident)
@@ -90,8 +89,7 @@ def api_release_create():
ident = ReleaseIdent(is_live=False, rev=rev)
edit = ReleaseEdit(editgroup=editgroup, ident=ident, rev=rev)
if params.get('extra', None):
- ser = json.dumps(params['extra'], indent=False).encode('utf-8')
- rev.extra_json = ExtraJson(json=ser, sha1=hashlib.sha1(ser).hexdigest())
+ rev.extra_json = json.dumps(params['extra'], indent=False).encode('utf-8')
db.session.add_all([edit, ident, rev])
db.session.commit()
return release_schema.jsonify(ident)
@@ -139,8 +137,7 @@ def api_creator_create():
ident = CreatorIdent(is_live=False, rev=rev)
edit = CreatorEdit(editgroup=editgroup, ident=ident, rev=rev)
if params.get('extra', None):
- ser = json.dumps(params['extra'], indent=False).encode('utf-8')
- rev.extra_json = ExtraJson(json=ser, sha1=hashlib.sha1(ser).hexdigest())
+ rev.extra_json = json.dumps(params['extra'], indent=False).encode('utf-8')
db.session.add_all([edit, ident, rev])
db.session.commit()
return creator_schema.jsonify(ident)
@@ -176,8 +173,7 @@ def api_container_create():
ident = ContainerIdent(is_live=False, rev=rev)
edit = ContainerEdit(editgroup=editgroup, ident=ident, rev=rev)
if params.get('extra', None):
- ser = json.dumps(params['extra'], indent=False).encode('utf-8')
- rev.extra_json = ExtraJson(json=ser, sha1=hashlib.sha1(ser).hexdigest())
+ rev.extra_json = json.dumps(params['extra'], indent=False).encode('utf-8')
db.session.add_all([edit, ident, rev])
db.session.commit()
return container_schema.jsonify(ident)
@@ -218,8 +214,7 @@ def api_file_create():
ident = FileIdent(is_live=False, rev=rev)
edit = FileEdit(editgroup=editgroup, ident=ident, rev=rev)
if params.get('extra', None):
- ser = json.dumps(params['extra'], indent=False).encode('utf-8')
- rev.extra_json = ExtraJson(json=ser, sha1=hashlib.sha1(ser).hexdigest())
+ rev.extra_json = json.dumps(params['extra'], indent=False).encode('utf-8')
db.session.add_all([edit, ident, rev])
db.session.commit()
return file_schema.jsonify(ident)
@@ -242,8 +237,7 @@ def api_editgroup_create():
description=params.get('description', None),
)
if params.get('extra', None):
- ser = json.dumps(params['extra'], indent=False).encode('utf-8')
- eg.extra_json = ExtraJson(json=ser, sha1=hashlib.sha1(ser).hexdigest())
+ eg.extra_json = json.dumps(params['extra'], indent=False).encode('utf-8')
db.session.add(eg)
db.session.commit()
return editgroup_schema.jsonify(eg)
diff --git a/fatcat/models.py b/fatcat/models.py
index 1bb648c8..c35e541f 100644
--- a/fatcat/models.py
+++ b/fatcat/models.py
@@ -58,8 +58,7 @@ class FileRelease(db.Model):
class WorkRev(db.Model):
__tablename__ = 'work_rev'
id = db.Column(db.Integer, primary_key=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
title = db.Column(db.String)
work_type = db.Column(db.String)
@@ -88,8 +87,7 @@ class WorkEdit(db.Model):
rev_id = db.Column(db.ForeignKey('work_rev.id'), nullable=True)
redirect_id = db.Column(db.ForeignKey('work_ident.id'), nullable=True)
editgroup_id = db.Column(db.ForeignKey('editgroup.id'), nullable=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
ident = db.relationship("WorkIdent", foreign_keys="WorkEdit.ident_id")
rev = db.relationship("WorkRev")
editgroup = db.relationship("EditGroup")
@@ -98,8 +96,7 @@ class WorkEdit(db.Model):
class ReleaseRev(db.Model):
__tablename__ = 'release_rev'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
work_ident_id = db.Column(db.ForeignKey('work_ident.id', use_alter=True), nullable=True) # XXX: nullable=False
container_ident_id = db.Column(db.ForeignKey('container_ident.id'), nullable=True)
@@ -132,8 +129,7 @@ class ReleaseEdit(db.Model):
rev_id = db.Column(db.ForeignKey('release_rev.id'), nullable=True)
redirect_id = db.Column(db.ForeignKey('release_ident.id'), nullable=True)
editgroup_id = db.Column(db.ForeignKey('editgroup.id'), nullable=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
ident = db.relationship("ReleaseIdent", foreign_keys="ReleaseEdit.ident_id")
rev = db.relationship("ReleaseRev")
editgroup = db.relationship("EditGroup")
@@ -142,8 +138,7 @@ class ReleaseEdit(db.Model):
class CreatorRev(db.Model):
__tablename__ = 'creator_rev'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
name = db.Column(db.String)
sortname = db.Column(db.String)
@@ -164,8 +159,7 @@ class CreatorEdit(db.Model):
rev_id = db.Column(db.ForeignKey('creator_rev.id'), nullable=True)
redirect_id = db.Column(db.ForeignKey('creator_ident.id'), nullable=True)
editgroup_id = db.Column(db.ForeignKey('editgroup.id'), nullable=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
ident = db.relationship("CreatorIdent", foreign_keys="CreatorEdit.ident_id")
rev = db.relationship("CreatorRev")
editgroup = db.relationship("EditGroup")
@@ -174,8 +168,7 @@ class CreatorEdit(db.Model):
class ContainerRev(db.Model):
__tablename__ = 'container_rev'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
name = db.Column(db.String)
parent_id = db.Column(db.ForeignKey('container_ident.id', use_alter=True))
@@ -199,8 +192,7 @@ class ContainerEdit(db.Model):
rev_id = db.Column(db.ForeignKey('container_rev.id'), nullable=True)
redirect_id = db.Column(db.ForeignKey('container_ident.id'), nullable=True)
editgroup_id = db.Column(db.ForeignKey('editgroup.id'), nullable=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
ident = db.relationship("ContainerIdent", foreign_keys="ContainerEdit.ident_id")
rev = db.relationship("ContainerRev")
editgroup = db.relationship("EditGroup")
@@ -209,8 +201,7 @@ class ContainerEdit(db.Model):
class FileRev(db.Model):
__tablename__ = 'file_rev'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
size = db.Column(db.Integer)
sha1 = db.Column(db.String) # TODO: hash table... only or in addition?
@@ -232,8 +223,7 @@ class FileEdit(db.Model):
rev_id = db.Column(db.ForeignKey('file_rev.id'), nullable=True)
redirect_id = db.Column(db.ForeignKey('file_ident.id'), nullable=True)
editgroup_id = db.Column(db.ForeignKey('editgroup.id'), nullable=True)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
ident = db.relationship("FileIdent", foreign_keys="FileEdit.ident_id")
rev = db.relationship("FileRev")
editgroup = db.relationship("EditGroup")
@@ -246,8 +236,7 @@ class EditGroup(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
editor_id = db.Column(db.ForeignKey('editor.id'), nullable=False)
description = db.Column(db.String)
- extra_json_id = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
- extra_json = db.relationship("ExtraJson")
+ extra_json = db.Column(db.String, nullable=True)
editor = db.relationship("Editor", foreign_keys="EditGroup.editor_id")
@@ -267,37 +256,25 @@ class ChangelogEntry(db.Model):
editgroup = db.relationship("EditGroup")
-### Other ###################################################################
-
-class ExtraJson(db.Model):
- __tablename__ = 'extra_json'
- sha1 = db.Column(db.String, primary_key=True, nullable=False)
- json = db.Column(db.String, nullable=False)
-
-
### Marshmallow Wrappers ####################################################
class ExtraJsonSchema(ma.ModelSchema):
- class Meta:
- model = ExtraJson
-
@post_dump(pass_many=False)
- def unflatten(self, data):
- assert hashlib.sha1sum(data['json']).hexdigest() == data['sha1']
- data.pop('sha1')
- raw = data.pop('json')
- data.update(json.loads(raw))
+ def json_unflatten(self, data):
+ extra = data.pop('extra_json', None)
+ if extra != None:
+ extra = json.loads(extra)
+ data['extra'] = extra
@pre_load(pass_many=False)
- def flatten(self, data):
- raw = json.dumps(data, indent=None)
- for k in list(data.keys()):
- data.pop(k)
- data['sha1'] = hashlib.sha1sum(raw).hexdigest()
- data['json'] = raw
+ def json_flatten(self, data):
+ extra = data.pop('extra', None)
+ if extra != None:
+ extra = json.dumps(extra)
+ data['extra_json'] = extra
-class EntitySchema(ma.ModelSchema):
+class EntitySchema(ExtraJsonSchema):
@post_dump(pass_many=False)
def merge_rev(self, data):
@@ -308,8 +285,6 @@ class EntitySchema(ma.ModelSchema):
else:
data['rev'] = None
- extra_json = ma.Nested(ExtraJsonSchema)
-
class ReleaseContribSchema(ma.ModelSchema):
class Meta:
model = ReleaseContrib
diff --git a/fatcat/sql.py b/fatcat/sql.py
index 08630c98..9b1922ba 100644
--- a/fatcat/sql.py
+++ b/fatcat/sql.py
@@ -54,7 +54,7 @@ def add_crossref_via_model(meta):
pages=meta.get('page', None))
release_id = ReleaseIdent(rev=release)
work.primary_release = release_id
- extra = json.dumps({
+ release.extra_json = json.dumps({
'crossref': {
'links': meta.get('link', []),
'subject': meta['subject'],
@@ -62,8 +62,6 @@ def add_crossref_via_model(meta):
'alternative-id': meta.get('alternative-id', []),
}
}, indent=None).encode('utf-8')
- extra_json = ExtraJson(json=extra, sha1=hashlib.sha1(extra).hexdigest())
- release.extra_json_id = extra_json.sha1
# references
for i, rm in enumerate(meta.get('reference', [])):
@@ -76,7 +74,7 @@ def add_crossref_via_model(meta):
release.refs.append(ref)
db.session.add_all([work, work_id, release, release_id, container,
- container_id, extra_json])
+ container_id])
db.session.add_all(author_revs)
db.session.add_all(author_ids)
db.session.commit()
diff --git a/tests/api.py b/tests/api.py
index bb7007c1..02875f64 100644
--- a/tests/api.py
+++ b/tests/api.py
@@ -42,7 +42,6 @@ def test_api_work_create(app):
assert WorkIdent.query.count() == 0
assert WorkRev.query.count() == 0
assert WorkEdit.query.count() == 0
- assert ExtraJson.query.count() == 0
rv = app.post('/v0/work',
data=json.dumps(dict(title="dummy", work_type="thing", extra=dict(a=1, b="zing"))),
headers={"content-type": "application/json"})
@@ -51,7 +50,6 @@ def test_api_work_create(app):
assert WorkIdent.query.count() == 1
assert WorkRev.query.count() == 1
assert WorkEdit.query.count() == 1
- assert ExtraJson.query.count() == 1
# not alive yet
assert WorkIdent.query.filter(WorkIdent.is_live==True).count() == 0