python flask make_response的应用示例

Python flask.make_response Examples


The following are 31 code examples for showing how to use flask.make_response. They are extracted from open source Python projects. You can click vote to vote up the examples you like, or click vote to vote down the exmaples you don't like. Your votes will be used in our system to extract more high-quality examples.

You may also check out all available functions/classes of the module flask , or try the search function  .


Example 1

From project http-fun-master, under directory , in source file server.py.

Score: 16
vote
vote
def cookies_set():
    name = request.args.get("name", "Test")
    resp = make_response("Name accepted")
    resp.set_cookie("name", name)
    return resp


 

Example 2

From project http-fun-master, under directory , in source file server.py.

Score: 13
vote
vote
def session_secret():
    name = session.get("username", False)
    if not name:
        abort(401)

    resp = make_response("""Hello {},
You logged in at {}
""".format(name, session.get("login-time")))
    return resp


 

Example 3

From project mybolg-master, under directory libs/flask/testsuite, in source file basic.py.

Score: 13
vote
vote
def test_make_response(self):
        app = flask.Flask(__name__)
        with app.test_request_context():
            rv = flask.make_response()
            self.assert_equal(rv.status_code, 200)
            self.assert_equal(rv.data, b'')
            self.assert_equal(rv.mimetype, 'text/html')

            rv = flask.make_response('Awesome')
            self.assert_equal(rv.status_code, 200)
            self.assert_equal(rv.data, b'Awesome')
            self.assert_equal(rv.mimetype, 'text/html')

            rv = flask.make_response('W00t', 404)
            self.assert_equal(rv.status_code, 404)
            self.assert_equal(rv.data, b'W00t')
            self.assert_equal(rv.mimetype, 'text/html')

     

Example 4

From project http-fun-master, under directory , in source file server.py.

Score: 10
vote
vote
def cookies_secret_room():
    name = request.cookies.get("username", False)

    if not name:
        abort(401)

    resp = make_response("Hello {}".format(name))
    return resp


 

Example 5

From project http-fun-master, under directory , in source file server.py.

Score: 10
vote
vote
def cookies_login():
    name = request.args.get("username", False)
    password = request.args.get("password", False)

    if not password == "password" or not name:
        abort(401)

    resp = make_response("You are now authorized")
    resp.set_cookie("username", name)
    return resp

### Sessions

 

Example 6

From project http-fun-master, under directory , in source file server.py.

Score: 10
vote
vote
def session_login():
    name = request.args.get("username", False)
    password = request.args.get("password", False)
    print name, password
    if not password == "password" or not name:
        abort(401)

    resp = make_response("You are now authorized")
    session['username'] = name
    session['login-time'] = datetime.now()
    return resp


 

Example 7

From project sagenb, under directory sagenb/flask_version, in source file base.py.

Score: 10
vote
vote
def dynamic_js():
    from sagenb.notebook.js import javascript
    # the javascript() function is cached, so there shouldn't be a big slowdown calling it
    data,datahash = javascript()
    if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
        response = make_response('',304)
    else:
        response = make_response(data)
        response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
        response.headers['Etag']=datahash
    return response

 

Example 8

From project sagenb, under directory sagenb/flask_version, in source file base.py.

Score: 10
vote
vote
def localization_js():
    global _localization_cache
    locale=repr(get_locale())
    if _localization_cache.get(locale,None) is None:
        data = render_template(os.path.join('js/localization.js'), N_=N_, nN_=nN_)
        _localization_cache[locale] = (data, sha1(repr(data)).hexdigest())
    data,datahash = _localization_cache[locale]

    if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
        response = make_response('',304)
    else:
        response = make_response(data)
        response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
        response.headers['Etag']=datahash
    return response

 

Example 9

From project sagenb, under directory sagenb/flask_version, in source file base.py.

Score: 10
vote
vote
def mathjax_js():
    global _mathjax_js_cache
    if _mathjax_js_cache is None:
        from sagenb.misc.misc import mathjax_macros
        data = render_template('js/mathjax_sage.js', theme_mathjax_macros=mathjax_macros)
        _mathjax_js_cache = (data, sha1(repr(data)).hexdigest())
    data,datahash = _mathjax_js_cache

    if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
        response = make_response('',304)
    else:
        response = make_response(data)
        response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
        response.headers['Etag']=datahash
    return response

 

Example 10

From project sagenb, under directory sagenb/flask_version, in source file base.py.

Score: 10
vote
vote
def keyboard_js(browser_os):
    from sagenb.notebook.keyboards import get_keyboard
    data = get_keyboard(browser_os)
    datahash=sha1(data).hexdigest()
    if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
        response = make_response('',304)
    else:
        response = make_response(data)
        response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
        response.headers['Etag']=datahash
    return response

###############
# Dynamic CSS #
###############
 

Example 11

From project question-master, under directory , in source file question.py.

Score: 10
vote
vote
def err_resp(json=True, **kwargs):
    response = jsonify(**kwargs) if json else make_response(**kwargs)
    response.status_code = kwargs["error"] if "error" in kwargs else 500
    return response

 

Example 12

From project portfolio, under directory flask/lib/python2.7/site-packages/flask/testsuite, in source file basic.py.

Score: 10
vote
vote
def test_make_response(self):
        app = flask.Flask(__name__)
        with app.test_request_context():
            rv = flask.make_response()
            self.assert_equal(rv.status_code, 200)
            self.assert_equal(rv.data, '')
            self.assert_equal(rv.mimetype, 'text/html')

            rv = flask.make_response('Awesome')
            self.assert_equal(rv.status_code, 200)
            self.assert_equal(rv.data, 'Awesome')
            self.assert_equal(rv.mimetype, 'text/html')

            rv = flask.make_response('W00t', 404)
            self.assert_equal(rv.status_code, 404)
            self.assert_equal(rv.data, 'W00t')
            self.assert_equal(rv.mimetype, 'text/html')

     

Example 13

From project flasfka-master, under directory flasfka, in source file api.py.

Score: 10
vote
vote
def flasfka(topic, group_or_key=None):
    topic = topic.encode("utf-8")
    if group_or_key is not None:
        group_or_key = group_or_key.encode("utf-8")

    client = get_kafka_client()
    client.ensure_topic_exists(topic)

    if flask.request.method == "GET":
        limit = int(flask.request.args.get(
            "limit", app.config["CONSUMER_LIMIT"]
            ))
        group = group_or_key
        return flask.jsonify(consume(topic, group, limit))
    if flask.request.method == "POST":
        key = group_or_key
        data = flask.request.get_json(force=True)
        try:
            produce(topic, data["messages"], key)
            return flask.make_response(("", 204, {}))
        except (KeyError, TypeError):
            return flask.make_response((
                'expected format: {"messages": ["message1", ...]}',
                400,
                {}
            ))

# Snippet to attach the version to every request
 

Example 14

From project reddit, under directory scripts, in source file tracker.py.

Score: 10
vote
vote
def jsonpify(callback_name, data):
    data = callback_name + '(' + json.dumps(data) + ')'
    response = make_response(data)
    response.mimetype = 'text/javascript'
    return response

 

Example 15

From project sara-master, under directory , in source file ml_classifier.py.

Score: 10
vote
vote
def bad_request(error):
    app.logger.error(error)
    return make_response(jsonify({'error': 'Bad Request'}), 400)


 

Example 16

From project sara-master, under directory , in source file ml_classifier.py.

Score: 10
vote
vote
def not_found(error):
    app.logger.error(error)
    return make_response(jsonify({'error': 'Not Found'}), 404)


 

Example 17

From project webed, under directory webed/views, in source file resource.py.

Score: 10
vote
vote
def make_resource_response (path, content_type):

    response = make_response (open (os.path.abspath (path)).read ())
    response.headers['Content-Type'] = content_type
    return response

###############################################################################
###############################################################################

 

Example 18

From project cluster-insight-master, under directory collector, in source file docker_proxy.py.

Score: 10
vote
vote
def get_response(req, cache=None):
  """Send request 'req' to the Docker unix socket and returns the response."""
  if cache:
    value, _ = cache.lookup(req)
    if value is not None:
      app.logger.info('cache hit for request=%s', req)
      return flask.make_response(
          value, requests.codes.ok, {'Content-Type': 'application/json'})

  try:
    result = fetch(req)
    cleanup(result)
    output = json.dumps(result)
    if cache:
      app.logger.info('caching result of request=%s', req)
      cache.update(req, output)

    return flask.make_response(
        output,
        requests.codes.ok,
        {'Content-Type': 'application/json'})

  except:
    exc_type, value, _ = sys.exc_info()
    msg = ('Failed to retrieve %s with exception %s: %s' %
           (req, exc_type, value))
    app.logger.error(msg)
    return flask.jsonify(utilities.make_error(msg))


 

Example 19

From project flask, under directory tests, in source file flask_tests.py.

Score: 10
vote
vote
def test_make_response(self):
        app = flask.Flask(__name__)
        with app.test_request_context():
            rv = flask.make_response()
            assert rv.status_code == 200
            assert rv.data == ''
            assert rv.mimetype == 'text/html'

            rv = flask.make_response('Awesome')
            assert rv.status_code == 200
            assert rv.data == 'Awesome'
            assert rv.mimetype == 'text/html'

            rv = flask.make_response('W00t', 404)
            assert rv.status_code == 404
            assert rv.data == 'W00t'
            assert rv.mimetype == 'text/html'

     

Example 20

From project sagenb, under directory sagenb/flask_version, in source file worksheet.py.

Score: 8
vote
vote
def worksheet_jsmol_data(worksheet):
    """
    Jmol/JSmol callback

    The jmol applet does not take the data inline, but calls back at
    this URI to get one or more base64-encoded data files.
    """
    # Defaults taken from upstream jsmol.php
    query = request.values.get('query', 
        "http://cactus.nci.nih.gov/chemical/structure/ethanol/file?format=sdf&get3d=True")
    call = request.values.get('call', u'getRawDataFromDatabase')
    database = request.values.get('database', '_')
    encoding = request.values.get('encoding', None)

    current_app.logger.debug('JSmol call:  %s', call)
    current_app.logger.debug('JSmol query: %s', query)
    if encoding == None:
        def encoder(x): 
            return x
    elif encoding == u'base64':
        import base64
        def encoder(x): 
            # JSmol expects the magic ';base64,' in front of output
            return ';base64,' + base64.encodestring(x)
    else:
        current_app.logger.error('Invalid JSmol encoding %s', encoding)
        return current_app.message(_('Invalid JSmol encoding: ' + str(encoding)))

    if call == u'getRawDataFromDatabase':
        # Annoyingly, JMol prepends the worksheet url (not: the
        # request url) to the query. Strip off:
        worksheet_url = request.base_url[:-len('/jsmol')]
        pattern = worksheet_url + '/cells/(?P<cell_id>[0-9]*)/(?P<filename>.*)'
        match = re.match(pattern, query)
        if match is None:
            current_app.logger.error('Invalid JSmol query %s, does not match %s', query, pattern)
            return current_app.message(_('Invalid JSmol query: ' + query))
        cell_id = match.group('cell_id')
        filename = match.group('filename')
        filename = filename.rsplit('?',1)[0] # appended query is only for cache busting
        filename = secure_filename(filename)   # never trust input
        filename = os.path.join(worksheet.cells_directory(), cell_id, filename)
        with open(filename, 'r') as f:
            data = f.read()
            response = make_response(encoder(data))
    else:
        current_app.logger.error('Invalid JSmol request %s', call)
        return current_app.message(_('Invalid JSmol request: ' + str(call)))

    # Taken from upstream jsmol.php
    is_binary = '.gz' in query
    # Non-standard Content-Type taken from upstream jsmol.php
    if is_binary:
        response.headers['Content-Type'] = 'Content-Type: text/plain; charset=x-user-defined';
    else:
        response.headers['Content-Type'] = 'Content-Type: application/json';
    return response


##############################################
# Data
##############################################
 

Example 21

From project Copr-master, under directory frontend/coprs_frontend/coprs/views/coprs_ns, in source filecoprs_general.py.

Score: 8
vote
vote
def generate_repo_file(username, coprname, name_release, repofile):
    """ Generate repo file for a given repo name.
        Reponame = username-coprname """
    # This solution is used because flask splits off the last part after a
    # dash, therefore user-re-po resolves to user-re/po instead of user/re-po
    # FAS usernames may not contain dashes, so this construction is safe.

    reponame = "{0}-{1}".format(username, coprname)

    if repofile is not None and repofile != username + '-' + coprname + '-' + name_release + '.repo':
        return page_not_found(
            "Repository filename does not match expected: {0}"
            .format(repofile))

    try:
        # query.one() is used since it fetches all builds, unlike
        # query.first().
        copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname,
                                          with_builds=True).one()
    except sqlalchemy.orm.exc.NoResultFound:
        return page_not_found(
            "Project {0}/{1} does not exist".format(username, coprname))

    mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(name_release, noarch=True).first()
    if not mock_chroot:
        return page_not_found("Chroot {0} does not exist".format(name_release))

    url = ""
    for build in copr.builds:
        if build.results:
            url = build.results
            break

    if not url:
        return page_not_found(
            "Repository not initialized: No finished builds in {0}/{1}."
            .format(username, coprname))

    repo_url = generate_repo_url(mock_chroot, url)
    pubkey_url = urlparse.urljoin(url, "pubkey.gpg")
    response = flask.make_response(
        flask.render_template("coprs/copr.repo", copr=copr, url=repo_url, pubkey_url=pubkey_url))

    response.mimetype = "text/plain"
    response.headers["Content-Disposition"] = \
        "filename={0}.repo".format(reponame)

    return response


 

Example 22

From project illinois-sunshine-master, under directory sunshine, in source file api.py.

Score: 8
vote
vote
def top_money():
    resp = {
        'status': 'ok',
        'message': '',
        'meta': {},
        'objects': {},
    }
    status_code = 200
    committee_id = request.args.get('committee_id')
    table = request.args.get('type')
    if not committee_id or not table:
        resp['status'] = 'error'
        resp['message'] = 'Committee ID and transaction type are required'
        status_code = 400

    else:
        top_donors = ''' 
            SELECT 
              SUM(amount) AS total,
              first_name,
              last_name,
              MAX(search_date) AS total_date
            FROM condensed_{0}
            WHERE committee_id = :committee_id
            GROUP BY last_name, first_name
            ORDER BY total DESC NULLS LAST
            LIMIT 20
        '''.format(table)

        top_donors = g.engine.execute(sa.text(top_donors), 
                                    committee_id=committee_id)

        resp['objects'] = [OrderedDict(zip(r.keys(), r.values())) \
                               for r in top_donors]

        resp['meta']['total_rows'] = len(resp['objects'])

    response_str = json.dumps(resp, sort_keys=False, default=dthandler)
    response = make_response(response_str, status_code)
    response.headers['Content-Type'] = 'application/json'
    return response


 

Example 23

From project illinois-sunshine-master, under directory sunshine, in source file api.py.

Score: 8
vote
vote
def committees():
    committee_table = Committee.__table__
    candidates_table = Candidate.__table__
    raw_query_params = request.args.copy()
    limit = request.args.get('limit', 500)
    offset = request.args.get('offset', 0)
    order_by = request.args.get('order_by', 'status_date')
    sort_order = request.args.get('sort_order', 'desc')
    if limit > 500:
        limit = 500
    valid_query, query_clauses, resp, status_code = make_query(committee_table, raw_query_params)
    if valid_query:
        committee_cols = [c.label('committee_%s' % c.name) for c in committee_table.columns]
        candidate_cols = [c.label('candidate_%s' % c.name) for c in candidates_table.columns]
        all_columns = committee_cols + candidate_cols
        base_query = db_session.query(*all_columns)\
                .join(candidate_committees)\
                .join(candidates_table)
        for clause in query_clauses:
            base_query = base_query.filter(clause)
        order_by_col = getattr(committee_table.c, order_by)
        base_query = base_query.order_by(getattr(order_by_col, sort_order)())
        base_query = base_query.limit(limit)
        objs = []
        committee_fields = committee_table.columns.keys() 
        candidate_fields = candidates_table.columns.keys()
        rows = sorted(list(base_query.all()), key=attrgetter('committee_id'))
        for committee, grouping in groupby(rows, attrgetter('committee_id')):
            rows = list(grouping)
            committee_values = rows[0][:len(committee_fields)]
            committee_info = OrderedDict(zip(committee_fields, committee_values))
            candidates = []
            for row in rows:
                candidate_values = row[len(committee_fields):]
                candidate_info = OrderedDict(zip(candidate_fields, candidate_values))
                candidates.append(candidate_info)
            committee_info['candidates'] = candidates
            objs.append(committee_info)
        resp['objects'] = objs
        resp['meta']['query'].update({
            'limit': limit,
            'offset': offset,
            'sort_order': sort_order,
            'order_by': order_by,
        })
    response = make_response(json.dumps(resp, default=dthandler, sort_keys=False))
    response.headers['Content-Type'] = 'application/json'
    return response

 

Example 24

From project Axis-Mundi-master, under directory , in source file client.py.

Score: 8
vote
vote
def profile(keyid=None):
    checkEvents()
    # TODO:Check to see if this user is in our contacts list
    # TODO:Message to client_backend to SUB target user profile and target
    # user listings
    if keyid is None:
        keyid = app.pgp_keyid  # if no key specified by user then look up our own profile
#    task = queue_task(1,'get_profile',keyid)
#    messageQueue.put(task)
    # for now wait for the response for up to [timeout] seconds
    session = app.roStorageDB.DBSession()
    profile = session.query(app.roStorageDB.cacheProfiles).filter_by(
        key_id=keyid).first()
    if not profile:  # no existing profile found in cache, request it
        key = {"keyid": keyid}
        task = queue_task(1, 'get_profile', key)
        messageQueue.put(task)
        # now, we wait...
        timer = 0
        profile = session.query(app.roStorageDB.cacheProfiles).filter_by(
            key_id=keyid).first()
        while (not profile) and (timer < 20):  # 20 second timeout for profile lookups
            sleep(1)
            profile = session.query(app.roStorageDB.cacheProfiles).filter_by(
                key_id=keyid).first()
            timer = timer + 1
        if not profile:
            # TODO - pretty this up
            resp = make_response("Profile not found", 404)
            return resp
    else:  # we have returned an existing profile from the cache
        print "Existing entry found in profile cache..."
        # how old is the cached data
        age = get_age(profile.updated)
        if age > CACHE_EXPIRY_LIMIT:
            print 'Cached profile is too old, requesting latest copy'
            key = {"keyid": keyid}
            task = queue_task(1, 'get_profile', key)
            messageQueue.put(task)
            flash("Cached profile has expired, the latest profile has been requested in the background. Refresh the page.", category="message")

    return render_template('profile.html', profile=profile)


 

Example 25

From project Axis-Mundi-master, under directory , in source file client.py.

Score: 8
vote
vote
def pks_lookup():
    if not app.pgp_keyid:
        resp = make_response("Key server not available", 404)
        resp.headers.extend({'X-HKP-Results-Count': '0'})
        return resp
    search_key = request.args.get('search', '')
    if not search_key:
        resp = make_response("Key ID not provided", 404)
        resp.headers.extend({'X-HKP-Results-Count': '0'})
        return resp
    # if the provided keyid starts with 0x
    search_key_split = search_key.split('x')
    if len(search_key_split) == 2:
        search_key = search_key_split[1]  # strip 0x
    # Query local key cache database for the key - we will request from the
    # broker if we don't have it
    print "PKS Lookup for " + search_key
    session = app.roStorageDB.DBSession()
    key_block = session.query(app.roStorageDB.cachePGPKeys).filter_by(
        key_id=search_key).first()
    if not key_block:
        key = {"keyid": "" + search_key + ""}
        print "Keyblock not found in db, sending query key msg"
        task = queue_task(1, 'get_key', key)
        messageQueue.put(task)
        print "Sent message requesting key..."
        # now, we wait...
        sleep(0.1)
        timer = 0
        key_block = session.query(app.roStorageDB.cachePGPKeys).filter_by(
            key_id=search_key).first()
        while (not key_block) and (timer < 20):  # 20 second timeout for key lookups
            sleep(1)
            checkEvents()
            key_block = session.query(app.roStorageDB.cachePGPKeys).filter_by(
                key_id=search_key).first()
            timer = timer + 1
        if not key_block:
            resp = make_response("Key not found", 404)
            resp.headers.extend({'X-HKP-Results-Count': '0'})
            return resp
    resp = make_response(key_block.keyblock, 200)  # for now return our key
    # we will only ever return a single key
    resp.headers.extend({'X-HKP-Results-Count': '1'})
    return resp


 

Example 26

From project melee-master, under directory melee/webhttp, in source file wsgiapp.py.

Score: 7
vote
vote
def __init__(self, import_name):
        self.import_name = import_name
        self.app = Flask(import_name)

        self.logger = logging.getLogger('%s.api' % config.servicename)
        self.app.log = self.logger
        self.app.before_request(self.before_request)
        self.app.after_request(self.after_request)
        self.app.teardown_request(self.teardown_request)
        self.app.register_error_handler(Exception, self.error_handler)

        for code in [400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414,
            415, 416, 417, 418, 422, 428, 429, 431, 500, 501, 502, 503, 504, 505]:
            self.app.register_error_handler(code, self.error_handler)

        @self.app.route('/')
        def helloworld():
            # return flask.make_response(('wellcome to melee!', 200, None))
            return 'wellcome to melee!'
        
        logger.info('STARTUP', 'meleeapp %s created' % config.servicename)

     

Example 27

From project flask-ang-master, under directory angular-flask-sqlalchemy, in source file server.py.

Score: 5
vote
vote
def index():
    return make_response(open('templates/index.html').read())


 

Example 28

From project flask-ang-master, under directory angular-flask-sqlalchemy, in source file server.py.

Score: 5
vote
vote
def contact(username):
    return make_response(open('templates/contact.html').read())


 

Example 29

From project illinois-sunshine-master, under directory sunshine, in source file api.py.

Score: 5
vote
vote
def advanced_search():
    resp = {
        'status': 'ok',
        'message': '',
        'meta': {},
        'objects': {},
    }
    
    status_code = 200
    valid = True

    term = request.args.get('term')
    limit = request.args.get('limit', 50)
    offset = request.args.get('offset', 0)
    datatype = request.args.get('datatype')
    order_by_col = None
    reverse_sort = True

    if request.args.get('length'):
        limit = request.args['length']
    
    if request.args.get('start'):
        offset = request.args['start']
    
    if request.args.get('order[0][column]'):
        col_idx = request.args['order[0][column]']
        order_by_col = request.args['columns[' + str(col_idx) + '][data]']
        
        sort_order = request.args['order[0][dir]']
        reverse_sort = True
        if sort_order == 'asc':
            reverse_sort = False
    
    default_tables = ['committees', 'candidates', 'receipts', 'expenditures', 'officers']

    table_names = request.args.getlist('table_name')
   
    if not table_names:
        table_names = default_tables

    if not term:
        resp['status'] = 'error'
        resp['message'] = 'A search term is required'
        status_code = 400
        valid = False
    
    elif len(term) < 3:
        resp['status'] = 'error'
        resp['message'] = 'Search term must be at least 3 characters long'
        status_code = 400
        valid = False

    if valid:

        # Need to figure a way to do any column. This will 
        # just work for search_date for the time being
        
        q_params = {k:v for k,v in request.args.items() if k.startswith('search_date') and v}
        
        objects = {}
        
        for table_name in table_names:
            
            results = getSearchResults(term, 
                                       table_name, 
                                       q_params=q_params)
            
            objects[table_name] = [OrderedDict(zip(r.keys(), r.values())) for r in results]
        
        start_idx = int(offset)
        end_idx = int(offset) + int(limit)
        total_rows = 0
        
        if datatype == 'csv':
            
            zfoutp = BytesIO()
            with zipfile.ZipFile(zfoutp, 'w') as zf:

                for table_name, records in objects.items():
                    if records:
                        outp = StringIO()
                        writer = csv.writer(outp)
                        writer.writerow(list(records[0].keys()))
                        writer.writerows([list(r.values()) for r in records])
                        zf.writestr('%s.csv' % table_name, outp.getvalue())

            response = make_response(zfoutp.getvalue(), 200)
            
            filedate = datetime.now().strftime('%Y-%m-%d')
            response.headers['Content-Type'] = 'application/zip'
            fname = 'Illinois_Sunshine_Search_%s_%s.zip' % ('_'.join(term.split(' ')), filedate)
            response.headers['Content-Disposition'] = 'attachment; filename=%s' % (fname)
            
            return response

        else:
            for table_name, records in objects.items():
                
                if table_name == 'receipts':
                    
                    receipts_col = order_by_col

                    if not order_by_col:
                        receipts_col = 'received_date'
                        reverse_sort = True
                    
                    records = sorted(records, 
                                     key=lambda r: r[receipts_col] if r[receipts_col] else "", 
                                     reverse=reverse_sort)
                    
                elif table_name == 'expenditures':
                    
                    exp_col = order_by_col

                    if not order_by_col:
                        exp_col = 'expended_date'
                        reverse_sort = True
                    
                    records = sorted(records, 
                                     key=lambda r: r[exp_col] if r[exp_col] else "", 
                                     reverse=reverse_sort)
         
                elif table_name == 'investments':
                    
                    inv_col = order_by_col

                    if not order_by_col:
                        inv_col = 'purchase_date'
                        reverse_sort = True
                    
                    records = sorted(records, 
                                     key=lambda r: r[inv_col] if r[inv_col] else "", 
                                     reverse=reverse_sort)
                
                elif table_name == 'committees':
                    
                    cmt_col = order_by_col

                    if not order_by_col:
                        cmt_col = 'name'
                        reverse_sort = False
                    
                    records = sorted(records, 
                                     key=lambda r: r[cmt_col] if r[cmt_col] else "", 
                                     reverse=reverse_sort)
         
                else:
                    
                    other_col = order_by_col

                    if not order_by_col:
                        other_col = 'last_name'
                        reverse_sort = False
                    
                    records = sorted(records, 
                                     key=lambda r: r[other_col] if r[other_col] else "", 
                                     reverse=reverse_sort)
                
                total_rows += len(records)
                resp['objects'][table_name] = records[start_idx:end_idx]
         
            resp['meta'] = {
                'total_rows': total_rows,
                'limit': limit,
                'offset': offset,
                'term': term
            }
            resp['recordsTotal'] = total_rows
            resp['recordsFiltered'] = total_rows
        
            if request.args.get('draw'):
                resp['draw'] = int(request.args['draw'])

    response_str = json.dumps(resp, sort_keys=False, default=dthandler)
    response = make_response(response_str, status_code)
    response.headers['Content-Type'] = 'application/json'

    return response

 

Example 30

From project illinois-sunshine-master, under directory sunshine, in source file api.py.

Score: 5
vote
vote
def receipts():
    
    raw_query_params = request.args.copy()
    limit = request.args.get('limit', 1000)
    offset = request.args.get('offset', 0)
    order_by = request.args.get('order_by', 'received_date')
    sort_order = request.args.get('sort_order', 'desc')
    datatype = request.args.get('datatype')
    
    receipts_table = sa.Table('condensed_receipts', sa.MetaData(), 
                              autoload=True, 
                              autoload_with=db_session.bind)

    valid_query, query_clauses, resp, status_code = make_query(receipts_table, raw_query_params)
    
    if not raw_query_params.get('committee_id'):
        resp = {
            'status' : 'error',
            'message' : 'A committee ID is required',
        }
        status_code = 400
        valid_query = False
    
    if valid_query:
        committees_table = Committee.__table__
        
        committee_cols = [c.label('committee_%s' % c.name) for c in committees_table.columns]
        receipt_cols = [c.label('receipt_%s' % c.name) for c in receipts_table.columns]
        all_columns = committee_cols + receipt_cols
        
        base_query = db_session.query(*all_columns)\
                .join(receipts_table, receipts_table.c.committee_id == committees_table.c.id)
        for clause in query_clauses:
            base_query = base_query.filter(clause)
        
        order_by_col = getattr(receipts_table.c, order_by)
        base_query = base_query.order_by(getattr(order_by_col, sort_order)())
        
        limit_query = base_query.limit(limit)
        limit_query = limit_query.offset(offset)

        objs = []
        committee_fields = committees_table.columns.keys() 
        receipt_fields = receipts_table.columns.keys()
        
        rows = sorted(list(limit_query.all()), key=attrgetter('committee_id'))
        committee_info = {'receipts': [], 'name': ''}
        for committee, grouping in groupby(rows, attrgetter('committee_id')):
            rows = list(grouping)
            committee_values = rows[0][:len(committee_fields)]
            committee_info = OrderedDict(zip(committee_fields, committee_values))
            receipts = []
            for row in rows:
                receipt_values = row[len(committee_fields):]
                receipt_info = OrderedDict(zip(receipt_fields, receipt_values))
                receipts.append(receipt_info)
            committee_info['receipts'] = receipts
            objs.append(committee_info)
        
        if datatype == 'csv':
            outp = StringIO()
            writer = csv.writer(outp)
            records = committee_info['receipts']
            
            if records:
                writer.writerow(list(records[0].keys()))
                writer.writerows([list(r.values()) for r in records])
            
            response = make_response(outp.getvalue(), 200)
            
            filedate = datetime.now().strftime('%Y-%m-%d')
            response.headers['Content-Type'] = 'text/csv'
            fname = 'Illinois_Sunshine_Committee_Receipts_%s_%s.csv' % ('_'.join(committee_info['name'].split(' ')), filedate)
            response.headers['Content-Disposition'] = 'attachment; filename=%s' % (fname)
            
            return response

        total_rows = base_query.count()
        resp['objects'] = objs
        resp['meta']['query'].update({
            'limit': limit,
            'offset': offset,
            'sort_order': sort_order,
            'order_by': order_by,
        })
        resp['meta']['total_rows'] = total_rows

    response = make_response(json.dumps(resp, default=dthandler, sort_keys=False))
    response.headers['Content-Type'] = 'application/json'
    return response

 

Example 31

From project illinois-sunshine-master, under directory sunshine, in source file api.py.

Score: 5
vote
vote
def expenditures():

    raw_query_params = request.args.copy()
    limit = request.args.get('limit', 1000)
    offset = request.args.get('offset', 0)
    order_by = request.args.get('order_by', 'expended_date')
    sort_order = request.args.get('sort_order', 'desc')
    datatype = request.args.get('datatype')

    expenditures_table = sa.Table('condensed_expenditures', sa.MetaData(), 
                                  autoload=True, autoload_with=db_session.bind)
    
    valid_query, query_clauses, resp, status_code = make_query(expenditures_table, raw_query_params)
    
    if not raw_query_params.get('committee_id'):
        resp = {
            'status' : 'error',
            'message' : 'A committee ID is required',
        }
        status_code = 400
        valid_query = False
    
    if valid_query:
        committees_table = Committee.__table__
        
        committee_cols = [c.label('committee_%s' % c.name) for c in committees_table.columns]
        expenditure_cols = [c.label('expenditure_%s' % c.name) for c in expenditures_table.columns]
        all_columns = committee_cols + expenditure_cols
        
        base_query = db_session.query(*all_columns)\
                         .join(expenditures_table, 
                               expenditures_table.c.committee_id == committees_table.c.id)

        for clause in query_clauses:
            base_query = base_query.filter(clause)
        
        order_by_col = getattr(expenditures_table.c, order_by)
        base_query = base_query.order_by(getattr(order_by_col, sort_order)())
        limit_query = base_query.limit(int(limit))
        limit_query = limit_query.offset(int(offset))

        objs = []
        committee_fields = committees_table.columns.keys() 
        expenditure_fields = expenditures_table.columns.keys()
        rows = sorted(list(limit_query.all()), key=attrgetter('committee_id'))
        committee_info = {'expenditures': [], 'name': ''}
        for committee, grouping in groupby(rows, attrgetter('committee_id')):
            rows = list(grouping)
            committee_values = rows[0][:len(committee_fields)]
            committee_info = OrderedDict(zip(committee_fields, committee_values))
            expenditures = []
            for row in rows:
                expenditure_values = row[len(committee_fields):]
                expenditure_info = OrderedDict(zip(expenditure_fields, expenditure_values))
                expenditures.append(expenditure_info)
            committee_info['expenditures'] = expenditures
            objs.append(committee_info)
        
        if datatype == 'csv':
            outp = StringIO()
            writer = csv.writer(outp)
            records = committee_info['expenditures']
            
            if records:
                writer.writerow(list(records[0].keys()))
                writer.writerows([list(r.values()) for r in records])
            
            response = make_response(outp.getvalue(), 200)
            
            filedate = datetime.now().strftime('%Y-%m-%d')
            response.headers['Content-Type'] = 'text/csv'
            fname = 'Illinois_Sunshine_Committee_Expenditures_%s_%s.csv' % ('_'.join(committee_info['name'].split(' ')), filedate)
            response.headers['Content-Disposition'] = 'attachment; filename=%s' % (fname)
            
            return response

        total_rows = base_query.count()
        
        resp['objects'] = objs
        resp['meta']['query'].update({
            'limit': limit,
            'offset': offset,
            'sort_order': sort_order,
            'order_by': order_by,
        })
        resp['meta']['total_rows'] = total_rows
    
    
    response = make_response(json.dumps(resp, default=dthandler, sort_keys=False))
    response.headers['Content-Type'] = 'application/json'
    return response
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值