def __getattr__(self, item): """Returns the requested attribute and makes a conversion if needed""" if item in self.attributes: # If item should be a Resource object, let's convert it if item in _RESOURCE_MAP: manager = ResourceManager(self.manager.redmine, _RESOURCE_MAP[item]) return manager.to_resource(self.attributes[item]) # If item should be a ResourceSet object, let's convert it elif item in _RESOURCE_SET_MAP and self.attributes[item] is not None: manager = ResourceManager(self.manager.redmine, _RESOURCE_SET_MAP[item]) return manager.to_resource_set(self.attributes[item]) # If item should be requested from Redmine, let's do it elif item in _RESOURCE_RELATIONS_MAP and self.attributes[item] is None: filters = {'{0}_id'.format(self.__class__.__name__.lower()): self.id} manager = ResourceManager(self.manager.redmine, _RESOURCE_RELATIONS_MAP[item]) return manager.filter(**filters) try: # If the requested item is a date/datetime string # we need to convert it to the appropriate object possible_dt = str(self.attributes[item]) try: return datetime.strptime(possible_dt, self.manager.redmine.datetime_format) except ValueError: return datetime.strptime(possible_dt, self.manager.redmine.date_format).date() except ValueError: return self.attributes[item] except KeyError: raise ResourceAttrError()
def __getattr__(self, item): """Returns the requested attribute and makes a conversion if needed""" if item.startswith('_'): raise AttributeError if item in self._attributes: # If item shouldn't be converted let's return it as it is if item in self._unconvertible: return self._attributes[item] # If item should be a Resource object, let's convert it elif item in _RESOURCE_MAP: manager = ResourceManager(self.manager.redmine, _RESOURCE_MAP[item]) return manager.to_resource(self._attributes[item]) # If item should be a ResourceSet object, let's convert it elif item in _RESOURCE_SET_MAP and self._attributes[ item] is not None: manager = ResourceManager(self.manager.redmine, _RESOURCE_SET_MAP[item]) return manager.to_resource_set(self._attributes[item]) # If item is a relation and should be requested from Redmine, let's do it elif item in self._relations and self._attributes[item] is None: filters = { '{0}_id'.format(self._relations_name): self.internal_id } manager = ResourceManager(self.manager.redmine, _RESOURCE_RELATIONS_MAP[item]) self._attributes[item] = manager.filter(**filters) return self._attributes[item] # If item is an include and should be requested from Redmine, let's do it elif item in self._includes and self._attributes[item] is None: self._attributes[item] = self.refresh( include=item)._attributes[item] or [] return getattr(self, item) try: # If the requested item is a date/datetime string # we need to convert it to the appropriate object possible_dt = str(self._attributes[item]) try: return datetime.strptime(possible_dt, self.manager.redmine.datetime_format) except ValueError: return datetime.strptime( possible_dt, self.manager.redmine.date_format).date() except ValueError: return self._attributes[item] except KeyError: if self.is_new(): if item in ('id', 'version'): return 0 return '' return self._action_if_attribute_absent()
def __getattr__(self, item): """Returns the requested attribute and makes a conversion if needed""" if item.startswith('_'): raise AttributeError if item in self._attributes: # If item shouldn't be converted let's return it as it is if item in self._unconvertible: return self._attributes[item] # If item should be a Resource object, let's convert it elif item in _RESOURCE_MAP: manager = ResourceManager(self.manager.redmine, _RESOURCE_MAP[item]) return manager.to_resource(self._attributes[item]) # If item should be a ResourceSet object, let's convert it elif item in _RESOURCE_SET_MAP and self._attributes[item] is not None: manager = ResourceManager(self.manager.redmine, _RESOURCE_SET_MAP[item]) return manager.to_resource_set(self._attributes[item]) # If item is a relation and should be requested from Redmine, let's do it elif item in self._relations and self._attributes[item] is None: filters = {'{0}_id'.format(self._relations_name): self.internal_id} manager = ResourceManager(self.manager.redmine, _RESOURCE_RELATIONS_MAP[item]) self._attributes[item] = manager.filter(**filters) return self._attributes[item] # If item is an include and should be requested from Redmine, let's do it elif item in self._includes and self._attributes[item] is None: self._attributes[item] = self.refresh(include=item)._attributes[item] or [] return getattr(self, item) try: # If the requested item is a date/datetime string # we need to convert it to the appropriate object possible_dt = str(self._attributes[item]) try: return datetime.strptime(possible_dt, self.manager.redmine.datetime_format) except ValueError: return datetime.strptime(possible_dt, self.manager.redmine.date_format).date() except ValueError: return self._attributes[item] except KeyError: if self.is_new(): if item in ('id', 'version'): return 0 return '' return self._action_if_attribute_absent()
def __getattr__(self, item): """Returns the requested attribute and makes a conversion if needed""" if item in self.attributes: # If item should be a Resource object, let's convert it if item in _RESOURCE_MAP: manager = ResourceManager(self.manager.redmine, _RESOURCE_MAP[item]) return manager.to_resource(self.attributes[item]) # If item should be a ResourceSet object, let's convert it elif item in _RESOURCE_SET_MAP and self.attributes[item] is not None: manager = ResourceManager(self.manager.redmine, _RESOURCE_SET_MAP[item]) return manager.to_resource_set(self.attributes[item]) # If item is a relation and should be requested from Redmine, let's do it elif item in self._relations and self.attributes[item] is None: filters = {'{0}_id'.format(self.__class__.__name__.lower()): self.internal_id} manager = ResourceManager(self.manager.redmine, _RESOURCE_RELATIONS_MAP[item]) self.attributes[item] = manager.filter(**filters) return self.attributes[item] # If item is an include and should be requested from Redmine, let's do it elif item in self._includes and self.attributes[item] is None: self.attributes[item] = self.refresh(include=item).attributes[item] return getattr(self, item) try: # If the requested item is a date/datetime string # we need to convert it to the appropriate object possible_dt = str(self.attributes[item]) try: return datetime.strptime(possible_dt, self.manager.redmine.datetime_format) except ValueError: return datetime.strptime(possible_dt, self.manager.redmine.date_format).date() except ValueError: return self.attributes[item] except KeyError: raise_attr_exception = self.manager.redmine.raise_attr_exception if isinstance(raise_attr_exception, bool) and raise_attr_exception: raise ResourceAttrError() elif isinstance(raise_attr_exception, (list, tuple)) and self.__class__.__name__ in raise_attr_exception: raise ResourceAttrError() return None