Return to Snippet

Revision: 18755
at October 7, 2009 16:26 by manatlan

Initial Code
import os

class _FieldBase_:
    def __init__(self,*a):

class _FieldedMetaClass_(type):
    def __init__(cls, name, bases, dct):
        super(_FieldedMetaClass_, cls).__init__(name, bases, dct)
        if name!="Form":
            fields_to_name = dict([(slot,name) for name,slot in dct.items() if isinstance(slot,_FieldBase_)])
            cls.fields = [(fields_to_name[obj],obj ) for obj in _FieldBase_._defines]
            _FieldBase_._defines=[] # reset list !!!

class Form (object):
    __metaclass__ = _FieldedMetaClass_

    def __repr__(self):
        l=["Form '%s'"%self.__class__.__name__]
        l+=["* %-10s : %s"%(f,t.__class__.__name__) for f,t in self.fields]
        return os.linesep.join(l)

class FieldInt(_FieldBase_):
    def __init__(self,*a):

class FieldString(_FieldBase_):
    def __init__(self,*a):

class Form1(Form):
    name     = FieldString(1)
    surname  = FieldString(2)
    age      = FieldInt(3)

class Form2(Form):
    nb      = FieldInt(1)
    title   = FieldString(2)

print Form1()
print Form2()

Initial URL

Initial Description
Like Django.models, GAE.db.model or SqlAlchemy definitions

Initial Title
Create class definitions of properties (typed and ordered) with metaclass

Initial Tags

Initial Language