from plone.supermodel.parser import ISchemaPolicy from plone.supermodel.utils import syncSchema from plone.alterego.interfaces import IDynamicObjectFactory from plone.dexterity.interfaces import IContentType from plone.dexterity.interfaces import IDexteritySchema from plone.dexterity.interfaces import IDexterityFTI from plone.dexterity.interfaces import ISchemaInvalidatedEvent from plone.dexterity import utils from plone.alterego import dynamic # Dynamic modules generated = dynamic.create('plone.dexterity.schema.generated') transient = new.module("transient") # Schema cache class SchemaCache(object): """Simple schema cache. This cache will store a Python object reference to the schema, as returned by fti.lookupSchema(), for any number of portal types. The value will be cached until the server is restarted or the cache is invalidated or cleared. You should only use this if you require bare-metal speed. For almost all operations, it's safer and easier to do:
from zope.component import getAllUtilitiesRegisteredFor from zope.component import getUtility from zope.component import queryUtility from zope.dottedname.resolve import resolve from zope.interface import alsoProvides from zope.interface import implementer from zope.interface.interface import InterfaceClass import functools import logging import new log = logging.getLogger(__name__) # Dynamic modules generated = dynamic.create('plone.dexterity.schema.generated') transient = new.module("transient") _MARKER = dict() def invalidate_cache(fti): fti._p_activate() fti.__dict__.pop('_v_schema_get', None) fti.__dict__.pop('_v_schema_behavior_registrations', None) fti.__dict__.pop('_v_schema_subtypes', None) fti.__dict__.pop('_v_schema_schema_interfaces', None) def volatile(func): @functools.wraps(func)
from zope.lifecycleevent import ObjectModifiedEvent from zope.schema import Object from zope.schema._bootstrapinterfaces import IContextAwareDefaultFactory import hashlib import logging import re import threading logger = logging.getLogger('collective.flow') # Recursive schema support by resolving additional schemata from thread local SCHEMA_MODULE = 'collective.flow.schema.dynamic' SCHEMA_CACHE = CleanupDict() SCHEMA_CACHE.cleanup_period = 60 * 60 * 12 # 12 hours dynamic = dynamic.create(SCHEMA_MODULE) current = threading.local() IS_TRANSLATION = re.compile(r'^/[a-z\-]+/$') CUSTOMIZABLE_TAGS = [ ns('default'), ns('defaultFactory'), ns('values'), ] SYNCHRONIZED_TAGS = [ ns('default'), ns('values'), ]
from BTrees.OOBTree import OOBTree from uu.record.base import Record from uu.dynamicschema.interfaces import ISchemaSaver, ISchemaSignedEntity from uu.dynamicschema.interfaces import ISchemaImportExport from uu.dynamicschema.interfaces import PKGNAME from uu.dynamicschema.interfaces import DEFAULT_MODEL_XML, DEFAULT_SIGNATURE IDENTIFIER = re.compile('^[A-Za-z_][A-Za-z0-9_]*$') HEXSTRING = re.compile('^[A-Fa-f0-9]+$') logger = logging.getLogger(PKGNAME) generated = dynamic.create('.'.join((PKGNAME, 'schema.generated'))) ismd5hex = lambda v: v and len(v) == 32 and HEXSTRING.search(v) names = lambda name: name.split('.') isidentifier = lambda name: bool(IDENTIFIER.search(name)) isdottedname = lambda v: v and all(map(isidentifier, names(v))) # schema policy, here to get an accurate schema.__module__ class DynamicSchemaPolicy(DefaultSchemaPolicy): """ Here to override default: schema loaded from serializations should have a __module__ attribute with a value of
from zope.schema import getFieldNamesInOrder from BTrees.OOBTree import OOBTree from uu.record.base import Record from uu.dynamicschema.interfaces import ISchemaSaver, ISchemaSignedEntity from uu.dynamicschema.interfaces import ISchemaImportExport from uu.dynamicschema.interfaces import PKGNAME from uu.dynamicschema.interfaces import DEFAULT_MODEL_XML, DEFAULT_SIGNATURE IDENTIFIER = re.compile('^[A-Za-z_][A-Za-z0-9_]*$') HEXSTRING = re.compile('^[A-Fa-f0-9]+$') logger = logging.getLogger(PKGNAME) generated = dynamic.create('.'.join((PKGNAME, 'schema.generated'))) ismd5hex = lambda v: v and len(v) == 32 and HEXSTRING.search(v) names = lambda name: name.split('.') isidentifier = lambda name: bool(IDENTIFIER.search(name)) isdottedname = lambda v: v and all(map(isidentifier, names(v))) # schema policy, here to get an accurate schema.__module__ class DynamicSchemaPolicy(DefaultSchemaPolicy): """ Here to override default: schema loaded from serializations should have a __module__ attribute with a value of