コード例 #1
0
def cleanup_stored_schemas(site):
    print '\t=== SITE: %s ===' % site.getId()
    # get schema saver:
    saver = queryUtility(ISchemaSaver)
    size_before = len(saver)
    # calculate in-use schema signatures:
    actively_used = set()  # in-use md5 schema signatures
    content = map(get, search(site, TYPEQUERY))
    for context in content:
        assert IDefinitionBase.providedBy(context)
        assert context.signature is not None
        # consider the current schema (signature) used now by definition
        # or field group in question:
        actively_used.add(context.signature)
        if IFormDefinition.providedBy(context):
            # consider any past schema signatures on records now marked as
            # having schema immutability when definition is modified:
            actively_used.update(all_forms_signatures(context))
    # enumerate through schema saver:
    for signature in list(saver.keys()):
        if signature == DEFAULT_SIGNATURE:
            continue  # leave this alone, attempting to remove --> exception
        if signature not in actively_used:
            del(saver[signature])
    size_after = len(saver)
    removed = size_before - size_after
    if removed:
        print (
            '\t\tRemoved %s (of %s) orphaned schemas from local storage.' % (
                removed,
                size_before,
                )
            )
        verify(site)
        commit(site, 'Cleaned up orphaned schemas')
コード例 #2
0
 def _handleSave(self, action, msg='Saved form data'):
     self.save_attempt = True
     data, errors = self.extractData()
     if errors or IFormDefinition.providedBy(self.context) or self.saved:
         return False  # just validate if errors, or if context if defn
     if not self.saved:
         result = {}  # submitted data. k: group name; v: dict of name/value
         group_keys = []
         for group in self.groups:
             groupdata = {}
             form_group_data = group.extractData()[0]
             for name, _field in group.fields.items():
                 group_keys.append(name)
                 fieldname = _field.field.__name__
                 default = getattr(_field.field, 'default', None)
                 field_data = form_group_data.get(name, default)
                 if ICollection.providedBy(_field.field):
                     if isinstance(_field.field.value_type, DictRow):
                         is_nonempty_row = lambda v: any(v.values())
                         field_data = filter(is_nonempty_row, field_data)
                 groupdata[fieldname] = field_data
             result[group.__name__] = groupdata
         # filter default fieldset values, ignore group values in data dict:
         result[''] = dict([(k, v) for k, v in data.items()
                            if k not in group_keys])
         self._saveResult(result)
         self.saved = True
         history_log(self.context, message=msg, set_modified=True)
         notify(ObjectModifiedEvent(self.context))
         transaction.get().note(msg)
     self._status.addStatusMessage('Saved form data', type='info')
     return True
コード例 #3
0
def cleanup_stored_schemas(site):
    print '\t=== SITE: %s ===' % site.getId()
    # get schema saver:
    saver = queryUtility(ISchemaSaver)
    size_before = len(saver)
    # calculate in-use schema signatures:
    actively_used = set()  # in-use md5 schema signatures
    content = map(get, search(site, TYPEQUERY))
    for context in content:
        assert IDefinitionBase.providedBy(context)
        if context.signature is None:
            context.signature = saver.add(context.entry_schema)
        # consider the current schema (signature) used now by definition
        # or field group in question:
        actively_used.add(context.signature)
        if IFormDefinition.providedBy(context):
            # consider any past schema signatures on records now marked as
            # having schema immutability when definition is modified:
            actively_used.update(all_forms_signatures(context))
    # enumerate through schema saver:
    for signature in list(saver.keys()):
        if signature == DEFAULT_SIGNATURE:
            continue  # leave this alone, attempting to remove --> exception
        if signature not in actively_used:
            del (saver[signature])
    size_after = len(saver)
    removed = size_before - size_after
    if removed:
        print('\t\tRemoved %s (of %s) orphaned schemas from local storage.' % (
            removed,
            size_before,
        ))
        verify(site)
        commit(site, 'Cleaned up orphaned schemas')
コード例 #4
0
 def _handleSave(self, action, msg='Saved form data'):
     self.save_attempt = True
     data, errors = self.extractData()
     if errors or IFormDefinition.providedBy(self.context) or self.saved:
         return False  # just validate if errors, or if context if defn
     if not self.saved:
         result = {}  # submitted data. k: group name; v: dict of name/value
         group_keys = []
         for group in self.groups:
             groupdata = {}
             form_group_data = group.extractData()[0]
             for name, _field in group.fields.items():
                 group_keys.append(name)
                 fieldname = _field.field.__name__
                 default = getattr(_field.field, 'default', None)
                 field_data = form_group_data.get(name, default)
                 if ICollection.providedBy(_field.field):
                     if isinstance(_field.field.value_type, DictRow):
                         is_nonempty_row = lambda v: any(v.values())
                         field_data = filter(is_nonempty_row, field_data)
                 groupdata[fieldname] = field_data
             result[group.__name__] = groupdata
         # filter default fieldset values, ignore group values in data dict:
         result[''] = dict([(k, v) for k, v in data.items()
                            if k not in group_keys])
         self._saveResult(result)
         self.saved = True
         history_log(self.context, message=msg, set_modified=True)
         notify(ObjectModifiedEvent(self.context))
         transaction.get().note(msg)
     self._status.addStatusMessage('Saved form data', type='info')
     return True
コード例 #5
0
 def updateWidgets(self):
     common_widget_updates(self)
     for group in self.groups:
         common_widget_updates(group)
     super(ComposedForm, self).updateWidgets()
     # # finally, if non-defintion context, set widget values via group data
     if not IFormDefinition.providedBy(self.context):
         self._load_widget_data()
コード例 #6
0
 def updateWidgets(self):
     common_widget_updates(self)
     for group in self.groups:
         common_widget_updates(group)
     super(ComposedForm, self).updateWidgets()
     # # finally, if non-defintion context, set widget values via group data
     if not IFormDefinition.providedBy(self.context):
         self._load_widget_data()
コード例 #7
0
 def __init__(self, context, *args, **kwargs):
     if not IFormDefinition.providedBy(context):
         raise ValueError('context must provide IFormDefinition')
     self.context = context  # form definition
     self.namespace = kwargs.get('namespace', '')
     self.signature = kwargs.get('signature', None)
     self.modified = kwargs.get('modified', datetime.now())
     self.modification = kwargs.get('modification', 'modified')
     self.note = kwargs.get('note', None)
コード例 #8
0
ファイル: definition.py プロジェクト: upiq/uu.formlibrary
 def __init__(self, context, *args, **kwargs):
     if not IFormDefinition.providedBy(context):
         raise ValueError('context must provide IFormDefinition')
     self.context = context  # form definition
     self.namespace = kwargs.get('namespace', '')
     self.signature = kwargs.get('signature', None)
     self.modified = kwargs.get('modified', datetime.now())
     self.modification = kwargs.get('modification', 'modified')
     self.note = kwargs.get('note', None)
コード例 #9
0
ファイル: __init__.py プロジェクト: upiq/uu.formlibrary
 def __init__(self, worksheet, group, origin):
     primary = IFormDefinition.providedBy(group)
     self.worksheet = worksheet          # IFormWorksheet
     self.context = worksheet.context    # ISimpleForm
     self.group = group
     data = self.context.data
     self.data = data.get('') if primary else data.get(self.group.getId())
     self.field_schema = group.schema
     self.title = u'Primary fields' if primary else group.title
     self.origin = origin        # origin/start row
     self.size = 0
     self.cursor = self.origin
コード例 #10
0
ファイル: __init__.py プロジェクト: mostscript/uu.formlibrary
 def __init__(self, worksheet, group, origin):
     primary = IFormDefinition.providedBy(group)
     self.worksheet = worksheet  # IFormWorksheet
     self.context = worksheet.context  # ISimpleForm
     self.group = group
     data = self.context.data
     self.data = data.get('') if primary else data.get(self.group.getId())
     self.field_schema = group.schema
     self.title = u'Primary fields' if primary else group.title
     self.origin = origin  # origin/start row
     self.size = 0
     self.cursor = self.origin
コード例 #11
0
ファイル: formsets.py プロジェクト: upiq/uu.formlibrary
 def __init__(self, context):
     if not IFormDefinition.providedBy(context):
         raise ValueError(
             'context %s does not provide IFormDefinition' % context)
     BaseFormSet.__init__(self, context, name=u'definition')
     r = self.catalog.unrestrictedSearchResults({
         'references': IUUID(self.context),
         'portal_type': {
             'query': (MULTI_FORM_TYPE, SIMPLE_FORM_TYPE),
             'operator': 'or',
             },
         })
     self.contents = set([b.UID for b in r])
コード例 #12
0
ファイル: formsets.py プロジェクト: mostscript/uu.formlibrary
 def __init__(self, context):
     if not IFormDefinition.providedBy(context):
         raise ValueError('context %s does not provide IFormDefinition' %
                          context)
     BaseFormSet.__init__(self, context, name=u'definition')
     r = self.catalog.unrestrictedSearchResults({
         'references':
         IUUID(self.context),
         'portal_type': {
             'query': (MULTI_FORM_TYPE, SIMPLE_FORM_TYPE),
             'operator': 'or',
         },
     })
     self.contents = set([b.UID for b in r])
コード例 #13
0
def reserialize(context, schema):
    if not IDefinitionBase.providedBy(context.__parent__):
        return  # not an event we care about
    definition = context.__parent__
    saver = queryUtility(ISchemaSaver)
    new_signature = saver.add(schema)
    new_xml = saver.get(new_signature)
    definition.entry_schema = new_xml
    definition.signature = new_signature
    if IFormDefinition.providedBy(definition):
        update_form_entries(definition)
    # TODO: deal with nested groups and associated data objects contained
    if hasattr(aq_base(definition), '_v_schema'):
        delattr(aq_base(definition), '_v_schema')  # invalidate previous schema
    definition.reindexObject()