def test_checkName(self): namechooser = INameChooser(self.activities) normalizer = getUtility(IURLNormalizer) obj = createContent( 'upfront.assessmentitem.content.assessmentitem') test_name = normalizer.normalize('Q001') self.assertEqual(namechooser.checkName(test_name, obj), True) obj = createContentInContainer(self.activities, 'upfront.assessmentitem.content.assessmentitem') self.assertEqual(namechooser.checkName(test_name, obj), False)
def addContentToContainer(container, object, checkConstraints=True): """Copy of plone.dexterity.util.addContentToContainer. Modified to check the existing Id on the object before paving over it. """ if not hasattr(aq_base(object), 'portal_type'): raise ValueError('object must have its portal_type set') container = aq_inner(container) if checkConstraints: container_fti = container.getTypeInfo() fti = getUtility(IDexterityFTI, name=object.portal_type) if not fti.isConstructionAllowed(container): raise Unauthorized('Cannot create {0}'.format(object.portal_type)) if container_fti is not None and \ not container_fti.allowType(object.portal_type): raise ValueError('Disallowed subobject type: {0}'.format( object.portal_type)) chooser = INameChooser(container) if hasattr(object, 'id') and chooser.checkName(object.id, object): name = object.id else: name = INameChooser(container).chooseName(None, object) object.id = name newName = container._setObject(name, object) return container._getOb(newName)
def addContentToContainer(container, object, checkConstraints=True): """Copy of plone.dexterity.util.addContentToContainer. Modified to check the existing Id on the object before paving over it. """ if not hasattr(aq_base(object), "portal_type"): raise ValueError("object must have its portal_type set") container = aq_inner(container) if checkConstraints: container_fti = container.getTypeInfo() fti = getUtility(IDexterityFTI, name=object.portal_type) if not fti.isConstructionAllowed(container): raise Unauthorized("Cannot create %s" % object.portal_type) if container_fti is not None and \ not container_fti.allowType(object.portal_type): raise ValueError( "Disallowed subobject type: %s" % object.portal_type ) chooser = INameChooser(container) if hasattr(object, 'id') and chooser.checkName(object.id, object): name = object.id else: name = INameChooser(container).chooseName(None, object) object.id = name newName = container._setObject(name, object) return container._getOb(newName)
def validateActionFields(self, cat_name, data, allow_dup=False): """Check action fields on validity""" errors = {} if allow_dup: # create dummy category to avoid id # duplication during action update category = ActionCategory(cat_name) else: # get or create (if necessary) actions category category = self.getOrCreateCategory(cat_name) # validate action id chooser = INameChooser(category) try: chooser.checkName(data['id'], self.context) except Exception, e: errors['id'] = self._formatError(e, **{'id': data['id']})
def validateActionFields(self, cat_name, data, allow_dup=False): """Check action fields on validity""" errors = {} if allow_dup: # create dummy category to avoid id # duplication during action update category = ActionCategory(cat_name) else: # get or create (if necessary) actions category category = self.getOrCreateCategory(cat_name) # validate action id chooser = INameChooser(category) try: chooser.checkName(data['id'], self.context) except Exception, e: errors['id'] = self._formatError(e, **{'id': data['id']})
def add_site_record(self, site_record): orig_name = site_record.id chooser = INameChooser(self) try: chooser.checkName(orig_name, site_record) except KeyError: # the name already exists, no problem, we're just going to # increment it anyway pass except (TypeError, ValueError): msg = "%s is not useable as a name for a site record" % orig_name raise ValueError(msg) name = chooser.chooseName(orig_name, site_record) checkObject(self, name, site_record) site_record.id = name self[name] = site_record return name
def normalize(self, item, max_length, parent_path): title = item['effective_title'] if not isinstance(title, unicode): title = title.decode('utf-8') # Use URLNormalizer to get locale-dependent transcriptions, # and IDNormalizer to get lowercased, ID-safe values. normalized_id = self.normalizer.normalize(title, max_length=max_length) normalized_id = self.id_normalizer.normalize( normalized_id, max_length=max_length) # Avoid id conflicts parent = traverse(self.context, parent_path) chooser = INameChooser(parent) if not chooser.checkName(title.encode('utf-8'), parent): # namechooser expect the object itself as second paremter, but it's # only used for getting the request, therefore we use the parent. normalized_id = INameChooser(parent).chooseName( normalized_id, parent) return normalized_id