Skip to main content

The most useful package for you, young s7_it programer :)

How to use it

logging

# Import necessary functions
from divinegift.logger import log_info, log_err, log_warning, set_loglevel

# info msg
log_info('Your message')

# error msg 
log_err('Error msg',
	    src='Error source',  # e.g. str(sys.argv[0])
	    mode=['telegram', 'email']  # May be empty
	    channel={ "telegram": -1001343660695, "email_to": ["youremail@s7.ru"]})  # You can add "email_cc" for add copy_to address

# error msg with out sending problem to external system
log_err('Error msg', src='Error src') 

Pass log_level and log_name through cmd arguments

To specify log_level and log_name to your app you can send it through arguments:

if __name__ == '__main__':
	# Get all args from cmd:
    args = get_args()
    # Get log_level, log_name, log_dir
    lp = get_log_param(args)
    # Set log_level and log_name:
    set_loglevel(lp.get('log_level'), lp.get('log_name'), lp.get('log_dir'))

You should pass your args by pairs: key value, e.g. --log_level INFO Available variants for logging are:

  • --log_level or shortcut is -ll
  • --log_name or shortcut is -ln
  • --log_dir or shortcut is -ld

log_level could be DEBUG, INFO, WARNING, ERROR

Example of start apps with arguments:

python test.py -ll INFO -ln test.log

Config parsing (json)

from divinegift.smain import Settings  # Necessary imports

settings = {} 

# You should use divinegift.logger.set_loglevel before config parsing
s = Settings()
s.parse_settings('./settings.conf')
settings = s.get_settings()

Config example

{
    "log_level": "INFO",
    "log_name": "YourAwesomeProject.log",
    "monitoring": [
        "telegram",
        "email"
    ],
    "monitoring_channel": {
        "telegram": -1001343660695,
        "email_to": [
            "aims.control@s7.ru"
        ]
    }
 }

Working with DB (sqlalchemy)

You should define dict with db_conn creditional. For example:

Oracle

Install oracle driver:

pip install cx_oracle
db_conn = {
	"db_user": "dbuser",		# username
	"db_pass": "dbpass",		# password
	"db_host": "dbhost",		# host (ip, fqdn). could be empty if we connect via tns
	"db_port": "",				# port (string). could be empty if we connect via tns 
	"db_name": "dbname",		# database name
	"db_schm": "",				# db scheme if not equal username
	"dialect": "oracle"	# 		# if use cx_Oracle or oracle+another_dialect
}

MSSQL

Install mssql driver:

pip install sqlalchemy-pytds
db_conn = {
	"db_user": "dbuser",		# username
	"db_pass": "dbpass",		# password
	"db_host": "",				# host (ip, fqdn). could be empty if we connect via tns
	"db_port": "",				# port (string). could be empty if we connect via tns 
	"db_name": "dbname",		# database name
	"db_schm": "",				# db scheme if not equal username
	"dialect": "mssql+pytds"	# mssql dialect
}

Postgres

Install postgres driver:

pip install psycopg2
db_conn = {
    "db_user": "dbuser",		# username
	"db_pass": "dbpass",		# password
	"db_host": "",				# host (ip, fqdn). could be empty if we connect via tns
	"db_port": "",				# port (string). could be empty if we connect via tns 
	"db_name": "dbname",		# database name
	"db_schm": "",				# db scheme if not equal username
    "dialect": "postgresql+psycopg2" # dialect
}

Create connect

For create connect you should use function divinegift.smain.get_conn.

from divinegift.smain import get_conn, close_conn
engine, conn, metadata = get_conn(db_conn)  # db_conn - variable which was described above

If you need to call stored procedure with db cursors you should use raw connection.

from divinegift.smain import get_raw_conn
conn = get_raw_conn(db_conn)  # db_conn - variable which was described above

Get data from sript (file or just string)

When you got "conn" variable you can get data from file or from str variable directly.

result = get_data('path/to/scripts/some_script.sql', db_conn)
# or you can use str variable:
script = 'select * from dual'
result = get_data(script, db_conn)
print(result)
>>>[{'dummy': 'X'}]

You can use specific encoding for your files (by default it's 'cp1251'). Just put it into args:

result = get_data('path/to/scripts/some_script.sql', db_conn, encoding='utf8')

Also you can add some variables into your script (e.g. date) and then you can pass it into function:

script = """select * from dual
where dummy = '$param'"""
parameters = {'param': 'X'}
result = get_data(script, db_conn, **parameters)
# Or another variant
result = get_data(script, db_conn, param='X')
print(result)
>>>[{'dummy': 'X'}]

Run script without getting data

You can run script without recieving data. You should use divinegift.smain.run_script for this like get_data, e.g.:

run_script('path/to/scripts/some_script.sql', db_conn)

Sending email

You can use function divinegift.smain.send_email

You should set your msg, subject and list of recipients. Simple example:

from divinegift.smain import send_email
send_email('Test message', 'Test subject', TO=['your@domain.com'])

You can specify TO, CC, BCC, HOST, FROM and attachments. Also you can send it like html-message or like text.

You should pass list of attachments files with absolute path to it. You can use function divinegift.smain.get_list_files for get it. For sending email with attahment(s):

from divinegift.smain import send_email, get_list_files
attachment_list = get_list_files('/path/to/files', add_path=True)
send_email('Hello! This are files in attach', 'Test sending attachments', ['your@domain.com'], attachments=attachment_list)
# Also you can send only one file:
attachment = '/path/to/file/file_name'
send_email('Hello! There is file in attach', 'File', ['your@domain.com'], attachments=attachment)

If you set IS_HTML to False (by default it is True), you could send an email like simple text message, not html

Work with JSON

You can simple parse and create JSONs

To create json you should use divinegift.smain.create_json To parse it you shoul use divinegift.smain.parse_json

For example:

from divinegift.smain import create_json, parse_json
A = {'key1': 'data1', 'key2': 'data2'}
create_json('json_file_name.json', A)
B = parse_json('json_file_name.json')

print(B)
>>> {'key1': 'data1', 'key2': 'data2'}

Transliterate strings between Russian and English and back

From version 1.0.8 you can use transliterate library to transliterate strings between languages

Example:

from divinegift.translit import translit

name = 'SHEVCHENKO ANDREY'
name_r = translit(name, 'ru_ext')
name_e = translit(name_r, 'ru_ext', reversed=True)
name_r_cap = translit(name, 'ru_ext').capitalize()
name_r_low = translit(name, 'ru_ext').lower()

print(f'From English to Russian: {name}\t->\t{name_r}')
print(f'From Russian to English: {name_r}\t->\t{name_e}')
print(f'Capitalize             : {name}\t->\t{name_r_cap}')
print(f'Lower                  : {name}\t->\t{name_r_low}')

Code from above will show next:

From English to Russian: SHEVCHENKO ANDREY	->	ШЕВЧЕНКО АНДРЕЙ
From Russian to English: ШЕВЧЕНКО АНДРЕЙ	->	SHEVCHENKO ANDREI
Capitalize             : SHEVCHENKO ANDREY	->	Шевченко андрей
Lower                  : SHEVCHENKO ANDREY	->	шевченко андрей

Metadata

Release files for divinegift 1.0.8.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for divinegift 1.0.8.4
File Size Uploaded
divinegift-1.0.8.4.tar.gz 14.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for divinegift 1.0.8.4
File Interpreter ABI Platform
divinegift-1.0.8.4-py3-none-any.whl Python 3 none any Details

Total release size: 28.7 kB

Release files / divinegift-1.0.8.4.tar.gz

Download URL divinegift-1.0.8.4.tar.gz
Size 14.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d7f70cfac2b980ae53d56436bd670c31999d1794981e63aa7f61e1fb9227e1a8
BLAKE2b-256 checksum
How to use checksums
1bdab09d6c381b6922e3a056c203355c8c1bc7c70c36e16523162a10c44df84e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

Release files / divinegift-1.0.8.4-py3-none-any.whl

Download URL divinegift-1.0.8.4-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ec8b0b9f38d3f48b1a451a545846be07bd0215301628c0a5fee6a72de183ae55
BLAKE2b-256 checksum
How to use checksums
71eb193634e88a922158775b8c697672be078d8f004ba5f7d4f814bca0ff6145
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

Release history Release notifications | RSS feed

2.15.9

2 release files

2.15.6

2 release files

2.15.5

2 release files

2.15.4

2 release files

2.15.3

2 release files

2.15.2

2 release files

2.15.1

2 release files

2.15.0

2 release files

2.13.7

2 release files

2.13.6

2 release files

2.13.3

2 release files

2.13.0

2 release files

2.12.1

2 release files

2.12.0

2 release files

2.11.0

2 release files

2.10.1

2 release files

2.10.0

2 release files

2.9.1

2 release files

2.8.0

2 release files

2.7.3

2 release files

2.7.2

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.3

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.3.15

2 release files

1.3.14

2 release files

1.3.13

2 release files

1.3.12

2 release files

1.3.10

2 release files

1.3.9

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.2

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.11

2 release files

1.0.9

2 release files

This release

1.0.8.4 This release

2 release files

1.0.8

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5

2 release files

0.4.1

2 release files

0.4

2 release files

0.3

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page