From f7fccfed20d2e4d0084023a02e8e89a842a792ec Mon Sep 17 00:00:00 2001 From: jakerose27 Date: Tue, 17 Dec 2013 14:48:42 -0500 Subject: [PATCH] Correcting for new ODM and edit page --- main.py | 15 ++-- models.py | 43 ++++------ requirements.txt | 11 +++ templates/edit.mako | 197 ++++++++++++++++++++++++++----------------- templates/index.mako | 3 +- 5 files changed, 159 insertions(+), 110 deletions(-) create mode 100644 requirements.txt 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 @@
- ${schema_name} - % for key, value in schema_obj_data.iteritems(): - % if key!='_backrefs': -

${key}

- % endif - % if key==schema_primary_name: -
    -
  • ${value}
  • -
- % elif type(value) is dict and 'foreign' in value: - - - % elif type(value) is list: - % if type(value[0]) is dict and 'foreign' in value[0]: - - - - % else: - - - %endif - % elif key=='_backrefs': -

references

- % for refs, vals in value.iteritems(): - % for schema, schema_attr in vals.iteritems(): - % for parent_field_name, parent_keys in schema_attr.iteritems(): -
-
    -
    ${refs}
    - % for parent_key in parent_keys: -
    -
  • ${parent_key}
  • - - -
    -## ${parent_key} - % endfor -
-
- % endfor - % endfor - % endfor -## - % elif key=='body' or type(value) is dict: - - % else: - + + ${schema_obj._name} + + % for field_name, field_object in schema_obj._fields.iteritems(): + + <% + value = getattr(schema_obj, field_name) + %> + + + % if field_name != "_backrefs": +

${field_name}

+## ${field_name}
+ + + + % if field_object._list: +
    + % for item in value: +## +
  • ${value_or_pk(item)}
  • + % endfor +
+ % else: + + % endif +
+ +
% endif + % endfor

${message}

-
+ +##
+## ${schema_name} +## % for key, value in schema_obj_data.iteritems(): +## % if key!='_backrefs': +##

${key}

+## % endif +## % if key==schema_primary_name: +##
    +##
  • ${value}
  • +##
+## % elif type(value) is dict and 'foreign' in value: +## +## +## % elif isinstance(value, list): +## % if type(value[0]) is dict and 'foreign' in value[0]: +## +## +## +## % else: +## +## +## %endif +## % elif key=='_backrefs': +##

references

+## % for refs, vals in value.iteritems(): +## % for schema, schema_attr in vals.iteritems(): +## % for parent_field_name, parent_keys in schema_attr.iteritems(): +##
+##
    +##
    ${refs}
    +## % for parent_key in parent_keys: +##
    +##
  • ${parent_key}
  • +## +## +##
    +#### ${parent_key} +## % endfor +##
+##
+## % endfor +## % endfor +## % endfor +#### +## % elif key=='body' or type(value) is dict: +## +## % else: +## +## % endif +## % endfor +##

${message}

+## +##
+##
<-${schema_name}