Skip to content

Instantly share code, notes, and snippets.

View mmerickel's full-sized avatar

Michael Merickel mmerickel

View GitHub Profile
@mmerickel
mmerickel / localized_routes.py
Created November 5, 2016 17:27
localized routes in pyramid
def add_localized_route(config, name, pattern, factory=None, pregenerator=None, **kw):
orig_factory = factory
def wrapper_factory(request):
lang = request.matchdict['lang']
# determine if this is a supported lang and convert it to a locale,
# likely defaulting to your default language if the requested one is
# not supported by your app
request._LOCALE_ = lang
if orig_factory:
return orig_factory(request)
@mmerickel
mmerickel / migratedb.py
Created January 20, 2017 04:37
alembic db:migrate script
from alembic.config import Config
from alembic.command import stamp
from alembic.command import upgrade
from alembic.migration import MigrationContext
from myapp.model.meta import metadata
from myapp.model.meta import get_engine
log = __import__('logging').getLogger(__name__)
@mmerickel
mmerickel / main.py
Created March 3, 2017 23:39
update shared data in the background
import threading
import time
import transaction
from .models import get_tm_session
def worker(dbsession_factory, registry):
while True:
tm = transaction.TransactionManager(explicit=True)
with tm:
@mmerickel
mmerickel / templating.py
Created April 24, 2017 22:17
localizable strings
import jinja2
from pyramid.renderers import render
from pyramid.threadlocal import get_current_request
from translationstring import TranslationString
import uuid
from myapp.utils.i18n import DEFAULT_DOMAIN
log = __import__('logging').getLogger(__name__)
@mmerickel
mmerickel / Procfile
Last active May 4, 2017 23:33
pyramid on heroku
release: ./entrypoint.sh run alembic -c site.ini upgrade head
web: ./entrypoint.sh run pserve site.ini
@mmerickel
mmerickel / workflow.txt
Last active May 22, 2017 18:50
pyramid exception handling workflow
pyramid_retry +--------> if exc not retryable, render response
if exc retryable, ignore exc and try again
+
|
|
v
pyramid_debugtoolbar
+
@mmerickel
mmerickel / basic_auth_example.py
Last active April 27, 2021 18:27
Basic Auth in Pyramid with simple ACLs
from pyramid.authentication import BasicAuthAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from pyramid.config import Configurator
from pyramid.httpexceptions import HTTPForbidden
from pyramid.httpexceptions import HTTPUnauthorized
from pyramid.security import ALL_PERMISSIONS
from pyramid.security import Allow
from pyramid.security import Authenticated
from pyramid.security import forget
from pyramid.view import forbidden_view_config
@mmerickel
mmerickel / tm.py
Last active July 13, 2018 15:51
a context for helping with explicit transaction managers
from contextlib import contextmanager, suppress
from transaction.interfaces import NoTransaction
class DoomedAbort(Exception):
pass
@contextmanager
def tm_context(tm):
tm.begin()
try:
from nacl.bindings.crypto_secretstream import (
crypto_secretstream_xchacha20poly1305_ABYTES,
crypto_secretstream_xchacha20poly1305_HEADERBYTES,
crypto_secretstream_xchacha20poly1305_KEYBYTES,
crypto_secretstream_xchacha20poly1305_TAG_MESSAGE,
crypto_secretstream_xchacha20poly1305_TAG_FINAL,
crypto_secretstream_xchacha20poly1305_init_pull,
crypto_secretstream_xchacha20poly1305_init_push,
crypto_secretstream_xchacha20poly1305_pull,
crypto_secretstream_xchacha20poly1305_push,
@mmerickel
mmerickel / .env
Last active August 30, 2018 01:16
DEBUG=yes
AUTH_SECRET=seekrit
AUTH_EXPIRES=3600
HTTPS_ONLY=no
WEB_CONCURRENCY=4
TRUSTED_PROXY=127.0.0.1
BIND_HOST=127.0.0.1