def folderitems(self, **kwargs): items = super(SampleImportsView, self).folderitems() for x in range(len(items)): if 'obj' not in items[x]: continue obj = items[x]['obj'] # NOTE: Some about obj that returns the brains and not the object # it could be that folderitems has been changange on the listing # this is a hack for to make it work if api.is_brain(obj): obj = obj.getObject() # End of NOTE items[x]['Title'] = obj.title_or_id() if items[x]['review_state'] == 'invalid': items[x]['replace']['Title'] = "<a href='%s/edit'>%s</a>" % ( obj.absolute_url(), items[x]['Title']) else: items[x]['replace']['Title'] = "<a href='%s/view'>%s</a>" % ( obj.absolute_url(), items[x]['Title']) items[x]['Creator'] = obj.Creator() items[x]['Filename'] = obj.getFilename() parent = obj.aq_parent items[x]['Client'] = parent if IClient.providedBy(parent) else '' items[x]['replace']['Client'] = "<a href='%s'>%s</a>" % ( parent.absolute_url(), parent.Title()) items[x]['DateCreated'] = ulocalized_time( obj.created(), long_format=True, time_only=False, context=obj) date = getTransitionDate(obj, 'validate') items[x]['DateValidated'] = date if date else '' date = getTransitionDate(obj, 'import') items[x]['DateImported'] = date if date else '' return items
def _get_object(context, value): """Resolve a UID to an object. :param context: context is the object containing the field's schema. :type context: BaseContent :param value: A UID. :type value: string :return: Returns a Content object or None. :rtype: BaseContent """ if not value: return None if api.is_brain(value): return api.get_object(value) if api.is_object(value): return value if api.is_uid(value): uc = api.get_tool('uid_catalog', context=context) brains = uc(UID=value) if len(brains) == 0: # Broken Reference! logger.warn("Reference on {} with UID {} is broken!" .format(repr(context), value)) return None return brains[0].getObject() return None
def addReferenceAnalysis(self, service): """ Creates a new Reference Analysis object based on this Sample Reference, with the type passed in and associates the newly created object to the Analysis Service passed in. :param service: Object, brain or UID of the Analysis Service :param reference_type: type of ReferenceAnalysis, where 'b' is is Blank and 'c' is Control :type reference_type: A String :returns: the newly created Reference Analysis :rtype: string """ if api.is_uid(service) or api.is_brain(service): return self.addReferenceAnalysis(api.get_object(service)) if not IAnalysisService.providedBy(service): return None interim_fields = service.getInterimFields() analysis = _createObjectByType("ReferenceAnalysis", self, id=tmpID()) # Copy all the values from the schema # TODO Add Service as a param in ReferenceAnalysis constructor and do # this logic there instead of here discard = [ 'id', ] keys = service.Schema().keys() for key in keys: if key in discard: continue if key not in analysis.Schema().keys(): continue val = service.getField(key).get(service) # Campbell's mental note:never ever use '.set()' directly to a # field. If you can't use the setter, then use the mutator in order # to give the value. We have realized that in some cases using # 'set' when the value is a string, it saves the value # as unicode instead of plain string. # analysis.getField(key).set(analysis, val) mutator_name = analysis.getField(key).mutator mutator = getattr(analysis, mutator_name) mutator(val) analysis.setAnalysisService(service) ref_type = self.getBlank() and 'b' or 'c' analysis.setReferenceType(ref_type) analysis.setInterimFields(interim_fields) analysis.unmarkCreationFlag() renameAfterCreation(analysis) return analysis
def __init__(self, thing): # Type based initializers if isinstance(thing, basestring) and thing == "0": self.init_with_instance(api.get_portal()) elif api.is_uid(thing): self.init_with_uid(thing) elif api.is_brain(thing): self.init_with_brain(thing) elif api.is_object(thing): self.init_with_instance(thing) else: raise TypeError("Can not initialize a SuperModel with '{}'".format( repr(thing)))
def _get_object(context, value): """Resolve a UID to an object. :param context: context is the object containing the field's schema. :type context: BaseContent :param value: A UID. :type value: string :return: Returns a Content object or None. :rtype: BaseContent """ if not value: return None if api.is_brain(value): return api.get_object(value) if api.is_object(value): return value if api.is_uid(value): uc = api.get_tool('uid_catalog', context=context) brains = uc(UID=value) assert len(brains) == 1 return brains[0].getObject() return None
def get_uid(self, context, value): """Takes a brain or object (or UID), and returns a UID. :param context: context is the object who's schema contains this field. :type context: BaseContent :param value: Brain, object, or UID. :type value: Any :return: resolved UID. :rtype: string """ # Empty string or list with single empty string, are commonly # passed to us from form submissions if not value or value == ['']: ret = '' elif api.is_brain(value): ret = value.UID elif api.is_at_content(value) or api.is_dexterity_content(value): ret = value.UID() elif api.is_uid(value): ret = value else: raise ReferenceException("{}.{}: Cannot resolve UID for {}".format( context, self.getName(), value)) return ret
def get_uid(self, context, value): """Takes a brain or object (or UID), and returns a UID. :param context: context is the object who's schema contains this field. :type context: BaseContent :param value: Brain, object, or UID. :type value: Any :return: resolved UID. :rtype: string """ # Empty string or list with single empty string, are commonly # passed to us from form submissions if not value or value == ['']: ret = '' elif api.is_brain(value): ret = value.UID elif api.is_at_content(value) or api.is_dexterity_content(value): ret = value.UID() elif is_uid(context, value): ret = value else: raise ReferenceException("{}.{}: Cannot resolve UID for {}".format( context, self.getName(), value)) return ret
def is_brain(brain_or_object): """Proxy to bika.lims.api.is_brain """ return api.is_brain(brain_or_object)
def is_brain(brain_or_object): """Proxy to senaite.api.is_brain """ return api.is_brain(brain_or_object)