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 to vote up the examples you like, or click 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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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[0-9]*)/(?P 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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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