def handler(request):
        msg = str(request.exception.message)
        log.info("xyz_handler (%s): %s" % (status, str(msg)))
        # request.response.status = status
        # request.response.content_type = "application/json"
        body = status_body(success=False, message=msg, to_json=True)

        rc = Response(body)
        rc.status = status
        rc.content_type = "application/json"

        return rc
示例#2
0
def graphql_api(request):
    slug = request.matchdict['discussion_slug']
    # Check permission
    discussion = find_discussion_from_slug(slug)
    if discussion is None:
        raise HTTPUnauthorized()

    # Check if this discussion has CORS enabled
    cors_pref = discussion.preferences['graphql_valid_cors']
    has_cors = cors_pref and len(cors_pref) > 0
    cors_string = str(",".join(cors_pref))
    cors_headers = [('Access-Control-Allow-Origin', cors_string),
                    ('Access-Control-Allow-Headers', 'Content-Type, Cookie'),
                    ('Access-Control-Allow-Methods', 'POST, OPTIONS')]
    # Response for preflight-CORS requests
    # No authentication needed
    if has_cors:
        if request.method == 'OPTIONS':
            response = Response(status=200, body=b'')
            response.headerlist = []
            response.headerlist.extend(cors_headers)
            return response

    discussion_id = discussion.id
    # set discussion_id in request.matchdict which is use as context_value
    request.matchdict['discussion_id'] = discussion_id
    user_id = request.authenticated_userid or Everyone
    permissions = get_permissions(user_id, discussion_id)
    # don't check read permission for TextFields query needed on the signup
    # page because we don't have read permission on private debate
    check_read_permission = True
    if request.content_type == 'application/json' and u'query' in request.json_body and (
            request.json_body['query'].startswith(u'query TextFields(') or
            request.json_body['query'].startswith(u'query UpdateShareCount(')
            or request.json_body['query'].startswith(u'query TabsCondition(')
            or request.json_body['query'].startswith(u'query LegalContents(')
            or request.json_body['query'].startswith(
                u'query DiscussionPreferences')):
        check_read_permission = False

    if check_read_permission and not discussion.user_can(
            user_id, CrudPermissions.READ, permissions):
        raise HTTPUnauthorized()

    middleware = MiddlewareManager(LoggingMiddleware(),
                                   ReadOnlyMiddleware(),
                                   wrap_in_promise=False)
    solver = graphql_wsgi_wrapper(Schema, middleware=middleware)
    response = solver(request)
    if has_cors:
        response.headerlist.extend(cors_headers)
    return response
示例#3
0
文件: view.py 项目: shangxor/assembl
def graphql_api(request):
    slug = request.matchdict['discussion_slug']
    # Check permission
    discussion = models.Discussion.query.filter(
        models.Discussion.slug == slug).one()
    if discussion is None:
        raise HTTPUnauthorized()

    # Check if this discussion has CORS enabled
    cors_pref = discussion.preferences['graphql_valid_cors']
    has_cors = cors_pref and len(cors_pref) > 0
    cors_string = str(",".join(cors_pref))
    cors_headers = [
        ('Access-Control-Allow-Origin', cors_string),
        ('Access-Control-Allow-Headers', 'Content-Type, Cookie'),
        ('Access-Control-Allow-Methods', 'POST, OPTIONS')
    ]
    # Response for preflight-CORS requests
    # No authentication needed
    if has_cors:
        if request.method == 'OPTIONS':
            response = Response(status=200, body=b'')
            response.headerlist = []
            response.headerlist.extend(cors_headers)
            return response

    discussion_id = discussion.id
    # set discussion_id in request.matchdict which is use as context_value
    request.matchdict['discussion_id'] = discussion_id
    user_id = request.authenticated_userid or Everyone
    permissions = get_permissions(user_id, discussion_id)
    # don't check read permission for TextFields query needed on the signup
    # page because we don't have read permission on private debate
    check_read_permission = True
    if request.content_type == 'application/json' and u'query' in request.json_body and (
        request.json_body['query'].startswith(u'query TextFields(') or
            request.json_body['query'].startswith(u'query TabsCondition(') or
            request.json_body['query'].startswith(u'query LegalContents(')):
        check_read_permission = False

    if check_read_permission and not discussion.user_can(user_id, CrudPermissions.READ, permissions):
        raise HTTPUnauthorized()

    # Using a middleware transforms the request to a promise that
    # doesn't play nice with multiprocesses or multithreading and sqlalchemy session.
    # We monkey patch get_graphql_params for logging instead.
    solver = graphql_wsgi_wrapper(Schema)  # , middleware=[LoggingMiddleware()])
    response = solver(request)
    if has_cors:
        response.headerlist.extend(cors_headers)
    return response
示例#4
0
 def stub_view(request):
     what = request.matchdict["what"]
     if what == "ok":
         return Response(status=200)
     if what == "notfound":
         return Response(status=404)
     if what == "forbidden":
         return Response(status=403)
     if what == "exc_forbidden":
         raise HTTPForbidden
     if what == "impl_forbidden":
         request.response.status_code = 403
         return ""
     raise HTTPNotFound
示例#5
0
def graphql_api(request):
    if request.method == 'OPTIONS':
        response = Response(status=200, body=b'')
        response.headerlist = []  # we have to reset headerlist
        response.headerlist.extend((
            ('Access-Control-Allow-Origin', '*'),
            ('Access-Control-Allow-Headers', 'Content-Type'),
        ))
    else:
        solver = graphql_wsgi(schema)
        response = solver(request)
        response.headerlist.append(('Access-Control-Allow-Origin', '*'))

    return response
    def handler(request):
        msg = str(request.exception.message)
        log.info("xyz_handler (%s): %s" % (status, str(msg)))
        # request.response.status = status
        # request.response.content_type = "application/json"
        body = status_body(
            status="error",
            message=msg,
        )

        rc = Response(body)
        rc.status = status
        rc.content_type = "application/json"

        return rc
示例#7
0
    def comment_authors(self):
        authors = ""
        for comment in DB.get_all(Comment):
            comment = comment.serialize()
            if comment['author'] not in authors:
                authors += "<li>"+comment['author']+"</li>"

        return Response(authors, content_type = 'text/plain')
示例#8
0
def cors_helper(request, response=None):
    if response is None:
        response = Response()
    request_headers = request.headers['Access-Control-Request-Headers'].lower()
    request_headers = re.findall('\w(?:[-\w]*\w)', request_headers)
    response_headers = ['access-control-allow-origin']
    for req_acoa_header in request_headers:
        if req_acoa_header not in response_headers:
            response_headers.append(req_acoa_header)
    response_headers = ','.join(response_headers)
    response.headers.update({
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Headers': '%s' % response_headers
        })
    response.status_int = 204
    print response.headers
    return response
示例#9
0
    def login(self, request):
        log_debug = self.log_debug
        if log_debug:
            log.debug('Handling OpenID login')

        # Load default parameters that all Auth Responders take
        openid_url = request.params.get('openid_identifier')

        # Let inherited consumers alter the openid identifier if desired
        openid_url = self._lookup_identifier(request, openid_url)

        if not openid_url:
            log.error('Velruse: no openid_url')
            raise MissingParameter('No openid_identifier was found')

        openid_session = {}
        oidconsumer = consumer.Consumer(openid_session, self.openid_store)

        try:
            if log_debug:
                log.debug('About to try OpenID begin')
            authrequest = oidconsumer.begin(openid_url)
        except consumer.DiscoveryFailure:
            if log_debug:
                log.debug('OpenID begin DiscoveryFailure')
            raise

        if authrequest is None:
            if log_debug:
                log.debug('OpenID begin returned empty')
            raise ThirdPartyFailure("OpenID begin returned nothing")

        if log_debug:
            log.debug('Updating authrequest')

        # Update the authrequest
        self._update_authrequest(request, authrequest)

        return_to = request.route_url(self.process_url)

        # OpenID 2.0 lets Providers request POST instead of redirect, this
        # checks for such a request.
        if authrequest.shouldSendRedirect():
            if log_debug:
                log.debug('About to initiate OpenID redirect')
            redirect_url = authrequest.redirectURL(realm=self.realm,
                                                   return_to=return_to,
                                                   immediate=False)
            request.session['openid_session'] = openid_session
            return HTTPFound(location=redirect_url)
        else:
            if log_debug:
                log.debug('About to initiate OpenID POST')
            html = authrequest.htmlMarkup(
                realm=self.realm, return_to=return_to, immediate=False)
            request.session['openid_session'] = openid_session
            return Response(body=html)
示例#10
0
def request_factory(environ):
    request = Request(environ)
    if request.is_xhr:
        request.response = Response()
        request.response.headerlist = []
        request.response.headerlist.extend(
            (('Access-Control-Allow-Origin', '*'), ('Content-Type',
                                                    'application/json')))
    return request
示例#11
0
def view(request, sid):
    res = Response()
    res = sio.emit("data", room=sid)

    cnt = 0
    while True:
        cnt += 1
        tm = time.time()
        return sio.emit("sine", {"value": (tm * 1000,
                                           math.sin(tm))})
示例#12
0
 def search_raw(self):
     """
     Search results without template (raw Response() object).
     Templates help escaping characters.
     """
     query = self.request.params.get('q', '')
     #query = html.escape(query)
     content = """
 <html>
     <body>
     <p>Your query is: {0}</p>
     </body>
 </html>""".format(query)
     return Response(content)
def notfound_404_view(request):
    """A custom 404 view returning JSON error message body instead of HTML.

    :returns: a JSON response with the body::

        json.dumps(dict(error="URI Not Found '...'"))

    """
    msg = str(request.exception.message)
    get_log().info("notfound_404_view: URI '%s' not found!" % str(msg))
    request.response.status = httplib.NOT_FOUND
    request.response.content_type = "application/json"
    body = status_body(
        status="error",
        message="URI Not Found '%s'" % msg,
    )
    return Response(body)
示例#14
0
    def get_response(self, filename, content_type, data):
        """Prepare the response."""
        response = Response()
        header_list = [
            ('Content-Disposition', 'attachment; filename={filename}'.format(
                filename=filename
            )),
            ('Pragma', 'no-cache'),
            ('Expires', 'Fri, 29 Mar 2012 17:30:00 GMT'),
        ]

        response.status_int = 200
        response.charset = 'utf-8'
        response.content_type = content_type
        response.text = data
        response.headerlist = header_list
        return response
示例#15
0
def request_factory(environ):
    """Factory function that adds the headers necessary for Cross-domain calls.

    Adapted from:
       http://stackoverflow.com/questions/21107057/pyramid-cors-for-ajax-requests
    """
    request = Request(environ)
    if request.is_xhr:
        request.response = Response()
        request.response.headerlist = []
        request.response.headerlist.extend(
            (
                ('Access-Control-Allow-Origin', '*'),
                ('Access-Control-Allow-Credentials', 'true'),
                ('Access-Control-Max-Age', 86400),
                ('Content-Type', 'application/json')
            )
        )
    return request
示例#16
0
    def category(self):
        """
        Probability histogram for category
        """
        id_doc = self.request.matchdict.get('id_doc')
        start_date = self.request.params.get('start_date')
        end_date = self.request.params.get('end_date')

        # Get starting date
        if start_date is None:
            return Response("Start date mandatory", status=500)
        else:
            start_date_obj = datetime.datetime.strptime(start_date, "%Y-%m-%d")

        # Get end date
        if end_date is None:
            end_date_obj = datetime.datetime.now()
            end_date = end_date_obj.strftime("%Y-%m-%d")
        else:
            end_date_obj = datetime.datetime.strptime(end_date, "%Y-%m-%d")

        status_list = self.status_base.get_status_probability(
            category_id_doc=id_doc,
            start_date=start_date_obj,
            end_date=end_date_obj)

        if len(status_list) == 0:
            return {}

        # Transform results in list of values
        saida = list()
        for status in status_list['results']:
            if status is not None:
                saida.append(status['category']['category_probability'])

        # Plot Histogram
        data = Data([Histogram(x=saida)])

        filename = "category-" + id_doc + "-" + start_date + "-" + end_date
        plot_url = py.plot(data, filename=filename)

        return {"graph_url": plot_url, "category_id_doc": id_doc}
示例#17
0
def graphqlview(context, request):  #pylint: disable=W0613
    token = request.headers.get('X-Api-Key', '')
    is_private = getattr(request.root, 'only_for_members', False)
    if is_private and not auth_user(token, request):
        response = HTTPUnauthorized()
        response.content_type = 'application/json'
        return response

    if request.method == 'OPTIONS':
        response = Response(status=200, body=b'')
        response.headerlist = []  # we have to reset headerlist
        response.headerlist.extend((
            ('Access-Control-Allow-Origin', '*'),
            ('Access-Control-Allow-Headers', 'Content-Type'),
        ))
    else:
        solver = graphql_wsgi(schema)
        response = solver(request)
        response.headerlist.append(('Access-Control-Allow-Origin', '*'))

    return response
示例#18
0
 def second_view(context, request):
     return Response(u'second')
示例#19
0
 def _do(method, headers, credentials=False, settings=SETTINGS):
     req = Request({}, method=method, headers=headers)
     req.response = Response()
     set_cors_headers(settings, req, "foo", credentials, req.response)
     return req.response.headers
示例#20
0
 def foo(context, request):
     called.append(True)
     return Response(u"")
示例#21
0
 def first_view(context, request):
     return Response(u'first')
示例#22
0
 def my_viewlet(request):
     assert hasattr(request, 'registry')
     assert hasattr(request, 'context')
     assert hasattr(request, 'user')
     return Response(u"Hello world!")
示例#23
0
 def foo(context, request):
     bar = request.POST['bar']
     return Response(u"{0} world!".format(bar))
示例#24
0
 def foo(context, request):
     greeting = request.POST['greeting']
     return Response(u"{0} world!".format(greeting))
示例#25
0
 def special(context, request):
     return Response(u"Hello world!")
示例#26
0
 def foo(context, request):
     slot = request.kotti_slot
     return Response(f"I'm in slot {slot}.")
示例#27
0
 def foo(context, request):
     bar = request.POST["bar"]
     return Response(f"{bar} world!")
示例#28
0
 def foo(context, request):
     slot = request.kotti_slot
     return Response(u"I'm in slot {0}.".format(slot))
示例#29
0
def no_slash(request):
    return Response("No slash")
示例#30
0
    def category_list(self):
        """
        Probability histogram for category
        """
        start_date = self.request.params.get('start_date')
        end_date = self.request.params.get('end_date')

        # Get starting date
        if start_date is None:
            return Response("Start date mandatory", status=500)
        else:
            start_date_obj = datetime.datetime.strptime(start_date, "%Y-%m-%d")

        # Get end date
        if end_date is None:
            end_date_obj = datetime.datetime.now()
            end_date = end_date_obj.strftime("%Y-%m-%d")
        else:
            end_date_obj = datetime.datetime.strptime(end_date, "%Y-%m-%d")

        categories = self.crimes_base.get_all()

        graph_list = list()
        for category in categories:
            id_doc = category['_metadata']['id_doc']
            # Render all categories
            status_list = self.status_base.get_status_probability(
                category_id_doc=id_doc,
                start_date=start_date_obj,
                end_date=end_date_obj)

            if len(status_list) == 0:
                return {}

            # Transform results in list of values
            saida = list()
            for status in status_list['results']:
                if status is not None:
                    saida.append(status['category']['category_probability'])

            # Plot Histogram
            graph = Histogram(
                x=saida,
                opacity=0.75,
                name=category['category_pretty_name'],
                xbins=XBins(
                    # start=-3.2,
                    # end=2.8,
                    # size=0.2
                ),
                marker=Marker(color=category['color']),
            )

            graph_list.append(graph)

        data = Data(graph_list)
        layout = Layout(
            title="""Probabilidade na Categoria entre %s e %s""" %
            (start_date, end_date),
            xaxis=XAxis(title='Probabilidade'),
            yaxis=YAxis(title='Ocorrências'),
            barmode='overlay',
            # bargap=0.25,
            # bargroupgap=0.3
        )

        filename = "category-" + start_date + "-" + end_date
        fig = Figure(data=data, layout=layout)
        plot_url = py.plot(fig, filename=filename, auto_open=False)

        return {'graph_url': plot_url, 'graph_id': filename}
示例#31
0
def has_slash(request):
    return Response("Has slash")
示例#32
0
    def states(self):
        """
        Generate graphics for states
        """
        start_date = self.request.params.get('start_date')
        end_date = self.request.params.get('end_date')

        # Get starting date
        if start_date is None:
            return Response("Start date mandatory", status=500)
        else:
            start_date_obj = datetime.datetime.strptime(start_date, "%Y-%m-%d")

        # Get end date
        if end_date is None:
            end_date_obj = datetime.datetime.now()
            end_date = end_date_obj.strftime("%Y-%m-%d")
        else:
            end_date_obj = datetime.datetime.strptime(end_date, "%Y-%m-%d")

        analysis = self.analytics_base.get_state_analysis(
            start_date=start_date_obj, end_date=end_date_obj)

        # Brasil states list
        uf_list = sorted([
            "GO", "MT", "MS", "DF", "AM", "AC", "RO", "RR", "AP", "TO", "PA",
            "MA", "PI", "CE", "RN", "PB", "PE", "SE", "AL", "BA", "SP", "MG",
            "RJ", "ES", "PR", "SC", "RS"
        ])

        # Now create graph for all states
        trace_list = list()
        for category_id_doc in sorted(analysis.keys()):
            if category_id_doc == 'total_status':
                continue

            category = self.crimes_base.get_document(category_id_doc)

            bary = list()
            for uf in uf_list:
                if analysis[category_id_doc].get(uf) is None:
                    bary.append(0)
                else:
                    # Add these to the bar
                    bary.append(analysis[category_id_doc][uf])

            # Create trace bar to add to the graph
            trace = Bar(x=uf_list,
                        y=bary,
                        name=category['category_pretty_name'])
            trace_list.append(trace)

        # Ploth graph bar with title
        data = Data(trace_list)
        layout = Layout(
            barmode='stack',
            title=
            """Crimes identificados por estado entre %s e %s. Total: %s encontrados"""
            % (start_date, end_date, analysis['total_status']))
        fig = Figure(data=data, layout=layout)
        filename = """states-between-%s-and-%s""" % (start_date, end_date)
        plot_url = py.plot(fig, filename=filename, auto_open=False)

        return {'graph_url': plot_url, 'graph_id': filename}