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): if item == 'parent' and item in self._attributes: return ResourceManager(self.manager.redmine, 'Project').to_resource( self._attributes[item]) return super(Project, self).__getattr__(item)
def __getattr__(self, item): if item in ('category', 'status') and item in self._attributes: manager = ResourceManager(self.manager.redmine, 'Deal{0}'.format(item.capitalize())) return manager.to_resource(self._attributes[item]) return super(Deal, self).__getattr__(item)
def __getattr__(self, item): if item == 'source' and item in self._attributes and self._attributes[ item].get('type') in ('Deal', 'Contact'): manager = ResourceManager(self.manager.redmine, self._attributes[item]['type']) return manager.to_resource(self._attributes[item]) return super(Note, self).__getattr__(item)
def __getattr__(self, item): if item == 'version': return super(Issue, self).__getattr__('fixed_version') elif item == 'watcher': return Issue.Watcher(self) elif item == 'parent' and item in self._attributes: return ResourceManager(self.manager.redmine, 'Issue').to_resource(self._attributes[item]) return super(Issue, self).__getattr__(item)
def __getattr__(self, item): if item == 'parent' and item in self._attributes: return ResourceManager(self.manager.redmine, 'Project').to_resource( self._attributes[item]) value = super(Project, self).__getattr__(item) if item == 'enabled_modules': value = [ module.get('name') if isinstance(module, dict) else module for module in value ] return value
def __getattr__(self, item): if item == 'parent' and item in self._attributes: manager = ResourceManager(self.manager.redmine, 'WikiPage') manager.params['project_id'] = self.manager.params.get( 'project_id', 0) return manager.to_resource(self._attributes[item]) # If a text attribute of a resource is missing, we should # refresh a resource automatically for user's convenience try: return super(WikiPage, self).__getattr__(item) except ResourceAttrError: if 'text' not in self._attributes: self._attributes = self.refresh()._attributes return super(WikiPage, self).__getattr__(item)
def __getattr__(self, item): if item == 'project': return Contact.Project(self) elif item == 'phones': return [ p.get('number') if isinstance(p, dict) else p for p in self._attributes.get('phones', []) ] elif item == 'emails': return [ e.get('address') if isinstance(e, dict) else e for e in self._attributes.get('emails', []) ] elif item == 'avatar' and item in self._attributes: manager = ResourceManager(self.manager.redmine, 'Attachment') return manager.to_resource( {'id': self._attributes[item].get('attachment_id', 0)}) return super(Contact, self).__getattr__(item)
def __getattr__(self, resource): """Returns either ResourceSet or Resource object depending on the method used on the ResourceManager""" if resource.startswith('_'): raise AttributeError return ResourceManager(self, resource)
def __getattr__(self, resource): """Returns either ResourceSet or Resource object depending on the method used on the ResourceManager""" return ResourceManager(self, resource)