Skip to content

Instantly share code, notes, and snippets.

View kezabelle's full-sized avatar

Keryn Knight kezabelle

View GitHub Profile
@kezabelle
kezabelle / mike_papa.py
Created August 5, 2016 08:48
how to change the display value for a ModelChoiceField, for mike_papa in #django IRC
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "hello"
# or
class MyForm(Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
if 'myfield' in self.fields:
@kezabelle
kezabelle / tga.py
Last active August 3, 2016 13:56
for tga in #django IRC.
@contextmanager
def copyable(obj):
oldval = copy(obj.pk)
obj.pk = None
yield obj
obj.pk = oldval
with copyable(obj) as tosave: # I might've forgotten the as part initially.
newobj = tosave.save()
@kezabelle
kezabelle / blackcross.py
Created August 2, 2016 14:10
Get the queryset with the most results, for blackcross in #django IRC
querysets = (
Page.objects.filter(...),
Something.objects.exclude(...),
Etc.objects.filter(...),
)
results = {qs.count(): (index, qs) for index, qs in enumerate(querysets)}
best = max(results)
worst = min(results)
if best > 0:
best_counts = results[best][1]
@kezabelle
kezabelle / bradfordli123.py
Created July 27, 2016 09:41
For bradfordli123 in #django IRC
import operator
teammembers = request.GET.getlist("teammembers")
all_qs = []
for teammate in teammembers:
name = teammate.strip().split()
# nb: assuming only one space ("forename surname") isn't great.
try:
first_name = name[0].strip()
except IndexError:
@kezabelle
kezabelle / peek.py
Created June 15, 2016 10:07
Peeking into a class' API usage by smashing over __getattribute__
from collections import namedtuple, defaultdict
from operator import itemgetter
ClassUsage = namedtuple('ClassUsage', 'cls attrs')
AttributeUsage = namedtuple('AttributeUsage', 'name count')
attrname = itemgetter(0)
attrcount = itemgetter(1)
@kezabelle
kezabelle / getfiles.py
Created June 10, 2016 10:21
how one might "get" a bunch of related files given a single file node, based on the original filepath.
import os, codecs, functools
from collections import namedtuple
from django.template.loader import get_template
from django.template import TemplateDoesNotExist
MISSING = object()
def django_handler(path):
@kezabelle
kezabelle / lol.py
Created June 3, 2016 10:09
for BPL in #django IRC
from django.template import TemplateDoesNotExist, get_template
def path_to_file(request, template_name):
# assert template_name in some_safe_list if you want.
try:
get_template(template_name)
except TemplateDoesNotExist:
return render("some_fallback.html", request, context)
return render(template_name, request, context)
@kezabelle
kezabelle / preshow.py
Created June 1, 2016 15:18
piddling around with trying to proxy objects to discover their API.
import argparse
import os
import sys
from wrapt import CallableObjectProxy, wrap_object
def _dot_lookup(thing, comp, import_path):
try:
return getattr(thing, comp)
except AttributeError:
import re
import markdown2
z = re.compile('\<(?P<lol>h[1-6])\>(.+?)\<\/(?P=lol)\>')
x = """
#### lol
## lol
<h1>lol</h1>
\n```
<h2>heh</h2>
```
@kezabelle
kezabelle / pyyyyy.py
Last active May 27, 2016 14:50
parsing CSS comments?
import re
x = r"""
/* comment 1 */
/***
comment 2
***/
/*=================
comment 3
*/
/*comment 4*/