diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2018-04-14 12:32:06 -0700 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-04-14 12:32:06 -0700 |
commit | 9422515ed353a4a0c2a4c4b76a4d9fc20c9675e3 (patch) | |
tree | 736644b346e1b6c6610bf34353a16bf13387e758 | |
parent | 91b4fb3e3224f11d2ce79010252000e65ab81cda (diff) | |
download | fatcat-9422515ed353a4a0c2a4c4b76a4d9fc20c9675e3.tar.gz fatcat-9422515ed353a4a0c2a4c4b76a4d9fc20c9675e3.zip |
more mashmallow refactoring
-rw-r--r-- | fatcat/dummy.py | 18 | ||||
-rw-r--r-- | fatcat/models.py | 106 | ||||
-rw-r--r-- | fatcat/sql.py | 30 |
3 files changed, 101 insertions, 53 deletions
diff --git a/fatcat/dummy.py b/fatcat/dummy.py index b547cf16..7e09f9c9 100644 --- a/fatcat/dummy.py +++ b/fatcat/dummy.py @@ -13,18 +13,18 @@ def insert_example_works(): name="Noam D. Elkies", sortname="Elkies, N", orcid=None) - n_elkies_id = CreatorIdent(revision=n_elkies) + n_elkies_id = CreatorIdent(rev=n_elkies) pi_work = WorkRev( title="Why is π^2 so close to 10?", work_type="journal-article") - pi_work_id = WorkIdent(revision=pi_work) + pi_work_id = WorkIdent(rev=pi_work) pi_release = ReleaseRev( title=pi_work.title, work_ident_id=pi_work.id, release_type="journal-article") pi_contrib = ReleaseContrib(creator=n_elkies_id) pi_release.creators.append(pi_contrib) - pi_release_id = ReleaseIdent(revision=pi_release) + pi_release_id = ReleaseIdent(rev=pi_release) pi_work.primary_release = pi_release # TODO: @@ -60,7 +60,7 @@ def insert_random_works(count=100): sortname="{}, {}".format(last, first[0]), orcid=None) author_revs.append(ar) - author_ids.append(CreatorIdent(revision=ar)) + author_ids.append(CreatorIdent(rev=ar)) container_revs = [] container_ids = [] @@ -72,7 +72,7 @@ def insert_random_works(count=100): sortname="Fake Journal of Stuff", issn="1234-5678") container_revs.append(cr) - container_ids.append(ContainerIdent(revision=cr)) + container_ids.append(ContainerIdent(rev=cr)) title_start = ("All about ", "When I grow up I want to be", "The final word on", "Infinity: ", "The end of") @@ -86,14 +86,14 @@ def insert_random_works(count=100): for _ in range(count): title = "{} {}".format(random.choice(title_start), random.choice(title_ends)) work = WorkRev(title=title) - work_id = WorkIdent(revision=work) + work_id = WorkIdent(rev=work) authors = set(random.sample(author_ids, 5)) release = ReleaseRev( title=work.title, creators=[ReleaseContrib(creator=a) for a in list(authors)], #work=work, container=random.choice(container_ids)) - release_id = ReleaseIdent(revision=release) + release_id = ReleaseIdent(rev=release) work.primary_release = release authors.add(random.choice(author_ids)) release2 = ReleaseRev( @@ -101,7 +101,7 @@ def insert_random_works(count=100): creators=[ReleaseContrib(creator=a) for a in list(authors)], #work=work, container=random.choice(container_ids)) - release_id2 = ReleaseIdent(revision=release2) + release_id2 = ReleaseIdent(rev=release2) work_revs.append(work) work_ids.append(work_id) release_revs.append(release) @@ -117,7 +117,7 @@ def insert_random_works(count=100): url="http://archive.invalid/{}".format(file_sha), releases=[FileRelease(release=release_id), FileRelease(release=release_id2)], ) - file_id = FileIdent(revision=file_rev) + file_id = FileIdent(rev=file_rev) file_revs.append(file_rev) file_ids.append(file_id) diff --git a/fatcat/models.py b/fatcat/models.py index 00478b08..c145b6a7 100644 --- a/fatcat/models.py +++ b/fatcat/models.py @@ -74,7 +74,7 @@ class WorkIdent(db.Model): is_live = db.Column(db.Boolean, nullable=False, default=False) rev_id = db.Column(db.ForeignKey('work_rev.id'), nullable=True) redirect_id = db.Column(db.ForeignKey('work_ident.id'), nullable=True) - revision = db.relationship("WorkRev") + rev = db.relationship("WorkRev") class WorkEdit(db.Model): __tablename__ = 'work_edit' @@ -115,7 +115,7 @@ class ReleaseIdent(db.Model): is_live = db.Column(db.Boolean, nullable=False, default=False) rev_id = db.Column(db.ForeignKey('release_rev.id')) redirect_id = db.Column(db.ForeignKey('release_ident.id'), nullable=True) - revision = db.relationship("ReleaseRev") + rev = db.relationship("ReleaseRev") class ReleaseEdit(db.Model): __tablename__ = 'release_edit' @@ -142,7 +142,7 @@ class CreatorIdent(db.Model): is_live = db.Column(db.Boolean, nullable=False, default=False) rev_id = db.Column(db.ForeignKey('creator_rev.id')) redirect_id = db.Column(db.ForeignKey('creator_ident.id'), nullable=True) - revision = db.relationship("CreatorRev") + rev = db.relationship("CreatorRev") class CreatorEdit(db.Model): __tablename__ = 'creator_edit' @@ -171,7 +171,7 @@ class ContainerIdent(db.Model): is_live = db.Column(db.Boolean, nullable=False, default=False) rev_id = db.Column(db.ForeignKey('container_rev.id')) redirect_id = db.Column(db.ForeignKey('container_ident.id'), nullable=True) - revision = db.relationship("ContainerRev") + rev = db.relationship("ContainerRev") class ContainerEdit(db.Model): __tablename__ = 'container_edit' @@ -197,9 +197,9 @@ class FileIdent(db.Model): __tablename__ = 'file_ident' id = db.Column(db.Integer, primary_key=True) is_live = db.Column(db.Boolean, nullable=False, default=False) - rev_id = db.Column('revision', db.ForeignKey('file_rev.id')) + rev_id = db.Column(db.ForeignKey('file_rev.id')) redirect_id = db.Column(db.ForeignKey('file_ident.id'), nullable=True) - revision = db.relationship("FileRev") + rev = db.relationship("FileRev") class FileEdit(db.Model): __tablename__ = 'file_edit' @@ -242,50 +242,98 @@ class ExtraJson(db.Model): ### Marshmallow Wrappers #################################################### -# TODO: base class for entities and edits - -class WorkRevSchema(ma.ModelSchema): - class Meta: - model = WorkRev - -class WorkSchema(ma.ModelSchema): +class EntitySchema(ma.ModelSchema): @post_dump(pass_many=False) def merge_rev(self, data): - if data.get('revision', None): - rev_id = data['revision'].pop('id') - data.update(data['revision']) - data.pop('revision') + print(data) + if data.get('rev', None) != None: + rev_id = data['rev'].pop('id') + data.update(data['rev']) data['rev'] = rev_id + else: + data['rev'] = None + # TODO: should be able to set as an allow_none field somewhere if not data.get('redirect_id', None): data['redirect_id'] = None + print(data) + +class WorkRevSchema(ma.ModelSchema): + class Meta: + model = WorkRev + +class WorkSchema(EntitySchema): class Meta: model = WorkIdent + rev = ma.Nested(WorkRevSchema) - revision = ma.Nested(WorkRevSchema) +class WorkEditSchema(ma.ModelSchema): + class Meta: + model = WorkEdit work_schema = WorkSchema() +work_edit_schema = WorkEditSchema() -class FileSchema(ma.ModelSchema): - @post_dump(pass_many=False) - def merge_rev(self, data): - if data['revision']: - data['revision'].pop('id') - data.update(data['revision']) - data.pop('revision') +class ReleaseRevSchema(ma.ModelSchema): + class Meta: + model = ReleaseRev + +class ReleaseSchema(EntitySchema): + class Meta: + model = ReleaseIdent + rev = ma.Nested(ReleaseRevSchema) +class ReleaseEditSchema(ma.ModelSchema): class Meta: - model = FileIdent + model = ReleaseEdit + +release_schema = ReleaseSchema() +release_edit_schema = ReleaseEditSchema() + + +class CreatorRevSchema(ma.ModelSchema): + class Meta: + model = CreatorRev + +class CreatorSchema(EntitySchema): + class Meta: + model = CreatorIdent + rev = ma.Nested(CreatorRevSchema) + +class CreatorEditSchema(ma.ModelSchema): + class Meta: + model = CreatorEdit + +creator_schema = CreatorSchema() +creator_edit_schema = CreatorEditSchema() + + +class ContainerRevSchema(ma.ModelSchema): + class Meta: + model = ContainerRev + +class ContainerSchema(EntitySchema): + class Meta: + model = ContainerIdent + rev = ma.Nested(ContainerRevSchema) + +class ContainerEditSchema(ma.ModelSchema): + class Meta: + model = ContainerEdit + +container_schema = ContainerSchema() +container_edit_schema = ContainerEditSchema() -file_schema = FileSchema() -class FileEditSchema(ma.ModelSchema): +class Editor(ma.ModelSchema): class Meta: - model = FileEdit + model = Editor class EditGroupSchema(ma.ModelSchema): class Meta: model = EditGroup +editor_schema = EditGroupSchema() +edit_group_schema = EditGroupSchema() diff --git a/fatcat/sql.py b/fatcat/sql.py index 3a9f0544..61868ce9 100644 --- a/fatcat/sql.py +++ b/fatcat/sql.py @@ -21,7 +21,7 @@ def add_crossref(meta): sortname="{}, {}".format(am['family'], am['given']), orcid=None) author_revs.append(ar) - author_ids.append(CreatorIdent(revision=ar)) + author_ids.append(CreatorIdent(rev=ar)) # container container = ContainerRev( @@ -30,11 +30,11 @@ def add_crossref(meta): #container_id=None, publisher=meta['publisher'], sortname=meta['short-container-title'][0]) - container_id = ContainerIdent(revision=container) + container_id = ContainerIdent(rev=container) # work and release work = WorkRev(title=title) - work_id = WorkIdent(revision=work) + work_id = WorkIdent(rev=work) release = ReleaseRev( title=title, creators=[ReleaseContrib(creator=a) for a in author_ids], @@ -47,7 +47,7 @@ def add_crossref(meta): issue=meta.get('issue', None), volume=meta.get('volume', None), pages=meta.get('page', None)) - release_id = ReleaseIdent(revision=release) + release_id = ReleaseIdent(rev=release) work.primary_release = release extra = json.dumps({ 'crossref': { @@ -87,19 +87,19 @@ def hydrate_work(wid): "is_live": work.is_live, "redirect_id": work.redirect_id, } - if not work.revision: + if not work.rev: # TODO: look up edit id here from changelog? hydro["edit_id"] = None return hydro primary = None - if work.revision.primary_release_id: - primary = hydrate_release(work.revision.primary_release_id) - #releases = [r.id for r in ReleaseIdent.query.filter(ReleaseIdent.revision.work_id==work.id).all()] + if work.rev.primary_release_id: + primary = hydrate_release(work.rev.primary_release_id) + #releases = [r.id for r in ReleaseIdent.query.filter(ReleaseIdent.rev.work_id==work.id).all()] releases = [] hydro.update({ - "work_type": work.revision.work_type, - "title": work.revision.title, + "work_type": work.rev.work_type, + "title": work.rev.title, "primary": primary, "releases": releases, }) @@ -113,13 +113,13 @@ def hydrate_release(rid): return { "_type": "release", "id": rid, - "revision": release.rev_id, - #"edit_id": release.revision.edit_id, + "rev": release.rev_id, + #"edit_id": release.rev.edit_id, "is_live": release.is_live, - "work_id": release.revision.work_ident_id, - "release_type": release.revision.release_type, - "title": release.revision.title, + "work_id": release.rev.work_ident_id, + "release_type": release.rev.release_type, + "title": release.rev.title, "creators": [], "releases": [], "files": [], |