Skip to content

Instantly share code, notes, and snippets.

View mahmoud's full-sized avatar
Back on the grid!

Mahmoud Hashemi mahmoud

Back on the grid!
View GitHub Profile
from boltons.iterutils import is_scalar, remap
garbagey = {'attributes':
{'vars':
{'network':
{'addresses': []}},
'characteristics':
{'chars': 'abc',
'misc_obj': {},
'others': [1, 2]}
@mahmoud
mahmoud / glom_post_data_trace.py
Created January 13, 2023 21:14
Contrasting Python default stack trace vs Glom data trace
# python 3.10 with glom 23
>>> import glom
>>> target = {'planets': [{'name': 'earth', 'moons': 1}]}
>>> spec = ('planets', ['rings']) # a spec we expect to fail
>>> glom.glom(target, spec)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mahmoud/projects/glom/glom/core.py", line 2297, in glom
raise err
glom.core.PathAccessError: error raised while processing, details below.
@mahmoud
mahmoud / conftest.py
Last active March 10, 2021 08:51
Excerpted tidbits from our Django app's conftest during the Django 1 to 2 and Python 2 to 3 migration ("TR" stands for "Tech Refresh", circa mid 2020), with parts related to wrapping the test session in a DB transaction, and other parts related to bulk-skipping functionality. Tested on py2.7/3.6, Django 1.11/2.0.x, pytest 4.6.11.
# -*- coding: utf-8 -*-
"""
Common test fixtures for pytest
"""
from __future__ import print_function, unicode_literals
import os
from itertools import groupby
import pytest
@mahmoud
mahmoud / design.py
Last active July 28, 2020 08:05
improved branched glom error ascii design
before = \
'''
Traceback (most recent call last):
File "tmp.py", line 9, in _make_stack
glom(target, spec)
File "/home/mahmoud/projects/glom/glom/core.py", line 2024, in glom
raise err
glom.core.PathAccessError: error raised while processing, details below.
Target-spec trace (most recent last):
@mahmoud
mahmoud / py3_except.py
Created June 26, 2020 07:08
python3 exception var deleting
$ python3
Python 3.7.7 (default, Mar 10 2020, 17:25:08)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> e = 'hi'
>>> try:
... 1/0
... except Exception as e:
... pass
...
@mahmoud
mahmoud / py3_partials.py
Created March 17, 2020 06:56
TIL py3 partials don't mind multiple values for arguments
>>> def f(a, b):
... return a, b
...
# py27
>>> partial(f, b=1)(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got multiple values for keyword argument 'b'
@mahmoud
mahmoud / basic_argparse_framework.py
Last active May 1, 2019 00:56
(based on years of argparse experience, also serves to demonstrate why argparse is not so good)
def create_parser():
root_parser = ArgumentParser(description='article fetch operations')
root_parser.add_argument('--list_home', help='list lookup directory')
add_subparsers(root_parser.add_subparsers())
return root_parser
def add_subparsers(subparsers):
parser_list = subparsers.add_parser('list')
parser_list.add_argument('target_list', nargs='?',
>>> x = [1]
>>> y = (2, 3)
>>> x + y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
>>> x += y
>>> x
[1, 2, 3]
@mahmoud
mahmoud / get_leaf_paths.py
Created December 22, 2018 20:27
By request of @hynek :)
# https://twitter.com/hynek/status/1076048147074478080
from boltons.iterutils import remap
DATA = {"a": {"b": 1, "c": {"d": 2}}}
OUT = ["a.b", "a.c.d"]
def get_leaf_paths(root, with_val=False):
@mahmoud
mahmoud / migration_checker.sh
Last active January 24, 2019 22:05
Just a little thing to look for (potentially conflicting) migration changes across all branches. (linux/mac os/bsd compatible)
find . -type d -name migrations -print0 -exec sh -c 'echo && echo "Checking: '{}'" && git --no-pager log --exit-code --all --not master --stat --pretty=format:"%n%ad - %d - %an: %s" --no-merges --after="one week ago" -- '{}' && echo "No changes for: '{}'" || echo "Finished: '{}'"' \;