def getValue(self, obj, type='objects', noListIfSingleObj=False, startNumber=None, someObjects=False): '''Returns the objects linked to p_obj through this Ref field. - If p_type is "objects", it returns the Appy wrappers; - If p_type is "zobjects", it returns the Zope objects; - If p_type is "uids", it returns UIDs of objects (= strings). * If p_startNumber is None, it returns all referred objects. * If p_startNumber is a number, it returns self.maxPerPage objects, starting at p_startNumber. If p_noListIfSingleObj is True, it returns the single reference as an object and not as a list. If p_someObjects is True, it returns an instance of SomeObjects instead of returning a list of references.''' uids = getattr(obj.aq_base, self.name, []) if not uids: # Maybe is there a default value? defValue = Field.getValue(self, obj) if defValue: # I must prefix call to function "type" with "__builtins__" # because this name was overridden by a method parameter. if __builtins__['type'](defValue) in sutils.sequenceTypes: uids = [o.o.UID() for o in defValue] else: uids = [defValue.o.UID()] # Prepare the result: an instance of SomeObjects, that will be unwrapped # if not required. res = gutils.SomeObjects() res.totalNumber = res.batchSize = len(uids) batchNeeded = startNumber != None if batchNeeded: res.batchSize = self.maxPerPage if startNumber != None: res.startNumber = startNumber # Get the objects given their uids i = res.startNumber while i < (res.startNumber + res.batchSize): if i >= res.totalNumber: break # Retrieve every reference in the correct format according to p_type if type == 'uids': ref = uids[i] else: ref = obj.getTool().getObject(uids[i]) if type == 'objects': ref = ref.appy() res.objects.append(ref) i += 1 # Manage parameter p_noListIfSingleObj if res.objects and noListIfSingleObj: if self.multiplicity[1] == 1: res.objects = res.objects[0] if someObjects: return res return res.objects
def getValue(self, obj): # Cheat if this field represents p_obj's state if self.name == 'state': return obj.State() value = Field.getValue(self, obj) if not value: if self.isMultiValued(): return emptyTuple else: return value if isinstance(value, basestring) and self.isMultiValued(): value = [value] elif isinstance(value, tuple): value = list(value) return value
def getValue(self, obj): '''Never returns "None". Returns always "True" or "False", even if "None" is stored in the DB.''' value = Field.getValue(self, obj) if value == None: return False return value
def getValue(self, obj): value = Field.getValue(self, obj) if value: value = sutils.FileWrapper(value) return value