Initial commit

This commit is contained in:
Anton Kamalov
2024-10-21 22:42:14 +03:00
commit 19a5869d30
14 changed files with 228 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
import db.DBconnect
sql_provider = 1
""" def select_list(db_config, sql):
with DBContextManager(db_config) as cursor:
if cursor is None:
raise ValueError("Cursor not created")
else:
cursor.execute(sql)
result = cursor.fetchall()
schema = [item[0] for item in cursor.description]
lst = [dict(zip(schema, row)) for row in result]
return schema, lst """

11
App/Queries/req.py Normal file
View File

@@ -0,0 +1,11 @@
from flask import request, Blueprint, render_template, session, redirect, url_for
from os import path
from db.sql_provider import SQLProvider
sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql'))
requests_bp = Blueprint('requests_bp', __name__, template_folder='templates')
@requests_bp.route('/', methods=['GET', 'POST'])
def sklad_zapros():
if request.method == 'GET':
return render_template('sklad_zapros.html')

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
<form action="" method="post">
<select name="categories" size="10" multiple>
{% for category in categories %}
<option value="{{ category }}">{{ category }}</option>
{% endfor %}
</select>
</form>
</body>
</html>

22
App/app.py Normal file
View File

@@ -0,0 +1,22 @@
from flask import Flask, redirect, render_template, url_for, session, request
from os import path
from Queries.req import requests_bp
import json
app = Flask(__name__)
app.secret_key = 'super secret key'
with open(path.join(path.dirname(__file__), 'db/config.json')) as f:
app.config['db_config'] = json.load(f)
app.register_blueprint(requests_bp, url_prefix='/requests')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/logout')
def logout():
session.clear()
return 'OK'
app.run(port=5001, debug=True)

34
App/db/DBconnect.py Normal file
View File

@@ -0,0 +1,34 @@
import pymysql
from pymysql.err import *
class DBContextManager:
def __init__(self, db_config : dict):
self.db_config = db_config
self.connection = None
self.cursor = None
def __enter__(self):
try:
self.connection = pymysql.connect(
host=self.db_config['host'],
port=self.db_config['port'],
user=self.db_config['user'],
password=self.db_config['password'],
db=self.db_config['db']
)
self.cursor = self.connection.cursor()
return self.cursor
except (OperationalError, KeyError) as err:
print(err.args)
return None
def __exit__(self, exc_type, exc_val, exc_tb):
if self.connection and self.cursor:
if exc_type:
print(exc_type, '\n', exc_val)
self.connection.rollback()
else:
self.connection.commit()
self.cursor.close()
self.connection.close()
return True

7
App/db/config.json Normal file
View File

@@ -0,0 +1,7 @@
{
"host": "localhost",
"port": 3306,
"user": "manager",
"password": "ilikepizza",
"db": "sklad"
}

14
App/db/sql_provider.py Normal file
View File

@@ -0,0 +1,14 @@
import os
from string import Template
class SQLProvider:
def __init__(self, file_path):
self.scripts = {}
for file in os.listdir(file_path):
_sql = open(f'{file_path}/{file}').read()
self.scripts[file] = Template(_sql)
def get(self, name, params) -> dict:
if name not in self.scripts:
raise ValueError(f'SQL template {name} not found')
return self.scripts[name].substitute(**params)

10
App/templates/index.html Normal file
View File

@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>