Source code for durga.element

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import json

import requests


[docs]class Element(object): def __init__(self, resource, data): self._resource = resource self._data = data
[docs] def update(self, data): """Update the attributes with items from the data dictionary.""" for key, value in data.items(): setattr(self, key, value)
[docs] def save(self): """Update the remote resource. There are two ways to provide data to be saved: 1. Pass it as a dictionary to the ``update()`` method. 2. Modify the Element's attributes. The data will be validated before the PUT request is made. After a successful update an updated Element instance is returned. """ self.validate() resource = self.get_resource() request = requests.Request('PUT', self.get_url(), data=json.dumps(self.get_data())) response = resource.dispatch(request) return resource.collection.get_element(resource.validate(resource.extract(response))[0])
[docs] def delete(self): return self.get_resource().dispatch(requests.Request('DELETE', self.get_url()))
[docs] def get_url(self): resource = self.get_resource() url_attribute = getattr(resource, 'url_attribute', 'url') try: url = getattr(self, url_attribute) except AttributeError: return resource.collection.get_element_url(getattr(self, resource.id_attribute)) return url
[docs] def get_resource(self): return self._resource
[docs] def get_raw(self): return self._data.copy()
[docs] def get_data(self): """Return the Element's data as dictionary.""" return dict([(key, getattr(self, key)) for key in self.get_raw()])
[docs] def validate(self): """Validate the Element's data. If validation fails a schema.SchemaError is raised. """ self.get_resource().validate([self.get_data()])