Skip to content

Instantly share code, notes, and snippets.

View spookylukey's full-sized avatar

Luke Plant spookylukey

View GitHub Profile
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>magit: tmp</title>
<meta name="generator" content="emacs 26.3; htmlfontify 0.21" />
<style type="text/css"><!--
body { font-family: Rec Mono Semicasual; font-stretch: normal; font-weight: 500; font-style: normal; color: #655370; background: #fbf8ef; font-size: 9pt; text-decoration: none; }
span.default { font-family: Rec Mono Semicasual; font-stretch: normal; font-weight: 500; font-style: normal; color: #655370; background: #fbf8ef; font-size: 9pt; text-decoration: none; }
@spookylukey
spookylukey / after_fetch_queryset_mixin.py
Created September 2, 2021 20:31
AfterFetchQuerySetMixin for Django
class AfterFetchQuerySetMixin:
"""
QuerySet mixin to enable functions to run immediately
after records have been fetched from the DB.
"""
# This is most useful for registering 'prefetch_related' like operations
# or complex aggregations that need to be run after fetching, but while
# still allowing chaining of other QuerySet methods.
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@spookylukey
spookylukey / model_utils.py
Created November 14, 2020 10:41
Visidata 2 glue code for Django models and attrs, with type support
from datetime import date
from django.db.models import QuerySet
import visidata
def get_main_attrs(instance):
if hasattr(instance, '_meta'):
return meta_to_col_list(instance._meta)
@spookylukey
spookylukey / views.py
Created May 22, 2020 09:11
get_object_or_404 example
def product_detail(request, slug):
try:
product = Product.objects.get(slug=slug)
except Product.DoesNotExist:
raise Http404()
return TemplateResponse(request, 'products/product_detail.html', {
'product': product,
})
@spookylukey
spookylukey / django-url-checker.py
Created April 25, 2020 05:56
Django checks for mismatched arguments and types in URLs
# Quick and dirty URL checker:
#
# - checks presence of parameters to every callback registered in main urlconf
# - checks for bad additional parameters (args without default)
# - checks type of parameters if possible
# - can handle all Django's built-in path converters,
# and any other that has a type annotation on the `to_python` method
#
# Limitations
# - can't check callbacks defined using ``**kwargs`` (e.g. most CBVs)
showcase production
+--------------------------+--------------------------+------------------------------------------------------------------+ │+--------------------------+--------------------------+------------------------------------------------------------------+
| Column | Type | Modifiers | │| Column | Type | Modifiers |
|--------------------------+--------------------------+------------------------------------------------------------------| │|--------------------------+--------------------------+------------------------------------------------------------------|
| id
@spookylukey
spookylukey / model_utils.py
Last active November 14, 2020 10:42
Visidata 1.x glue code for Django models and attrs, with type support
from datetime import date
import visidata
from django.db.models import QuerySet
def get_main_attrs(instance):
if hasattr(instance, '_meta'):
return meta_to_col_list(instance._meta)
elif hasattr(instance, '__attrs_attrs__'):
return [(field.name, field.type or visidata.anytype)
@spookylukey
spookylukey / django_visidata.py
Last active January 7, 2020 12:17
visidata glue code for Django models and attrs
import visidata
from django.db.models import QuerySet
def get_main_attrs(instance):
retval = []
if hasattr(instance, '_meta'):
for field in instance._meta.get_fields():
if not hasattr(field, 'get_attname'):
continue
@spookylukey
spookylukey / ast.diff
Created January 25, 2019 13:27
Beginnings of a patch to use Python AST for compiling
diff --git a/fluent.runtime/fluent/runtime/codegen.py b/fluent.runtime/fluent/runtime/codegen.py
index f00f750..b76b147 100644
--- a/fluent.runtime/fluent/runtime/codegen.py
+++ b/fluent.runtime/fluent/runtime/codegen.py
@@ -3,6 +3,7 @@ Utilities for doing Python code generation
"""
from __future__ import absolute_import, unicode_literals
+import ast
import keyword
@spookylukey
spookylukey / Confirm.js
Created September 19, 2018 10:16
Elm 0.18 confirm Task
// Native/Confirm.js
var _user$project$Native_Confirm = function () {
var scheduler = _elm_lang$core$Native_Scheduler;
function confirmTask(prompt, successValue, failValue) {
return scheduler.nativeBinding(function (callback) {
if (window.confirm(prompt)) {
callback(scheduler.succeed(successValue));
} else {