Skip to content

Instantly share code, notes, and snippets.

Avatar
🏡
Playing catch up!

Mahmoud Hashemi mahmoud

🏡
Playing catch up!
View GitHub Profile
@mahmoud
mahmoud / conftest.py
Last active Mar 10, 2021
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.
View conftest.py
# -*- 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 Jul 28, 2020
improved branched glom error ascii design
View design.py
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 Jun 26, 2020
python3 exception var deleting
View py3_except.py
$ 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 Mar 17, 2020
TIL py3 partials don't mind multiple values for arguments
View py3_partials.py
>>> 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
(based on years of argparse experience, also serves to demonstrate why argparse is not so good)
View basic_argparse_framework.py
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='?',
View list_meets_tuple.py
>>> 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]
View get_leaf_paths.py
# 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 Jan 24, 2019
Just a little thing to look for (potentially conflicting) migration changes across all branches. (linux/mac os/bsd compatible)
View migration_checker.sh
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: '{}'"' \;
@mahmoud
mahmoud / zpool_replace_history.sh
Created Nov 19, 2018
first zpool replace on ubuntu
View zpool_replace_history.sh
# needs to be parted'd before replacing.
$ sudo parted /dev/disk/by-id/ata-HGST_HDN724030ALE640_PK2234P9K09E0Y
GNU Parted 3.2
Using /dev/sdh
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel GPT
(parted) quit
# then we need to make the ashift=9 because this is an older zfs pool
$ sudo zpool replace -o ashift=9 liu 18069869553946727791 /dev/disk/by-id/ata-HGST_HDN724030ALE640_PK2234P9K09E0Y
View old_style_class.py
>>> class Lol:
... pass
...
>>> Lol()
<__main__.Lol instance at 0x7fb2bde403b0>
>>> x = Lol()
>>> x
<__main__.Lol instance at 0x7fb2bde403f8>
>>> x.__class__
<class __main__.Lol at 0x7fb2bde2ce88>