Skip to content

Commit 492ea4b

Browse files
authored
Merge pull request #1 from CallMeAlexO/refactor
Refactor
2 parents e6fa9cb + 3ddb785 commit 492ea4b

22 files changed

+660
-206
lines changed

.gitignore

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
flaskapp
2-
__pycache__
3-
uploads
2+
__pycache__
3+
error.log
4+
.idea
5+
*.pyc

Procfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web: gunicorn app:app
1+
web: gunicorn server:app

app.py

-166
This file was deleted.

app/__init__.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from flask import Flask
2+
from config import Config
3+
from flask_sqlalchemy import SQLAlchemy
4+
import logging
5+
6+
db = SQLAlchemy()
7+
log = logging
8+
9+
10+
def create_app(config_class=Config):
11+
app = Flask(__name__)
12+
app.config.from_object(config_class)
13+
14+
db.init_app(app)
15+
16+
from app.main import bp as main_bp
17+
app.register_blueprint(main_bp)
18+
19+
from app.api import bp as api_bp
20+
app.register_blueprint(api_bp, url_prefix='/api')
21+
22+
return app

app/api/__init__.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from flask import Blueprint
2+
3+
bp = Blueprint('api', __name__)
4+
5+
from app.api import experiments, materials, authors, batches

app/api/authors.py

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from flask import jsonify, request, url_for, abort
2+
from app import db, log
3+
from app.models import Author
4+
from app.api import bp
5+
from sqlalchemy.exc import IntegrityError
6+
7+
8+
@bp.route('/authors/generate', methods=['GET'])
9+
def generate_authors():
10+
log.debug(f"ENTER /authors/generate")
11+
db.session.add(Author(name="Zeev Weisman", email="[email protected]"))
12+
db.session.add(Author(name="Osheter Alexey", email="[email protected]"))
13+
db.session.add(Author(name="Osheter Tatiana", email="[email protected]"))
14+
db.session.add(Author(name="Campisi-Pinto Saro", email="[email protected]"))
15+
db.session.add(Author(name="Ashkenazi Hen", email="[email protected]"))
16+
db.session.add(Author(name="Abramowitz Janna", email="[email protected]"))
17+
db.session.add(Author(name="Shoshana Kravchik", email="[email protected]"))
18+
19+
try:
20+
db.session.commit()
21+
except IntegrityError as e:
22+
if "duplicate" in str(e.orig).lower():
23+
return jsonify({"error": f"{e.params[0]} already exists in DB"})
24+
else:
25+
raise e
26+
27+
return jsonify(Author.query.get_or_404(1).to_dict())
28+
29+
30+
@bp.route('/authors/<int:id>', methods=['GET'])
31+
def get_author(id):
32+
log.debug(f"ENTER /authors/id/{id}")
33+
return jsonify(Author.query.get_or_404(id).to_dict())
34+
35+
36+
@bp.route('/authors', methods=['GET'])
37+
def get_authors():
38+
log.debug(f"ENTER /authors")
39+
page = request.args.get('page', 1, type=int)
40+
per_page = min(request.args.get('per_page', 10, type=int), 100)
41+
data = Author.to_collection_dict(Author.query, page, per_page, 'api.get_authors')
42+
return jsonify(data)
43+
44+
45+
@bp.route('/authors/<int:id>/experiments', methods=['GET'])
46+
def get_author_experiments(id):
47+
log.debug(f"ENTER /authors/{id}/experiments")
48+
author = Author.query.get_or_404(id)
49+
page = request.args.get('page', 1, type=int)
50+
per_page = min(request.args.get('per_page', 10, type=int), 100)
51+
data = Author.to_collection_dict(author.experiments, page, per_page, 'api.get_author_experiments', id=id)
52+
return jsonify(data)

app/api/batches.py

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from flask import jsonify, request, url_for, abort
2+
from app import db, log
3+
from app.models import Author, Batch
4+
from app.api import bp
5+
from sqlalchemy.exc import IntegrityError
6+
7+
8+
@bp.route('/batches/generate', methods=['GET'])
9+
def generate_batches():
10+
log.debug(f"ENTER /batches/generate")
11+
b = Batch(name="OX-OILS-80DC-21-11-28")
12+
db.session.add(b)
13+
14+
try:
15+
db.session.commit()
16+
except IntegrityError as e:
17+
if "duplicate" in str(e.orig).lower():
18+
return jsonify({"error": f"{e.params[0]} already exists in DB"})
19+
else:
20+
raise e
21+
22+
return jsonify(b.to_dict())
23+
24+
25+
@bp.route('/batches/<int:id>', methods=['GET'])
26+
def get_batch(id):
27+
log.debug(f"ENTER /batches/id/{id}")
28+
return jsonify(Batch.query.get_or_404(id).to_dict())
29+
30+
31+
@bp.route('/batches', methods=['GET'])
32+
def get_batches():
33+
log.debug(f"ENTER /batches")
34+
page = request.args.get('page', 1, type=int)
35+
per_page = min(request.args.get('per_page', 10, type=int), 100)
36+
data = Batch.to_collection_dict(Batch.query, page, per_page, 'api.get_batches')
37+
return jsonify(data)
38+
39+
40+
@bp.route('/batches/<int:id>/experiments', methods=['GET'])
41+
def get_batch_experiments(id):
42+
log.debug(f"ENTER /batches/{id}/experiments")
43+
batch = Batch.query.get_or_404(id)
44+
page = request.args.get('page', 1, type=int)
45+
per_page = min(request.args.get('per_page', 10, type=int), 100)
46+
data = Batch.to_collection_dict(batch.experiments, page, per_page, 'api.get_batch_experiments', id=id)
47+
return jsonify(data)

0 commit comments

Comments
 (0)