def update(self, resource_id, **fields): """Updates a Resource object by resource id (can be either integer id or string identifier)""" if self.resource_class.query_update is None or self.resource_class.container_update is None: raise ResourceBadMethodError() if not fields: raise ResourceNoFieldsProvidedError for index, upload in enumerate(fields.get('uploads', [])): fields['uploads'][index]['token'] = self.redmine.upload( upload.get('path', '')) formatter = MemorizeFormatter() try: query_update = formatter.format(self.resource_class.query_update, resource_id, **fields) except KeyError as exception: param = str(exception).replace("'", "") if param in self.params: fields[param] = self.params[param] query_update = formatter.format( self.resource_class.query_update, resource_id, **fields) else: raise ValidationError( '{0} argument is required'.format(exception)) url = '{0}{1}'.format(self.redmine.url, query_update) data = { self.resource_class.container_update: self.prepare_params(formatter.unused_kwargs) } return self.redmine.request('put', url, data=data)
def update(self, resource_id, **fields): """Updates a Resource object by resource id (can be either integer id or string identifier)""" if self.resource_class.query_update is None or self.resource_class.container_update is None: raise ResourceBadMethodError if not fields: raise ResourceNoFieldsProvidedError for index, upload in enumerate(fields.get('uploads', [])): fields['uploads'][index]['token'] = self.redmine.upload(upload.get('path', '')) formatter = MemorizeFormatter() try: query_update = formatter.format(self.resource_class.query_update, resource_id, **fields) except KeyError as exception: param = str(exception).replace("'", "") if param in self.params: fields[param] = self.params[param] query_update = formatter.format(self.resource_class.query_update, resource_id, **fields) else: raise ValidationError('{0} argument is required'.format(exception)) url = '{0}{1}'.format(self.redmine.url, query_update) data = {self.resource_class.container_update: self.prepare_params(formatter.unused_kwargs)} return self.redmine.request('put', url, data=data)
def create(self, **fields): """Creates a new resource in Redmine database and returns resource object on success""" if self.resource_class.query_create is None or self.resource_class.container_create is None: raise ResourceBadMethodError() if not fields: raise ResourceNoFieldsProvidedError for index, upload in enumerate(fields.get('uploads', [])): fields['uploads'][index]['token'] = self.redmine.upload( upload.get('path', '')) formatter = MemorizeFormatter() try: url = '{0}{1}'.format( self.redmine.url, formatter.format(self.resource_class.query_create, **fields)) except KeyError as exception: raise ValidationError('{0} field is required'.format(exception)) self.container = self.resource_class.container_one data = { self.resource_class.container_create: self.prepare_params(formatter.unused_kwargs) } # Almost all resources are created via POST method, but some # resources are created via PUT, so we should check for this try: response = self.redmine.request('post', url, data=data) except ResourceNotFoundError: response = self.redmine.request('put', url, data=data) try: resource = self.to_resource(response[self.container]) except TypeError: raise ValidationError( 'Resource already exists') # fix for repeated PUT requests self.params = formatter.used_kwargs self.url = '{0}{1}'.format( self.redmine.url, self.resource_class.query_one.format(resource.internal_id, **fields)) return resource
def create(self, **fields): """Creates a new resource in Redmine database and returns resource object on success""" if self.resource_class.query_create is None or self.resource_class.container_create is None: raise ResourceBadMethodError() if not fields: raise ResourceNoFieldsProvidedError if 'uploads' in fields: for index, upload in enumerate(fields['uploads']): fields['uploads'][index]['token'] = self.redmine.upload(upload.get('path', '')) formatter = MemorizeFormatter() try: url = '{0}{1}'.format(self.redmine.url, formatter.format(self.resource_class.query_create, **fields)) except KeyError as exception: raise ValidationError('{0} field is required'.format(exception)) self.container = self.resource_class.container_one data = {self.resource_class.container_create: formatter.unused_kwargs} # Almost all resources are created via POST method, but some # resources are created via PUT, so we should check for this try: response = self.redmine.request('post', url, data=data) except ResourceNotFoundError: response = self.redmine.request('put', url, data=data) try: resource = self.to_resource(response[self.container]) except TypeError: raise ValidationError('Resource already exists') # fix for repeated PUT requests self.params = formatter.used_kwargs self.url = '{0}{1}'.format( self.redmine.url, self.resource_class.query_one.format(resource.internal_id, **fields) ) return resource
def update(self, resource_id, **fields): """Updates a Resource object by resource id (can be either integer id or string identifier)""" if self.resource_class.query_update is None or self.resource_class.container_update is None: raise ResourceBadMethodError() if not fields: raise ResourceNoFieldsProvidedError formatter = MemorizeFormatter() try: query_update = formatter.format(self.resource_class.query_update, resource_id, **fields) except KeyError as exception: param = str(exception).replace("'", "") if param in self.params: fields[param] = self.params[param] query_update = formatter.format(self.resource_class.query_update, resource_id, **fields) else: raise ValidationError("{0} argument is required".format(exception)) url = "{0}{1}".format(self.redmine.url, query_update) data = {self.resource_class.container_update: self.prepare_params(formatter.unused_kwargs)} return self.redmine.request("put", url, data=data)