python flask make_response的应用示例

来源:互联网 发布:2皇冠淘宝店铺转让 编辑:程序博客网 时间:2024/05/21 11:24

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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
votevote
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
1 0