-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'professional' of https://github.com/flaxandteal/python-…
…course into professional
- Loading branch information
Showing
91 changed files
with
1,679 additions
and
17 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
*.egg-info | ||
.tox | ||
Pipfile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
FROM python:3-alpine | ||
|
||
RUN addgroup -S user && adduser user -S -G user | ||
|
||
WORKDIR /home/user/ | ||
|
||
COPY requirements.txt . | ||
COPY gunicorn_config.py . | ||
COPY setup.py . | ||
COPY setup.cfg . | ||
|
||
RUN pip install gunicorn | ||
RUN pip install -r requirements.txt | ||
|
||
USER user | ||
|
||
EXPOSE 5000 | ||
|
||
ENTRYPOINT [] | ||
|
||
CMD gunicorn --config ./gunicorn_config.py magnumopus.index:app | ||
|
||
COPY magnumopus magnumopus |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
Magnum Opus | ||
=========== | ||
|
||
This recipe maker | ||
and averaged over repeated attempts, returning an average round trip time. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
* One unit of each of the substances Mercury, Salt and Sulphur are mixed, using my "Alembic" (mixing pot), giving one unit of another substance, Gloop | ||
* Any attempt to mix anything other than those three substances, gives Sludge, another substance | ||
* Substances can undergo several Processes in my Alembic - they can be Cooked, Washed, Pickled or Fermented | ||
* If Gloop is Cooked, Washed, Pickled and Fermented, in that order, it is the Philosopher's Stone (panacea and cure of all ills) | ||
[* To process a Substance, at least one unit must be in my Pantry, including Gloop - even when freshly processed/created, it must be stored there before re-use (to cool)] | ||
|
||
Final rule: | ||
GROUP 1: When I process a substance, using any process, it becomes a different substance | ||
GROUP 2: When I process a substance, its state changes but is essentially the same substance (NB: mixing is not a process) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
version: "3" | ||
services: | ||
web: | ||
build: . | ||
ports: | ||
- 5000:5000 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
port = '5000' | ||
bind = "0.0.0.0:%s" % port | ||
workers = 1 | ||
timeout = 600 | ||
reload = False |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
from .substance import Substance | ||
|
||
class NotEnoughSubstancesToMixException(Exception): | ||
pass | ||
|
||
class UnknownProcessException(Exception): | ||
pass | ||
|
||
|
||
MIXTURES = { | ||
('Mercury', 'Salt', 'Sulphur'): 'Gloop' | ||
} | ||
|
||
|
||
class Alembic: | ||
_nature_of_unknown_mixture = 'Sludge' | ||
|
||
@staticmethod | ||
def _produce(nature): | ||
return Substance(nature=nature) | ||
|
||
def mix(self, *substances): | ||
if len(substances) < 2: | ||
raise NotEnoughSubstancesToMixException() | ||
|
||
constituents = [substance.nature for substance in substances] | ||
|
||
# This gives us a canonical, ordered way of expressing our | ||
# constituents that we can use as a recipe look-up | ||
ingredient_list = tuple(sorted(constituents)) | ||
|
||
try: | ||
nature = MIXTURES[ingredient_list] | ||
except KeyError: | ||
nature = self._nature_of_unknown_mixture | ||
|
||
return self._produce(nature) | ||
|
||
def process(self, process_name, substance): | ||
if process_name == 'ferment': | ||
result = substance.ferment() | ||
elif process_name == 'cook': | ||
result = substance.cook() | ||
elif process_name == 'wash': | ||
result = substance.wash() | ||
elif process_name == 'pickle': | ||
result = substance.pickle() | ||
else: | ||
raise UnknownProcessException() | ||
|
||
return result |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from . import create_app | ||
|
||
app = create_app() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import logging | ||
|
||
def init_app(app): | ||
app.logger.addHandler(logging.StreamHandler()) | ||
app.logger.setLevel(logging.INFO) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from .base import db | ||
|
||
def init_app(app): | ||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' | ||
db.init_app(app) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from flask_sqlalchemy import SQLAlchemy | ||
|
||
db = SQLAlchemy() |
23 changes: 23 additions & 0 deletions
23
021-conical-domain/magnum_opus/magnumopus/models/substance.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
class SubstanceMustBeFreshToProcessException(Exception): | ||
pass | ||
|
||
class Substance: | ||
def __init__(self, nature='Unknown'): | ||
self.nature = nature | ||
self.state = [] | ||
|
||
def _process(self, process_name): | ||
self.state.append(process_name) | ||
return self | ||
|
||
def cook(self): | ||
return self._process('cooked') | ||
|
||
def pickle(self): | ||
return self._process('pickled') | ||
|
||
def ferment(self): | ||
return self._process('fermented') | ||
|
||
def wash(self): | ||
return self._process('washed') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
class Pantry: | ||
def __init__(self): | ||
self._cupboard = [] | ||
|
||
def add_substance(self, substance): | ||
self._cupboard.append(substance) | ||
|
||
def find_substance_by_nature(self, nature): | ||
return [substance for substance in self._cupboard if substance.nature == nature][0] | ||
|
||
def count_all_substances(self): | ||
return len(self._cupboard) |
Empty file.
14 changes: 14 additions & 0 deletions
14
021-conical-domain/magnum_opus/magnumopus/repositories/pantry.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
class Pantry: | ||
_cupboard = [] | ||
|
||
def __init__(self): | ||
pass | ||
|
||
def add_substance(self, substance): | ||
self._cupboard.append(substance) | ||
|
||
def find_substances_by_nature(self, nature): | ||
return [substance for substance in self._cupboard if substance.nature == nature] | ||
|
||
def count_all_substances(self): | ||
return len(self._cupboard) |
8 changes: 8 additions & 0 deletions
8
021-conical-domain/magnum_opus/magnumopus/resources/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
from flask_restful import Api | ||
from . import substance | ||
from . import alembic_instruction | ||
|
||
def init_app(app): | ||
api = Api(app) | ||
substance.init_app(app, api) | ||
alembic_instruction.init_app(app, api) |
49 changes: 49 additions & 0 deletions
49
021-conical-domain/magnum_opus/magnumopus/resources/alembic_instruction.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
from flask_restful import Resource, reqparse | ||
from ..repositories.pantry import Pantry | ||
from ..models.substance import Substance | ||
from ..schemas.substance_schema import SubstanceSchema | ||
from ..services.alembic_instruction_handler import AlembicInstructionHandler, AlembicInstruction | ||
|
||
parser = reqparse.RequestParser() | ||
parser.add_argument('instruction_type') | ||
parser.add_argument('action') | ||
parser.add_argument('natures') | ||
|
||
substance_schema = SubstanceSchema() | ||
|
||
class AlembicInstructionResource(Resource): | ||
def get(self): | ||
"""This should return past requests/commands.""" | ||
pass | ||
|
||
def post(self): | ||
""" | ||
Add an instruction for the alembic. | ||
Note that POST is _not_ assumed to be idempotent, unlike PUT | ||
""" | ||
|
||
args = parser.parse_args() | ||
instruction_type = args['instruction_type'] | ||
|
||
pantry = Pantry() | ||
|
||
instruction_handler = AlembicInstructionHandler() | ||
|
||
# This could do with deserialization... | ||
instruction = AlembicInstruction( | ||
instruction_type=args.instruction_type, | ||
natures=args.natures.split(','), | ||
action=args.action | ||
) | ||
|
||
# Crude start at DI... see flask-injector | ||
result = instruction_handler.handle(instruction, pantry) | ||
|
||
pantry.add_substance(result) | ||
|
||
return substance_schema.dump(result) | ||
|
||
|
||
def init_app(app, api): | ||
api.add_resource(AlembicInstructionResource, '/alembic_instruction') |
Oops, something went wrong.