Skip to content

Instantly share code, notes, and snippets.

View FGtatsuro's full-sized avatar

FGtatsuro FGtatsuro

View GitHub Profile
@FGtatsuro
FGtatsuro / flatten.py
Last active July 15, 2018 04:09
Generic flatten function
import functools
import re
from typing import Any, Callable, Generator, Iterable, Iterator
def split_normal(word: str, sep: str = ',') -> Iterator[str]:
return iter(word.split(sep))
def split_camel(word: str) -> Generator[str, None, None]:
@FGtatsuro
FGtatsuro / datetime_policy.py
Created July 11, 2018 03:28
時刻の扱い
# FYI: https://gist.github.com/FGtatsuro/06387542af093d98ef5b
import datetime
# timezone=utcのawareオブジェクトを基準にする
time_info = datetime.datetime.now(tz=datetime.timezone.utc)
print(time_info)
# ローカライズしたawareオブジェクト
# 夏時間その他を扱う必要がなければこれで十分
@FGtatsuro
FGtatsuro / subprocess_run.py
Created July 10, 2018 16:00
subprocess.run でシェル実行が簡単になる
# FYI: https://docs.python.org/ja/3/library/subprocess.html#subprocess.run
import subprocess
proc = subprocess.run(["find . -type f -name '*' | grep -v pycache"],
stdout=subprocess.PIPE, shell=True, encoding='utf-8')
print(f'status_code:{proc.returncode}')
print(proc.stdout)
@FGtatsuro
FGtatsuro / descriptor.py
Created July 10, 2018 00:10
デスクリプタにアクセスする際に渡される情報
class Desp:
def __get__(self, instance, owner):
# self: デスクリプタ
# instance: デスクリプタを属性として持つインスタンス
# owner: デスクリプタを属性として持つクラス
print(f'__get__self:{self}')
print(f'__get__instance:{instance}')
print(f'__get__owner:{owner}')
@FGtatsuro
FGtatsuro / initsubclass.py
Last active July 9, 2018 14:09
__init_subclass__ でメタクラスを置きかえる際に使えそうな属性
class Piyo:
pass
# FYI: https://docs.python.jp/3/reference/datamodel.html#object.__init_subclass__
class Philosopher:
def __init_subclass__(cls, default_name, **kwargs):
# FYI: https://docs.python.jp/3/library/stdtypes.html#special-attributes
print(cls.hoge)
print(cls.__class__)
print(cls.__class__.__name__)
@FGtatsuro
FGtatsuro / metaclass.py
Created July 9, 2018 13:42
メタクラスの__new__と__prepare__
# FYI: https://docs.python.jp/3/reference/datamodel.html#metaclass-example
import collections
class OrderedClass(type):
@classmethod
def __prepare__(metacls, clsname, bases, **kwds):
# metacls: メタクラスに指定したtype
# classname: メタクラスを適用したクラスの名前
@FGtatsuro
FGtatsuro / setup.cfg
Last active July 16, 2018 11:40
default setup.cfg
# NOTE: This section name isn't valid on pytest 2.x.
[tool:pytest]
addopts = --junit-xml=results/results.xml
[pycodestyle]
max-line-length = 100
# FYI: http://www.pydocstyle.org/en/stable/error_codes.html
# Conflict:
# - D203 vs D211 (FYI: https://github.com/PyCQA/pydocstyle/issues/141)
@FGtatsuro
FGtatsuro / doctest.sh
Created July 7, 2018 08:31
Run doctest for modules including relative import statements
# Relative import problem
# FYI: https://stackoverflow.com/questions/4047227/doctest-and-relative-imports
#
find tests -name '*.py' | \
# Filtering
grep -v -e 'init.py' -e 'config' | \
# This step may be only valid for regular package.
# https://www.python.org/dev/peps/pep-0420/
sed -e 's|.py||g' -e 's|/|.|g' | \ # This
xargs -L 1 -I {} python -c 'import {}, doctest; doctest.testmod({}, verbose=True)'
@FGtatsuro
FGtatsuro / dev.py
Last active July 5, 2018 23:59
General fixtures of pytests
from ..misc import Namespace
config1 = 'config1_dev'
config2 = Namespace({
'config2_inner1_key1': {'config2_inner2_key1': 'config2_value1'},
'config2_inner1_key2': Namespace(config2_inner2_key2='config2_value2')
})
# dict is converted to Namespace
@FGtatsuro
FGtatsuro / _requests.py
Last active July 6, 2018 04:59
General handlers of requests
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from json import JSONDecodeError
from pprint import pformat
from requests import Session
from ._logging import get_logger