Skip to main content

Meta App Scripts SDK

Project description

=========================
Meta App Script SDK
=========================


Install
=======
pip install metaappscriptsdk


Full Examples
=============

`Полный список примеров
<https://github.com/rw-meta/meta-app-script-py-sdk/tree/master/metaappscriptsdk/examples/>`_

Usage
=====
.. code-block:: python

# coding=utf-8
import logging
import starter_api
from metaappscriptsdk import MetaApp

# Инициализация приложения
# конфигурирует логгер и пр.
META = MetaApp()

# работает стандартный логгер
logging.info('Hello, from Meta App Script!')
# Можно получить экземпляр логгера с улучшеным интерфейсом для более удобного прикладывания контекста
log = META.log
log.warning('Do warning log', {"count": 1, "mycontextParam": [1, 3, 4]})

# Поставновка задач в Запускатор
starter_api.build_submit('YOUR_SERVICE')
# или
META.starter.build_submit('YOUR_SERVICE')


Logger
=====
.. code-block:: python

log = META.log

# Объявите глобальный контекст, чтобы не писать это каждый раз
log.set_entity('campaign_id', -1)
# По сути это просто хранилище глобавльных переменных контекста
log.set_entity('test', True)
log.warning('Do warning log', {"count": 1, "mycontextParam": [1, 3, 4]})
log.info('Info log')

logging.info('Default logging')

# удалите глобальный контекст, когда он вам больше не нужен
log.remove_entity('test')
log.info('Info log2')

Это выведет вам что-то вроде такого:

.. code-block:: python

# 00:03:11:WARNING: Do warning log {'count': 1, 'mycontextParam': [1, 3, 4], 'test': True, 'campaign_id': -1}
# 00:03:11:INFO: Info log {'test': True, 'campaign_id': -1}
# 00:03:11:INFO: Default logging {'test': True, 'campaign_id': -1}
# 00:03:11:INFO: Info log2 {'campaign_id': -1}



Bulk Logger
=====
Используется для логирования пачек из обрабатываемого списка.
Делает запись в лог только если прошло определенное кол-во времени

.. code-block:: python

total = 125
# Получаете инстанс bulk-логгера через объект приложения
# Список параметров вам подскажет IDE
bulk_log = META.bulk_log(u'Моя пачка', total, 1)

for idx in xrange(total):
# Первый вызов всегда try_log_part, чтобы ознаменовать начало выполнения цикла
bulk_log.try_log_part()

# На ЧАСТЫХ, но возможно БЫСТРЫХ процессах можете использовать параметр with_start_message=False
# Это исключит запись надписи о начале работы над пачкой и, если пачка сделается до
# мин. время логирования, то записи не произойдет вообще
# bulk_log.try_log_part(with_start_message=False)

# далее ваша бизнес-логика
time.sleep(1)

# finish вызывать необязательно, но часто нужно,
# чтобы точно сказать, что обработка выполнена
bulk_log.finish()

Это выведет вам что-то вроде такого:

.. code-block:: python

# 23:55:31:INFO: Начали цикл: Моя пачка {}
# 23:56:31:INFO: Моя пачка {'counter': 61, 'percentDone': 48, 'maxCount': 125}
# 23:57:31:INFO: Моя пачка {'counter': 121, 'percentDone': 96, 'maxCount': 125}
# 23:57:36:INFO: Закончили цикл: Моя пачка {}



Bulk Logger Thread Pool
=====
Используется для логирования пачек из обрабатываемого списка.
Делает запись в лог только если прошло определенное кол-во времени

.. code-block:: python

# coding=utf-8
import time
from functools import partial
from multiprocessing.pool import ThreadPool

from metaappscriptsdk import MetaApp

META = MetaApp()


def my_thread_fn(bulk_log, job_item):
bulk_log.try_log_part()
# Бизнес логика
# работа с job_item
time.sleep(1)


def my_main_fn():
total = 125 * 2
thread_cnt = 2

bulk_log = META.bulk_log(u'Моя пачка', total, 1)
bulk_log.try_log_part()

all_data = range(1, total)
pool = ThreadPool(thread_cnt)

# Чтобы работать в многопоточном режиме с bulk_log вы
# должны передать его как аргумент вызываемой функции таким образом
func = partial(my_thread_fn, bulk_log)
results = pool.map(func, all_data)

bulk_log.finish()
pool.close()
pool.join()
#print(results)

my_main_fn()


Это выведет вам что-то вроде такого:

.. code-block:: python

# 16:25:08:INFO: Начали цикл: Моя пачка {}
# 16:26:08:INFO: Моя пачка {'counter': 122, 'percentDone': 48, 'maxCount': 250}
# 16:27:09:INFO: Моя пачка {'counter': 242, 'percentDone': 96, 'maxCount': 250}
# 16:27:17:INFO: Закончили цикл: Моя пачка {}

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

metaappscriptsdk-0.0.10.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metaappscriptsdk-0.0.10-py2.py3-none-any.whl (13.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file metaappscriptsdk-0.0.10.tar.gz.

File metadata

File hashes

Hashes for metaappscriptsdk-0.0.10.tar.gz
Algorithm Hash digest
SHA256 8e44f24f4721dc415e764949d829b10c39a99ec4e80947f7a0bd38dabdd8ceed
MD5 2918822c58c35f50fa055234f32dd44b
BLAKE2b-256 0852f92f3b48db4b1d3057503deda821900107382176b10e535f45d127ba4c38

See more details on using hashes here.

File details

Details for the file metaappscriptsdk-0.0.10-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for metaappscriptsdk-0.0.10-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 dc771131c6b3ff3c6fc1cc368f5fcac33963c375f165d836eaa21ffe35bb7a95
MD5 e335604bcfa3ba92631a079c35efd45e
BLAKE2b-256 8ab364200452c780a180e5b30efbe3b9314027311b28b2d47a05b12c0d56e1d2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page