def registerEntityConfig(typ, klass, gen_fs=False, protect=False, edit_fs=None, create_fs=None, list_fs=None, filter_fs=None, sort_default=None, label=None): """ Erlaubt das programmatische Definieren oder Ueberschreiben von Entity Konfigurationen. D.h. statt eines EntityConfig Objekts wird eine interne Registry genutzt, um alle Aspekte der Darstellung persistent abzulegen. Wenn 'protect' = True, dann werden die Eintraege durch einen erneuten Aufruf nicht ueberschrieben - es sei denn, der erneute Aufruf spezifiziert wieder 'protect' = True. Wenn andere Parameter None sind und gen_fs == False, dann bleiben etwaige vorherige Eintraege erhalten. So kann man gezielt auch Teile ueberschreiben. Ist gen_fs == True, werden generisch Defaults fuer fehlende Parameter erzeugt. """ # print "**************** registerEntityConfig", typ, gen_fs, protect if not label: label = typ.capitalize() econfig = {} if _ecreg.has_key(typ): econfig = _ecreg[typ] if econfig['protect'] and not protect: # Eintrag ist geschuetzt und wird nicht ueberschrieben # print "PROTECTED" return econfig['label'] = label econfig['klass'] = klass econfig['protect'] = protect if gen_fs: try: fields = getAllEntityFields(klass) if not edit_fs: edit_fs = _makeFS(klass, fields) if not create_fs: create_fs = _makeFS(klass, fields) if not list_fs: list_fs = _makeGrid(typ, klass, fields) if not filter_fs: filter_fs = _makeFS(klass, fields) if not sort_default: sort_default = fields[0] except "Exception, e": # Bei ungewoehnlichen (binaeren) Feldern log_exc(e) if edit_fs: econfig['edit_def'] = edit_fs if create_fs: econfig['create_def'] = create_fs if list_fs: econfig['list_def'] = list_fs if filter_fs: econfig['filter_def'] = filter_fs if sort_default: econfig['sort_default'] = sort_default #print "Registering...", typ, econfig _ecreg[typ] = econfig
def deleteMemberFolders(self, member_ids): """ """ for mid in member_ids: try: members = self.content.Members members.manage_delObjects([mid.replace("-","--")]) except Exception, e: log_exc(e) try: self.portal_membership.getMembersFolder().manage_delObjects([mid.replace("-","--")]) except Exception, e: log_exc(e)
def _indexObject(obj): if (base_hasattr(obj, 'getObject') and safe_callable(obj.getObject)): # Wake up any brains obj = obj.getObject() if (base_hasattr(obj, 'indexObject') and safe_callable(obj.indexObject)): try: obj.indexObject() except TypeError: # Catalogs have 'indexObject' as well, but they # take different args, and will fail pass except: # Log indexing exceptions but continue log_exc('Could not reindex %s'%( '/'.join(obj.getPhysicalPath())))
def getGroupsForCurrentUser(self, user=None): """ """ g = self.content.Groups # gpath = "/".join(g.getPhysicalPath()) gordner = g.getFolderContents() #print groups gtool = getToolByName(self, "portal_groups") res = [] for g in gordner: try: grp = gtool.getGroupById(g.id) etypes = grp.getProperty('allowedDocTypes', []) if etypes: title = grp.getProperty('title','') res.append({'id': g.id, 'title' : title, 'etypes' : etypes}) except Exception, e: log_exc(e)
def back_references(source_object, attribute_name): """ Return back references from source object on specified attribute_name """ try: catalog = getUtility(ICatalog) intids = getUtility(IIntIds) result = [] # print 'back_reference ', intids.getId(aq_inner(source_object)) for rel in catalog.findRelations( dict(to_id=intids.getId(aq_inner(source_object)), from_attribute=attribute_name) ): # print rel obj = intids.queryObject(rel.from_id) # print 'treffer ', obj if obj is not None and checkPermission('zope2.View', obj): result.append(obj) return result except Exception, e: log_exc(e) return []
def getActiveAllowedPersonalBehaviorsForDocument(doc, request): """ Determine which behaviors are - configured for the object, which are also - allowed within the docpool and also - allowed for the user and - not currently filtered out. @param self: @return: """ try: dp_app_state = getMultiAdapter((doc, request), name=u'dp_app_state') if doc.isPersonal(): # no personal filtering in the content area permitted_apps = dp_app_state.appsEffectiveForObject(request, filtered=False) else: # but in all other areas permitted_apps = dp_app_state.appsEffectiveForObject(request, filtered=True) permitted_apps.sort() # print "getActiveAllowed ", permitted_apps return permitted_apps except Exception, e: log_exc(e) return []
def _conflict_safe_update(self, slices, action): """Perform an action on groups of objects, with transaction commits along the way""" updated = [] trans_failed = [] commit = transaction.commit sync = self.context._p_jar.sync obj_path = self._obj_path for n,s in enumerate(slices): # skip cache purging resolved = list(s) if not resolved: #log('Batch %s was empty'%n) continue [action(r) for r in resolved] try: commit() log('Full transaction committed on batch %s (%s) '%(n, len(resolved))) sync() except ConflictError: transaction.abort() log('Conflict on batch %s, retrying ...'% n, severity=logging.WARN) # try once more [action(r) for r in resolved] try: commit() log('Full transaction committed after retry on batch %s'% n, severity=logging.WARN) sync() except ConflictError: transaction.abort() log_exc('Conflict after two tries on batch %s, continuing'%n) trans_failed.extend(obj_path(o) for o in resolved) continue updated.extend(obj_path(o) for o in resolved) return updated, trans_failed