Skip to content

Instantly share code, notes, and snippets.

View defnull's full-sized avatar

Marcel Hellkamp defnull

View GitHub Profile
# Pickle and unpickle objects in a secure way. Useful for cookies.
# Warning: The data is NOT encrypted, but signed. The user can read the data,
# but not change it.
import hmac
import cPickle
def encode(data, key):
''' Encode and sign a pickle-able object. Return a string '''
msg = cPickle.dumps(data, -1).encode('base64').strip()
class ContextLocal(object):
__slots__ = ('_local_init_args', '_local_contexts', '_local_context_ident')
def __new__(cls, *args, **kwargs):
self = object.__new__(cls)
object.__setattr__(self, '_local_init_args', (args, kwargs))
object.__setattr__(self, '_local_contexts', {})
object.__setattr__(self, '_local_context_ident', lambda: 0)
return self
def set_context_ident(self, func):
object.__setattr__(self, '_local_context_ident', func)
@defnull
defnull / bench.py
Created January 20, 2011 21:44
Python Framework Benchmark
import time
import sys
import StringIO
class Bench(object):
def __init__(self, flags=None):
''' Flags:
* cgi: Build a new app every time.
* dny: Return the :name part of a /hello/:name url.
'''
@defnull
defnull / gist:1036791
Created June 20, 2011 22:51
Bottle "Hello World" benchmark
import sys
import bottle
from time import time
app = bottle.Bottle()
@app.route('/')
def hello():
return 'Hello World!'
def bench(n):
@defnull
defnull / bench.py
Created August 28, 2011 18:57
Small WSGI benchmark (removes the HTTP or socket layer)
import sys
import bottle
from time import time
app = bottle.Bottle()
@app.route('/')
def hello():
return 'Hello World!'
def bench(n):
@defnull
defnull / gist:1216497
Created September 14, 2011 13:06
Subclassable ViewPlugin
class ViewPlugin(object):
''' Automatically renders a template for callbacks that return a dictionary.
Subclasses may overrule some methods to implement engine specific
features. They must implement :meth:`prepare_file` and
:meth:`prepare_source`, should implement :meth:`prepare_factory` and may
implement :meth:`assemble_config`, :meth:`is_source`, :meth:`locate` and
additional methods.
'''
@defnull
defnull / gist:1224387
Created September 17, 2011 21:22
Deploy a Bottle app on Heroku
mkdir heroku
cd heroku/
virtualenv --no-site-packages env
source env/bin/activate
pip install bottle gevent
pip freeze > requirements.txt
cat >app.py <<EOF
import bottle
import os
@defnull
defnull / tcping.py
Created December 4, 2011 21:11
TCPing
def ping(server, port):
''' Check if a server accepts connections on a specific TCP port '''
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server, port))
s.close()
return True
except socket.error:
return False
@defnull
defnull / example.py
Created February 11, 2012 21:54
Bottle templates example
import bottle
app = bottle.Bottle()
# Template configuration
app.views.adapter = Jinja2Adapter
app.views.options['extensions'] = ['jinja2.ext.i18n']
app.views.globals['some_variable'] = 'some_value'
app.views.add_path('templates/', root=__file__)
# Shortcut to render templates directly.
@defnull
defnull / example.py
Created March 13, 2012 20:52
Bottle ResourceManager Preview
from bottle import Bottle
app = Bottle()
# Resource configuration (relative to current file)
app.resources.add_path('./data/', base=__file__)
# Override default resources with files in test directory
app.resources.add_path('/home/marc/dev/test_data/', index=0)