def __init__(self, queryset, responders=None, **kwargs): """ Replaces the responder in Collection.__init__ with responders, which maybe a list of responders or None. In the case of None, default responders are allocated to the colelction. See Collection.__init__ for more details """ if responders is None: responders = {"json": JSONResponder(), "xml": XMLResponder()} self.responders = {} for k, r in responders.items(): Collection.__init__(self, queryset, r, **kwargs) self.responders[k] = self.responder
def __init__(self, queryset, responders=None, **kwargs): ''' Replaces the responder in Collection.__init__ with responders, which maybe a list of responders or None. In the case of None, default responders are allocated to the colelction. See Collection.__init__ for more details ''' if responders is None: responders = { 'json': JSONResponder(), 'xml': XMLResponder(), } self.responders = {} for k, r in responders.items(): Collection.__init__(self, queryset, r, **kwargs) self.responders[k] = self.responder
def __call__(self, request, format, *args, **kwargs): ''' urls.py must contain .(?P<format>\w+) at the end of the url for rest resources, such that it would match one of the keys in self.responders ''' error_code = 400 errors = ErrorDict({'info': ["An error has occured"]}) if format in self.responders: self.responder = self.responders[format] try: return Collection.__call__(self, request, *args, **kwargs) except InputValidationException, e: errors = ErrorDict({'info': [str(e)]}) error_code = 412
def __call__(self, request, format, *args, **kwargs): """ urls.py must contain .(?P<format>\w+) at the end of the url for rest resources, such that it would match one of the keys in self.responders """ error_code = 400 errors = ErrorDict({"info": ["An error has occured"]}) if format in self.responders: self.responder = self.responders[format] try: return Collection.__call__(self, request, *args, **kwargs) except search.SearchAddressDisambiguateError, e: return self.responder.error(request, 412, ErrorDict({"info": [str(e)], "possible_addresses": addrs})) except InputValidationException, e: errors = ErrorDict({"info": [str(e)]}) error_code = 412
def __call__(self, request, format, *args, **kwargs): ''' urls.py must contain .(?P<format>\w+) at the end of the url for rest resources, such that it would match one of the keys in self.responders ''' error_code = 400 errors = ErrorDict({'info': ["An error has occured"]}) if format in self.responders: self.responder = self.responders[format] try: return Collection.__call__(self, request, *args, **kwargs) except search.SearchAddressDisambiguateError, e: return self.responder.error( request, 412, ErrorDict({ 'info': [str(e)], 'possible_addresses': addrs })) except InputValidationException, e: errors = ErrorDict({'info': [str(e)]}) error_code = 412
return self.responder.list(request, reports) def create(self, request, *args, **kwargs): report = self.api.post(request) return self.responder.list(request, report) # These use the django-rest-api library. mobile_report_rest = MobileReportRest( queryset=Report.objects.all(), permitted_methods=['GET', 'POST'], expose_fields=MobileReportAPI.EXPOSE_FIELDS) json_poll_resource = Collection( queryset=ReportCategory.objects.all(), expose_fields=('id', 'name_en', 'name_fr'), #permitted_methods = ('GET'), responder=JSONResponder()) # These classes do not use the django-rest-api library class MobileReportAPIError(models.Model): EXPOSE_FIELDS = ('error', ) error = models.CharField(max_length=255) def mobile_reports(request, format): api = MobileReportAPI() supported_formats = ['xml', 'json'] if not format in supported_formats: