server/schemahooks.py
branchstable
changeset 3774 1eca47d59fd9
parent 3689 deb13e88e037
child 3869 ec6463886ac4
equal deleted inserted replaced
3773:14fde27a70a2 3774:1eca47d59fd9
    14 
    14 
    15 from yams.schema import BASE_TYPES
    15 from yams.schema import BASE_TYPES
    16 from yams.buildobjs import EntityType, RelationType, RelationDefinition
    16 from yams.buildobjs import EntityType, RelationType, RelationDefinition
    17 from yams.schema2sql import eschema2sql, rschema2sql, type_from_constraints
    17 from yams.schema2sql import eschema2sql, rschema2sql, type_from_constraints
    18 
    18 
       
    19 from logilab.common.decorators import clear_cache
    19 
    20 
    20 from cubicweb import ValidationError, RepositoryError
    21 from cubicweb import ValidationError, RepositoryError
    21 from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES, CONSTRAINTS
    22 from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES, CONSTRAINTS
    22 from cubicweb.server import schemaserial as ss
    23 from cubicweb.server import schemaserial as ss
    23 from cubicweb.server.sqlutils import SQL_PREFIX
    24 from cubicweb.server.sqlutils import SQL_PREFIX
   132 
   133 
   133     def __init__(self, session):
   134     def __init__(self, session):
   134         self.repo = session.repo
   135         self.repo = session.repo
   135         SingleLastOperation.__init__(self, session)
   136         SingleLastOperation.__init__(self, session)
   136 
   137 
       
   138     def precommit_event(self):
       
   139         for eschema in self.repo.schema.entities():
       
   140             if not eschema.final:
       
   141                 clear_cache(eschema, 'ordered_relations')
       
   142 
   137     def commit_event(self):
   143     def commit_event(self):
   138         rebuildinfered = self.session.data.get('rebuild-infered', True)
   144         rebuildinfered = self.session.data.get('rebuild-infered', True)
   139         self.repo.set_schema(self.repo.schema, rebuildinfered=rebuildinfered)
   145         self.repo.set_schema(self.repo.schema, rebuildinfered=rebuildinfered)
       
   146 
       
   147     def rollback_event(self):
       
   148         self.precommit_event()
   140 
   149 
   141 
   150 
   142 class MemSchemaOperation(Operation):
   151 class MemSchemaOperation(Operation):
   143     """base class for schema operations"""
   152     """base class for schema operations"""
   144     def __init__(self, session, kobj=None, **kwargs):
   153     def __init__(self, session, kobj=None, **kwargs):