Metadata-Version: 2.1
Name: db-autotest
Version: 0.0.1
Summary: DB Database test automation. This package allows to create database object structure and load data from database.
Project-URL: Homepage, https://github.com/AcaciaMan/db-autotest
Project-URL: Issues, https://github.com/AcaciaMan/db-autotest/issues
Author-email: AcaciaMan <11488694+AcaciaMan@users.noreply.github.com>
License-File: LICENSE
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.12
Requires-Dist: pyyaml>=6
Description-Content-Type: text/markdown

# db-autotest
DB Database test automation

This python package allows to create database object structure and load data from database. One further option is to
print, save data as YAML file, another is to use retrieved object in data comparissons or new database object creation.

## DB structure as object in Python
Better explanation is code example from [c_m_table.py](https://github.com/AcaciaMan/db-autotest/blob/main/Python/src/lite_object/c_m_table.py).


```python

class C_M_Table(object):

    def __init__(self):
    
        self.t_m_table = M_Entity(m_object_detail(), m_object_detail_r(), name='table')
        self.t_m_table.id.append(m_object_detail().m_object_detail_id)
        
        self.t_m_object = M_Entity(m_object(), m_object_r(), name='object')
        self.t_m_object.id.append(m_object().m_object_id)

        self.r_m_object_table = M_Relation(self.t_m_object, self.t_m_table)
        self.s_m_object = M_Structure(self.t_m_object, M_StructureType.PARENT)

        self.t_m_column = M_Entity(m_column(), m_column_r(), name='column')
        self.t_m_column.id.append(m_column().m_column_id)
        self.t_m_column.sortFunc = columnSortFunc.__get__(self.t_m_column)

        self.r_m_table_column = M_Relation(self.t_m_table, self.t_m_column)
        self.s_m_column = M_Structure(self.t_m_column, M_StructureType.CHILD)

        self.t_m_index = M_Entity(m_object_detail(), m_object_detail_r(), name='index')
        self.t_m_index.id.append(m_object_detail().m_object_detail_id)

        self.r_m_table_index = M_Relation(self.t_m_table, self.t_m_index)
        self.r_m_table_index.parent_ids = [m_object_detail().m_object_id, m_object_detail().m_version_id]
        self.r_m_table_index.child_ids = [m_object_detail().idx_table_id, m_object_detail().m_version_id]
        self.s_m_index = M_Structure(self.t_m_index, M_StructureType.CHILD)

        self.t_m_idx_column = M_Entity(m_column(), m_column_r(), name='idx_column')
        self.t_m_idx_column.id.append(m_column().m_column_id)
        self.t_m_idx_column.sortFunc = columnSortFunc.__get__(self.t_m_idx_column)

        self.r_m_idx_column = M_Relation(self.t_m_index, self.t_m_idx_column)
        self.s_m_idx_column = M_Structure(self.t_m_idx_column, M_StructureType.CHILD)        
        self.s_m_index.child.append([self.s_m_idx_column, self.r_m_idx_column])

        self.s_m_table = M_Structure(self.t_m_table)
        self.s_m_table.parent.append([self.s_m_object, self.r_m_object_table])
        self.s_m_table.child.append([self.s_m_column, self.r_m_table_column])
        self.s_m_table.child.append([self.s_m_index, self.r_m_table_index])

        self.c_main = M_Class(self.s_m_table)


def columnSortFunc(self, e):

    return e[get_column_i(self, m_column().sort)]

    
```

## Output as YAML file
Output can be saved as YAML file [test.yaml](https://github.com/AcaciaMan/db-autotest/blob/main/Python/src/yaml/test.yaml)


```yaml
table: {'m_object_detail_id': 4, 'm_object_id': 4, 'm_version_id': 1, 'idx_table_id': None, 'm_unique': 0, 'status': 'VALID', 'enabled': 1, 'droped': 0}

table_nodes: [

  p_object: {'m_object_id': 4, 'schema': 'db', 'name': 'm_column', 'type': 'TABLE', 'create_date': 1703982912},
  c_column: {'m_column_id': 11, 'm_object_detail_id': 4, 'm_column_obj_id': 24, 'sort': 0, 'type': 'INTEGER'},
  c_column: {'m_column_id': 12, 'm_object_detail_id': 4, 'm_column_obj_id': 25, 'sort': 1, 'type': 'INTEGER'},
  c_column: {'m_column_id': 13, 'm_object_detail_id': 4, 'm_column_obj_id': 26, 'sort': 2, 'type': 'INTEGER'},
  c_column: {'m_column_id': 14, 'm_object_detail_id': 4, 'm_column_obj_id': 27, 'sort': 3, 'type': 'INTEGER'},
  c_column: {'m_column_id': 15, 'm_object_detail_id': 4, 'm_column_obj_id': 22, 'sort': 4, 'type': 'TEXT'},
  c_index: {'m_object_detail_id': 10, 'm_object_id': 10, 'm_version_id': 1, 'idx_table_id': 4, 'm_unique': 1, 'status': 'VALID', 'enabled': 1, 'droped': 0},
  c_index_nodes: [
    c_idx_column: {'m_column_id': 31, 'm_object_detail_id': 10, 'm_column_obj_id': 25, 'sort': 0, 'type': None},
    c_idx_column: {'m_column_id': 32, 'm_object_detail_id': 10, 'm_column_obj_id': 26, 'sort': 1, 'type': None},
    c_idx_column: {'m_column_id': 33, 'm_object_detail_id': 10, 'm_column_obj_id': 27, 'sort': 2, 'type': None}
  ],
  c_index: {'m_object_detail_id': 11, 'm_object_id': 11, 'm_version_id': 1, 'idx_table_id': 4, 'm_unique': 0, 'status': 'VALID', 'enabled': 1, 'droped': 0},
  c_index_nodes: [
    c_idx_column: {'m_column_id': 34, 'm_object_detail_id': 11, 'm_column_obj_id': 26, 'sort': 0, 'type': None}
  ]
]

```

## More examples

More examples can be found in files [c_m_table_names.py](https://github.com/AcaciaMan/db-autotest/blob/main/Python/src/lite_object/c_m_table_names.py) and [test_names.yaml](https://github.com/AcaciaMan/db-autotest/blob/main/Python/src/yaml/test_names.yaml)

## Environment setup
Docs folder contains [initial setup description](https://github.com/AcaciaMan/db-autotest/blob/main/Docs/python_setup.md) and [SQLite database for db metadata](https://github.com/AcaciaMan/db-autotest/blob/main/Docs/m_sqlite.db).
