Skip to main content

我们在 Somenergia 使用的工具很有用

项目描述

someergia-utils

CI 状态 覆盖状态 PyPI - 下载

该模块包括不同的 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:通过装饰它们来快速启用和禁用跟踪函数调用@trace
  • testutils:具有通用测试实用程序的模块
    • 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")

痕迹

这个装饰器是跟踪函数和方法调用的快速助手。它将显示函数的名称、参数的值和返回值。

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',
	],
)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

somutils-1.8.5.tar.gz (23.4 kB 查看哈希

已上传 source

内置分布

somutils-1.8.5-py3-none-any.whl (24.0 kB 查看哈希

已上传 py3