我们在 Somenergia 使用的工具很有用
项目描述
someergia-utils
该模块包括不同的 Python 模块和脚本,这些模块和脚本在 SomeEnergia 合作中的脚本中普遍使用,但没有实体本身拥有自己的存储库。
venv: 在 Python 虚拟环境下运行命令的脚本sql2csv.py: 运行参数化 sql 查询并将结果作为(制表符分隔)csv 的脚本。tsv: 用于 yamlns.namespace 和 dict 类对象的快速 TSV 序列化模块(以制表符作为分隔符的 csv)tsvread:提供 TSV 行作为 yamlns.namespaces(dict 专业化)tsvwrite:从字典序列中写入 TSV
dbutils.py: 具有数据库相关功能的模块runsql: 使用 sql 运行文件并将对象作为 yamlns 命名空间返回runsql_cached: 类似于 runsql 但将结果缓存在 tsv 文件中以避免第二次运行fetchNs:一个生成器,它包装 db 游标以获取具有属性而不是 psycopg 数组的对象nsList:使用前者来构建此类对象的列表(较慢但可能更方便)csvTable: [已弃用,使用 runsql] 将查询结果转换为带有正确标题名称的制表符分隔表pgconfig_from_environ: 从 PG 环境变量构造一个 db 连接配置字典
isodates:字符串到时间/日期/日期时间对象与天真/时区处理sheetfetcher.py: 从 gdrive 电子表格中检索数据的便利类trace:通过装饰它们来快速启用和禁用跟踪函数调用@tracetestutils:具有通用测试实用程序的模块testutils.destructiveTest: 装饰器以避免在生产中运行破坏性测试testutils.temp_path: 为测试提供自毁临时目录的上下文管理器testutils.working_dir:更改当前工作目录并在之后恢复它的上下文管理器testutils.sandbox_dir: 结合temp_path和的上下文管理器working_dir
erptree: 使用受控递归从 erp (erppeek, odoo) 中提取对象及其子对象
venv脚本
简化在给定虚拟环境下运行 Python 脚本。这对于从 crontab 行运行 Python 脚本特别有用。
usage: venv /PATH/TO/PYTHON/VIRTUALENV COMMAND [PARAM1 [PARAM2...]]
sql2csv.py脚本
运行 SQL 文件并将查询结果输出为制表符分隔的 csv.a
需要一个本地config.py文件,或者您应该提供它,因为-C file.py
它应该包含一个以psycopg2.connectpyscopg的关键字参数
命名的字典。
您可以以 yamlfile 或命令行选项的形式提供查询参数。
sql2csv.py <sqlfile> [<yamlfile>] [--<var1> <value1> [--<var2> <value2> ..] ]
dbutilsPython 模块
方便的数据库访问
在文件中进行查询。
params = dict(
param1='value',
param2=[1,3,4,5], # Useful for the IN clause
)
for item in runsql('myquery.sql', **params):
print(item.id, item.description) # id and description should be columns in the query
就像sql2csv必须存在一个 config.py 文件或为其提供config关键字参数
按照psycopg2 文档中的说明插入参数
TODO: db 和 cursor 参数以重用现有参数。
如果您知道结果将始终相同,则可以runsql_cached改用。它将生成一个 tsv 文件名,就像带有结果的 sql 文件一样,并将使用它而不是下一次执行的查询。
的用法与可交换
的runsql_cached非常相似。只需添加几个关键字参数。runsqlrunsql_cached
cachefile: 覆盖默认缓存文件(名称、路径或类似对象的文件)force:即使缓存存在也强制执行查询
光标包装器
方便的游标包装器使数据库访问代码更具可读性。
例子:
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))
sheetfetcherPython 模块
方便的 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")
- 文档选择器可以是 uri 或标题
- 工作表选择器可以是索引、名称或 ID。
- 范围选择器可以是命名范围、索引元组或“A2:F5”坐标。
- 您应该创建一个证书并授予它访问文档的权限
痕迹
这个装饰器是跟踪函数和方法调用的快速助手。它将显示函数的名称、参数的值和返回值。
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
允许在 json/yaml 之类的结构上断言相等性,例如组合字典、列表、数字、字符串、日期......比较是在 YAML 输出上完成的,以便将差异发现为文本差异。字典中的键也是按字母顺序排序的。
testutils.destructiveTest
避免在生产 OpenERP 中运行破坏性测试的实用程序。它是一个装饰器,用于检查配置的 erpdbconfig
是否具有测试标志,如果没有则跳过测试。
还提供了该脚本enable_destructive_test.py来设置/取消设置默认未定义的测试标志。
isodates
用于简化 isodate 解析和时区处理的模块。
sequence
解释标准打印对话框用来指定要打印的页面的字符串。IE。"2,4,6-9,13" 表示 "2, 4, 从 6 到 9, 13"
>>> [x for x in sequence("2,4,6-9,13")]
[2, 4, 6, 7, 8, 9, 13]
erptree
从您可以导航或转储为 yaml 的 ERP 对象创建结构。您可以选择要扩展的字段,只取名称或 ID,匿名或删除。您可以使用点表示法来指定相关对象中的字段。对于多个关系,一个子字段是指所有相关对象中的子字段。
from somutils.erptree import erptree
O = Client(....)
partner = erptree(
partnerAddress_id,
O.ResPartnerAddress,
expand = {
# Will expand those attributes
'partner_id': O.ResPartner,
'partner_id.company': O.ResPartner,
},
pickName = [
# For those fk pick the name instead of the default id,name tuple
# pickId parameter does the analog with id
'partner_id.state_id',
'partner_id.country_id',
],
anonymize = [
# Will tamper the value
'email',
],
remove = [
# Means clear this field
'superfluous_field',
],
only = [
# Means: just retrieve name and code from partner_id.company
'partner_id.company.name',
'partner_id.company.code',
],
)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。