Ejemplo n.º 1
0
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:
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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'),
]
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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