Utilities

This sections contains module documentation of util modules.

check

Module check provides various methods for data checking in tests. It uses external modules lxml in version >= 3.3.3, simplejson in version >= 3.8.2 and standard module re.

lxml requires non-Python libraries which are automatically installed by setup script (python-lxml, libxml2-dev, libxslt1-dev for apt-get, python-lxml, libxml2-devel, libxslt-devel for yum). Unit tests available at hydratk/extensions/yoda/util/check/01_methods_ut.jedi

  • load_json

Method loads JSON string using simplejson method loads.

from hydratk.extensions.yoda.util.check import load_json

doc = '{"store": {"bicycle": {"color": "red", "price": 19.95}}}'
res = load_json(doc)
  • load_xml

Method loads XML string using lxml method fromstring.

from hydratk.extensions.yoda.util.check import load_xml

doc = '<foo><bar>xxx</bar></foo>'
res = load_xml(doc)
  • xpath

Method performs XPATH query document (using method xpath)and returns the output. Document can be lxml.etree or string (will be loaded automatically).

from hydratk.extensions.yoda.util.check import xpath

# XPATH query
doc = '<foo><bar at="yyy">xxx</bar></foo>'
expr = '/foo/bar'
res = xpath(doc, expr)

# get attribute
res = xpath(xml, expr, attribute='at')

# namespaces
doc = '<a:foo xmlns:a="aaa" xmlns:b="bbb"><b:bar>xxx</b:bar></a:foo>'
expr = '/a:foo/b:bar'
res = xpath(doc, expr, ns={'a':'aaa', 'b':'bbb'})
  • regex

Methods performs regular expression search using re method search and returns the output.

from hydratk.extensions.yoda.util.check import regex

# single match
data = 'ab c2e*f'
expr = '^.*(\d).*$'
res = regex(data, expr)

# multiple matches
expr = '^.*([cd]).*(\w)$'
res = regex(data, expr)

data

Module data provides various methods data generation used in tests. Unit tests available at hydratk/extensions/yoda/util/data/01_methods_ut.jedi, 02_methods_ut.jedi Methods by default generate 1 random sample but can generate list using parameter cnt.

  • gen_number

Method generates random number. It uses random method randint.

from hydratk.extensions.yoda.util.data import gen_number

# 10-digits integer
res = gen_number()

# float with 5 integer and 3 fractional digits
res = gen_number(5,3)

# negative number
res = gen_number(positive=False)
  • gen_nondec

Method generates random number with non-decadical base (binary, octal, hexadecimal). It uses random method randint, string is formatted according to base.

from hydratk.extensions.yoda.util.data import gen_nondec

# 10-digits hexadecimal number
res = gen_nondec(10, 'hex')

# 10-digits binary number
res = gen_nondec(10, 'bin')
  • gen_string

Method generates random string of given category. It uses random method choice with string categories (ascii_letters, ascii_lowercase, ascii_uppercase, digits, printable).

from hydratk.extensions.yoda.util.data import gen_string

# string with alphanumerical characters
res = gen_string(10, 'alpha')

# string with uppercase characters
res = gen_string(10, 'upper')
  • gen_date

Method generates random date using standard modules time, datetime <https://docs.python.org/3.6/library/datetime.html>_ and external module pytz in version >= 2016.6.1. It supports multiple formats (ISO default, Unix timestamp, strftime). By default it generates current date.

If time interval is provided (parameters start, end) the method generates random date within interval. It calculates delta interval (count of seconds) and adds random number to start. If parameter current is provided (values year, month, day, hour, minute) it generates date where current part is fixed and remaining parts are random.

from hydratk.extensions.yoda.util.data import gen_date

# iso format
res = gen_date('iso')

# unix format
res = gen_date('unix')

# custom format with timezone
res = gen_date('%Y-%m-%d %H:%M:%S %z', time_zone='UTC')

# interval
dform, start, end = '%Y%m%d%H%M%S' '20160925124536', '20161015132800'
res = gen_date(dform, start=start, end=end)
  • gen_ip

Method generates random IP address of version 4 (4 bytes in decadic form, default) or version 6 (8 double bytes in hexadecimal form).

from hydratk.extensions.yoda.util.data import gen_ip

res = gen_ip(4)
  • gen_birth_no

Method generates random birth number (czech format YYMMDD/XXXX) within given age interval (default 18-30). The method calculates random date within interval and transforms it format YYMMDD (female number contains MM+50, bool parameter male). Then it calculates 3 random digits. Whole number is divisible by 11 with no remainder (it determines the last digit). Delimiter / is configurable by bool parameter delimiter.

from hydratk.extensions.yoda.util.data import gen_birth_no

# male
res = gen_birth_no(male=True)

# female with interval and delimiter
min_age, max_age= 30, 35
   res = gen_birth_no(min_age=min_age, max_age=max_age, male=False, delimiter=True)
  • gen_reg_no

Method generates random registration number (czech format XXXXXXXX). It generates 7 random digits. The last digits is calculated to meet algorithm (weighted sum, divisible by 11).

from hydratk.extensions.yoda.util.data import gen_reg_no

res = gen_reg_no()
  • gen_tax_no

Method generated random tax number (czech format CZreg_no or CZbirth_no). The type is configurable by parameter src (reg_no, birth_no).

from hydratk.extensions.yoda.util.data import gen_tax_no

# from registration number
res = gen_tax_no(src='reg_no')

# from birth number
res = gen_tax_no(src='birth_no')
  • gen_account_no

Method generates random bank account number. It supports national czech format (XXXXXX-XXXXXXXXXX/XXXX) and IBAN (CZ20-digits)format. Bank code, base length and prefix length are configurable (parameters bank, base_len, prefix_len). When bank code is not provided the method gets random code from database table bank. Base and prefix are calculated to meet algorithm (weighted sum, divisible by 11).

from hydratk.extensions.yoda.util.data import gen_account_no

# national format XXXXXXXXXX/XXXX
res = gen_account_no(form='nat')

# national format with prefix XXXXXX-XXXXXXXXXX/XXXX
res = gen_account_no(form='nat', prefix=True)

# IBAN format
res = gen_account_no(form='iban')

# bank code and length
res = gen_account_no(prefix=True, bank='0100', base_len=6, prefix_len=3)
  • gen_email

Method generates random email. Domain, subdomain and lengths are configurable (parameters name_len, subdomain, subdomain_len, domain, domain_type). When domain is not provided the method gets random domain from database table domain (type original or country).

# random original domain
res = gen_email(domain=None, domain_type='original')

# lengths
res = gen_email(name_len=5, subdomain_len=4)
  • gen_name

Method generates random czech name (firstname and surname) male, female or both. It searches random records in database tables first_name, surname (equal sex). The output (parameter tuple_out) can be tuple (default) or string.

from hydratk.extensions.yoda.util.data import gen_name

# male
res = gen_name(sex='male')

# both, string output
res = gen_name(sex='both', tuple_out=False)
  • gen_phone

Method generates random phone number. It supports national and international format. Country code, destination code and subscriber length are configurable (parameters cc, country, nds, sn_len). When cc is not provided the method gets random code from database table cc. When country is provided, it is translated to cc.

from hydratk.extensions.yoda.util.data import gen_phone

# international format +12-digits
res = gen_phone(form='int')

# national format +9-digits
res = gen_phone(form='nat')

# country code translation
res = gen_phone(country='Slovakia')
  • gen_address

Method generates random address. The database contains czech addresses with its hierarchy region -> district -> area -> locality -> part -> street. By default the method searches random street in table street and then it finds remaining parameters. The initial search point is configurable by parameters param (region, district, area, locality, part), value (requested geographical part). The method finds remaining parameters in upper levels (they are fix) and lower levels (they are random). The output (parameter dict_out) can be dictionary (default) or string.

from hydratk.extensions.yoda.util.data import gen_address

# random address, full street number (orientation and descriptive number)
res = gen_address(street_no_full=True)

# given area
value = 'Jindřichův Hradec'
res = gen_address(param='area', value=value)

# given region
value = 'Jihočeský'
res = gen_address(param='region', value=value)
  • _get_dsn

Auxiliary method to get database DSN from configuration.

  • create_type

Method generates new data type in database table data_type defined parameters (title, description, col_titles).

from hydratk.extensions.yoda.util.data import create_type

title, desc, cols = 'test', 'test desc', ['t1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', 't9', 't10']
res = create_type(title, desc, cols)
  • update_type

Method updates data type in table data_type.

from hydratk.extensions.yoda.util.data import update_type

title_new, desc, cols = 'test 2', 'test desc 2', {1:'x1', 10:'x10'}
res = update_type(title, title_new, desc, cols)
  • delete_type

Method deletes data type in table data_type. By default (parameter del_records) it deletes records in table data which belong to data type.

from hydratk.extensions.yoda.util.data import delete_type

res = delete_type(title_new)
  • read_data

Methods reads data for given data_type from table data. It supports filtering (parameters active, col_filter). The output is list of dictionary (key - column title from data_type, value - column value from data).

from hydratk.extensions.yoda.util.data import read_data

data_type, active, col_filter = title, 1, {1:'x1', 10:'x10'}
res = read_data(data_type, active, col_filter)
  • create_data

Method creates data for given data_type in table data.

from hydratk.extensions.yoda.util.data import create_data

data_type, active, col_values = title, 1, {1:'x1', 2:'x2', 3:'x3', 4:'x4', 5:'x5', 6:'x6', 7:'x7', 8:'x8', 9:'x9',10:'x10'}
res = create_data(data_type, active, col_values)
  • update_data

Method updates data for given data_type in table data.

from hydratk.extensions.yoda.util.data import update_data

data_type, active, col_filter, col_values = title, 0, {1:'x1', 10:'x10'}, {1:'xx1', 10:'xx10'}
res = update_data(data_type, active, col_filter, col_values)
  • delete_data

Method deletes data for given data_type in table data.

from hydratk.extensions.yoda.util.data import delete_data

data_type, active, col_filter = title, 0, {1:'xx1', 10:'xx10'}
res = delete_data(data_type, active, col_filter)

Database tables

bank:

List of bank codes

Column Datatype Nullable Constraint
code varchar N primary key
title varchar Y  
swift varchar Y  

domain:

List of email domains

Column Datatype Nullable Constraint
code varchar N primary key
title varchar Y  
type varchar N  

first_name:

List of first names

Column Datatype Nullable Constraint
name varchar N primary key
sex varchar N  

surname:

List of surnames

Column Datatype Nullable Constraint
name varchar N primary key
sex varchar N  

cc:

List of country codes

Column Datatype Nullable Constraint
code integer N primary key
title varchar Y  

region:

List of regions (czech Kraj)

Column Datatype Nullable Constraint
code varchar N primary key
title varchar N  

district:

List of districts (czech Okres)

Column Datatype Nullable Constraint
code varchar N primary key
title varchar N  
region integer N foreign key to region.code

area:

List of areas (czech Oblast)

Column Datatype Nullable Constraint
code varchar N primary key
title varchar N  
district integer N foreign key to district.code

locality:

List of localities (czech Obec)

Column Datatype Nullable Constraint
code varchar N primary key
title varchar N  
area integer N foreign key to area.code

part:

List of parts (czech Cast obce)

Column Datatype Nullable Constraint
code varchar N primary key
title varchar N  
zip integer N  
locality integer N foreign key to locality.code

street:

List of streets (czech ulice)

Column Datatype Nullable Constraint
code varchar N primary key
title varchar N  
part integer N foreign key to part.code

data_type:

Custom data types (empty after installation)

Column Datatype Nullable Constraint
id integer N primary key autoincrement
title varchar N unique
description varchar Y  
col1_title varchar Y  
col2_title varchar Y  
col3_title varchar Y  
col4_title varchar Y  
col5_title varchar Y  
col6_title varchar Y  
col7_title varchar Y  
col8_title varchar Y  
col9_title varchar Y  
col10_title varchar Y  

data:

Custom data records (empty after installation)

Column Datatype Nullable Constraint
id integer N primary key autoincrement
type integer N foreign key to data_type.id
active integer Y  
col1 varchar Y  
col2 varchar Y  
col3 varchar Y  
col4 varchar Y  
col5 varchar Y  
col6 varchar Y  
col7 varchar Y  
col8 varchar Y  
col9 varchar Y  
col10 varchar Y