Skip to content

Instantly share code, notes, and snippets.

View justanr's full-sized avatar
🏴

anr (they/them) justanr

🏴
View GitHub Profile
#!/usr/bin/env python3
import random as _rng
class ShuffleQueue:
def __init__(self, items, rng=None):
self._idx = 0
self._items = items
self._rng = rng or _rng
@justanr
justanr / deprecate.py
Last active April 16, 2018 03:03
Setting up deprecations of Pluggy Hooks
import sys
import warnings
import inspect
from pluggy import HookimplMarker, HookspecMarker, PluginManager, _HookCaller, normalize_hookimpl_opts, HookImpl
class MetadataHookspecMarker(HookspecMarker):
"""
Allows storing arbitrary metadata on the hookspec options
instead of what Pluggy sets by default.
"""
from abc import ABCMeta, abstractmethod
ABC = ABCMeta('ABC', (object,), {})
class ConversionStrategy(ABC):
@abstractmethod
def convert(self, a):
raise NotImplementedError
class IntegerConversionStrategy(ConversionStrategy):
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:
@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'
[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 / 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):
@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 / _core.py
Last active September 10, 2024 19:53
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'
])
"""
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