Examples and feature higlights#
Stopwatch context manager#
Simply measuring duration of code block
import time
from seveno_pyutil import Stopwatch
with Stopwatch() as stopwatch:
# do some stuff
time.sleep(0.1)
print("%.2f ms" % stopwatch.duration_ms)
# 100.22 ms
Inverting a dict#
from seveno_pyutil import inverted
d = {'a': 1, 'b': 2}
inverted(d)
# => {1: 'a', 2: 'b'}
Generating file checksum#
import hashlib
from seveno_pyutil import file_checksum
file_checksum('/tmp/foo.bar', hashlib.md5)
# => '183590151a8af34e39e8e35351bfb470'
Forcing logs to always emit single line of text + optionally colored logs#
import logging
from logging.config import dictConfig
dictConfig({
'version': 1,
'formatters': {
'syslog': {
'()': 'seveno_pyutil.SingleLineFormatter',
'format': '[%(levelname)s] %(message)s'
},
'console': {
'()': 'seveno_pyutil.SingleLineColoredFormatter',
'format': '[%(log_color)s%(levelname)s%(reset)s] %(message)s'
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'console',
'stream': 'ext://sys.stdout'
},
'syslog': {
'class': 'logging.handlers.SysLogHandler',
'level': 'DEBUG',
'formatter': 'syslog',
'address': ['127.0.0.1', 514],
'facility': 'local1',
'socktype': 'ext://socket.SOCK_DGRAM'
}
},
'loggers': {
'foobar': {
'level': 'DEBUG',
'handlers': ['console', 'syslog']
}
}
})
logger = logging.getLogger('foobar')
try:
raise RuntimeError('ZOMG!')
except RuntimeError:
logger.debug("Wat?", exc_info=True)
Which will emmit this to syslog:
Jun 26 11:10:11 localhost [DEBUG] Wat?\nTraceback (most recent call last):\n File "<ipython-input-2-cd7145398458>", line 2, in <module>\n raise RuntimeError('ZOMG!')\nRuntimeError: ZOMG!
And this to console:
[DEBUG] Wat?\nTraceback (most recent call last):\n File "<ipython-input-2-cd7145398458>", line 2, in <module>\n raise RuntimeError('ZOMG!')\nRuntimeError: ZOMG!
Testing if we are dealing with blank data#
from seveno_pyutil import is_blank
is_blank(None)
# => True
is_blank("")
# => True
is_blank(" \t \r \r\n \n ")
# => True
is_blank([])
# => True
is_blank(0)
# => True
is_blank(1)
# => False
is_blank("Foo")
# => False
is_blank("42")
# => False
is_blank("0")
# => False
Processing iterable in batches#
from functools import partial
import random
import time
import threading
from seveno_pyutil import in_batches
def process_item(foo):
time.sleep(random.random() * 0.5)
print(foo)
for batch in in_batches(range(42), of_size=5):
workers = [
threading.Thread(target=partial(process_item, itm))
for itm in batch
]
for worker in workers:
worker.start()
for worker in workers:
worker.join()
print("batch %s done" % batch)
Iterating over range of year months#
from datetime import date
from seveno_pyutil import iter_year_month
for _ in iter_year_month(
date(2022, 10, 13), date(2023, 4, 17)
):
print(_)
# 2022-11-01
# 2022-12-01
# 2023-01-01
# 2023-02-01
# 2023-03-01