コード例 #1
0
ファイル: handler.py プロジェクト: a5601564/wechat-django
 def dispatch(self, request):
     """
     :type request: wechat_django.models.request.WeChatMessageRequest
     """
     if not request.wechat.app.interactable():
         return response.HttpResponseNotFound()
     log = MessageHandler.handlerlog(request)
     try:
         self._verify(request)
         resp = super(Handler, self).dispatch(request)
         if not isinstance(resp, response.HttpResponseNotFound):
             log(logging.DEBUG, "receive a message")
         return resp
     except MultiValueDictKeyError:
         log(logging.WARNING, "bad request args", exc_info=True)
         return response.HttpResponseBadRequest()
     except BadMessageRequest:
         log(logging.WARNING, "bad request", exc_info=True)
         return response.HttpResponseBadRequest()
     except InvalidSignatureException:
         log(logging.WARNING, "invalid signature", exc_info=True)
         return response.HttpResponseBadRequest()
     except xmltodict.expat.ExpatError:
         log(logging.WARNING, "deserialize message failed", exc_info=True)
         return response.HttpResponseBadRequest()
     except MessageHandleError:
         log(logging.WARNING, "handle message failed", exc_info=True)
         return ""
     except:
         log(logging.ERROR, "an unexcepted error occurred", exc_info=True)
         return ""
コード例 #2
0
def predict(request):
    from pss_recognition.recognition.model_holder import ModelHolder
    from pss_recognition.recognition.recognition import transform_x, get
    import tensorflow as tf
    import numpy as np
    import json

    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            model = ModelHolder.get_model()
            label_to_name = json.loads(
                open('models/latest_label_to_name.json').read())
            handle_uploaded_file(request.FILES['picture'])
            with tf.device('/CPU:0'):
                transformed, _ = transform_x(np.asarray([get('image.jpg')]),
                                             np.asarray([0]))
                prediction = model.predict(transformed)
            label = np.argmax(prediction)
            probability = np.max(prediction)
            return response.JsonResponse({
                'name': label_to_name[str(label)],
                'probability': str(probability)
            })
    return response.HttpResponseBadRequest()
コード例 #3
0
    def correct_url(request, object_id):
        """修正请求url"""
        resolved_url = resolve(request.path_info)
        url_name = resolved_url.url_name
        url_kwargs = resolved_url.kwargs

        if object_id:
            # 对于只有object_id没有app_id的 重定向到有app_id的url
            modeladmin = view.__self__
            try:
                obj = modeladmin.model.objects.get(pk=object_id)
            except modeladmin.model.DoesNotExist:
                return response.HttpResponseBadRequest()

            url_kwargs.update(wechat_app_id=obj.app_id, object_id=object_id)
            return response.HttpResponseRedirect(reverse("admin:" + url_name,
                                                         kwargs=url_kwargs),
                                                 status=307)
        else:
            # 对于没有app_id的listview请求 优先取referrer的app_id
            referrer = request.META.get("HTTP_REFERER", "")
            path_info = urlparse(referrer).path
            try:
                app_id = resolve(path_info).kwargs["wechat_app_id"]
            except (KeyError, Resolver404):
                return response.HttpResponseNotFound()

            url_kwargs.update(wechat_app_id=app_id)
            resp = response.HttpResponseRedirect(
                reverse("admin:" + url_name, kwargs=url_kwargs))
            resp.status_code = 307
            return resp
コード例 #4
0
    def base_request(self,
                     request: Request,
                     request_schema: Schema,
                     response_schema: Schema,
                     logic_method: Callable[[object, Optional[str]], object],
                     is_paging: Optional[bool] = False,
                     code=None):
        request_obj, request_errors = self._request_schema(
            request, request_schema, code)
        if request_errors:
            return response.HttpResponseBadRequest(json.dumps(request_errors))

        response_data, response_errors = self._response_schema(
            request, request_obj, response_schema, logic_method, is_paging)
        if response_errors:
            if isinstance(response_errors, (str, dict)):
                return Response(response_errors,
                                status.HTTP_500_INTERNAL_SERVER_ERROR)
            else:
                return response_errors

        if request.method == 'POST':
            return Response(response_data, status.HTTP_201_CREATED)
        elif request.method == 'DELETE':
            return Response({}, status.HTTP_204_NO_CONTENT)
        else:
            return Response(response_data, status.HTTP_200_OK)
コード例 #5
0
def log_stream(request):
    if not request.is_ajax():
        return response.HttpResponseBadRequest(
            "Only Ajax requests are accepted.")

    if request.method != 'POST':
        return response.HttpResponseNotAllowed(request.method)

    search_str = request.POST.get("search")
    aggregates = []
    if search_str != "":
        aggregates.append({"$match": {"$text": {"$search": search_str}}})

    last_requests = log_records.aggregate(aggregates + [{
        "$sort": {
            "time": -1
        }
    }, {
        "$limit": 100
    }, {
        "$project": {
            "_id": 0
        }
    }])

    data = {"last_requests": list(last_requests)}

    return response.JsonResponse(data)
コード例 #6
0
ファイル: views.py プロジェクト: KIN26/comment_service
 def post(self, *args, **kwargs):
     if not self.request.is_ajax():
         return response.HttpResponseBadRequest()
     return JsonResponse({
         'data':
         ContentType.objects.get(pk=self.kwargs['content_type_id']).
         model_class().get_posts_with_comments(self.request.user)
     })
コード例 #7
0
def shorten(request):
    try:
        url = json.loads(str(request.body, encoding='utf-8'))['url']
        val(url)
        obj = URL.objects.get_or_create(original_link=url)
    except:
         return response.HttpResponseBadRequest()
    return response.JsonResponse({
        "short_link": request.build_absolute_uri(reverse("open", args=(obj[0].slug,))),
        "original_link": obj[0].original_link
    }) #status=201 if obj[1] else 200
コード例 #8
0
def request_month(request):
    if not request.is_ajax():
        return response.HttpResponseBadRequest(
            "Only Ajax requests are accepted.")

    if request.method != 'POST':
        return response.HttpResponseNotAllowed(request.method)

    year = request.POST.get("year")
    month = request.POST.get("month")

    return response.JsonResponse(requests_month_bar(year=year, month=month))
コード例 #9
0
ファイル: views.py プロジェクト: KIN26/comment_service
 def delete(self, request, *args, **kwargs):
     self.object = self.get_object()
     user = self.object.user
     if user == self.request.user or self.request.user.is_superuser:
         try:
             self.object.delete()
             send_notification('delete', request.user.id,
                               self.object.__dict__)
         except CommentTreeException as e:
             return response.HttpResponseBadRequest(e.message)
     else:
         raise PermissionDenied
     messages.success(self.request, _('Comment has been deleted'))
     return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))
コード例 #10
0
ファイル: admin.py プロジェクト: wangzb87/wechat-django
    def decorated_func(request, *args, **kwargs):
        app_id = kwargs.pop("wechat_app_id", None)
        object_id = kwargs.get("object_id", None)
        if not app_id:
            resolved_url = resolve(request.path_info)
            url_name = resolved_url.url_name
            url_kwargs = resolved_url.kwargs
            if object_id:
                # 对于只有object_id没有app_id的 重定向到有app_id的url
                modeladmin = view.__self__
                try:
                    obj = modeladmin.model.objects.get(pk=object_id)
                except modeladmin.model.DoesNotExist:
                    return response.HttpResponseBadRequest()

                url_kwargs.update(wechat_app_id=obj.app_id,
                                  object_id=object_id)
                return response.HttpResponseRedirect(
                    reverse("admin:" + url_name, kwargs=url_kwargs))
            else:
                # 对于没有app_id的listview请求 优先取referrer的app_id
                referrer = request.META.get("HTTP_REFERER", "")
                path_info = urlparse(referrer).path
                try:
                    app_id = resolve(path_info).kwargs["wechat_app_id"]
                except (KeyError, Resolver404):
                    return response.HttpResponseNotFound()

                url_kwargs.update(wechat_app_id=app_id)
                resp = response.HttpResponseRedirect(
                    reverse("admin:" + url_name, kwargs=url_kwargs))
                resp.status_code = 307
                return resp

        extra_context = kwargs.pop("extra_context", None) or {}
        try:
            app = site.wechat_site.app_queryset.get(id=app_id)
        except WeChatApp.DoesNotExist:
            return response.HttpResponseNotFound()

        # 附上app
        request.app = app
        request.app_id = app_id
        # 增加模板context
        extra_context.update(wechat_app=app, wechat_app_id=app_id)
        kwargs["extra_context"] = extra_context
        return view(request, *args, **kwargs)
コード例 #11
0
def get_langs_php(request, format='json'):
    if format == 'jsonp' and 'callback' not in request.GET:
        return response.HttpResponseBadRequest()

    lang_to_name = {
        "en": "English",
        "de": "Deutsch",
        "dk": "Dansk",
        "es": "Español",
        "fa": "فارسی",
        "fr": "Français",
        "it": "Italiano",
        "pl": "Polskie",
        "pt": "Português",
        "sv": "Svenska"
    }

    languages = TranslatedFormat.objects.values_list('language', flat=True).distinct()
    if format in ('json', 'jsonp'):
        content_type = 'application/json'
        ret = {"languages": []}
        for language in languages:
            ret["languages"].append({
                "key": language,
                "name": lang_to_name.get(language, ''),
                "default": True if language == 'en' else False
            })
        ret = json.dumps(ret)
        if format == 'jsonp':
            ret = request.GET.get('callback') + '(' + ret + ')'
    else:
        content_type = 'application/xml'
        ret = "<languages>"
        for language in languages:
            ret += '\n  <language key="{}"{}>{}</language>'.format(
                language,
                ' default="1"' if language == 'en' else "",
                lang_to_name.get(language, '')
            )
        ret += "\n</languages>"

    return response.HttpResponse(ret, content_type=content_type)
コード例 #12
0
def verify_invitation_code(request):
    """Check if the phone verify code is right"""
    if len(request.body) > 0:
        dic = eval(request.body)
        code = str(dic.get('invitation_code'))
        content = ''
        try:
            result = chakra.invcode_check(request, code)
            if not result:
                content = _("Wrong Code")
            else:
                if (result['status'] != INVCODE_STATUS[0]):
                    content = _('Wrong Code')
                else:
                    content = "True"
            return HttpResponse(content, content_type="application/json")
        except HTTPNotFound:
            content = _("Wrong Code")
            return HttpResponse(content, content_type="application/json")
        except:
            return response.HttpResponseServerError(content)
    return response.HttpResponseBadRequest("invitation code is null")
コード例 #13
0
    def _response_schema(self,
                         request,
                         request_obj,
                         response_schema,
                         logic_method,
                         is_paging=False):
        try:
            if is_paging:
                path = self._parse_path(request)
                response_obj = logic_method(request_obj, path)
            else:
                response_obj = logic_method(request_obj)

        except RequestParameterException as e:
            return {}, response.HttpResponseBadRequest(content=e)
        except ResourceNotFoundException as e:
            return {}, response.HttpResponseNotFound(content=e)
        except ForbiddenException as e:
            return {}, response.HttpResponseForbidden(content=e)
        except ConflictException as e:
            return {}, response.HttpResponse(content=e,
                                             status=status.HTTP_409_CONFLICT)
        return response_schema.dump(response_obj)
コード例 #14
0
def get_langs_php(request, format='json'):
    if format == 'jsonp' and 'callback' not in request.GET:
        return response.HttpResponseBadRequest()

    if format in ('json', 'jsonp'):
        content_type = 'application/json'
        ret = json.dumps(
            {"languages": [{
                "key": "en",
                "name": "English",
                "default": True
            }]})
        if format == 'jsonp':
            ret = request.GET.get('callback') + '(' + ret + ')'
    else:
        content_type = 'application/xml'
        ret = textwrap.dedent("""
            <languages>
                <language key="en" default="1">English</language>
            </languages>
        """)

    return response.HttpResponse(ret, content_type=content_type)
コード例 #15
0
def semantic_query(request, format='json'):
    switcher = request.GET.get('switcher')
    if format not in ('csv', 'json', 'xml', 'jsonp', 'kml', 'poi'):
        return response.HttpResponseBadRequest()
    if not switcher:
        return response.HttpResponseBadRequest()
    if switcher not in valid_switcher_params:
        return response.HttpResponseBadRequest()
    if format in ('kml', 'poi') and switcher != 'GetSearchResults':
        return response.HttpResponseBadRequest()
    if format != 'csv' and switcher == 'GetNAWSDump':
        return response.HttpResponseBadRequest()
    if format == 'jsonp' and 'callback' not in request.GET:
        return response.HttpResponseBadRequest()

    params = request.GET.copy()

    ret = None
    if format == 'json':
        content_type = 'application/json'
    elif format == 'jsonp':
        content_type = 'text/javascript'
    elif format in ('csv', 'poi'):
        content_type = 'text/csv'
    elif format in ('xml', 'kml'):
        content_type = 'application/xml'

    language = params.get('lang_enum', default='en')

    if switcher == 'GetSearchResults':
        if format in ('kml', 'poi') and 'data_field_key' in params:
            # Invalid parameter for kml and poi, as they always returns the same fields.
            params.pop('data_field_key')
        meetings = get_search_results(params)
        retrieve_formats(language)
        data_field_keys = extract_specific_keys_param(params)
        if format in ('json', 'jsonp', 'xml'):
            if 'get_used_formats' in params or 'get_formats_only' in params:
                formats = TranslatedFormat.objects.filter(language=language, format__id__in=meetings.values('formats'))
                formats = formats.select_related('format', 'format__root_server')
            if format in ('json', 'jsonp'):
                if 'get_used_formats' in params or 'get_formats_only' in params:
                    if 'get_formats_only' in params:
                        ret = models_to_json(formats, format_field_map, parent_keys='formats')
                    else:
                        ret = models_to_json(
                            (meetings, formats),
                            (meeting_field_map, format_field_map),
                            related_models_filter_function=(None, None),
                            parent_keys=('meetings', 'formats'),
                            return_attrs=(data_field_keys, None)
                        )
                else:
                    ret = models_to_json(
                        meetings,
                        meeting_field_map,
                        related_models_filter_function=None,
                        return_attrs=data_field_keys
                    )
            else:
                xmlns = '{}://{}'.format(request.scheme, request.get_host())
                if 'get_used_formats' in params or 'get_formats_only' in params:
                    if 'get_formats_only' in params:
                        ret = models_to_xml(formats, format_field_map, 'formats', xmlns=xmlns, schema_name='GetFormats')
                    else:
                        ret = models_to_xml(
                            meetings, meeting_field_map, 'meetings',
                            related_models_filter_function=None,
                            xmlns=xmlns,
                            schema_name=switcher,
                            sub_models=formats,
                            sub_models_field_map=format_field_map,
                            sub_models_element_name='formats'
                        )
                else:
                    ret = models_to_xml(
                        meetings, meeting_field_map, 'meetings',
                        related_models_filter_function=None,
                        xmlns=xmlns, schema_name=switcher
                    )
        elif format == 'kml':
            meetings = apply_kml_annotations(meetings)
            ret = models_to_xml(meetings, meeting_kml_field_map, 'kml.Document',
                                model_name='Placemark', show_sequence_index=False)
        elif format == 'poi':
            meetings = meetings.order_by('weekday')
            meetings = apply_kml_annotations(meetings)
            ret = models_to_csv(meetings, meeting_poi_field_map)
        elif format == 'csv':
            ret = models_to_csv(meetings, meeting_field_map, data_field_keys)
    else:
        xml_schema_name = None
        if switcher == 'GetNAWSDump':
            sb_id = params.get('sb_id', None)
            if not sb_id:
                return response.HttpResponseBadRequest()
            sb_ids = [sb for sb in get_child_service_bodies([sb_id])]
            qs = Meeting.objects.filter(deleted=False, published=True)
            qs = qs.filter(service_body_id__in=sb_ids, service_body__world_id__isnull=False)
            qs = qs.exclude(service_body__world_id='')
            qs = qs.select_related('meetinginfo', 'service_body', 'root_server')
            qs = qs.prefetch_related('formats', 'formats__translatedformats')
            qs_union = Meeting.objects.filter(Q(deleted=True) | Q(published=False))
            qs_union = qs_union.filter(service_body_id__in=sb_ids, service_body__world_id__isnull=False)
            qs_union = qs_union.exclude(service_body__world_id='')
            qs_union = qs_union.select_related('meetinginfo', 'service_body', 'root_server')
            qs_union = qs_union.prefetch_related('formats', 'formats__translatedformats')
            models = qs.union(qs_union, all=True)
            field_map = naws_dump_field_map
        elif switcher == 'GetFormats':
            models = get_formats(params)
            field_map = format_field_map
            xml_node_name = 'formats'
            xml_schema_name = switcher
        elif switcher == 'GetServiceBodies':
            models = get_service_bodies(params)
            field_map = service_bodies_field_map
            xml_node_name = 'serviceBodies'
        elif switcher == 'GetFieldKeys':
            models = [{'key': k, 'description': d} for k, d in field_keys_with_descriptions.items()]
            field_map = {'key': ('key',), 'description': ('description',)}
            xml_node_name = 'fields'
        elif switcher == 'GetFieldValues':
            meeting_key = params.get('meeting_key')
            if meeting_key in field_keys:
                models = get_field_values(params)
                field_map = {meeting_key: (meeting_field_map.get(meeting_key)[0],), 'ids': ('ids',)}
                xml_node_name = 'fields'
            else:
                return response.HttpResponseBadRequest()
        elif switcher == 'GetServerInfo':
            models = [{
                'version': '5.0.0',
                'versionInt': '5000000',
                'langs': 'en',
                'nativeLang': 'en',
                'centerLongitude': -118.563659,
                'centerLatitude': 34.235918,
                'centerZoom': 6,
                'available_keys': ','.join(field_keys),
                'changesPerMeeting': '0',
                'google_api_key': settings.GOOGLE_MAPS_API_KEY,
            }]
            field_map = server_info_field_map
            xml_node_name = 'serverInfo'

        if format in ('json', 'jsonp'):
            ret = models_to_json(models, field_map)
        elif format == 'csv':
            ret = models_to_csv(models, field_map)
        elif format == 'xml':
            xmlns = '{}://{}'.format(request.scheme, request.get_host())
            ret = models_to_xml(models, field_map, xml_node_name, xmlns=xmlns, schema_name=xml_schema_name)

    if format == 'jsonp':
        return JSONPStreamingHttpResponse(ret, content_type=content_type, callback=params.get('callback'))

    r = response.StreamingHttpResponse(ret, content_type=content_type)
    if format == 'poi':
        r['Content-Disposition'] = 'attachment; filename="SearchResultsPOI.csv"'
    elif format == 'kml':
        r['Content-Disposition'] = 'attachment; filename="SearchResults.kml"'
    elif format == 'csv' and switcher == 'GetNAWSDump':
        r['Content-Disposition'] = 'attachment; filename="BMLT.csv"'

    return r
コード例 #16
0
def handler400(request, *args, **kwargs):
    return response.HttpResponseBadRequest()
コード例 #17
0
ファイル: views.py プロジェクト: KIN26/comment_service
 def dispatch(self, request, *args, **kwargs):
     if request.method == 'POST' and not request.is_ajax():
         return response.HttpResponseBadRequest()
     return super().dispatch(request, *args, **kwargs)