Skip to content

Instantly share code, notes, and snippets.

View justanr's full-sized avatar
🏴

anr (they/them) justanr

🏴
View GitHub Profile
@justanr
justanr / commandbus.py
Last active May 24, 2016 04:10
Basic Command Bus example
import inspect
class HandlerNotFound(Exception):
pass
class BasicCommandBus(object):
def execute(self, command):
@justanr
justanr / actually_do_the_thing.py
Last active September 17, 2015 17:17
Todo: Support loading from arbitrary data store (yaml, xml, Mongo, etc)
from .command_bus import DefaultCommandBus, ValidatingCommandBus, LoggingCommandBus, SupportsSelfExecution
from .command_name_formatters import (ChangeToOn_CommandName, ChangeToLowerCaseCommandName,
RemoveCommandFromName, MultipleCommandNameFormatter)
from .command_validators import LogsFailedValidationsValidator, GenerousMappingCommandValidator
from .commands import HelloPersonCommand, HelloPersonHandler
from .dependencies import DependencyStore, BasicDependencySatsifier
from .displayer import CallableDisplayer
from .formatter import StringFormatter
from .inflector import (CallableOrNextInflector, DefaultInflector, InstantiatingInflector
CommandNameInflector, MultipleCommandNameInflector, FirstOneWinsInflector)
class UserNotFound(Exception):
@classmethod
def by_username(cls, username):
return cls("No user found with username: {0}".format(username))
def find_user(username):
user = User.query.filter_by(username==username).first()
if not user:
raise UserNotFound.by_username(username)
return user
@justanr
justanr / _core.py
Last active December 14, 2023 02:47
Clean Architecture In Python
from abc import ABC, ABCMeta, abstractmethod
from collections import namedtuple
from itertools import count
PayloadFactory = namedtuple('PayloadFactory', [
'good', 'created', 'queued', 'unchanged', 'requires_auth',
'permission_denied', 'not_found', 'invalid', 'error'
])
"""
@justanr
justanr / money.py
Last active July 20, 2016 11:43
Example of a small value object representing money.
import decimal
from functools import total_ordering
from numbers import Real
class Context(object):
def __init__(self, **kwargs):
self.context = decimal.Context(**kwargs)
def __enter__(self):
with decimal.localcontext(self.context) as c:
@justanr
justanr / builder.py
Last active February 17, 2016 14:52
Test Builder
from copy import deepcopy
class Builder(object):
def __init__(self, target, *args, **kwargs):
self._target = target
self._kwargs = kwargs
self._args = list(args)
def having(self, *args, **kwargs):
[tox]
envlist = cov-init,py27,py34,py35,py36,cov-report
[testenv]
usedevelop = True
setenv =
COVERAGE_FILE = .coverage.{envname}
PYTHONDONTWRITEBYTECODE = pls
commands =
py.test --cov={toxinidir}/flask_sleepy --cov-report term-missing
@justanr
justanr / example.py
Last active June 15, 2016 02:34
Proof of Concept for adding kinda Implicits to Python
class Thing:
def r(self):
pass
class HasWhatever(metaclass=ImplicitMeta, companion=Thing):
whatever = lambda s: print(s, 1)
@property
def nine(self):
return 'nine'
from datetime import datetime
SUNDAY = 6
class UncleVernonMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
if environ['REQUEST_METHOD'].lower() == 'post' and datetime.now().weekday() == SUNDAY:
from abc import ABCMeta, abstractmethod
ABC = ABCMeta('ABC', (object,), {})
class ConversionStrategy(ABC):
@abstractmethod
def convert(self, a):
raise NotImplementedError
class IntegerConversionStrategy(ConversionStrategy):