Skip to content

Commit af9bac9

Browse files
authored
Merge pull request #6 from jeantardelli/chapter05_tdd_high_gear_low_gear
Chapter05 tdd high gear low gear
2 parents e299066 + 38aa82a commit af9bac9

File tree

22 files changed

+180
-146
lines changed

22 files changed

+180
-146
lines changed

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ dist: xenial
22
language: python
33
python: 3.8
44

5+
install:
6+
- pip3 install -r requirements.txt
7+
58
script:
69
- make all

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ RUN pip install -r /tmp/requirements.txt
66
RUN mkdir -p /code
77
COPY *.py /code/
88
WORKDIR /code
9-
ENV FLASK_APP=flask_app.py FLASK_DEBUG=1 PYTHONBUFFERED=1
9+
ENV FLASK_APP=entrypoints/flask_app.py FLASK_DEBUG=1 PYTHONBUFFERED=1
1010
CMD flask run --host=0.0.0.0 --port=80

adapters/__init__.py

Whitespace-only changes.

orm.py renamed to adapters/orm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from sqlalchemy import Table, MetaData, Column, Integer, String, Date, ForeignKey
22
from sqlalchemy.orm import mapper, relationship
33

4-
import model
4+
from domain import model
55

66
metadata = MetaData()
77

repository.py renamed to adapters/repository.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import abc
2-
import model
2+
from domain import model
33

44
class AbstractRepository(abc.ABC):
55
@abc.abstractmethod

domain/__init__.py

Whitespace-only changes.
File renamed without changes.

entrypoints/__init__.py

Whitespace-only changes.

entrypoints/flask_app.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from datetime import datetime
2+
from flask import Flask, request
3+
from sqlalchemy import create_engine
4+
from sqlalchemy.orm import sessionmaker
5+
6+
import config
7+
from domain import model
8+
from adapters import orm, repository
9+
from service_layer import services
10+
11+
orm.start_mappers()
12+
get_session = sessionmaker(bind=create_engine(config.get_mysql_uri()))
13+
app = Flask(__name__)
14+
15+
@app.route("/add_batch", methods=["POST"])
16+
def add_batch():
17+
session = get_session()
18+
repo = repository.SqlAlchemyRepository(session)
19+
eta = request.json["eta"]
20+
if eta is not None:
21+
eta = datetime.fromisoformat(eta).date()
22+
services.add_batch(
23+
request.json["ref"],
24+
request.json["sku"],
25+
request.json["qty"],
26+
eta,
27+
repo,
28+
session,
29+
)
30+
return "OK", 201
31+
32+
33+
@app.route("/allocate", methods=["POST"])
34+
def allocate_endpoint():
35+
session = get_session()
36+
repo = repository.SqlAlchemyRepository(session)
37+
try:
38+
batchref = services.allocate(
39+
request.json["orderid"],
40+
request.json["sku"],
41+
request.json["qty"],
42+
repo,
43+
session,
44+
)
45+
except (model.OutOfStock, services.InvalidSku) as e:
46+
return {"message": str(e)}, 400
47+
48+
return {"batchref": batchref}, 201

flask_app.py

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)