コード例 #1
0
ファイル: meta.py プロジェクト: Schevo/schevo
 def __init__(cls, class_name, bases, class_dict):
     type.__init__(cls, class_name, bases, class_dict)
     # Assign a label for the class.
     if '_label' not in class_dict:
         cls._label = label_from_name(class_name)
     # Only if this global schema definition variable exists.
     if (schevo.namespace.SCHEMADEF is not None
         and hasattr(cls, '_field_spec')
         ):
         # Create an initial field spec odict, which will get
         # updated by the EntityMeta class.
         cls._field_spec = field_spec_from_class(cls, class_dict)
         # Add this class to the namespace.
         ns = getattr(
             schevo.namespace.SCHEMADEF, namespace_name)
         try:
             ns._set(class_name, cls)
         except KeyError:
             # Skip private classes.
             pass
コード例 #2
0
ファイル: entity.py プロジェクト: gldnspud/schevo
 def __init__(cls, class_name, bases, class_dict):
     # Only do something if creating a subclass of Entity.
     type.__init__(cls, class_name, bases, class_dict)
     if class_name == 'Entity':
         return
     # If the class specifies an actual name, use that instead.
     if '_actual_name' in class_dict:
         class_name = cls._actual_name
         cls.__name__ = class_name
     # Create the field spec.
     field_spec = cls._field_spec = field_spec_from_class(
         cls, class_dict, slots=True)
     field_spec.reorder_all()
     # Setup fields, keeping track of calculated (fget) fields.
     cls.setup_fields()
     # Get slotless specs for queries, transactions and views.
     spec = field_spec_from_class(cls, class_dict)
     q_spec = spec.copy()
     t_spec = spec.copy()
     v_spec = spec.copy()
     # Transactions and the default query don't normally need fget
     # fields, so hide them by default in those contexts.
     for field_name in cls._fget_fields:
         q_spec[field_name].hidden = True
         t_spec[field_name].hidden = True
     # Generic Update (for use by cascading delete).  Assigned in
     # this metaclass to prevent subclasses from overriding.
     class _GenericUpdate(transaction.Update):
         _call_change_handlers_on_init = False
         _EntityClass = cls
         _extent_name = class_name
         _fget_fields = cls._fget_fields
         _field_spec = t_spec.copy()
     cls._GenericUpdate = _GenericUpdate
     if not class_name.startswith('_'):
         # Setup standard transaction classes (Create, Delete, Update).
         cls.setup_transactions(class_name, class_dict, t_spec)
         # Setup view classes.
         cls.setup_views(class_name, bases, class_dict, v_spec)
     # Normalize hidden information.
     cls._hidden_actions = set(cls._hidden_actions)
     cls._hidden_queries = set(cls._hidden_queries)
     cls._hidden_views = set(cls._hidden_views)
     # Setup key spec.
     cls.setup_key_spec()
     # Setup index spec.
     cls.setup_index_spec()
     # Keep them from clashing.
     cls.validate_key_and_index_specs()
     if not class_name.startswith('_'):
         # Assign labels if class name is "public".
         cls.assign_labels(class_name, class_dict)
     # Remember queries for the EntityQueries namespace.
     prefix = 'q_'
     cls._q_instancemethod_names = cls.get_method_names(
         prefix, isinstancemethod)
     cls._q_selectionmethod_names = cls.get_method_names(
         prefix, isselectionmethod)
     # Remember transactions for the EntityTransactions namespace.
     prefix = 't_'
     cls._t_instancemethod_names = cls.get_method_names(
         prefix, isinstancemethod)
     cls._t_selectionmethod_names = cls.get_method_names(
         prefix, isselectionmethod)
     # Remember views for the EntityViews namespace.
     prefix = 'v_'
     cls._v_instancemethod_names = cls.get_method_names(
         prefix, isinstancemethod)
     cls._v_selectionmethod_names = cls.get_method_names(
         prefix, isselectionmethod)
     # Remember x_methods for the EntityExtenders namespace.
     prefix = 'x_'
     cls._x_instancemethod_names = cls.get_method_names(
         prefix, isinstancemethod)
     cls._x_selectionmethod_names = cls.get_method_names(
         prefix, isselectionmethod)
     # Add this class to the schema.
     cls.update_schema(class_name)