%global _empty_manifest_terminate_build 0
Name:		python-oddrn-generator
Version:	0.1.80
Release:	1
Summary:	Open Data Discovery Resource Name Generator
License:	Apache-2.0
URL:		https://github.com/opendatadiscovery/oddrn-generator
Source0:	https://mirrors.aliyun.com/pypi/web/packages/0a/c3/82a328a74df0328d4fca2057f660620519c177900835a78645c2c4eb94d3/oddrn_generator-0.1.80.tar.gz
BuildArch:	noarch

Requires:	python3-pydantic

%description
[![PyPI version](https://badge.fury.io/py/oddrn-generator.svg)](https://badge.fury.io/py/oddrn-generator)

# Open Data Discovery Resource Name Generator

Helps generate oddrn for data sources.

* [Requirements](#requirements)
* [Installation](#installation)
* [Available generators](#available-generators)
* [Generator properties](#generator-properties)
* [Generator methods](#generator-methods)
* [Generator properties](#generator-properties)
* [Example usage](#example-usage)
* [Exceptions](#example-usage)
* [Development](#development)

## Requirements

* __Python >= 3.7__

## Installation

```bash
poetry add oddrn-generator
# or
pip install oddrn-generator
```

## Usage and configuration

### Available generators
| DataSource   | Generator class name  |
|--------------|-----------------------|
| cassandra    | CassandraGenerator    |
| postgresql   | PostgresqlGenerator   |
| mysql        | MysqlGenerator        |
| glue         | GlueGenerator         |
| s3           | S3Generator           |
| kafka        | KafkaGenerator        |
| kafkaconnect | KafkaConnectGenerator |
| snowflake    | SnowflakeGenerator    |
| airflow      | AirflowGenerator      |
| hive         | HiveGenerator         |
| dynamodb     | DynamodbGenerator     |
| odbc         | OdbcGenerator         |
| mssql        | MssqlGenerator        |
| oracle       | OracleGenerator       |
| redshift     | RedshiftGenerator     |
| clickhouse   | ClickHouseGenerator   |
| athena       | AthenaGenerator       |
| quicksight   | QuicksightGenerator   |
| dbt          | DbtGenerator          |
| prefect      | PrefectGenerator      |
| tableau      | TableauGenerator      |
| neo4j        | Neo4jGenerator        |
| mongodb      | MongoGenerator        |
| vertica      | VerticaGenerator      |
| CubeJs       | CubeJsGenerator       |
| superset     | SupersetGenerator     |
| Presto       | PrestoGenerator       |
| Trino        | TrinoGenerator        |
| dms          | DmsGenerator          |
| powerbi      | PowerBiGenerator      |

### Generator properties

* base_oddrn - Get base oddrn (without path)
* available_paths - Get all available path of generator

### Generator methods

* get_oddrn_by_path(path_name, new_value=None) - Get oddrn string by path. You also can set value for this path using '
  new_value' param
* set_oddrn_paths(**kwargs) - Set or update values of oddrn path
* get_data_source_oddrn() - Get data source oddrn

### Generator parameters:

* host_settings: str - optional. Hostname configuration
* cloud_settings: dict - optional. Cloud configuration
* **kwargs - path's name and values

### Example usage

```python
# postgresql
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432',
    schemas='schema_name', databases='database_name', tables='table_name'
)

oddrn_gen.base_oddrn
# //postgresql/host/my.host.com:5432
oddrn_gen.available_paths
# ('schemas', 'databases', 'tables', 'columns')

oddrn_gen.get_data_source_oddrn()
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name

oddrn_gen.get_oddrn_by_path("schemas")
# //postgresql/host/my.host.com:5432/schemas/schema_name

oddrn_gen.get_oddrn_by_path("databases")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name

oddrn_gen.get_oddrn_by_path("tables")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/table_name

# you can set or change path:
oddrn_gen.set_oddrn_paths(tables='another_table_name', columns='new_column_name')
oddrn_gen.get_oddrn_by_path("columns")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/another_table_name/columns/new_column_name

# you can get path wih new values:
oddrn_gen.get_oddrn_by_path("columns", new_value="another_new_column_name")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/another_table_name/columns/another_new_column_name


# glue
from oddrn_generator import GlueGenerator

oddrn_gen = GlueGenerator(
    cloud_settings={'account': 'acc_id', 'region': 'reg_id'},
    databases='database_name', tables='table_name', columns='column_name',
    jobs='job_name', runs='run_name', owners='owner_name'
)

oddrn_gen.available_paths
# ('databases', 'tables', 'columns', 'owners', 'jobs', 'runs')

oddrn_gen.get_oddrn_by_path("databases")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name

oddrn_gen.get_oddrn_by_path("tables")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name/tables/table_name'

oddrn_gen.get_oddrn_by_path("columns")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name/tables/table_name/columns/column_name

oddrn_gen.get_oddrn_by_path("jobs")
# //glue/cloud/aws/account/acc_id/region/reg_id/jobs/job_name

oddrn_gen.get_oddrn_by_path("runs")
# //glue/cloud/aws/account/acc_id/region/reg_id/jobs/job_name/runs/run_name

oddrn_gen.get_oddrn_by_path("owners")
# //glue/cloud/aws/account/acc_id/region/reg_id/owners/owner_name

```

### Exceptions

* WrongPathOrderException - raises when trying set path that depends on another path

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432',
    schemas='schema_name', databases='database_name',
    columns='column_without_table'
)
# WrongPathOrderException: 'columns' can not be without 'tables' attribute
```

* EmptyPathValueException - raises when trying to get a path that is not set up

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432', schemas='schema_name', databases='database_name',
)
oddrn_gen.get_oddrn_by_path("tables")

# EmptyPathValueException: Path 'tables' is not set up
```

* PathDoestExistException - raises when trying to get not existing oddrn path

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432', schemas='schema_name', databases='database_name',
)
oddrn_gen.get_oddrn_by_path("jobs")

# PathDoestExistException: Path 'jobs' doesn't exist in generator
```

## Development

```bash
#Install dependencies
poetry install

#Activate shell
poetry shell

# Run tests
python run pytest
```


%package -n python3-oddrn-generator
Summary:	Open Data Discovery Resource Name Generator
Provides:	python-oddrn-generator
BuildRequires:	python3-devel
BuildRequires:	python3-setuptools
BuildRequires:	python3-pip
%description -n python3-oddrn-generator
[![PyPI version](https://badge.fury.io/py/oddrn-generator.svg)](https://badge.fury.io/py/oddrn-generator)

# Open Data Discovery Resource Name Generator

Helps generate oddrn for data sources.

* [Requirements](#requirements)
* [Installation](#installation)
* [Available generators](#available-generators)
* [Generator properties](#generator-properties)
* [Generator methods](#generator-methods)
* [Generator properties](#generator-properties)
* [Example usage](#example-usage)
* [Exceptions](#example-usage)
* [Development](#development)

## Requirements

* __Python >= 3.7__

## Installation

```bash
poetry add oddrn-generator
# or
pip install oddrn-generator
```

## Usage and configuration

### Available generators
| DataSource   | Generator class name  |
|--------------|-----------------------|
| cassandra    | CassandraGenerator    |
| postgresql   | PostgresqlGenerator   |
| mysql        | MysqlGenerator        |
| glue         | GlueGenerator         |
| s3           | S3Generator           |
| kafka        | KafkaGenerator        |
| kafkaconnect | KafkaConnectGenerator |
| snowflake    | SnowflakeGenerator    |
| airflow      | AirflowGenerator      |
| hive         | HiveGenerator         |
| dynamodb     | DynamodbGenerator     |
| odbc         | OdbcGenerator         |
| mssql        | MssqlGenerator        |
| oracle       | OracleGenerator       |
| redshift     | RedshiftGenerator     |
| clickhouse   | ClickHouseGenerator   |
| athena       | AthenaGenerator       |
| quicksight   | QuicksightGenerator   |
| dbt          | DbtGenerator          |
| prefect      | PrefectGenerator      |
| tableau      | TableauGenerator      |
| neo4j        | Neo4jGenerator        |
| mongodb      | MongoGenerator        |
| vertica      | VerticaGenerator      |
| CubeJs       | CubeJsGenerator       |
| superset     | SupersetGenerator     |
| Presto       | PrestoGenerator       |
| Trino        | TrinoGenerator        |
| dms          | DmsGenerator          |
| powerbi      | PowerBiGenerator      |

### Generator properties

* base_oddrn - Get base oddrn (without path)
* available_paths - Get all available path of generator

### Generator methods

* get_oddrn_by_path(path_name, new_value=None) - Get oddrn string by path. You also can set value for this path using '
  new_value' param
* set_oddrn_paths(**kwargs) - Set or update values of oddrn path
* get_data_source_oddrn() - Get data source oddrn

### Generator parameters:

* host_settings: str - optional. Hostname configuration
* cloud_settings: dict - optional. Cloud configuration
* **kwargs - path's name and values

### Example usage

```python
# postgresql
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432',
    schemas='schema_name', databases='database_name', tables='table_name'
)

oddrn_gen.base_oddrn
# //postgresql/host/my.host.com:5432
oddrn_gen.available_paths
# ('schemas', 'databases', 'tables', 'columns')

oddrn_gen.get_data_source_oddrn()
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name

oddrn_gen.get_oddrn_by_path("schemas")
# //postgresql/host/my.host.com:5432/schemas/schema_name

oddrn_gen.get_oddrn_by_path("databases")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name

oddrn_gen.get_oddrn_by_path("tables")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/table_name

# you can set or change path:
oddrn_gen.set_oddrn_paths(tables='another_table_name', columns='new_column_name')
oddrn_gen.get_oddrn_by_path("columns")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/another_table_name/columns/new_column_name

# you can get path wih new values:
oddrn_gen.get_oddrn_by_path("columns", new_value="another_new_column_name")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/another_table_name/columns/another_new_column_name


# glue
from oddrn_generator import GlueGenerator

oddrn_gen = GlueGenerator(
    cloud_settings={'account': 'acc_id', 'region': 'reg_id'},
    databases='database_name', tables='table_name', columns='column_name',
    jobs='job_name', runs='run_name', owners='owner_name'
)

oddrn_gen.available_paths
# ('databases', 'tables', 'columns', 'owners', 'jobs', 'runs')

oddrn_gen.get_oddrn_by_path("databases")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name

oddrn_gen.get_oddrn_by_path("tables")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name/tables/table_name'

oddrn_gen.get_oddrn_by_path("columns")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name/tables/table_name/columns/column_name

oddrn_gen.get_oddrn_by_path("jobs")
# //glue/cloud/aws/account/acc_id/region/reg_id/jobs/job_name

oddrn_gen.get_oddrn_by_path("runs")
# //glue/cloud/aws/account/acc_id/region/reg_id/jobs/job_name/runs/run_name

oddrn_gen.get_oddrn_by_path("owners")
# //glue/cloud/aws/account/acc_id/region/reg_id/owners/owner_name

```

### Exceptions

* WrongPathOrderException - raises when trying set path that depends on another path

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432',
    schemas='schema_name', databases='database_name',
    columns='column_without_table'
)
# WrongPathOrderException: 'columns' can not be without 'tables' attribute
```

* EmptyPathValueException - raises when trying to get a path that is not set up

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432', schemas='schema_name', databases='database_name',
)
oddrn_gen.get_oddrn_by_path("tables")

# EmptyPathValueException: Path 'tables' is not set up
```

* PathDoestExistException - raises when trying to get not existing oddrn path

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432', schemas='schema_name', databases='database_name',
)
oddrn_gen.get_oddrn_by_path("jobs")

# PathDoestExistException: Path 'jobs' doesn't exist in generator
```

## Development

```bash
#Install dependencies
poetry install

#Activate shell
poetry shell

# Run tests
python run pytest
```


%package help
Summary:	Development documents and examples for oddrn-generator
Provides:	python3-oddrn-generator-doc
%description help
[![PyPI version](https://badge.fury.io/py/oddrn-generator.svg)](https://badge.fury.io/py/oddrn-generator)

# Open Data Discovery Resource Name Generator

Helps generate oddrn for data sources.

* [Requirements](#requirements)
* [Installation](#installation)
* [Available generators](#available-generators)
* [Generator properties](#generator-properties)
* [Generator methods](#generator-methods)
* [Generator properties](#generator-properties)
* [Example usage](#example-usage)
* [Exceptions](#example-usage)
* [Development](#development)

## Requirements

* __Python >= 3.7__

## Installation

```bash
poetry add oddrn-generator
# or
pip install oddrn-generator
```

## Usage and configuration

### Available generators
| DataSource   | Generator class name  |
|--------------|-----------------------|
| cassandra    | CassandraGenerator    |
| postgresql   | PostgresqlGenerator   |
| mysql        | MysqlGenerator        |
| glue         | GlueGenerator         |
| s3           | S3Generator           |
| kafka        | KafkaGenerator        |
| kafkaconnect | KafkaConnectGenerator |
| snowflake    | SnowflakeGenerator    |
| airflow      | AirflowGenerator      |
| hive         | HiveGenerator         |
| dynamodb     | DynamodbGenerator     |
| odbc         | OdbcGenerator         |
| mssql        | MssqlGenerator        |
| oracle       | OracleGenerator       |
| redshift     | RedshiftGenerator     |
| clickhouse   | ClickHouseGenerator   |
| athena       | AthenaGenerator       |
| quicksight   | QuicksightGenerator   |
| dbt          | DbtGenerator          |
| prefect      | PrefectGenerator      |
| tableau      | TableauGenerator      |
| neo4j        | Neo4jGenerator        |
| mongodb      | MongoGenerator        |
| vertica      | VerticaGenerator      |
| CubeJs       | CubeJsGenerator       |
| superset     | SupersetGenerator     |
| Presto       | PrestoGenerator       |
| Trino        | TrinoGenerator        |
| dms          | DmsGenerator          |
| powerbi      | PowerBiGenerator      |

### Generator properties

* base_oddrn - Get base oddrn (without path)
* available_paths - Get all available path of generator

### Generator methods

* get_oddrn_by_path(path_name, new_value=None) - Get oddrn string by path. You also can set value for this path using '
  new_value' param
* set_oddrn_paths(**kwargs) - Set or update values of oddrn path
* get_data_source_oddrn() - Get data source oddrn

### Generator parameters:

* host_settings: str - optional. Hostname configuration
* cloud_settings: dict - optional. Cloud configuration
* **kwargs - path's name and values

### Example usage

```python
# postgresql
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432',
    schemas='schema_name', databases='database_name', tables='table_name'
)

oddrn_gen.base_oddrn
# //postgresql/host/my.host.com:5432
oddrn_gen.available_paths
# ('schemas', 'databases', 'tables', 'columns')

oddrn_gen.get_data_source_oddrn()
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name

oddrn_gen.get_oddrn_by_path("schemas")
# //postgresql/host/my.host.com:5432/schemas/schema_name

oddrn_gen.get_oddrn_by_path("databases")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name

oddrn_gen.get_oddrn_by_path("tables")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/table_name

# you can set or change path:
oddrn_gen.set_oddrn_paths(tables='another_table_name', columns='new_column_name')
oddrn_gen.get_oddrn_by_path("columns")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/another_table_name/columns/new_column_name

# you can get path wih new values:
oddrn_gen.get_oddrn_by_path("columns", new_value="another_new_column_name")
# //postgresql/host/my.host.com:5432/schemas/schema_name/databases/database_name/tables/another_table_name/columns/another_new_column_name


# glue
from oddrn_generator import GlueGenerator

oddrn_gen = GlueGenerator(
    cloud_settings={'account': 'acc_id', 'region': 'reg_id'},
    databases='database_name', tables='table_name', columns='column_name',
    jobs='job_name', runs='run_name', owners='owner_name'
)

oddrn_gen.available_paths
# ('databases', 'tables', 'columns', 'owners', 'jobs', 'runs')

oddrn_gen.get_oddrn_by_path("databases")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name

oddrn_gen.get_oddrn_by_path("tables")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name/tables/table_name'

oddrn_gen.get_oddrn_by_path("columns")
# //glue/cloud/aws/account/acc_id/region/reg_id/databases/database_name/tables/table_name/columns/column_name

oddrn_gen.get_oddrn_by_path("jobs")
# //glue/cloud/aws/account/acc_id/region/reg_id/jobs/job_name

oddrn_gen.get_oddrn_by_path("runs")
# //glue/cloud/aws/account/acc_id/region/reg_id/jobs/job_name/runs/run_name

oddrn_gen.get_oddrn_by_path("owners")
# //glue/cloud/aws/account/acc_id/region/reg_id/owners/owner_name

```

### Exceptions

* WrongPathOrderException - raises when trying set path that depends on another path

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432',
    schemas='schema_name', databases='database_name',
    columns='column_without_table'
)
# WrongPathOrderException: 'columns' can not be without 'tables' attribute
```

* EmptyPathValueException - raises when trying to get a path that is not set up

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432', schemas='schema_name', databases='database_name',
)
oddrn_gen.get_oddrn_by_path("tables")

# EmptyPathValueException: Path 'tables' is not set up
```

* PathDoestExistException - raises when trying to get not existing oddrn path

```python
from oddrn_generator import PostgresqlGenerator

oddrn_gen = PostgresqlGenerator(
    host_settings='my.host.com:5432', schemas='schema_name', databases='database_name',
)
oddrn_gen.get_oddrn_by_path("jobs")

# PathDoestExistException: Path 'jobs' doesn't exist in generator
```

## Development

```bash
#Install dependencies
poetry install

#Activate shell
poetry shell

# Run tests
python run pytest
```


%prep
%autosetup -n oddrn_generator-0.1.80

%build
%py3_build

%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
	find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
	find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
	find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
	find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
	find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .

%files -n python3-oddrn-generator -f filelist.lst
%dir %{python3_sitelib}/*

%files help -f doclist.lst
%{_docdir}/*

%changelog
* Thu Jun 08 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1.80-1
- Package Spec generated