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')
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
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')
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
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()
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()
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)
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)
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
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
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])
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])
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()