#Состав библиотеки
- Класс Factory для получения экземпляров сервисов без указания путей к сервисам и секретов. Для работы нужно сконфигурировать переменные окружения VAULT_URL и VAULT_TOKEN, или явно передать url и token при создании экземпляра класса). Далее секреты автоматически достаются из vault, пути из consul
- Декоратор @log(logger=you_logger)
- Декоратор @retry(count=10, sleep=0.5)
Установка
Requests is available on PyPI:
$ python -m pip install dvgroup_factory
from dvgroup_factory import factory
##Порядок работы:
- Получить объект фабрики:
- fc = factory.Factory(vault_url=url, vault_token=token)
- 2.1 fc = factory.Factory(), если определены переменные окружения VAULT_URL и VAULT_TOKEN
- Получить объект сервиса (в kwargs передаются параметры не связанные с url и secrets):
- ch_client = fc.clickhouse_client(secure=True, database="db1", verify=False)
- kafka_p = fc.kafka_producer(value_serializer=lambda v: json.dumps(v).encode('utf-8'))
- По умолчанию, если ранее уже был создан объект сервиса, то при следующем запросе, будет возвращен ранее созданный.
- Для получения нового объекта (если ранее уже был получен экземпляр), требуется переддать параметр new=True:
- kafka_p2 = fc.kafka_producer(value_serializer=lambda v: json.dumps(v).encode('utf-8'), new=True)
- Для получения именованного экземпляра требуется указать параметр instance_name
- kafka_p2 = fc.kafka_producer(value_serializer=lambda v: json.dumps(v).encode('utf-8'), instance_name="Name")
- Для понимания, какие методы (классы сервисов) реализованы, следует вызвать метод info(), который возвратит след.информацию:
Создание экземпляра:\
ins = Factory(vault_url=url, vault_token=token)\
Методы:
1 ins.vault_client(url: str, token: str)
2 ins.consul(**kwargs)
3 ins.kafka_producer(**kwargs)
4 ins.kafka_consumer(*topics,**kwargs)
3 ins.aiokafka_producer(**kwargs)
4 ins.aiokafka_consumer(*topics,**kwargs)
5 ins.clickhouse_client(**kwargs)
6 ins.azure_container_client(**kwargs)
7 ins.loki_handler(**kwargs)
8 ins.gp_connection()\
Для создания нового экземпляра укажите в kwargs: new=True
Пути настроек в consul:
{"clickhouse": "env/databases/clickhouse", "kafka": "env/databases/kafka", "ms-azure-se": "env/databases/ms-azure-se", "loki": "env/databases/loki"}
#Пример кода:
from dvgrop_factory import factory as fc
###Получаю экземпляр фабрики factory = fc.Factory()
###Consul
consul = factory.consul()
kafka_config = consul.kv["env/databases/kafka"]
###Clickhouse
ch = factory.clickhouse_client(database="db1", ca_certs="CA.pem")
rs = ch.execute("SELECT COUNT(*) FROM db1.atol")
###KafkaProducer k_p = factory.kafka_producer()
###KafkaConsumer k_c = factory.kafka_consumer()
###azure.storage.blob.ContainerClient
a_cc = factory.azure_container_client(container_name="output")
print(f'k_c = {a_cc}')
###azure.storage.blob.BlobCliennt a_cc = factory.azure_blob_client(container_name="output", blob_name = "nm")
###logging_loki.LokiHandler
loki = factory.loki_handler(tags={"application": "atol-connector"}, version="1")
loki.setLevel(logging.DEBUG)
_log_format = f"%(asctime)s - [%(levelname)s] - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
loki.setFormatter(logging.Formatter(_log_format))
logger = logging.getLogger('segments-api')
logger.addHandler(loki)
###GreenPlum Connection conn = factory.gp_connection() cursor = conn.cursor() cursor.execute('SELECT COUNT(*) FROM raw_atol') rs = cursor.fetchone()
###AIOKafka
async def aiostart():
consumer = factory.aiokafka_consumer("test-atol1", auto_offset_reset='earliest', enable_auto_commit=False, )
producer = factory.aiokafka_producer()
await consumer.start()
await producer.start()
try:
future = await producer.send("test-atol", value={"ASYNC": "start"})
#record_metadata = await future
key = None
async for msg in consumer:
print(f"async key {key} msg = {msg}")
msg.value["consumer-producer"] = True
msg.value["ASYNC"] = True
print(f"async msg = {msg}")
future = await producer.send("test-atol1", value=msg.value)
finally:
await consumer.stop()
await producer.stop()\
ioloop = asyncio.get_event_loop()
tasks = [ioloop.create_task(aiostart())]
ioloop.run_until_complete(asyncio.wait(tasks))
ioloop.close()
Metadata
Release files for dvgroup-factory 0.0.60
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dvgroup_factory-0.0.60.tar.gz | 15.1 kB | Without provenance | Details for dvgroup_factory-0.0.60.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dvgroup_factory-0.0.60-py3-none-any.whl | Python 3 | none | any | Details for dvgroup_factory-0.0.60-py3-none-any.whl |
Total release size: 30.3 kB
Release files / dvgroup_factory-0.0.60.tar.gz
| Download URL | dvgroup_factory-0.0.60.tar.gz |
|---|---|
| Size | 15.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3224b3a9ba62c51dcf1db65d700484ecebfab449972b843581104fda28df4d93
|
|
BLAKE2b-256 checksum How to use checksums |
53c1fdbd610daa40325fd3b3f1078179f25a80cb9a590c37bb3f20c049cb3f50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.6
|
Release files / dvgroup_factory-0.0.60-py3-none-any.whl
| Download URL | dvgroup_factory-0.0.60-py3-none-any.whl |
|---|---|
| Size | 15.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0d2b54f0b9b7b2e65f1fcf4c9ff5696986ce6bce36db991d9b0ee03941fd629d
|
|
BLAKE2b-256 checksum How to use checksums |
ba73e3a356742f529c2a68d62778a81d540a1a8609ca0f23ce99f70762a2748c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.6
|
Security for dvgroup-factory 0.0.60
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.