def test(): """Renders the about page.""" return render_template( 'test.html', title='Test', year=datetime.now().year, jsonrpc_request= '{"jsonrpc": "2.0","method": "register", "params": [],"id": "2"}', message='Your application description page', api_host=config.get('API_HOST') or request.host_url)
def sql_query(): try: with app.app_context(): app_root_path = current_app.root_path yield app_root_path + '\n' connection_string = config.get('ODBC_CONNECTION_STRING') connection_credential = config.get('ODBC_CONNECTION_CREDENTIAL') #below is for mysql/mariadb, interchangeable, either /etc/odbcinst.ini or use windows ODBC data source admin to find the name of driver #connection_string = 'Driver={MySQL};PORT=3306;Server=db;Database=oas;Option=10; sslca=d:\oas\oas-api\mariadb-ca.pem; sslcert=d:\oas\oas-api\mariadb-cert.pem;sslkey=d:\oas\oas-api\mariadb-key.pem;sslverify=0;' #connection_string = 'Driver={MARIADB ODBC 3.1 Driver};PORT=3306;Server=db;Database=oas;Option=10; sslca=d:\oas\oas-api\mariadb-ca.pem; sslcert=d:\oas\oas-api\mariadb-cert.pem;sslkey=d:\oas\oas-api\mariadb-key.pem;sslverify=0;' #connection_credential = 'UID=root;PWD=password;' #below is for freeTDS(only linux) which is needed for ARM64 platform, PORT is a must unlike MS driver #connection_string = 'DRIVER={FreeTDS};PORT=1433;SERVER=db;DATABASE=OASDesign;TDS_Version=7.4' #connection_credential = 'UID=root;PWD=password;' conn = pyodbc.connect(connection_string + connection_credential) #yield from mssql_query(conn) yield from mysql_query(conn) conn.close() yield "ODBC_CONNECTION_STRING: {0}".format(connection_string) except Exception as err: #return to client - only for debugging yield f"{err.__class__.__name__}: {err}" #let general exception handling handle it(log etc.) raise err
The flask application package. """ import os import sys import uuid import redis from flask import Flask, _app_ctx_stack, session from flask_jsonrpc import JSONRPC, JSONRPCView # noqa: E402 pylint: disable=C0413 from sqlalchemy.orm import scoped_session from .model.database import SessionLocal from .api import AuthorizationView, modules from .api.auth import auth import flaskweb.config as config app = Flask(__name__) app.secret_key = config.get('FLASK_SECRET_KEY') app.redis = config.get('REDIS_URL') app.config['SESSION_TYPE'] = 'redis' app.config['SESSION_REDIS'] = app.redis app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024 app.config['UPLOAD_EXTENSIONS'] = ['.jpg', '.png', '.gif'] app.config['UPLOAD_FOLDER'] = 'uploads' app.db_session = scoped_session(SessionLocal, scopefunc=_app_ctx_stack.__ident_func__) jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True, jsonrpc_site_api=AuthorizationView) jsonrpc.register_blueprint(app,
def get_firebase_claim(oauth_token: Optional[str] = None) -> Any: id_token = oauth_token or request.headers['Authorization'].split(' ').pop() if (not id_token or id_token == 'Bearer'): return None claims = google.oauth2.id_token.verify_firebase_token( id_token, HTTP_REQUEST, audience=config.get('GOOGLE_CLOUD_PROJECT')) return claims, id_token
def form_post(): if request.method == 'POST': tempdir = None filenames = [] content_json = request.form.get('params') content = json.loads(content_json) if content_json else {} try: # check if the post request has the file part #if not request.files: # return Response("{}", status=200, mimetype='application/json') authorization = request.headers.get('Authorization') claims = get_firebase_claim() for name, files in request.files.items(): for file in request.files.getlist(name): filename = file.filename # if user does not select file, browser also # submit an empty part without filename if file.filename == '': return Response("{}", status=200, mimetype='application/json') if file and allowed_file(file.filename): filename = secure_filename(file.filename) filenames.append(filename) mimetype = file.mimetype try: if not tempdir: tempdir = tempfile.mkdtemp() save_to = os.path.join(tempdir, filename) file.save(save_to) except: pass finally: if tempdir: dirname = os.path.split(tempdir)[-1] try: ipfs_client = ipfshttpclient.connect( config.get('IPFS_API_URL', '/dns/db/tcp/5001/http')) result = ipfs_client.add(tempdir, pattern="**", wrap_with_directory=False) folder = result[-1] hash = folder["Hash"] except Exception as err: error = str(err) result = None pass finally: shutil.rmtree(tempdir, ignore_errors=True) if result: return Response(json.dumps({ "ipfs": [ dict(Name=re.sub('^' + dirname + '/?', '', x["Name"]), Hash=x["Hash"], Size=x["Size"]) for x in result ] }), status=200, mimetype='application/json') else: return Response("{{{error}}}".format(error=error), status=200, mimetype='application/json') else: return Response(json.dumps({"ifps": []}), status=200, mimetype='application/json') return Response("{{{to}}}".format(to=save_to or tempdir), status=200, mimetype='application/json') return Response("what")
import os import sqlalchemy import pyodbc from sqlalchemy import create_engine, engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker import flaskweb.config as config odbc_connection_string = config.get('ODBC_CONNECTION_STRING') odbc_connection_credential = config.get('ODBC_CONNECTION_CREDENTIAL') sqlalchemy_engine_url = config.get('SQLALCHEMY_URL') mariadb_key_location = config.get('MARIADB_KEY_LOCATION') if mariadb_key_location is None or mariadb_key_location == 'None': mysql_connect_args = {} else: mysql_connect_args = { "ssl_ca": os.path.join(mariadb_key_location, "mariadb-ca.pem"), "ssl_cert": os.path.join(mariadb_key_location, "mariadb-cert.pem"), "ssl_key": os.path.join(mariadb_key_location, "mariadb-key.pem"), #"check_same_thread":False # only for sqlite ! } engine = create_engine(sqlalchemy_engine_url, connect_args=mysql_connect_args) SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False) Base = declarative_base() def mssql_query(connection): cursor = connection.cursor() cursor.execute("SELECT UsrId, UsrName FROM dbo.Usr")