Tools we use at Somenergia and can be useful
Project description
somenergia-utils
This module includes different Python modules and scripts ubiquiously used on scripts in SomEnergia cooperative but with no entity by themselves to have their own repository.
venv
: run a command under a Python virtual enviromentsql2csv.py
: script to run parametrized sql queries and get the result as (tab separated) csv.dbutils.py
: module with db related functionsfetchNs
: a generator that wraps db cursors to fetch objects with attributes instead of psycopg arraysnsList
: uses the former to build a list of such object (slower but maybe convinient)csvTable
: turns the results of a query into a tab separated table with proper header names
sheetfetcher.py
: convenience class to retrieve data from gdrive spreadshetstrace
: quickly enable and disable tracing function calling by decorating them with@trace
testutils
: module with common test utilitiestestutils.assertNsEqual
: structure equality assertion using sorted key yaml dumpstestutils.destructiveTest
: decorator to avoid running destructive tests in production
erptree
: extracts an object and its children from the erp (erppeek, odoo) with controlled recursion
venv
script
This script is useful to run Python scripts under a given virtual environment. It is specially useful to run Python scripts from crontab lines.
usage: venv /PATH/TO/PYTHON/VIRTUALENV COMMAND [PARAM1 [PARAM2...]]
sql2csv.py
script
Runs an SQL file and outputs the result of the query as tabulator separated csv.a
You can provide query parameters either as yamlfile or as commandline options.
sql2csv.py <sqlfile> [<yamlfile>] [--<var1> <value1> [--<var2> <value2> ..] ]
dbutils
Python module
Convenient cursor wrappers to make the database access code more readable.
Example:
import psycopg2, dbutils
db = psycopg2.connect(**dbconfiguration)
with db.cursor() as cursor :
cursor.execute("SELECT name, age FROM people")
for person as dbutils.fetchNs(cursor):
if person.age < 21: continue
print("{name} is {age} years old".format(person))
sheetfetcher
Python module
Convenient wraper for gdrive.
from sheetfetcher import SheetFetcher
fetcher = SheetFetcher(
documentName='My Document',
credentialFilename='drive-certificate.json',
)
table = fetcher.get_range("My Sheet", "A2:F12")
fulltable = fetcher.get_fullsheet("My Sheet")
- Document selectors can be either an uri or the title
- Sheet selectors can be either an index, a name or an id.
- Range selectors can be either a named range, index tuple or a "A2:F5" coordinates.
- You should Create a certificate and grant it access to the document
trace
This decorator is a fast helper to trace calls to functions and methods. It will show the name of the functions the values of the parameters and the returned values.
from trace import trace
@trace
def factorial(n):
if n<1: return 1
return n*factorial(n-1)
factorial(6)
('> factorial', (6,))
('> factorial', (5,))
('> factorial', (4,))
('> factorial', (3,))
('> factorial', (2,))
('> factorial', (1,))
('> factorial', (0,))
('< factorial', (0,), '->', 1)
('< factorial', (1,), '->', 1)
('< factorial', (2,), '->', 2)
('< factorial', (3,), '->', 6)
('< factorial', (4,), '->', 24)
('< factorial', (5,), '->', 120)
('< factorial', (6,), '->', 720)
testutils.assertNsEqual
Allows to assert equality on json/yaml like structures combining dicts, lists, numbers, strings, dates... The comparision is done on the YAML output so that differences are spoted as text diffs. Also keys in dicts are alphabetically sorted.
testutils.destructiveTest
An utility to avoid running destrutive tests in production.
It is a decorator that checks wheter the erp configured in dbconfig
has the testing flag and skips the test if it doesn't.
The script enable_destructive_test.py
is also provided to set/unset
that testing flag which is not defined by default.
isodates
Module for simplified isodate parsing and timezone handling.
sequence
Interprets strings like the ones the standard Print Dialog uses to specify pages to be printed. ie. "2,4,6-9,13" means "2, 4, from 6 to 9 and 13"
erptree
Creates an structure from ERP objects that you can navigate or dump as yaml. You can select fields to expand, taking just the name or the id, anonymize or removing. You can use dot notation to specify fields in related objects. For multiple relations, a subfield refers to the subfield in all related objects.
from somutils.erptree import erptree
O = Client(....)
partner = erptree(partnerAddress_id, O.ResPartnerAddress,
expand = {
'partner_id': O.ResPartner,
'partner_id.company': O.ResPartner,
},
pickName = [
'partner_id.state_id',
'partner_id.country_id',
],
anonymize = [
'email',
],
remove = [
'superfluous_field',
],
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file somutils-1.7.2.tar.gz
.
File metadata
- Download URL: somutils-1.7.2.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc2bfaa5f284485764a0f37ebe5071db2b5e7d7c38483be2a70a133f31129cf0 |
|
MD5 | f7559d82f8faf202611d2d36062261ab |
|
BLAKE2b-256 | 90d2c11d6b5368b9360f35e11170d6bb1cc3bc13757f8f60d1ed9192f260120f |