diff --git a/main.py b/main.py index 8ef9d93..7a2799a 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ from collections import OrderedDict import json + app = Flask(__name__) from mako.lookup import TemplateLookup @@ -16,6 +17,11 @@ def render(filename, **kwargs): t = makolookup.get_template(filename).render(**kwargs) return t +def value_or_pk(record): + if isinstance(record, models.StoredObject): + return record._primary_key + return record + def get_schema_keys(schema_name): schema = models.StoredObject._collections[schema_name] schema_keys = {k:v.__class__.__name__ for k,v in schema.__dict__.iteritems() if isinstance(v, Field)} @@ -33,7 +39,7 @@ def schema_display(schema_name): schema_obj = models.StoredObject._collections[schema_name] primary_name = schema_obj._primary_name schema_info = json.dumps(get_schema_keys(schema_name)) - schema_entries = schema_obj.find_all() + schema_entries = schema_obj.find() entry_data = [] for i in list(schema_entries): storage = i.to_storage() @@ -67,8 +73,8 @@ def edit(schema_name, sid): if request.method == 'POST': for key in data_dict.keys(): - if key in json.loads(request.form['json_data']) and key is not "_backrefs": - incoming_data = json.loads(request.form['json_data']) + incoming_data = json.loads(request.form['json_data']) + if key in incoming_data and key is not "_backrefs": field_type = type(schema_obj._fields[key]).__name__ if field_type is 'BooleanField': new_value = incoming_data[key] @@ -119,7 +125,6 @@ def edit(schema_name, sid): if old_value != foreign_obj: new_value = foreign_obj - setattr(schema_obj, key, new_value) schema_obj.save() @@ -158,7 +163,7 @@ def edit(schema_name, sid): return render( filename="edit.mako", schema_name=schema_name, - schema_obj_data=data_dict, + schema_obj=schema_obj, json_data=json.dumps(data_dict), schema_primary_name=schema_class._primary_name, message=message diff --git a/models.py b/models.py index dc17bd1..f78658a 100644 --- a/models.py +++ b/models.py @@ -5,18 +5,11 @@ import pprint -from modularodm import StoredObject -from modularodm.fields.StringField import StringField -from modularodm.fields.IntegerField import IntegerField -from modularodm.fields.FloatField import FloatField -from modularodm.fields.BooleanField import BooleanField -from modularodm.fields.DateTimeField import DateTimeField -from modularodm.fields.ForeignField import ForeignField -from modularodm.storage.PickleStorage import PickleStorage -from modularodm.storage.MongoStorage import MongoStorage from modularodm.validators import * from modularodm.query.querydialect import DefaultQueryDialect as Q +from modularodm import StoredObject, fields, storage + pp = pprint.PrettyPrinter(indent=4) import random @@ -34,26 +27,26 @@ except:pass class Team(StoredObject): - name = StringField(primary=True) - owner = ForeignField('Manager', backref='owned') - wins = IntegerField(list=True) - playoffs = BooleanField(default=None, list=True) - schedule = StringField(list=True) - players = ForeignField('Player', list=True, backref='plays_for') + name = fields.StringField(primary=True) + owner = fields.ForeignField('Manager', backref='owned') + wins = fields.IntegerField(list=True) + playoffs = fields.BooleanField(default=None, list=True) + schedule = fields.StringField(list=True) + players = fields.ForeignField('Player', list=True, backref='plays_for') class Manager(StoredObject): - name = StringField(primary=True) - players_managed = ForeignField('Player', list=True, backref='managed_by') + name = fields.StringField(primary=True) + players_managed = fields.ForeignField('Player', list=True, backref='managed_by') class Player(StoredObject): - name = StringField(primary=True) - number = IntegerField() - rating = FloatField(default=0.0) - injured = BooleanField(default=False) - -Team.set_storage(PickleStorage('team')) -Manager.set_storage(PickleStorage('manager')) -Player.set_storage(PickleStorage('player')) + name = fields.StringField(primary=True) + number = fields.IntegerField() + rating = fields.FloatField(default=0.0) + injured = fields.BooleanField(default=False) + +Team.set_storage(storage.PickleStorage('team')) +Manager.set_storage(storage.PickleStorage('manager')) +Player.set_storage(storage.PickleStorage('player')) if debug: d = Player(name="Griffin", number=10, rating=85.0, injured=True) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2b30c94 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +Flask==0.10.1 +Jinja2==2.7.1 +Mako==0.9.0 +MarkupSafe==0.18 +Werkzeug==0.9.4 +itsdangerous==0.23 +-e git://github.com/CenterForOpenScience/modular-odm.git@733e11d61311039d90d2c7569cdc16eb2bcaf5b1#egg=modular_odm-origin/develop +pymongo==2.6 +python-dateutil==2.1 +six==1.3.0 +wsgiref==0.1.2 diff --git a/templates/edit.mako b/templates/edit.mako index f0b0616..ea2dadd 100644 --- a/templates/edit.mako +++ b/templates/edit.mako @@ -1,3 +1,7 @@ +<% + from main import value_or_pk +%> + @@ -6,87 +10,124 @@
-