Skip to content

Instantly share code, notes, and snippets.

@edelooff
edelooff / design.lark
Created Jul 11, 2020
Parsing a simple DSL with Lark
View design.lark
?start: design
design: UCASE SIZE flower* INT+
flower: INT+ LCASE
SIZE: ("S"|"L")
%import common.LCASE_LETTER -> LCASE
%import common.UCASE_LETTER -> UCASE
%import common.INT
%ignore "\n"
@edelooff
edelooff / expression.py
Created Jun 12, 2020
Evaluating SQLAlchemy expressions in Python (for ORM objects and such)
View expression.py
from __future__ import annotations
import operator
from collections import deque
from enum import Enum, auto
from typing import Any, Dict, Iterator, NamedTuple, Optional, Tuple
from sqlalchemy import Column
from sqlalchemy.sql import operators
from sqlalchemy.sql.elements import (
@edelooff
edelooff / deep_add.py
Last active Jun 4, 2020
Sum any nested level of iterables, with optional initial value
View deep_add.py
from collections.abc import Iterable
def deep_add(*values, start=None):
def _traverser(parts):
for part in parts:
if isinstance(part, Iterable):
yield from _traverser(part)
else:
yield part
@edelooff
edelooff / column_flag.py
Last active May 12, 2020
SQLAlchemy columns with a hybrid property boolean flag to check for presence (non-nullness)
View column_flag.py
from sqlalchemy import (
Column,
Integer,
DateTime,
Text,
create_engine,
func)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.inspection import inspect
@edelooff
edelooff / sqla_secondary.py
Created Apr 24, 2020
SQLAlchemy secondary join
View sqla_secondary.py
from sqlalchemy import (
Column,
ForeignKey,
Integer,
Text,
create_engine)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (
relationship,
sessionmaker)
@edelooff
edelooff / merge_benchmark.py
Created Apr 11, 2020
Benchmarking functions to merge two sorted lists
View merge_benchmark.py
"""Merging two sorted lists in Python in four ways.
1. The "stupid naive" way of adding them together and sorting the whole thing.
This should be pretty fast as timsort is designed to be fast on partially
sorted lists. However, it uses more memory and might not scale very well?
2. The "picking an algorithm designed for this" way of using heapq.merge. This
provides a generator that walks the two lists without additional use of
memory.
3. The "C-way" of indexing our way through two lists. This being Python though,
we will be yielding the values though (wrapping the resulting generator in
@edelooff
edelooff / duplicate_perf.py
Last active Oct 12, 2018
Collection length checking before determining duplicate items
View duplicate_perf.py
import timeit
NO_DUPLICATES = (
'one', 'two', 'three', 'four', 'five', 'six',
'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve')
WITH_DUPLICATES = (
'one', 'two', 'three', 'four', 'five', 'six',
'seven', 'one', 'nine', 'two', 'eleven', 'three')
@edelooff
edelooff / declarative.py
Created Jun 2, 2018
Example uses of Kalpa
View declarative.py
from kalpa import Root, Node, branch
USERS = {...}
class Root(Root):
"""Traversal root for Pyramid application."""
users = branch('UserCollection')
@edelooff
edelooff / feistel.py
Last active Apr 10, 2018
Simple Python Feistel encoder/decoder
View feistel.py
"""A simple 8-round Feistel network to encode/decode 8-bit integers.
See https://en.wikipedia.org/wiki/Feistel_cipher for construction details.
"""
from random import randint
ROUNDS = 8
KEYS = [(randint(11, 19), randint(1, 200)) for _ in range(ROUNDS)]
@edelooff
edelooff / app.py
Created Aug 16, 2016
Pyramid 1.7 view deriver to alert on view_configs that lack a permission setting.
View app.py
def permission_check(view, info):
"""View deriver to verify all view configs define a 'permission'.
This deriver prints a message for each view config that lacks a permission
setting. Regardless of this setting, the original view is returned.
"""
opts = info.options
if opts.get('permission') is None:
name_parts = [opts['view'].__module__, opts['view'].__name__]
if opts['attr'] is not None:
You can’t perform that action at this time.