aboutsummaryrefslogtreecommitdiffstats
path: root/fatcat
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-04-14 15:09:10 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-04-14 15:09:10 -0700
commite6eecb51ec0904d954c343c1459643e251a7a1a4 (patch)
tree053facb5edac09b9ec9410936911a02756eae8f9 /fatcat
parent3c9e30a5b029cb607fc78a3451536d0dc65dcecd (diff)
downloadfatcat-e6eecb51ec0904d954c343c1459643e251a7a1a4.tar.gz
fatcat-e6eecb51ec0904d954c343c1459643e251a7a1a4.zip
work create API (doing edit thing)
Diffstat (limited to 'fatcat')
-rw-r--r--fatcat/api.py41
-rw-r--r--fatcat/models.py6
-rw-r--r--fatcat/routes.py2
-rw-r--r--fatcat/sql.py7
4 files changed, 51 insertions, 5 deletions
diff --git a/fatcat/api.py b/fatcat/api.py
index b7da49d9..72676760 100644
--- a/fatcat/api.py
+++ b/fatcat/api.py
@@ -1,11 +1,26 @@
from flask import Flask, render_template, send_from_directory, request, \
- url_for, abort, g, redirect, jsonify
+ url_for, abort, g, redirect, jsonify, session
from fatcat import app, db
from fatcat.models import *
from fatcat.sql import *
+### Helpers #################################################################
+
+def get_or_create_edit_group():
+ editor = Editor.query.filter(Editor.id==1).first()
+ if editor.active_edit_group:
+ return editor.active_edit_group
+ else:
+ edit_group = EditGroup(editor=editor)
+ db.session.add(edit_group)
+ db.session.commit()
+ editor.active_edit_group = edit_group
+ db.session.add(editor)
+ db.session.commit()
+ return edit_group
+
### Views ###################################################################
@app.route('/v0/work/<work_id>', methods=['GET'])
@@ -17,6 +32,30 @@ def api_work_get(work_id):
entity = WorkIdent.query.filter(WorkIdent.id==work_id).first_or_404()
return work_schema.jsonify(entity)
+@app.route('/v0/work', methods=['POST'])
+def api_work_create():
+ """
+ 1. find or create edit_group
+ 2. create work_edit, work_rev, work_ident
+ """
+ print(request)
+ params = request.get_json()
+ print(params)
+ edit_group = get_or_create_edit_group()
+ edit = WorkEdit(edit_group=edit_group)
+ rev = WorkRev(
+ title=params.get('title', None),
+ work_type=params.get('work_type', None),
+ )
+ ident = WorkIdent(is_live=False, rev=rev)
+ edit.ident = ident
+ edit.rev = rev
+ db.session.add(edit)
+ db.session.add(ident)
+ db.session.add(rev)
+ db.session.commit()
+ return work_schema.jsonify(ident)
+
@app.route('/v0/work/random', methods=['GET'])
def api_work_random():
entity = WorkIdent.query.order_by(db.func.random()).first()
diff --git a/fatcat/models.py b/fatcat/models.py
index 49bdef22..a03486c3 100644
--- a/fatcat/models.py
+++ b/fatcat/models.py
@@ -84,6 +84,7 @@ class WorkEdit(db.Model):
redirect_id = db.Column(db.ForeignKey('work_ident.id'), nullable=True)
edit_group_id = db.Column(db.ForeignKey('edit_group.id'), nullable=True)
extra_json = db.Column(db.ForeignKey('extra_json.sha1'), nullable=True)
+ ident = db.relationship("WorkIdent", foreign_keys="WorkEdit.ident_id") # XXX: add to all other entities
rev = db.relationship("WorkRev")
edit_group = db.relationship("EditGroup")
@@ -216,14 +217,17 @@ class FileEdit(db.Model):
class EditGroup(db.Model):
__tablename__ = 'edit_group'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
- editor = db.Column(db.ForeignKey('editor.id'), nullable=False)
+ editor_id = db.Column(db.ForeignKey('editor.id'), nullable=False)
description = db.Column(db.String)
+ editor = db.relationship('Editor', foreign_keys='EditGroup.editor_id')
class Editor(db.Model):
__tablename__ = 'editor'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String)
is_admin = db.Column(db.Boolean, nullable=False, default=False)
+ active_edit_group_id = db.Column(db.ForeignKey('edit_group.id', use_alter=True))
+ active_edit_group = db.relationship('EditGroup', foreign_keys='Editor.active_edit_group_id')
class ChangelogEntry(db.Model):
__tablename__= 'changelog'
diff --git a/fatcat/routes.py b/fatcat/routes.py
index 3c1822ce..d0d77ee7 100644
--- a/fatcat/routes.py
+++ b/fatcat/routes.py
@@ -1,7 +1,7 @@
import os
from flask import Flask, render_template, send_from_directory, request, \
- url_for, abort, g, redirect, jsonify
+ url_for, abort, g, redirect, jsonify, session
from fatcat import app, db
diff --git a/fatcat/sql.py b/fatcat/sql.py
index 61868ce9..8e5c0151 100644
--- a/fatcat/sql.py
+++ b/fatcat/sql.py
@@ -6,9 +6,11 @@ from fatcat import db
from fatcat.models import *
def populate_db():
- pass
+ admin_editor = Editor(id=1, username="admin", is_admin=True)
+ db.session.add(admin_editor)
+ db.session.commit()
-def add_crossref(meta):
+def add_crossref_via_model(meta):
title = meta['title'][0]
@@ -76,6 +78,7 @@ def add_crossref(meta):
db.session.add_all(author_ids)
db.session.commit()
+
def hydrate_work(wid):
wid = int(wid)