source: mauRepo/MolesManager/trunk/src/MolesManager/forms/date.py @ 7976

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/mauRepo/MolesManager/trunk/src/MolesManager/forms/date.py@7976
Revision 7976, 2.7 KB checked in by mnagni, 9 years ago (diff)

removed all the EA LIbrary until they are in stable status

  • Property svn:executable set to *
Line 
1'''
2Created on Nov 1, 2011
3
4@author: mnagni
5'''
6from MolesManager.forms.formsFactory import createFieldInstance
7from django.forms.forms import Form
8from sqlalchemy.orm.attributes import InstrumentedAttribute
9from sqlalchemy.orm.properties import ColumnProperty, RelationshipProperty
10import inspect
11   
12
13def createForm(object = None):
14    form = Model2Form(object)
15    return type('CoreForm', (CoreForm,), form._createFields())   
16
17class CoreForm(Form):
18    pass
19   
20
21class Model2Form(object):
22    def __init__(self, object = None):                 
23        self._instance = None
24        self._clazz = None
25       
26        if inspect.isclass(object):
27            self._clazz = object
28        else:
29            self._instance = object
30            self._clazz = type(object)
31
32    def _createFields(self):
33        coreFields = {}
34        for attrName in self._clazz.__dict__:
35            if not attrName.startswith('_'):
36                attrValue = getattr(self._clazz, attrName)
37                if isinstance(attrValue, InstrumentedAttribute):
38                    try:
39                        coreFields[attrName] = self._manageInstrumentedAttribute(attrName, attrValue)
40                    except Exception as e:
41                        print e
42        return coreFields
43           
44    def _manageInstrumentedAttribute(self, attrName, attrValue):
45        if hasattr(attrValue, 'property'):
46            if isinstance(attrValue.property, ColumnProperty):               
47                return self._manageColumnProperty(attrName, attrValue.property)
48            elif isinstance(attrValue.property, RelationshipProperty):                   
49                return self._manageRelationshipProperty(attrName, attrValue.property)
50   
51    def _manageColumnProperty(self, attrName, attrValue):
52            if hasattr(attrValue, 'columns'):
53                columns = getattr(attrValue, 'columns')
54                if len(columns) > 0:
55                    return createFieldInstance(columns[0].type, **self._extractValue(attrName))                   
56 
57    def _manageRelationshipProperty(self, attrName, attrValue):
58        if (attrValue.direction is not None):
59            if (attrValue.direction.name == 'MANYTOONE'):
60                pass
61            elif (attrValue.direction.name == 'ONETOMANY'):                               
62                return createForm(getattr(self._instance, attrName))
63   
64    def _extractValue(self, attrName):
65        kwargs = {}
66        if self._instance:
67            kwargs['initial'] = getattr(self._instance, attrName)
68        return kwargs
69
70   
71
72   
73
74'''
75for className in getObjectsNames():
76    fa = CoreFormAdapter(getObject(className))
77    fa = CoreFormAdapter(createObjectInstance(getObject(className)))   
78    print className
79'''       
Note: See TracBrowser for help on using the repository browser.