Example #1
0
def channel_page(request, channel, allow_edit=False):
    channel_serializer =  ChannelSerializer(channel)

    channel_list = Channel.objects.select_related('main_tree').prefetch_related('editors').prefetch_related('viewers')\
                            .exclude(id=channel.pk).filter(Q(deleted=False) & (Q(editors=request.user) | Q(viewers=request.user)))\
                            .annotate(is_view_only=Case(When(editors=request.user, then=Value(0)),default=Value(1),output_field=IntegerField()))\
                            .distinct().values("id", "name", "is_view_only").order_by('name')

    fileformats = get_or_set_cached_constants(FileFormat, FileFormatSerializer)
    licenses = get_or_set_cached_constants(License, LicenseSerializer)
    formatpresets = get_or_set_cached_constants(FormatPreset, FormatPresetSerializer)
    contentkinds = get_or_set_cached_constants(ContentKind, ContentKindSerializer)

    json_renderer = JSONRenderer()

    return render(request, 'channel_edit.html', {"allow_edit":allow_edit,
                                                "channel" : json_renderer.render(channel_serializer.data),
                                                "channel_id" : channel.pk,
                                                "channel_name": channel.name,
                                                "channel_list" : channel_list,
                                                "fileformat_list" : fileformats,
                                                "license_list" : licenses,
                                                "fpreset_list" : formatpresets,
                                                "ckinds_list" : contentkinds,
                                                "current_user" : json_renderer.render(CurrentUserSerializer(request.user).data),
                                                "preferences" : request.user.preferences,
                                            })
Example #2
0
    def test_create_object(self):
        jr = JSONRenderer()

        for name, model in models.generated_models.models.items():
            serializer = models.generated_models.model_serializer(name)
            obj = G(model)
            pk = model._meta.pk.name
            # PUT
            data = serializer(N(model)).data
            if pk in data:
                del data[pk]
            url = reverse(self.view_name, kwargs={'model': name, 'pk': obj.id})
            response = self.client.put(url, jr.render(data), content_type='application/json')
            response_data = response.data
            if pk in response_data:
                del response_data[pk]
            self.assertDictEqual(data, response_data)
            # PATCH
            orig_data = serializer(obj).data
            patch_data = {}
            for key, val in orig_data.items():
                if key != pk and val != data.get(key):
                    patch_data = {
                        key: val
                    }
                    data[key] = val
                    break
            response = self.client.patch(url, jr.render(patch_data), content_type='application/json')
            response_data = response.data
            if pk in response_data:
                del response_data[pk]
            self.assertDictEqual(data, response_data)
Example #3
0
def channel(request, channel_id):
    channel = get_object_or_404(Channel, id=channel_id, deleted=False)
    channel_serializer =  ChannelSerializer(channel)

    accessible_channel_list = Channel.objects.filter( Q(deleted=False, public=True) | Q(deleted=False, editors__email__contains= request.user.email))
    accessible_channel_list = ChannelListSerializer.setup_eager_loading(accessible_channel_list)
    accessible_channel_list_serializer = ChannelListSerializer(accessible_channel_list, many=True)

    channel_list = accessible_channel_list.filter(editors__email__contains= request.user.email).exclude(id=channel_id).values("id", "name")
    fileformats = get_or_set_cached_constants(FileFormat, FileFormatSerializer)
    licenses = get_or_set_cached_constants(License, LicenseSerializer)
    formatpresets = get_or_set_cached_constants(FormatPreset, FormatPresetSerializer)
    contentkinds = get_or_set_cached_constants(ContentKind, ContentKindSerializer)

    channel_tags = ContentTag.objects.filter(channel = channel)
    channel_tags_serializer = TagSerializer(channel_tags, many=True)

    json_renderer = JSONRenderer()

    return render(request, 'channel_edit.html', {"channel" : json_renderer.render(channel_serializer.data),
                                                "channel_id" : channel_id,
                                                "channel_name": channel.name,
                                                "accessible_channels" : json_renderer.render(accessible_channel_list_serializer.data),
                                                "channel_list" : channel_list,
                                                "fileformat_list" : fileformats,
                                                 "license_list" : licenses,
                                                 "fpreset_list" : formatpresets,
                                                 "ckinds_list" : contentkinds,
                                                 "ctags": json_renderer.render(channel_tags_serializer.data),
                                                 "current_user" : json_renderer.render(CurrentUserSerializer(request.user).data)})
Example #4
0
    def get_context_data(self, **kwargs):
        # Add some serialized json for bootstrapping the client-side app
        renderer = JSONRenderer()
        kwargs['project_json'] = renderer.render(serializers.ProjectSerializer(self.get_project()).data)
        kwargs['scheme_json'] = renderer.render(serializers.SchemeSerializer(self.object).data)
        kwargs['user_json'] = renderer.render(serializers.UserSerializer(self.request.user).data)

        return super(SchemeEditorView, self).get_context_data(**kwargs)
Example #5
0
 def get(self, request):
     budget = Budget.objects.order_by("-updated_time")[:1][0]
     categories = budget.categories.all();
     
     budget_serializer = BudgetSerializer(budget)
     categories_serializer = CategorySerializer(categories, many=True)
     
     json_renderer = JSONRenderer();
     budget_json_data = json_renderer.render(budget_serializer.data)
     categories_json_data = json_renderer.render(categories_serializer.data)
     
     return TemplateResponse(request, 'budget_ui/index.html', {"budget_data": budget_json_data, "categories_data": categories_json_data})
    def test_float_strictness(self):
        renderer = JSONRenderer()

        # Default to strict
        for value in [float('inf'), float('-inf'), float('nan')]:
            with pytest.raises(ValueError):
                renderer.render(value)

        renderer.strict = False
        assert renderer.render(float('inf')) == b'Infinity'
        assert renderer.render(float('-inf')) == b'-Infinity'
        assert renderer.render(float('nan')) == b'NaN'
Example #7
0
 def get_context_data(self, map_slug, *args, **kwargs):
     renderer = JSONRenderer()
     context = super(PublicView, self).get_context_data(
         *args, **kwargs)
     if self._has_access():
         projectJSON = ProjectDetailSerializer(
             self.map.project, context={'request': {}}).data
         mapJSON = MapSerializerDetail(
             self.map, context={'request': {}}).data
         context.update({
             'project': renderer.render(projectJSON),
             'map': renderer.render(mapJSON)
         })
     return context
Example #8
0
	def _send_hook_request(self, obj, method):
		url = self._build_hook_url(obj)

		if method in ('POST', 'PUT'):
			serializer = self.get_serializer(obj)
			renderer = JSONRenderer()
			context = {'request': self.request}
			body = renderer.render(serializer.data, renderer_context=context)
		else:
			body = None

		headers = {
			'context-type': 'application/json',
			'X-Signature': self._build_hook_signarute(method, url, body)
		}

		try:
			print('Enviando peticion a :' + url + ' con metodo '+ method)
			response = requests.request(method, url, data=body, timeout=0.5, headers=headers)
			response.raise_for_status()
			print('Peticion enviada...')
		except requests.exceptions.ConnectionError:
			print('Error de conexion')
			# concexion rechazada
			pass
		except requests.exceptions.Timeout:
			print('Error de timeout')
			# timeout
			pass
		except requests.exceptions.RequestException, e:
			print('Error de 400 o 500', e.message)
			# error 4XX o 5XX
			pass
Example #9
0
 def _send_hook_request(self, obj, method):
     url = self._build_hook_url(obj)
     if method in ('post', 'put'):
         # Build body
         serializer = self.get_serializer(obj)
         renderer = JSONRenderer()
         context = {'request': self.request}
         body = renderer.render(serializer.data, renderer_context=context)
     else:
         body = None
     headers = {
         'content-type': 'application/json',
         'X-Signature': self._build_hook_signature(method, url, body),
     }
     try:
         response = requests.request(method, url,
                                     timeout=0.5, headers=headers)
         response.raise_for_status()
     except requests.exceptions.ConnectionError:
         """Host cannot be resolved or connection refused"""
         pass
     except requests.exceptions.Timeout:
         """Request timed out"""
         pass
     except requests.exceptions.RequestException:
         """Server response of 4XX or 5XX"""
         pass
Example #10
0
    def get_context_data(self, **kwargs):

        context = super(ToolDetailBaseView, self).get_context_data(**kwargs)
        state = {}
        renderer = JSONRenderer()

        try:
            state_id = self.kwargs.get('state')
            state = serializers.State(models.State.objects.get(id=state_id), context={'request': self.request}).data
        except models.State.DoesNotExist:
            pass

        context['tool_json'] = renderer.render(serializers.Tool(self.object, context={'request': self.request}).data)
        context['state_json'] = renderer.render(state)

        return context
Example #11
0
    def _send_hook_request(self, obj, method):
        url = self._build_hook_url(obj)

        if method in ('POST', 'PUT'):
            # Build the body
            serializer = self.get_serializer(obj)
            renderer = JSONRenderer()
            context = {'request': self.request}
            body = renderer.render(serializer.data, renderer_context=context)
        else:
            body = None
        headers = {
            'content-type': 'application/json',
            'X-Signature': self._build_hook_signature(method, url, body)
        }

        try:
            response = requests.request(method, url, data=body,
                                        timeout=0.5, headers=headers)
            response.raise_for_status()
        except requests.exceptions.ConnectionError:
            # Host could not be resolved or connection refused
            pass
        except requests.exceptions.Timeout:
            # Request timed out
            pass
        except requests.exceptions.RequestException:
            # Server responded with 4XX or 5XX status code
            pass
Example #12
0
	def perform_create(self, serializer):
		serializer.save(owner=self.request.user)

		# add push notification task for the created question
		renderer = JSONRenderer()
		question_data = renderer.render(data=serializer.data)
		tasks.push_question.delay(question_data)
Example #13
0
 def _send_hook_request(self, obj, method):
     url = self._build_hook_url(obj)
     if method in ('POST', 'PUT'):
         #compõe o corpo
         serializer = self.get_serializer(obj)
         rendererer = JSONRenderer()
         context = {'request': self.request}
         body = rendererer.render(serializer.data, renderer_context=context)
     else:
         body = None
     headers = {
         'content-type': 'application/json',
         'X-Signature': self._build_hook_signature(method, url, body)
     }
     try:
         s = requests.Session()
         requisicao = requests.Request(method, url, data=body, headers=headers)
         prepared = requisicao.prepare()
         response = s.send(prepared, timeout=0.5)
         response.raise_for_status()
     except requests.exceptions.ConnectionError:
         # Host não pôde ser resolvido ou a conexão foi recusada
         pass
     except requests.exceptions.Timeout:
         # Solicitação expirou
         pass
     except requests.exceptions.RequestException:
         # Servidor respondeu com código de status 4XX ou 5XX
         pass
Example #14
0
    def process_response(self, request, response):
        if 'HTTP_ACCEPT' in request.META.keys() and 'text/html' in request.META['HTTP_ACCEPT']:
            try:
                path = resolve(request.path)
            except Resolver404:
                pass
            else:
                if hasattr(path.func, 'cls') and hasattr(path.func.cls, 'crud_model'):
                    request._request = request

                    if not hasattr(response, 'data'):
                        content = {"Error": response.content}
                    else:
                        renderer = JSONRenderer()
                        renderer_context = {'indent': 4}
                        content = renderer.render(response.data, "application/json", renderer_context)

                    renderer_context = {
                        'content': content,
                        'request': request,
                        'response': response,
                        'args': {},
                        'kwargs': {}
                    }
                    return TemplateResponse(request, "api.html", renderer_context).render()
        return response
 def test_with_content_type_args(self):
     """
     Test JSON rendering with additional content type arguments supplied.
     """
     obj = {'foo': ['bar', 'baz']}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json; indent=2')
     self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr)
Example #16
0
def channel_page(request, channel, allow_edit=False, staging=False):
    channel_serializer = ChannelSerializer(channel)
    channel_list = Channel.objects.select_related('main_tree').prefetch_related('editors').prefetch_related('viewers')\
                          .exclude(id=channel.pk).filter(Q(deleted=False) & (Q(editors=request.user) | Q(viewers=request.user)))\
                          .annotate(is_view_only=Case(When(editors=request.user, then=Value(0)), default=Value(1), output_field=IntegerField()))\
                          .distinct().values("id", "name", "is_view_only").order_by('name')

    token = None
    if channel.secret_tokens.filter(is_primary=True).exists():
        token = channel.secret_tokens.filter(is_primary=True).first().token
        token = token[:5] + "-" + token[5:]

    json_renderer = JSONRenderer()
    return render(
        request, 'channel_edit.html', {
            "allow_edit":
            allow_edit,
            "staging":
            staging,
            "is_public":
            channel.public,
            "channel":
            json_renderer.render(channel_serializer.data),
            "channel_id":
            channel.pk,
            "channel_name":
            channel.name,
            "channel_last_published":
            channel.last_published,
            "channel_has_editors":
            len(channel_serializer.data.get("editors")) > 1,
            "ricecooker_version":
            channel.ricecooker_version,
            "channel_list":
            channel_list,
            "current_user":
            json_renderer.render(CurrentUserSerializer(request.user).data),
            "preferences":
            json.dumps(channel.content_defaults),
            "messages":
            get_messages(),
            "primary_token":
            token or channel.pk,
            "title":
            settings.DEFAULT_TITLE,
        })
Example #17
0
 def test_proper_encoding(self):
     obj = {'countries': ['United Kingdom', 'France', 'España']}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json')
     self.assertEqual(
         content,
         '{"countries":["United Kingdom","France","España"]}'.encode(
             'utf-8'))
Example #18
0
def emit_hedwig_serializer_data(action, module_name, serializer_name, serializer):
    if not bool(hedwig_rest_framework_settings.SERIALIZER_SIGNALS):
        return

    routing_key = '.'.join([project_name, module_name, 'serializer', serializer_name, action,
                            str(serializer.instance.pk)])
    json_renderer = JSONRenderer()
    hedwig_emitter.emit(routing_key, json_renderer.render(serializer.data))
Example #19
0
 def test_with_content_type_args(self):
     """
     Test JSON rendering with additional content type arguments supplied.
     """
     obj = {'foo': ['bar', 'baz']}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json; indent=2')
     self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr)
def _handle_error(status_code):
    info = {
        'status': status_code
    }

    renderer = JSONRenderer()
    content_type = '{media}; charset={charset}'.format(media=renderer.media_type, charset=renderer.charset)
    return HttpResponse(renderer.render(info), content_type=content_type, status=status_code)
 def test_with_content_type_args(self):
     """
     Test JSON rendering with additional content type arguments supplied.
     """
     obj = {"foo": ["bar", "baz"]}
     renderer = JSONRenderer()
     content = renderer.render(obj, "application/json; indent=2")
     self.assertEqual(strip_trailing_whitespace(content.decode("utf-8")), _indented_repr)
Example #22
0
def car(request):
    car = Car.objects.get(id=1)
    #print(vars(car.drivers.all()))
    #return HttpResponse('')
    serializer_car = CarSerializer(car)
    json_renderer = JSONRenderer()
    json_car = json_renderer.render(serializer_car.data)
    return HttpResponse(json_car, 200)
 def test_compact(self):
     renderer = JSONRenderer()
     data = OrderedDict([('a', 1), ('b', 2)])
     context = {'indent': 4}
     assert (
         renderer.render(data, renderer_context=context) ==
         b'{\n    "a": 1,\n    "b": 2\n}'
     )
 def test_u2028_u2029(self):
     # The \u2028 and \u2029 characters should be escaped,
     # even when the non-escaping unicode representation is used.
     # Regression test for #2169
     obj = {'should_escape': '\u2028\u2029'}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json')
     self.assertEqual(content, '{"should_escape":"\\u2028\\u2029"}'.encode('utf-8'))
def _handle_error(status_code):
    info = {'status': status_code}

    renderer = JSONRenderer()
    content_type = f'{renderer.media_type}; charset={renderer.charset}'
    return HttpResponse(renderer.render(info),
                        content_type=content_type,
                        status=status_code)
 def test_u2028_u2029(self):
     # The \u2028 and \u2029 characters should be escaped,
     # even when the non-escaping unicode representation is used.
     # Regression test for #2169
     obj = {'should_escape': '\u2028\u2029'}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json')
     self.assertEqual(content, '{"should_escape":"\\u2028\\u2029"}'.encode())
 def test_compact(self):
     renderer = JSONRenderer()
     data = OrderedDict([('a', 1), ('b', 2)])
     context = {'indent': 4}
     assert (
         renderer.render(data, renderer_context=context) ==
         b'{\n    "a": 1,\n    "b": 2\n}'
     )
 def test_without_content_type_args(self):
     """
     Test basic JSON rendering.
     """
     obj = {'foo': ['bar', 'baz']}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json')
     # Fix failing test case which depends on version of JSON library.
     self.assertEqual(content.decode('utf-8'), _flat_repr)
Example #29
0
    def get(self, request, format=None):
        params = request.query_params
        page = int(params.get("page", 1))  # default page number is 1
        per_page = int(params.get("per_page", 10))  # default per page is 10
        filter = params.get("filter", None)
        sort = params.get("sort", "desc")  # default is descending
        sort = '-time' if sort == "desc" else 'time'

        if filter == "group":
            try:
                membership = Memberships.objects.get(user_id=request.user.id)
                group = membership.group_id
                results = Memberships.objects.filter(group_id=group)

                users = []
                for m in results:
                    users.append(m.user_id)

                activities = Activity.objects.filter(
                    user__in=users).order_by(sort)
            except ObjectDoesNotExist as error:
                return Response(data={"detail": "User not in group."},
                                status=status.HTTP_400_BAD_REQUEST)

        elif filter is None:
            activities = Activity.objects.all().order_by(sort)

        else:
            all_activities = Activity.objects.select_related(
                'workout').order_by(sort)
            activities = list()
            for a in all_activities:
                if a.workout.category == filter:
                    activities.append(a)

        paginator = Paginator(activities,
                              per_page,
                              allow_empty_first_page=True)

        try:
            # Get requested page
            requested_page = paginator.page(page)
        except InvalidPage:
            raise Http404("Invalid Page")
        # Serialize requested page and return
        serializer = ActivityFullSerializer(data=requested_page, many=True)
        #serializer = ActivitySummarySerializer(data=requested_page, many=True)
        serializer.is_valid()

        renderer = JSONRenderer()
        activity_list = renderer.render(serializer.data).decode('utf-8')

        data = {}
        data["activities"] = json.loads(activity_list)
        data["next"] = requested_page.next_page_number(
        ) if requested_page.has_next() else None
        return JsonResponse(data, status=status.HTTP_200_OK, safe=False)
 def test_without_content_type_args(self):
     """
     Test basic JSON rendering.
     """
     obj = {'foo': ['bar', 'baz']}
     renderer = JSONRenderer()
     content = renderer.render(obj, 'application/json')
     # Fix failing test case which depends on version of JSON library.
     self.assertEqual(content.decode('utf-8'), _flat_repr)
 def test_without_content_type_args(self):
     """
     Test basic JSON rendering.
     """
     obj = {"foo": ["bar", "baz"]}
     renderer = JSONRenderer()
     content = renderer.render(obj, "application/json")
     # Fix failing test case which depends on version of JSON library.
     self.assertEqual(content.decode("utf-8"), _flat_repr)
Example #32
0
def channel_page(request, channel, allow_edit=False):
    channel_serializer = ChannelSerializer(channel)
    channel_list = Channel.objects.select_related('main_tree').prefetch_related('editors').prefetch_related('viewers')\
                            .exclude(id=channel.pk).filter(Q(deleted=False) & (Q(editors=request.user) | Q(viewers=request.user)))\
                            .annotate(is_view_only=Case(When(editors=request.user, then=Value(0)),default=Value(1),output_field=IntegerField()))\
                            .distinct().values("id", "name", "is_view_only").order_by('name')

    fileformats = get_or_set_cached_constants(FileFormat, FileFormatSerializer)
    licenses = get_or_set_cached_constants(License, LicenseSerializer)
    formatpresets = get_or_set_cached_constants(FormatPreset,
                                                FormatPresetSerializer)
    contentkinds = get_or_set_cached_constants(ContentKind,
                                               ContentKindSerializer)
    languages = get_or_set_cached_constants(Language, LanguageSerializer)

    json_renderer = JSONRenderer()

    return render(
        request, 'channel_edit.html', {
            "allow_edit":
            allow_edit,
            "channel":
            json_renderer.render(channel_serializer.data),
            "channel_id":
            channel.pk,
            "channel_name":
            channel.name,
            "channel_list":
            channel_list,
            "fileformat_list":
            fileformats,
            "license_list":
            licenses,
            "fpreset_list":
            formatpresets,
            "ckinds_list":
            contentkinds,
            "langs_list":
            languages,
            "current_user":
            json_renderer.render(CurrentUserSerializer(request.user).data),
            "preferences":
            request.user.preferences,
        })
Example #33
0
def upload_recap_json(self, pk):
    """Make a JSON object for a RECAP docket and upload it to IA"""
    # This is a pretty highly optimized query that uses only 13 hits to the DB
    # when generating a docket JSON rendering, regardless of how many related
    # objects the docket has such as docket entries, parties, etc.
    ds = Docket.objects.filter(pk=pk).select_related(
        'originating_court_information',
    ).prefetch_related(
        'panel',
        'parties__attorneys__roles',
        'parties__party_types__criminal_complaints',
        'parties__party_types__criminal_counts',
        # Django appears to have a bug where you can't defer a field on a
        # queryset where you prefetch the values. If you try to, it crashes.
        # We should be able to just do the prefetch below like the ones above
        # and then do the defer statement at the end, but that throws an error.
        Prefetch('docket_entries__recap_documents',
                 queryset=RECAPDocument.objects.all().defer('plain_text')))
    d = ds[0]
    renderer = JSONRenderer()
    json_str = renderer.render(
        IADocketSerializer(d).data,
        accepted_media_type='application/json; indent=2',
    )

    file_name = get_docket_filename(d.court_id, d.pacer_case_id, 'json')
    bucket_name = get_bucket_name(d.court_id, d.pacer_case_id)
    responses = upload_to_ia(
        self,
        identifier=bucket_name,
        files={file_name: StringIO(json_str)},
        title=best_case_name(d),
        collection=settings.IA_COLLECTIONS,
        court_id=d.court_id,
        source_url='https://www.courtlistener.com%s' % d.get_absolute_url(),
        media_type='texts',
        description="This item represents a case in PACER, the U.S. "
        "Government's website for federal case data. This "
        "information is uploaded quarterly. To see our most "
        "recent version please use the source url parameter, "
        "linked below. To see the canonical source for this data, "
        "please consult PACER directly.",
    )
    if responses is None:
        increment_failure_count(d)
        return

    if all(r.ok for r in responses):
        d.ia_upload_failure_count = None
        d.ia_date_first_changed = None
        d.filepath_ia_json = "https://archive.org/download/%s/%s" % (
            bucket_name, file_name)
        mark_ia_upload_needed(d)
        d.save()
    else:
        increment_failure_count(d)
Example #34
0
 def get_context_data(self, **kwargs):
   ctx = super(AttendancePersonal, self).get_context_data(**kwargs)
   listJSONRenderer = JSONRenderer()
   user = self.request.user
   trainee = trainee_from_user(user)
   if not trainee:
     trainee = Trainee.objects.filter(groups__name='attendance_monitors').first()
     ctx['actual_user'] = listJSONRenderer.render(TraineeForAttendanceSerializer(self.request.user).data)
   ctx.update(react_attendance_context(trainee))
   return ctx
Example #35
0
 def render(self, data=None, accepted_media_type=None, renderer_context=None):
     if isinstance(data, bytes):
         return data
     else:
         jr = JSONRenderer()
         self.media_type = jr.media_type
         self.format = jr.format
         self.charset = jr.charset
         self.render_style = jr.render_style
         return jr.render(data, accepted_media_type=accepted_media_type, renderer_context=renderer_context)
Example #36
0
 def form_valid(self, form):
     self.object = form.save()
     serializer = PictureSerializer(self.object)
     renderer = JSONRenderer()
     renderer.charset = "utf-8"
     json = renderer.render(serializer.data).decode("utf-8")
     change_object = Change.objects.create(model="Photo",
                                           type_of_change="create",
                                           content=json)
     return HttpResponseRedirect(self.get_success_url())
 def __init__(self, data, **kwargs):
     request = data.pop('request')
     mime = request.META.get('HTTP_ACCEPT')
     if mime == 'application/json':
         kwargs['content_type'] = 'application/json'
         data['error'] = data.pop('detail')
         renderer = JSONRenderer()
         content = renderer.render(data)
     else:
         kwargs['content_type'] = 'application/vnd.collection+json'
         self.exception = True
         renderer_context = {
             'request': request,
             'view': None,
             'response': self
         }
         renderer = CollectionJsonRenderer()
         content = renderer.render(data, renderer_context=renderer_context)
     super(RenderedResponse, self).__init__(content, **kwargs)
Example #38
0
 def add_to_queue(self, obj):
     if getattr(settings, 'UNIVERSAL_NOTIFICATIONS_TWILIO_ENABLE_PROXY', False):
         connection = StrictRedis(**private_settings.WS4REDIS_CONNECTION)
         r = JSONRenderer()
         json_data = r.render({'number': obj.from_phone})
         channel = getattr(settings, 'UNIVERSAL_NOTIFICATIONS_TWILIO_DISPATCHER_CHANNEL', '__un_twilio_dispatcher')
         connection.publish(channel, RedisMessage(json_data))
     else:
         self.send(obj.message)
         obj.message.save()
Example #39
0
def topics_json(request):
    """
    Generates a JSON response containing topic data.
    """
    queryset = Topic.objects.all()

    serializer = TopicSerializer(queryset, many=True)
    renderer = JSONRenderer()
    response_data = renderer.render(serializer.data,
                                    'application/json; indent=4')
    return HttpResponse(response_data, content_type="application/json")
 def handle(self, *args, **options):
     connection = StrictRedis(**private_settings.WS4REDIS_CONNECTION)
     numbers = PhonePendingMessages.objects.all().values_list(
         "from_phone", flat=True).distinct()
     for n in numbers:
         r = JSONRenderer()
         json_data = r.render({"number": n})
         channel = getattr(
             settings, "UNIVERSAL_NOTIFICATIONS_TWILIO_DISPATCHER_CHANNEL",
             "__un_twilio_dispatcher")
         connection.publish(channel, RedisMessage(json_data))
Example #41
0
 def delete(self, request, *args, **kwargs):
     self.object = self.get_object()
     success_url = self.get_success_url()
     serializer = SpeakerSerializer(self.object)
     renderer = JSONRenderer()
     renderer.charset = "utf-8"
     json = renderer.render(serializer.data).decode("utf-8")
     change_object = Change.objects.create(model="Speaker",
                                           type_of_change="delete",
                                           content=json)
     self.object.delete()
     return HttpResponseRedirect(success_url)
Example #42
0
    def authenticate(self, request):

        if not self.auth_detected(request):
            return None

        user = request.resolver_match.kwargs.get('project') or request.query_params['user']
        project_credentials = OAuthCredentials.get_credentials(user)

        if not project_credentials:
            raise exceptions.ValidationError(
                'project {0} has no OAuth credentials'.format(user)
            )
        parameters = OAuthCredentials.get_parameters(request.query_params)

        oauth_consumer_key = parameters['oauth_consumer_key']

        if oauth_consumer_key != project_credentials['consumer_key']:
            raise exceptions.AuthenticationFailed(
                'oauth_consumer_key does not match credentials for project {0}'.format(user)
            )

        uri = '{0}://{1}{2}'.format(
            settings.TREEHERDER_REQUEST_PROTOCOL,
            request.get_host(),
            request.path
        )
        # Construct the OAuth request based on the django request object
        json_renderer = JSONRenderer()
        req_obj = oauth.Request(
            method=request.method,
            url=uri,
            parameters=parameters,
            body=json_renderer.render(request.data),
        )
        server = oauth.Server()
        token = oauth.Token(key='', secret='')
        # Get the consumer object
        cons_obj = oauth.Consumer(
            oauth_consumer_key,
            project_credentials['consumer_secret']
        )
        # Set the signature method
        server.add_signature_method(oauth.SignatureMethod_HMAC_SHA1())

        try:
            # verify oauth django request and consumer object match
            server.verify_request(req_obj, cons_obj, token)
        except oauth.Error:
            raise exceptions.AuthenticationFailed(
                'Client authentication failed for project {0}'.format(user)
            )
        request.legacy_oauth_authenticated = True
        return (DummyUser(), None)
Example #43
0
    def render(self, data, media_type=None, renderer_context=None):

        # Return data, squeezing time dimension as this only works with 3D data
        if not data["time_request"]:
            self.render_style = 'binary'
            data["data"].data = np.squeeze(data["data"].data, axis=(0,))
        else:
            # This appears to contain time data. Error out
            renderer_context["response"].status_code = 400
            renderer_context["accepted_media_type"] = 'application/json'
            self.media_type = 'application/json'
            self.format = 'json'
            err_msg = {"status": 400, "message": "The cutout service JPEG interface does not support 4D cutouts",
                       "code": 2005}
            jr = JSONRenderer()
            return jr.render(err_msg, 'application/json', renderer_context)

        if renderer_context['view'].bit_depth != 8:
            # This renderer only works on uint8 data
            renderer_context["response"].status_code = 400
            renderer_context["accepted_media_type"] = 'application/json'
            self.media_type = 'application/json'
            self.format = 'json'
            err_msg = {"status": 400, "message": "The cutout service JPEG interface only supports uint8 image data",
                       "code": 2001}
            jr = JSONRenderer()
            return jr.render(err_msg, 'application/json', renderer_context)

        # Reshape matrix
        d_shape = data["data"].data.shape
        data["data"].data = np.reshape(data["data"].data, (d_shape[0] * d_shape[1], d_shape[2]), order="C")

        # Save to Image
        jpeg_image = Image.fromarray(data["data"].data)
        img_file = io.BytesIO()
        jpeg_image.save(img_file, "JPEG", quality=85)

        # Send file
        img_file.seek(0)
        return img_file.read()
Example #44
0
def channel_page(request, channel, allow_edit=False, staging=False):
    channel_serializer = ChannelSerializer(channel)
    channel_list = Channel.objects.select_related('main_tree').prefetch_related('editors').prefetch_related('viewers')\
                          .exclude(id=channel.pk).filter(Q(deleted=False) & (Q(editors=request.user) | Q(viewers=request.user)))\
                          .annotate(is_view_only=Case(When(editors=request.user, then=Value(0)), default=Value(1), output_field=IntegerField()))\
                          .distinct().values("id", "name", "is_view_only").order_by('name')

    fileformats = get_or_set_cached_constants(FileFormat, FileFormatSerializer)
    licenses = get_or_set_cached_constants(License, LicenseSerializer)
    formatpresets = get_or_set_cached_constants(FormatPreset, FormatPresetSerializer)
    contentkinds = get_or_set_cached_constants(ContentKind, ContentKindSerializer)
    languages = get_or_set_cached_constants(Language, LanguageSerializer)

    token = None
    if channel.secret_tokens.filter(is_primary=True).exists():
        token = channel.secret_tokens.filter(is_primary=True).first().token
        token = token[:5] + "-" + token[5:]

    json_renderer = JSONRenderer()
    return render(request, 'channel_edit.html', {"allow_edit": allow_edit,
                                                 "staging": staging,
                                                 "is_public": channel.public,
                                                 "channel": json_renderer.render(channel_serializer.data),
                                                 "channel_id": channel.pk,
                                                 "channel_name": channel.name,
                                                 "channel_list": channel_list,
                                                 "fileformat_list": fileformats,
                                                 "license_list": licenses,
                                                 "fpreset_list": formatpresets,
                                                 "ckinds_list": contentkinds,
                                                 "langs_list": languages,
                                                 "roles": json.dumps([r[0] for r in roles.choices]),
                                                 "mastery": json.dumps([m[0] for m in exercises.MASTERY_MODELS if m[0] != exercises.SKILL_CHECK]),
                                                 "current_user": json_renderer.render(CurrentUserSerializer(request.user).data),
                                                 "preferences": json.dumps(channel.content_defaults),
                                                 "messages": get_messages(),
                                                 "primary_token": token or channel.pk,
                                                 "title": settings.DEFAULT_TITLE,
                                                })
Example #45
0
def ActionCreate(request):
    if request.method == 'POST':
        Json_Data = request.body
        stream = io.BytesIO(Json_Data)
        pythondata = JSONParser().parse(stream)
        serializer = ActionSerializer(data=pythondata)
        if serializer.is_valid():
            serializer.save()
            res = {'msg': 'Data Created'}
            Json_Data = JSONRenderer().render(res)
            return HttpResponse(Json_Data, content_type='application/json')
        Json_Data = JSONRenderer.render(serializer.errors)
        return HttpResponse(json_data, content_type='application/json')
Example #46
0
 def get_context_data(self, **kwargs):
     listJSONRenderer = JSONRenderer()
     ctx = super(LeaveSlipUpdate, self).get_context_data(**kwargs)
     trainee = self.get_object().get_trainee_requester()
     kwargs['period'] = self.get_object().periods[0]
     ctx.update(react_attendance_context(trainee, request_params=kwargs))
     ctx['Today'] = self.get_object().get_date().strftime('%m/%d/%Y')
     ctx['SelectedEvents'] = listJSONRenderer.render(
         AttendanceEventWithDateSerializer(self.get_object().events,
                                           many=True).data)
     ctx['default_transfer_ta'] = self.request.user.TA or self.get_object(
     ).TA
     return ctx
Example #47
0
def assert_drf_json_equal(obj1, obj2):
    """
    Asserts that two objects are equal after a round trip through JSON serialization/deserialization.
    Particularly helpful when testing DRF serializers where you may get back OrderedDict and other such objects.

    Args:
        obj1 (object): the first object
        obj2 (object): the second object
    """
    json_renderer = JSONRenderer()
    converted1 = json.loads(json_renderer.render(obj1))
    converted2 = json.loads(json_renderer.render(obj2))
    assert converted1 == converted2
Example #48
0
def student_create(request):
    if request.method == "POST":
        json_data = request.body
        stream = io.BytesIO(json_data)
        python_data = JSONParser().parse(stream)
        serializer = StudentSerializer(data=python_data)
        if serializer.is_valid():
            serializer.save()
            res = {"msg": "data inserted successfully"}
            json_data = JSONRenderer.render(data=res)
            return HttpResponse(json_data, content_type='application/json')
        else:
            json_data = JSONRenderer().render(serializer.errors)
            return HttpResponse(json_data, content_type='application/json')
Example #49
0
    def get_context_data(self, **kwargs):

        context = super(ToolDetailView, self).get_context_data(**kwargs)
        user = self.request.user
        renderer = JSONRenderer()
        user_object = {}

        # add logged in user
        if user.is_authenticated():
            user_object = AccountMin(user).data

        context['user_json'] = renderer.render(user_object)

        return context
Example #50
0
def finalize(request):
    if not request.method == 'POST':
        return HttpResponseBadRequest('Request must use POST method')
    data = json.loads(request.body)
    trainee = get_object_or_404(Trainee, id=data['trainee']['id'])
    submitter = get_object_or_404(Trainee, id=data['submitter']['id'])
    period_start = dateutil.parser.parse(data['weekStart'])
    period_end = dateutil.parser.parse(data['weekEnd'])
    rolls_this_week = trainee.rolls.filter(date__gte=period_start,
                                           date__lte=period_end)
    if rolls_this_week.exists():
        rolls_this_week.update(finalized=True)
    else:
        # we need some way to differentiate between those who have finalized and who haven't if they have no rolls
        # add a dummy finalized present roll for this case
        event = trainee.events[0] if trainee.events else (
            Event.objects.first() if Event.objects else None)
        if not event:
            return HttpResponseServerError('No events found')
        roll = Roll(date=period_start,
                    trainee=trainee,
                    status='P',
                    event=event,
                    finalized=True,
                    submitted_by=submitter)
        roll.save()
    listJSONRenderer = JSONRenderer()
    if trainee.self_attendance:
        rolls = listJSONRenderer.render(
            RollSerializer(Roll.objects.filter(submitted_by=trainee),
                           many=True).data)
    else:
        rolls = listJSONRenderer.render(
            RollSerializer(Roll.objects.filter(trainee=trainee),
                           many=True).data)

    return JsonResponse({'rolls': json.loads(rolls)})
Example #51
0
    def get_context_data(self, project_id, *args, **kwargs):
        from localground.apps.site.api.serializers import \
            ProjectDetailSerializer
        from rest_framework.renderers import JSONRenderer

        context = super(MainView, self).get_context_data(*args, **kwargs)

        project = Project.objects.get(id=project_id)
        serializer = ProjectDetailSerializer(project, context={'request': {}})
        renderer = JSONRenderer()
        context.update({
            'project': renderer.render(serializer.data),
            'project_name': project.name
        })
        return context
Example #52
0
def discussion(request, pk):
    """ View an individual discussion. """
    if 'login_prefix' in request.session:
        del request.session['login_prefix']
    topic = get_object_or_404(Topic, pk=pk)
    r = JSONRenderer()
    comments = r.render([CommentSerializer(c).data
                        for c in topic.comments.all()])
    users = r.render([TopicUserSerializer(u).data for u in topic.users.all()])
    groups = r.render([GroupSerializer(g).data for g in topic.groups.all()])

    topic_user = None
    if request.user.is_authenticated():
        topic_user = request.user.topic_user(topic)

    return render(request, "discussion.html",
                  {"topic": topic,
                   "comments": comments,
                   "users": users,
                   "groups": groups,
                   "total_users": User.objects.all().count(),
                   "topic_user": topic_user,
                   "active_users": Profile.objects.filter(active=True).count()}
                  )
def student_update(request):
    if request.method == 'PUT':
        json_data = request.body
        stream = io.BytesIO(json_data)
        pydata = JSONParser().parse(stream)
        id = pydata.get('id')
        stu = Student.objects.get(id=id)
        serializer = StudentSerializer(stu, data=pydata, partial=True)
        if serializer.is_valid():
            serializer.save()
            response = {'msg': 'Data Updates'}
            json_data = JSONRenderer().render(response)
            return HttpResponse(json_data, content_type='application/json')
        else:
            json_data = JSONRenderer.render(serializer.errors)
            return HttpResponse(json_data, content_type='application/json')
Example #54
0
    def get_context_data(self, project_id, *args, **kwargs):
        from localground.apps.site.api.serializers import \
            ProjectDetailSerializer
        from rest_framework.renderers import JSONRenderer

        context = super(MainView, self).get_context_data(
            *args, **kwargs)

        project = Project.objects.get(id=project_id)
        serializer = ProjectDetailSerializer(
            project,
            context={'request': {}}
        )
        renderer = JSONRenderer()
        context.update({'project': renderer.render(serializer.data)})
        return context
def notifications(request):
    if not request.user.is_authenticated():
        return {"notifications": []}
    r = JSONRenderer()

    def clean_unicode(p):
        p["image"] = smart_text(p["image"])
        p["short"] = smart_text(p["short"])
        p["html"] = smart_text(p["html"])
        return p

    rr = [
        clean_unicode(NotificationSerializer(n).data)
        for n in request.user.notifications.all()
    ]
    return {"notifications": r.render(rr)}
Example #56
0
    def put(self, request, *args, **kwargs):
        json_data = request.body
        stream = io.BytesIO(json_data)
        python_data = JSONParser().parse(stream)
        _id = python_data.get("id")
        stu = Student.objects.get(id=_id)
        serialize = StudentSerializer(stu, data=python_data, partial=True)
        # partial is set to True when we are updating only partial data

        if serialize.is_valid():
            serialize.save()
            res = {"status": "Data updated !"}
            return JsonResponse(res, safe=False)

        json_response = JSONRenderer.render(serialize.errors)
        return HttpResponse(json_response, content_type="application/json")
Example #57
0
 def on_message(cls, websocket, message):
     print(message)
     pid = websocket.session.get("profile-id")
     profile = Profile.objects.get(id=pid)
     try:
         damp = json.loads(message)
     except json.JSONDecodeError:
         damp = {}
         print("error Decoding JSON")
     # registering to a room
     # adding a user to a room
     if not hasattr(websocket, "room"):
         room = damp.get("room")
         if room is None:
             websocket.send("{'error': 'Not Yet regiesterd in a room'}")
             websocket.close()
             return
         setattr(websocket, "room", room)
         if cls.rooms.get(room) is None:
             cls.rooms[room] = Game(room=room)
             cls.rooms[room].save()
         game = cls.rooms[room]
         if game.isStarted:
             websocket.send("{'error':'a game is in progress in that socket'}")
             websocket.close()
             return
         user_str = JSONRenderer().render(ProfileSerializer(profile).data)
         game.publish("{\"add_user\":"+user_str.decode("utf-8")+"}")
         game.add_user(profile)
         game.save()
         users_str = JSONRenderer().render(ProfileSerializer(game.users.all(), many=True).data).decode("utf-8")
         websocket.send("{\"users\": "+users_str+",\"room\":\""+room+"\"}")
     elif damp.get("ready_set") is not None:
         size = damp.get("ready_set")
         game = cls.rooms.get(websocket.room)
         if 3 <= size <= 8:
             game.dimen = size
             game.save()
             game.start_game()
             game.publish("{\"ready_set\":\"{}\"}".format(JSONRenderer.render(GameSerializer(game).data)))
         return
Example #58
0
    def wrapper(*args, **kwargs):
        """Return a JSON response if a 403 found.

        Executes the custom renderer if no 403 status code found.

        Args:

        Returns:
            (BaseRenderer)
        """

        # renderer_context is the 4th argument if not specified by keyword.
        if len(args) < 4 and kwargs is None:
            return fcn(*args, **kwargs)

        renderer_context = None
        if len(args) >= 4:
            renderer_context = args[3]
        elif kwargs is not None and 'renderer_context' in kwargs:
            renderer_context = kwargs['renderer_context']

        if renderer_context is None:
            return fcn(*args, **kwargs)

        # Check for presense of a Response object.
        if 'response' not in renderer_context:
            return fcn(*args, **kwargs)

        # Have a response, check for 403.
        if renderer_context['response'].status_code == 403:
            renderer_context['response']['Content-Type'] = 'application/json'
            obj = args[0]
            obj.media_type = 'application/json'
            obj.format = 'json'
            err_msg = {"status": 403, "message": "Access denied, are you logged in?",
                       "code": ErrorCodes.ACCESS_DENIED_UNKNOWN}
            jr = JSONRenderer()
            return jr.render(err_msg, 'application/json', renderer_context)

        return fcn(*args, **kwargs)
 def test_long_form(self):
     renderer = JSONRenderer()
     renderer.compact = False
     data = OrderedDict([('a', 1), ('b', 2)])
     assert renderer.render(data) == b'{"a": 1, "b": 2}'