# packages

pkgId: 7548fa597555fba664cba9ab7d8b03cb900fbcb0137b3fbfb1d9cad0784b8a69
name: python-apache-airflow-providers-vertica
arch: src
version: 3.9.0
epoch: 0
release: 1
summary: Provider package apache-airflow-providers-vertica for Apache Airflow
url: https://pypi.org/project/apache-airflow-providers-vertica/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-airflow-providers-vertica-3.9.0-1.src.rpm
checksum_type: sha256
description:
  This is a provider package for ``vertica`` provider. All classes for this provider package
  are in ``airflow.providers.vertica`` python package.
  You can find package information and changelog for the provider
  in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-vertica/3.9.0/>`_.


pkgId: f36b6f96520723a4eb8de7c846b7e5f1f901a1ae683ed0eec4aed7e525770f31
name: python-apache-airflow-providers-weaviate
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Provider package apache-airflow-providers-weaviate for Apache Airflow
url: https://pypi.org/project/apache-airflow-providers-weaviate/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-airflow-providers-weaviate-2.1.0-1.src.rpm
checksum_type: sha256
description:
  This is a provider package for ``weaviate`` provider. All classes for this provider package
  are in ``airflow.providers.weaviate`` python package.
  You can find package information and changelog for the provider
  in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-weaviate/2.1.0/>`_.


pkgId: e20d115e1d87fc077b25648c77a9a5e69ef06722b37df5a4b983336db60a5159
name: python-apache-airflow-providers-yandex
arch: src
version: 3.12.0
epoch: 0
release: 1
summary: Provider package apache-airflow-providers-yandex for Apache Airflow
url: https://pypi.org/project/apache-airflow-providers-yandex/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-airflow-providers-yandex-3.12.0-1.src.rpm
checksum_type: sha256
description:
  This is a provider package for ``yandex`` provider. All classes for this provider package
  are in ``airflow.providers.yandex`` python package.
  You can find package information and changelog for the provider
  in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-yandex/3.12.0/>`_.


pkgId: 19ccd6b9c3d24e113ade2e9ed2e29cafcd706bc7eafd0103ad17b7506e1fbda7
name: python-apache-airflow-providers-ydb
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: Provider package apache-airflow-providers-ydb for Apache Airflow
url: https://pypi.org/project/apache-airflow-providers-ydb/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-airflow-providers-ydb-1.4.0-1.src.rpm
checksum_type: sha256
description:
  This is a provider package for ``ydb`` provider. All classes for this provider package
  are in ``airflow.providers.ydb`` python package.
  You can find package information and changelog for the provider
  in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-ydb/1.4.0/>`_.


pkgId: 2769b195d12c2e8ae68259103a0f36b90b459d53e3b93faea5b84f6f64ef4971
name: python-apache-airflow-providers-zendesk
arch: src
version: 4.8.0
epoch: 0
release: 1
summary: Provider package apache-airflow-providers-zendesk for Apache Airflow
url: https://pypi.org/project/apache-airflow-providers-zendesk/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-airflow-providers-zendesk-4.8.0-1.src.rpm
checksum_type: sha256
description:
  This is a provider package for ``zendesk`` provider. All classes for this provider package
  are in ``airflow.providers.zendesk`` python package.
  You can find package information and changelog for the provider
  in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-zendesk/4.8.0/>`_.


pkgId: bcca9e22b2788757415f9364a70454ac6bce1d9b198b377ebc69a5b3a57206a2
name: python-apache-airflow-upgrade-check
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: Check for compatibility between Airflow versions
url: https://airflow.apache.org
rpm_license: Apache License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-airflow-upgrade-check-1.4.0-1.src.rpm
checksum_type: sha256
description:
  Check for latest versions of apache-airflow and checker.................................SUCCESS
  Legacy UI is deprecated by default......................................................SUCCESS
  Users must set a kubernetes.pod_template_file value.....................................FAIL
  Changes in import paths of hooks, operators, sensors and others.........................FAIL
  Remove airflow.AirflowMacroPlugin class.................................................SUCCESS
  Check versions of PostgreSQL, MySQL, and SQLite to ease upgrade to Airflow 2.0..........SUCCESS
  Fernet is enabled by default............................................................FAIL
  Logging configuration has been moved to new section.....................................SUCCESS
  Connection.conn_id is not unique........................................................SUCCESS
  GCP service account key deprecation.....................................................SUCCESS
  Users must delete deprecated configs for KubernetesExecutor.............................FAIL
  Changes in import path of remote task handlers..........................................SUCCESS
  Chain between DAG and operator not allowed..............................................SUCCESS
  SendGrid email uses old airflow.contrib module..........................................SUCCESS
  Connection.conn_type is not nullable....................................................SUCCESS


pkgId: 645a85cf6fb347c6a43f696369467a56117f0199fca47e28c72014758ef60f05
name: python-apache-atlas
arch: src
version: 0.0.15
epoch: 0
release: 1
summary: Apache Atlas Python Client
url: https://github.com/apache/atlas/tree/master/intg/src/main/python
rpm_license: Apache LICENSE 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-atlas-0.0.15-1.src.rpm
checksum_type: sha256
description:
  apache-atlas 0.0.15
  ```

  ```python atlas_example.py```
  ```python

  import time
  from apache_atlas.client.base_client import AtlasClient
  from apache_atlas.model.instance     import AtlasEntity, AtlasEntityWithExtInfo, AtlasEntitiesWithExtInfo, AtlasRelatedObjectId
  from apache_atlas.model.enums        import EntityOperation

  client = AtlasClient('http://localhost:21000', ('admin', 'atlasR0cks!'))









  test_db            = AtlasEntity({ 'typeName': 'hive_db' })
  test_db.attributes = { 'name': 'test_db', 'clusterName': 'prod', 'qualifiedName': 'test_db@prod' }
  entity_info        = AtlasEntityWithExtInfo()
  entity_info.entity = test_db
  print('Creating test_db')
  resp = client.entity.create_entity(entity_info)
  guid_db = resp.get_assigned_guid(test_db.guid)
  print('    created test_db: guid=' + guid_db)

  test_tbl                        = AtlasEntity({ 'typeName': 'hive_table' })
  test_tbl.attributes             = { 'name': 'test_tbl', 'qualifiedName': 'test_db.test_tbl@prod' }
  test_tbl.relationshipAttributes = { 'db': AtlasRelatedObjectId({ 'guid': guid_db }) }
  test_col1                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_col1.attributes             = { 'name': 'test_col1', 'type': 'string', 'qualifiedName': 'test_db.test_tbl.test_col1@prod' }
  test_col1.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_tbl.guid }) }
  test_col2                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_col2.attributes             = { 'name': 'test_col2', 'type': 'string', 'qualifiedName': 'test_db.test_tbl.test_col2@prod' }
  test_col2.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_tbl.guid }) }
  entities_info          = AtlasEntitiesWithExtInfo()
  entities_info.entities = [ test_tbl, test_col1, test_col2 ]
  print('Creating test_tbl')
  resp = client.entity.create_entities(entities_info)
  guid_tbl  = resp.get_assigned_guid(test_tbl.guid)
  guid_col1 = resp.get_assigned_guid(test_col1.guid)
  guid_col2 = resp.get_assigned_guid(test_col2.guid)
  print('    created test_tbl:           guid=' + guid_tbl)
  print('    created test_tbl.test_col1: guid=' + guid_col1)
  print('    created test_tbl.test_col2: guid=' + guid_col2)


  test_view                        = AtlasEntity({ 'typeName': 'hive_table' })
  test_view.attributes             = { 'name': 'test_view', 'qualifiedName': 'test_db.test_view@prod' }
  test_view.relationshipAttributes = { 'db': AtlasRelatedObjectId({ 'guid': guid_db }) }
  test_view_col1                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_view_col1.attributes             = { 'name': 'test_col1', 'type': 'string', 'qualifiedName': 'test_db.test_view.test_col1@prod' }
  test_view_col1.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_view.guid }) }
  test_view_col2                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_view_col2.attributes             = { 'name': 'test_col2', 'type': 'string', 'qualifiedName': 'test_db.test_view.test_col2@prod' }
  test_view_col2.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_view.guid }) }
  test_process                         = AtlasEntity({ 'typeName': 'hive_process' })
  test_process.attributes              = { 'name': 'create_test_view', 'userName': 'admin', 'operationType': 'CREATE', 'qualifiedName': 'create_test_view@prod' }
  test_process.attributes['queryText'] = 'create view test_view as select * from test_tbl'
  test_process.attributes['queryPlan'] = '<queryPlan>'
  test_process.attributes['queryId']   = '<queryId>'
  test_process.attributes['startTime'] = int(time.time() * 1000)
  test_process.attributes['endTime']   = int(time.time() * 1000)
  test_process.relationshipAttributes  = { 'inputs': [ AtlasRelatedObjectId({ 'guid': guid_tbl }) ], 'outputs': [ AtlasRelatedObjectId({ 'guid': test_view.guid }) ] }
  test_col1_lineage                        = AtlasEntity({ 'typeName': 'hive_column_lineage' })
  test_col1_lineage.attributes             = { 'name': 'test_view.test_col1 lineage', 'depenendencyType': 'read', 'qualifiedName': 'test_db.test_view.test_col1@prod' }
  test_col1_lineage.attributes['query']    = { 'guid': test_process.guid }
  test_col1_lineage.relationshipAttributes = { 'inputs': [ AtlasRelatedObjectId({ 'guid': guid_col1 }) ], 'outputs': [ AtlasRelatedObjectId({ 'guid': test_view_col1.guid }) ] }
  test_col2_lineage                        = AtlasEntity({ 'typeName': 'hive_column_lineage' })
  test_col2_lineage.attributes             = { 'name': 'test_view.test_col2 lineage', 'depenendencyType': 'read', 'qualifiedName': 'test_db.test_view.test_col2@prod' }
  test_col2_lineage.attributes['query']    = { 'guid': test_process.guid }
  test_col2_lineage.relationshipAttributes = { 'inputs': [ AtlasRelatedObjectId({ 'guid': guid_col2 }) ], 'outputs': [ AtlasRelatedObjectId({ 'guid': test_view_col2.guid }) ] }
  entities_info          = AtlasEntitiesWithExtInfo()
  entities_info.entities = [ test_process, test_col1_lineage, test_col2_lineage ]
  entities_info.add_referenced_entity(test_view)
  entities_info.add_referenced_entity(test_view_col1)
  entities_info.add_referenced_entity(test_view_col2)
  print('Creating test_view')
  resp = client.entity.create_entities(entities_info)
  guid_view         = resp.get_assigned_guid(test_view.guid)
  guid_view_col1    = resp.get_assigned_guid(test_view_col1.guid)
  guid_view_col2    = resp.get_assigned_guid(test_view_col2.guid)
  guid_process      = resp.get_assigned_guid(test_process.guid)
  guid_col1_lineage = resp.get_assigned_guid(test_col1_lineage.guid)
  guid_col2_lineage = resp.get_assigned_guid(test_col2_lineage.guid)
  print('    created test_view:           guid=' + guid_view)
  print('    created test_view.test_col1: guid=' + guid_view_col1)
  print('    created test_view.test_col2: guid=' + guid_view_col1)
  print('    created test_view lineage:   guid=' + guid_process)
  print('    created test_col1 lineage:   guid=' + guid_col1_lineage)
  print('    created test_col2 lineage:   guid=' + guid_col2_lineage)

  print('Deleting entities')
  resp = client.entity.delete_entities_by_guids([ guid_col1_lineage, guid_col2_lineage, guid_process, guid_view, guid_tbl, guid_db ])
  deleted_count = len(resp.mutatedEntities[EntityOperation.DELETE.name]) if resp and resp.mutatedEntities and EntityOperation.DELETE.name in resp.mutatedEntities else 0
  print('    ' + str(deleted_count) + ' entities deleted')
  ```
  For more examples, checkout `sample-app` python project in [atlas-examples](https://github.com/apache/atlas/blob/master/atlas-examples/sample-app/src/main/python/sample_client.py) module.


pkgId: 50beea704438e5dde72557483b922e99babbccd9d263bfb62a2eda04c30c1fc5
name: python-apache-atlas
arch: src
version: 0.0.16
epoch: 0
release: 1
summary: Apache Atlas Python Client
url: https://github.com/apache/atlas/tree/master/intg/src/main/python
rpm_license: Apache LICENSE 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-atlas-0.0.16-1.src.rpm
checksum_type: sha256
description:
  apache-atlas 0.0.16
  ```

  ```python atlas_example.py```
  ```python

  import time
  from apache_atlas.client.base_client import AtlasClient
  from apache_atlas.model.instance     import AtlasEntity, AtlasEntityWithExtInfo, AtlasEntitiesWithExtInfo, AtlasRelatedObjectId
  from apache_atlas.model.enums        import EntityOperation

  client = AtlasClient('http://localhost:21000', ('admin', 'atlasR0cks!'))









  test_db            = AtlasEntity({ 'typeName': 'hive_db' })
  test_db.attributes = { 'name': 'test_db', 'clusterName': 'prod', 'qualifiedName': 'test_db@prod' }
  entity_info        = AtlasEntityWithExtInfo()
  entity_info.entity = test_db
  print('Creating test_db')
  resp = client.entity.create_entity(entity_info)
  guid_db = resp.get_assigned_guid(test_db.guid)
  print('    created test_db: guid=' + guid_db)

  test_tbl                        = AtlasEntity({ 'typeName': 'hive_table' })
  test_tbl.attributes             = { 'name': 'test_tbl', 'qualifiedName': 'test_db.test_tbl@prod' }
  test_tbl.relationshipAttributes = { 'db': AtlasRelatedObjectId({ 'guid': guid_db }) }
  test_col1                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_col1.attributes             = { 'name': 'test_col1', 'type': 'string', 'qualifiedName': 'test_db.test_tbl.test_col1@prod' }
  test_col1.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_tbl.guid }) }
  test_col2                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_col2.attributes             = { 'name': 'test_col2', 'type': 'string', 'qualifiedName': 'test_db.test_tbl.test_col2@prod' }
  test_col2.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_tbl.guid }) }
  entities_info          = AtlasEntitiesWithExtInfo()
  entities_info.entities = [ test_tbl, test_col1, test_col2 ]
  print('Creating test_tbl')
  resp = client.entity.create_entities(entities_info)
  guid_tbl  = resp.get_assigned_guid(test_tbl.guid)
  guid_col1 = resp.get_assigned_guid(test_col1.guid)
  guid_col2 = resp.get_assigned_guid(test_col2.guid)
  print('    created test_tbl:           guid=' + guid_tbl)
  print('    created test_tbl.test_col1: guid=' + guid_col1)
  print('    created test_tbl.test_col2: guid=' + guid_col2)


  test_view                        = AtlasEntity({ 'typeName': 'hive_table' })
  test_view.attributes             = { 'name': 'test_view', 'qualifiedName': 'test_db.test_view@prod' }
  test_view.relationshipAttributes = { 'db': AtlasRelatedObjectId({ 'guid': guid_db }) }
  test_view_col1                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_view_col1.attributes             = { 'name': 'test_col1', 'type': 'string', 'qualifiedName': 'test_db.test_view.test_col1@prod' }
  test_view_col1.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_view.guid }) }
  test_view_col2                        = AtlasEntity({ 'typeName': 'hive_column' })
  test_view_col2.attributes             = { 'name': 'test_col2', 'type': 'string', 'qualifiedName': 'test_db.test_view.test_col2@prod' }
  test_view_col2.relationshipAttributes = { 'table': AtlasRelatedObjectId({ 'guid': test_view.guid }) }
  test_process                         = AtlasEntity({ 'typeName': 'hive_process' })
  test_process.attributes              = { 'name': 'create_test_view', 'userName': 'admin', 'operationType': 'CREATE', 'qualifiedName': 'create_test_view@prod' }
  test_process.attributes['queryText'] = 'create view test_view as select * from test_tbl'
  test_process.attributes['queryPlan'] = '<queryPlan>'
  test_process.attributes['queryId']   = '<queryId>'
  test_process.attributes['startTime'] = int(time.time() * 1000)
  test_process.attributes['endTime']   = int(time.time() * 1000)
  test_process.relationshipAttributes  = { 'inputs': [ AtlasRelatedObjectId({ 'guid': guid_tbl }) ], 'outputs': [ AtlasRelatedObjectId({ 'guid': test_view.guid }) ] }
  test_col1_lineage                        = AtlasEntity({ 'typeName': 'hive_column_lineage' })
  test_col1_lineage.attributes             = { 'name': 'test_view.test_col1 lineage', 'depenendencyType': 'read', 'qualifiedName': 'test_db.test_view.test_col1@prod' }
  test_col1_lineage.attributes['query']    = { 'guid': test_process.guid }
  test_col1_lineage.relationshipAttributes = { 'inputs': [ AtlasRelatedObjectId({ 'guid': guid_col1 }) ], 'outputs': [ AtlasRelatedObjectId({ 'guid': test_view_col1.guid }) ] }
  test_col2_lineage                        = AtlasEntity({ 'typeName': 'hive_column_lineage' })
  test_col2_lineage.attributes             = { 'name': 'test_view.test_col2 lineage', 'depenendencyType': 'read', 'qualifiedName': 'test_db.test_view.test_col2@prod' }
  test_col2_lineage.attributes['query']    = { 'guid': test_process.guid }
  test_col2_lineage.relationshipAttributes = { 'inputs': [ AtlasRelatedObjectId({ 'guid': guid_col2 }) ], 'outputs': [ AtlasRelatedObjectId({ 'guid': test_view_col2.guid }) ] }
  entities_info          = AtlasEntitiesWithExtInfo()
  entities_info.entities = [ test_process, test_col1_lineage, test_col2_lineage ]
  entities_info.add_referenced_entity(test_view)
  entities_info.add_referenced_entity(test_view_col1)
  entities_info.add_referenced_entity(test_view_col2)
  print('Creating test_view')
  resp = client.entity.create_entities(entities_info)
  guid_view         = resp.get_assigned_guid(test_view.guid)
  guid_view_col1    = resp.get_assigned_guid(test_view_col1.guid)
  guid_view_col2    = resp.get_assigned_guid(test_view_col2.guid)
  guid_process      = resp.get_assigned_guid(test_process.guid)
  guid_col1_lineage = resp.get_assigned_guid(test_col1_lineage.guid)
  guid_col2_lineage = resp.get_assigned_guid(test_col2_lineage.guid)
  print('    created test_view:           guid=' + guid_view)
  print('    created test_view.test_col1: guid=' + guid_view_col1)
  print('    created test_view.test_col2: guid=' + guid_view_col1)
  print('    created test_view lineage:   guid=' + guid_process)
  print('    created test_col1 lineage:   guid=' + guid_col1_lineage)
  print('    created test_col2 lineage:   guid=' + guid_col2_lineage)

  print('Deleting entities')
  resp = client.entity.delete_entities_by_guids([ guid_col1_lineage, guid_col2_lineage, guid_process, guid_view, guid_tbl, guid_db ])
  deleted_count = len(resp.mutatedEntities[EntityOperation.DELETE.name]) if resp and resp.mutatedEntities and EntityOperation.DELETE.name in resp.mutatedEntities else 0
  print('    ' + str(deleted_count) + ' entities deleted')
  ```
  For more examples, checkout `sample-app` python project in [atlas-examples](https://github.com/apache/atlas/blob/master/atlas-examples/sample-app/src/main/python/sample_client.py) module.


pkgId: 08e472630bad042630a8cc9a46974ae22559f32c62e14a624d6053fa1ad31d84
name: python-apache-bookkeeper-client
arch: src
version: 4.17.1
epoch: 0
release: 1
summary: Apache BookKeeper client library
url: https://github.com/apache/bookkeeper/tree/master/stream/clients/python
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-bookkeeper-client-4.17.1-1.src.rpm
checksum_type: sha256
description:
  Apache BookKeeper is a scalable, fault tolerant and low latency storage service optimized for append-only workloads.


pkgId: fd9e17932fd2c82f99cb237558d262baff13f27888fcc5fb7ba2c18a231b29ad
name: python-apache-flink-libraries
arch: src
version: 1.20.0
epoch: 0
release: 1
summary: Apache Flink Libraries
url: https://flink.apache.org
rpm_license: https://www.apache.org/licenses/LICENSE-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-flink-libraries-1.20.0-1.src.rpm
checksum_type: sha256
description:
  Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.

  Learn more about Flink at [https://flink.apache.org/](https://flink.apache.org/)



  This package bundles [apache-flink](https://pypi.org/project/apache-flink/) needed libraries


pkgId: 8942385e22e520c34ecc35d35267fbb794690cb8ee83f863d62a4b63fb2637c3
name: python-apache-gravitino
arch: src
version: 0.7.0
epoch: 0
release: 1
summary: Python lib/client for Apache Gravitino
url: https://gravitino.apache.org/
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-gravitino-0.7.0-1.src.rpm
checksum_type: sha256
description:
  Apache Gravitino is a high-performance, geo-distributed, and federated metadata lake.
  It manages the metadata directly in different sources, types, and regions, also provides users
  the unified metadata access for data and AI assets.

  Gravitino Python client helps data scientists easily manage metadata using Python language.

  ![gravitino-python-client-introduction](https://github.com/apache/gravitino/blob/main/docs/assets/gravitino-python-client-introduction.png?raw=true)



  You can use Gravitino Python client library with Spark, PyTorch, Tensorflow, Ray and Python environment.

  First of all, You must have a Gravitino server set up and run, You can refer document of
  [How to install Gravitino](https://datastrato.ai/docs/latest/how-to-install/) to build Gravitino server from source code and
  install it in your local.



  ```shell
  pip install apache-gravitino
  ```

  1. [Manage metalake using Gravitino Python API](https://datastrato.ai/docs/latest/manage-metalake-using-gravitino/?language=python)
  2. [Manage fileset metadata using Gravitino Python API](https://datastrato.ai/docs/latest/manage-fileset-metadata-using-gravitino/?language=python)



  We offer a playground environment to help you quickly understand how to use Gravitino Python
  client to manage non-tabular data on HDFS via Fileset in Gravitino. You can refer to the
  document [How to use the playground](https://datastrato.ai/docs/latest/how-to-use-the-playground/)
  to launch a Gravitino server, HDFS and Jupyter notebook environment in you local Docker environment.

  Waiting for the playground Docker environment to start, you can directly open
  `http://localhost:18888/lab/tree/gravitino-fileset-example.ipynb` in the browser and run the example.

  The [gravitino-fileset-example](https://github.com/apache/gravitino-playground/blob/main/init/jupyter/gravitino-fileset-example.ipynb)
  contains the following code snippets:

  1. Install HDFS Python client.
  2. Create a HDFS client to connect HDFS and to do some test operations.
  3. Install Gravitino Python client.
  4. Initialize Gravitino admin client and create a Gravitino metalake.
  5. Initialize Gravitino client and list metalakes.
  6. Create a Gravitino `Catalog` and special `type` is `Catalog.Type.FILESET` and `provider` is
     [hadoop](https://datastrato.ai/docs/latest/hadoop-catalog/)
  7. Create a Gravitino `Schema` with the `location` pointed to a HDFS path, and use `hdfs client` to
     check if the schema location is successfully created in HDFS.
  8. Create a `Fileset` with `type` is [Fileset.Type.MANAGED](https://datastrato.ai/docs/latest/manage-fileset-metadata-using-gravitino/#fileset-operations),
     use `hdfs client` to check if the fileset location was successfully created in HDFS.
  9. Drop this `Fileset.Type.MANAGED` type fileset and check if the fileset location was
     successfully deleted in HDFS.
  10. Create a `Fileset` with `type` is [Fileset.Type.EXTERNAL](https://datastrato.ai/docs/latest/manage-fileset-metadata-using-gravitino/#fileset-operations)
      and `location` pointed to exist HDFS path
  11. Drop this `Fileset.Type.EXTERNAL` type fileset and check if the fileset location was
      not deleted in HDFS.



  You can ues any IDE to develop Gravitino Python Client. Directly open the client-python module project in the IDE.



  + Python 3.8+
  + Refer to [How to build Gravitino](https://datastrato.ai/docs/latest/how-to-build/#prerequisites) to have necessary build
    environment ready for building.



  1. Clone the Gravitino project.

      ```shell
      git clone git@github.com:apache/gravitino.git
      ```

  2. Build the Gravitino Python client module

      ```shell
      ./gradlew :clients:client-python:build
      ```

  3. Run unit tests

      ```shell
      ./gradlew :clients:client-python:test -PskipITs
      ```

  4. Run integration tests

     Because Python client connects to Gravitino Server to run integration tests,
     So it runs `./gradlew compileDistribution -x test` command automatically to compile the
     Gravitino project in the `distribution` directory. When you run integration tests via Gradle
     command or IDE, Gravitino integration test framework (`integration_test_env.py`)
     will start and stop Gravitino server automatically.

      ```shell
      ./gradlew :clients:client-python:test
      ```

  5. Distribute the Gravitino Python client module

      ```shell
      ./gradlew :clients:client-python:distribution
      ```

  6. Deploy the Gravitino Python client to https://pypi.org/project/apache-gravitino/

      ```shell
      ./gradlew :clients:client-python:deploy
      ```



  + Official website https://gravitino.apache.org/
  + Project home on GitHub: https://github.com/apache/gravitino/
  + Playground with Docker: https://github.com/apache/gravitino-playground
  + User documentation: https://gravitino.apache.org/docs/
  + Slack Community: [https://the-asf.slack.com#gravitino](https://the-asf.slack.com/archives/C078RESTT19)



  Gravitino is under the Apache License Version 2.0, See the [LICENSE](https://github.com/apache/gravitino/blob/main/LICENSE) for the details.



  Apache Gravitino is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator.
  Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications,
  and decision making process have stabilized in a manner consistent with other successful ASF projects.
  While incubation status is not necessarily a reflection of the completeness or stability of the code,
  it does indicate that the project has yet to be fully endorsed by the ASF.


pkgId: 0a53a5d57f03845e9b3039f0aad32d0ab6facdea7e4dd125fe43bcf9963d51d0
name: python-apache-iotdb
arch: src
version: 1.3.2.post0
epoch: 0
release: 1
summary: Apache IoTDB client API
url: https://github.com/apache/iotdb
rpm_license: Apache License, Version 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-iotdb-1.3.2.post0-1.src.rpm
checksum_type: sha256
description:
  <!--

      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
      distributed with this work for additional information
      regarding copyright ownership.  The ASF licenses this file
      to you under the Apache License, Version 2.0 (the
      "License"); you may not use this file except in compliance
      with the License.  You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

      Unless required by applicable law or agreed to in writing,
      software distributed under the License is distributed on an
      "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, either express or implied.  See the License for the
      specific language governing permissions and limitations
      under the License.

  -->



  [![Python Client](https://github.com/apache/iotdb/actions/workflows/client-python.yml/badge.svg?branch=master)](https://github.com/apache/iotdb/actions/workflows/client-python.yml)
  [![GitHub release](https://img.shields.io/github/release/apache/iotdb.svg)](https://github.com/apache/iotdb/releases)
  [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
  ![](https://github-size-badge.herokuapp.com/apache/iotdb.svg)
  ![](https://img.shields.io/github/downloads/apache/iotdb/total.svg)
  ![](https://img.shields.io/badge/platform-win%20%7C%20macos%20%7C%20linux-yellow.svg)
  [![IoTDB Website](https://img.shields.io/website-up-down-green-red/https/shields.io.svg?label=iotdb-website)](https://iotdb.apache.org/)


  Apache IoTDB (Database for Internet of Things) is an IoT native database with high performance for
  data management and analysis, deployable on the edge and the cloud. Due to its light-weight
  architecture, high performance and rich feature set together with its deep integration with
  Apache Hadoop, Spark and Flink, Apache IoTDB can meet the requirements of massive data storage,
  high-speed data ingestion and complex data analysis in the IoT industrial fields.





  You have to install thrift (>=0.13) before using the package.





  First, download the latest package: `pip3 install apache-iotdb`

  *Notice: If you are installing Python API v0.13.0, DO NOT install by `pip install apache-iotdb==0.13.0`, use `pip install apache-iotdb==0.13.0.post1` instead!*

  You can get an example of using the package to read and write data at here: [Example](https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py)

  An example of aligned timeseries: [Aligned Timeseries Session Example](https://github.com/apache/iotdb/blob/master/client-py/SessionAlignedTimeseriesExample.py)

  (you need to add `import iotdb` in the head of the file)

  Or:

  ```python
  from iotdb.Session import Session

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  session = Session(ip, port_, username_, password_)
  session.open(False)
  zone = session.get_time_zone()
  session.close()
  ```



  * Initialize a Session

  ```python
  session = Session(ip, port_, username_, password_, fetch_size=1024, zone_id="UTC+8")
  ```

  * Open a session, with a parameter to specify whether to enable RPC compression

  ```python
  session.open(enable_rpc_compression=False)
  ```

  Notice: this RPC compression status of client must comply with that of IoTDB server

  * Close a Session

  ```python
  session.close()
  ```





  * CREATE DATABASE

  ```python
  session.set_storage_group(group_name)
  ```

  * Delete one or several databases

  ```python
  session.delete_storage_group(group_name)
  session.delete_storage_groups(group_name_lst)
  ```


  * Create one or multiple timeseries

  ```python
  session.create_time_series(ts_path, data_type, encoding, compressor,
      props=None, tags=None, attributes=None, alias=None)

  session.create_multi_time_series(
      ts_path_lst, data_type_lst, encoding_lst, compressor_lst,
      props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None
  )
  ```

  * Create aligned timeseries

  ```python
  session.create_aligned_time_series(
      device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst
  )
  ```

  Attention: Alias of measurements are **not supported** currently.

  * Delete one or several timeseries

  ```python
  session.delete_time_series(paths_list)
  ```

  * Check whether the specific timeseries exists

  ```python
  session.check_time_series_exists(path)
  ```





  It is recommended to use insertTablet to help improve write efficiency.

  * Insert a Tablet，which is multiple rows of a device, each row has the same measurements
      * **Better Write Performance**
      * **Support null values**: fill the null value with any value, and then mark the null value via BitMap (from v0.13)


  We have two implementations of Tablet in Python API.

  * Normal Tablet

  ```python
  values_ = [
      [False, 10, 11, 1.1, 10011.1, "test01"],
      [True, 100, 11111, 1.25, 101.0, "test02"],
      [False, 100, 1, 188.1, 688.25, "test03"],
      [True, 0, 0, 0, 6.25, "test04"],
  ]
  timestamps_ = [1, 2, 3, 4]
  tablet_ = Tablet(
      device_id, measurements_, data_types_, values_, timestamps_
  )
  session.insert_tablet(tablet_)

  values_ = [
      [None, 10, 11, 1.1, 10011.1, "test01"],
      [True, None, 11111, 1.25, 101.0, "test02"],
      [False, 100, None, 188.1, 688.25, "test03"],
      [True, 0, 0, 0, None, None],
  ]
  timestamps_ = [16, 17, 18, 19]
  tablet_ = Tablet(
      device_id, measurements_, data_types_, values_, timestamps_
  )
  session.insert_tablet(tablet_)
  ```
  * Numpy Tablet

  Comparing with Tablet, Numpy Tablet is using [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) to record data.
  With less memory footprint and time cost of serialization, the insert performance will be better.

  **Notice**
  1. time and value columns in Tablet are ndarray.
  2. recommended to use the specific dtypes to each ndarray, see the example below
  (if not, the default dtypes are also ok).

  ```python
  import numpy as np
  data_types_ = [
      TSDataType.BOOLEAN,
      TSDataType.INT32,
      TSDataType.INT64,
      TSDataType.FLOAT,
      TSDataType.DOUBLE,
      TSDataType.TEXT,
  ]
  np_values_ = [
      np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()),
      np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()),
      np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()),
      np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()),
      np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()),
      np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()),
  ]
  np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype())
  np_tablet_ = NumpyTablet(
    device_id, measurements_, data_types_, np_values_, np_timestamps_
  )
  session.insert_tablet(np_tablet_)


  np_values_ = [
      np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()),
      np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()),
      np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()),
      np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()),
      np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()),
      np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()),
  ]
  np_timestamps_ = np.array([98, 99, 100, 101], TSDataType.INT64.np_dtype())
  np_bitmaps_ = []
  for i in range(len(measurements_)):
      np_bitmaps_.append(BitMap(len(np_timestamps_)))
  np_bitmaps_[0].mark(0)
  np_bitmaps_[1].mark(1)
  np_bitmaps_[2].mark(2)
  np_bitmaps_[4].mark(3)
  np_bitmaps_[5].mark(3)
  np_tablet_with_none = NumpyTablet(
      device_id, measurements_, data_types_, np_values_, np_timestamps_, np_bitmaps_
  )
  session.insert_tablet(np_tablet_with_none)
  ```

  * Insert multiple Tablets

  ```python
  session.insert_tablets(tablet_lst)
  ```

  * Insert a Record

  ```python
  session.insert_record(device_id, timestamp, measurements_, data_types_, values_)
  ```

  * Insert multiple Records

  ```python
  session.insert_records(
      device_ids_, time_list_, measurements_list_, data_type_list_, values_list_
  )
  ```

  * Insert multiple Records that belong to the same device.
    With type info the server has no need to do type inference, which leads a better performance


  ```python
  session.insert_records_of_one_device(device_id, time_list, measurements_list, data_types_list, values_list)
  ```



  When the data is of String type, we can use the following interface to perform type inference based on the value of the value itself. For example, if value is "true" , it can be automatically inferred to be a boolean type. If value is "3.2" , it can be automatically inferred as a flout type. Without type information, server has to do type inference, which may cost some time.

  * Insert a Record, which contains multiple measurement value of a device at a timestamp

  ```python
  session.insert_str_record(device_id, timestamp, measurements, string_values)
  ```



  The Insert of aligned timeseries uses interfaces like insert_aligned_XXX, and others are similar to the above interfaces:

  * insert_aligned_record
  * insert_aligned_records
  * insert_aligned_records_of_one_device
  * insert_aligned_tablet
  * insert_aligned_tablets




  * Execute query statement

  ```python
  session.execute_query_statement(sql)
  ```

  * Execute non query statement

  ```python
  session.execute_non_query_statement(sql)
  ```

  * Execute statement

  ```python
  session.execute_statement(sql)
  ```



  The step for creating a metadata template is as follows
  1. Create the template class
  2. Adding child Node，InternalNode and MeasurementNode can be chose
  3. Execute create device template function

  ```python
  template = Template(name=template_name, share_time=True)

  i_node_gps = InternalNode(name="GPS", share_time=False)
  i_node_v = InternalNode(name="vehicle", share_time=True)
  m_node_x = MeasurementNode("x", TSDataType.FLOAT, TSEncoding.RLE, Compressor.SNAPPY)

  i_node_gps.add_child(m_node_x)
  i_node_v.add_child(m_node_x)

  template.add_template(i_node_gps)
  template.add_template(i_node_v)
  template.add_template(m_node_x)

  session.create_schema_template(template)
  ```

  Modify nodes in a template, the template must be already created. These are functions that add or delete some measurement nodes.
  * add node in template
  ```python
  session.add_measurements_in_template(template_name, measurements_path, data_types, encodings, compressors, is_aligned)
  ```

  * delete node in template
  ```python
  session.delete_node_in_template(template_name, path)
  ```


  ```python
  session.set_schema_template(template_name, prefix_path)
  ```


  ```python
  session.unset_schema_template(template_name, prefix_path)
  ```


  * Show all device templates
  ```python
  session.show_all_templates()
  ```
  * Count all nodes in templates
  ```python
  session.count_measurements_in_template(template_name)
  ```

  * Judge whether the path is measurement or not in templates, This measurement must be in the template
  ```python
  session.count_measurements_in_template(template_name, path)
  ```

  * Judge whether the path is exist or not in templates, This path may not belong to the template
  ```python
  session.is_path_exist_in_template(template_name, path)
  ```

  * Show nodes under in device template
  ```python
  session.show_measurements_in_template(template_name)
  ```

  * Show the path prefix where a device template is set
  ```python
  session.show_paths_template_set_on(template_name)
  ```

  * Show the path prefix where a device template is used (i.e. the time series has been created)
  ```python
  session.show_paths_template_using_on(template_name)
  ```


  Delete an existing metadata template，dropping an already set template is not supported
  ```python
  session.drop_schema_template("template_python")
  ```




  To easily transform a query result to a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)
  the SessionDataSet has a method `.todf()` which consumes the dataset and transforms it to a pandas dataframe.

  Example:

  ```python
  from iotdb.Session import Session

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  session = Session(ip, port_, username_, password_)
  session.open(False)
  result = session.execute_query_statement("SELECT * FROM root.*")


  df = result.todf()

  session.close()


  df = ...
  ```




  The Test Support is based on the lib `testcontainers` (https://testcontainers-python.readthedocs.io/en/latest/index.html) which you need to install in your project if you want to use the feature.

  To start (and stop) an IoTDB Database in a Docker container simply do:
  ```python
  class MyTestCase(unittest.TestCase):

      def test_something(self):
          with IoTDBContainer() as c:
              session = Session("localhost", c.get_exposed_port(6667), "root", "root")
              session.open(False)
              result = session.execute_query_statement("SHOW TIMESERIES")
              print(result)
              session.close()
  ```

  by default it will load the image `apache/iotdb:latest`, if you want a specific version just pass it like e.g. `IoTDBContainer("apache/iotdb:0.12.0")` to get version `0.12.0` running.




  IoTDB DBAPI implements the Python DB API 2.0 specification (https://peps.python.org/pep-0249/), which defines a common
  interface for accessing databases in Python.


  + Initialization

  The initialized parameters are consistent with the session part (except for the sqlalchemy_mode).
  ```python
  from iotdb.dbapi import connect

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  conn = connect(ip, port_, username_, password_,fetch_size=1024,zone_id="UTC+8",sqlalchemy_mode=False)
  cursor = conn.cursor()
  ```
  + simple SQL statement execution
  ```python
  cursor.execute("SELECT * FROM root.*")
  for row in cursor.fetchall():
      print(row)
  ```

  + execute SQL with parameter

  IoTDB DBAPI supports pyformat style parameters
  ```python
  cursor.execute("SELECT * FROM root.* WHERE time < s",{"time":"2017-11-01T00:08:00.000"})
  for row in cursor.fetchall():
      print(row)
  ```

  + execute SQL with parameter sequences
  ```python
  seq_of_parameters = [
      {"timestamp": 1, "temperature": 1},
      {"timestamp": 2, "temperature": 2},
      {"timestamp": 3, "temperature": 3},
      {"timestamp": 4, "temperature": 4},
      {"timestamp": 5, "temperature": 5},
  ]
  sql = "insert into root.cursor(timestamp,temperature) values(s,s)"
  cursor.executemany(sql,seq_of_parameters)
  ```

  + close the connection and cursor
  ```python
  cursor.close()
  conn.close()
  ```


  The SQLAlchemy dialect of IoTDB is written to adapt to Apache Superset.
  This part is still being improved.
  Please do not use it in the production environment!

  The data model used by SQLAlchemy is a relational data model, which describes the relationships between different entities through tables.
  While the data model of IoTDB is a hierarchical data model, which organizes the data through a tree structure.
  In order to adapt IoTDB to the dialect of SQLAlchemy, the original data model in IoTDB needs to be reorganized.
  Converting the data model of IoTDB into the data model of SQLAlchemy.

  The metadata in the IoTDB are：

  1. Database
  2. Path
  3. Entity
  4. Measurement

  The metadata in the SQLAlchemy are：
  1. Schema
  2. Table
  3. Column

  The mapping relationship between them is：

  | The metadata in the SQLAlchemy | The metadata in the IoTDB                            |
  | -------------------- | ---------------------------------------------- |
  | Schema               |      Database                                  |
  | Table                | Path ( from database to entity ) + Entity |
  | Column               | Measurement                                    |

  The following figure shows the relationship between the two more intuitively:

  ![sqlalchemy-to-iotdb](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/API/IoTDB-SQLAlchemy/sqlalchemy-to-iotdb.png?raw=true)


  | data type in IoTDB | data type in SQLAlchemy |
  |--------------------|-------------------------|
  | BOOLEAN            | Boolean                 |
  | INT32              | Integer                 |
  | INT64              | BigInteger              |
  | FLOAT              | Float                   |
  | DOUBLE             | Float                   |
  | TEXT               | Text                    |
  | LONG               | BigInteger              |


  + execute statement

  ```python
  from sqlalchemy import create_engine

  engine = create_engine("iotdb://root:root@127.0.0.1:6667")
  connect = engine.connect()
  result = connect.execute("SELECT ** FROM root")
  for row in result.fetchall():
      print(row)
  ```

  + ORM (now only simple queries are supported)

  ```python
  from sqlalchemy import create_engine, Column, Float, BigInteger, MetaData
  from sqlalchemy.ext.declarative import declarative_base
  from sqlalchemy.orm import sessionmaker

  metadata = MetaData(
      schema='root.factory'
  )
  Base = declarative_base(metadata=metadata)


  class Device(Base):
      __tablename__ = "room2.device1"
      Time = Column(BigInteger, primary_key=True)
      temperature = Column(Float)
      status = Column(Float)


  engine = create_engine("iotdb://root:root@127.0.0.1:6667")

  DbSession = sessionmaker(bind=engine)
  session = DbSession()

  res = session.query(Device.status).filter(Device.temperature > 1)

  for row in res:
      print(row)
  ```






  This is an example of how to connect to IoTDB with python, using the thrift rpc interfaces. Things are almost the same on Windows or Linux, but pay attention to the difference like path separator.





  Python3.7 or later is preferred.

  You have to install Thrift (0.11.0 or later) to compile our thrift file into python code. Below is the official tutorial of installation, eventually, you should have a thrift executable.

  ```
  http://thrift.apache.org/docs/install/
  ```

  Before starting you need to install `requirements_dev.txt` in your python environment, e.g. by calling
  ```shell
  pip install -r requirements_dev.txt
  ```





  In the root of IoTDB's source code folder,  run `mvn clean generate-sources -pl client-py -am`.

  This will automatically delete and repopulate the folder `iotdb/thrift` with the generated thrift files.
  This folder is ignored from git and should **never be pushed to git!**

  **Notice** Do not upload `iotdb/thrift` to the git repo.






  We packed up the Thrift interface in `client-py/src/iotdb/Session.py` (similar with its Java counterpart), also provided an example file `client-py/src/SessionExample.py` of how to use the session module. please read it carefully.


  Or, another simple example:

  ```python
  from iotdb.Session import Session

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  session = Session(ip, port_, username_, password_)
  session.open(False)
  zone = session.get_time_zone()
  session.close()
  ```





  Please add your custom tests in `tests` folder.

  To run all defined tests just type `pytest .` in the root folder.

  **Notice** Some tests need docker to be started on your system as a test instance is started in a docker container using [testcontainers](https://testcontainers-python.readthedocs.io/en/latest/index.html).





  [black](https://pypi.org/project/black/) and [flake8](https://pypi.org/project/flake8/) are installed for autoformatting and linting.
  Both can be run by `black .` or `flake8 .` respectively.





  To do a release just ensure that you have the right set of generated thrift files.
  Then run linting and auto-formatting.
  Then, ensure that all tests work (via `pytest .`).
  Then you are good to go to do a release!





  First, install all necessary dev dependencies via `pip install -r requirements_dev.txt`.





  There is a convenient script `release.sh` to do all steps for a release.
  Namely, these are

  * Remove all transient directories from last release (if exists)
  * (Re-)generate all generated sources via mvn
  * Run Linting (flake8)
  * Run Tests via pytest
  * Build
  * Release to pypi


pkgId: dfc3e28ccbb80b8b859f0af82d254532ebc7eba1e94848428fa20714425e50e3
name: python-apache-iotdb
arch: src
version: 1.3.3
epoch: 0
release: 1
summary: Apache IoTDB client API
url: https://iotdb.apache.org
rpm_license: Apache License, Version 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-iotdb-1.3.3-1.src.rpm
checksum_type: sha256
description:
  <!--

      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
      distributed with this work for additional information
      regarding copyright ownership.  The ASF licenses this file
      to you under the Apache License, Version 2.0 (the
      "License"); you may not use this file except in compliance
      with the License.  You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

      Unless required by applicable law or agreed to in writing,
      software distributed under the License is distributed on an
      "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, either express or implied.  See the License for the
      specific language governing permissions and limitations
      under the License.

  -->



  [![GitHub release](https://img.shields.io/github/release/apache/iotdb.svg)](https://github.com/apache/iotdb/releases)
  [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
  ![](https://github-size-badge.herokuapp.com/apache/iotdb.svg)
  ![](https://img.shields.io/github/downloads/apache/iotdb/total.svg)
  ![](https://img.shields.io/badge/platform-win%20%7C%20macos%20%7C%20linux-yellow.svg)
  [![IoTDB Website](https://img.shields.io/website-up-down-green-red/https/shields.io.svg?label=iotdb-website)](https://iotdb.apache.org/)


  Apache IoTDB (Database for Internet of Things) is an IoT native database with high performance for
  data management and analysis, deployable on the edge and the cloud. Due to its light-weight
  architecture, high performance and rich feature set together with its deep integration with
  Apache Hadoop, Spark and Flink, Apache IoTDB can meet the requirements of massive data storage,
  high-speed data ingestion and complex data analysis in the IoT industrial fields.





  You have to install thrift (>=0.14.1) before using the package.





  First, download the latest package: `pip3 install apache-iotdb`

  You can get an example of using the package to read and write data at here: [Example](https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py)

  An example of aligned timeseries: [Aligned Timeseries Session Example](https://github.com/apache/iotdb/blob/master/client-py/SessionAlignedTimeseriesExample.py)

  (you need to add `import iotdb` in the head of the file)

  Or:

  ```python
  from iotdb.Session import Session

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  session = Session(ip, port_, username_, password_)
  session.open(False)
  zone = session.get_time_zone()
  session.close()
  ```



  * Initialize a Session

  ```python
  session = Session(ip, port_, username_, password_, fetch_size=1024, zone_id="UTC+8")
  ```

  * Open a session, with a parameter to specify whether to enable RPC compression

  ```python
  session.open(enable_rpc_compression=False)
  ```

  Notice: this RPC compression status of client must comply with that of IoTDB server

  * Close a Session

  ```python
  session.close()
  ```





  * CREATE DATABASE

  ```python
  session.set_storage_group(group_name)
  ```

  * Delete one or several databases

  ```python
  session.delete_storage_group(group_name)
  session.delete_storage_groups(group_name_lst)
  ```


  * Create one or multiple timeseries

  ```python
  session.create_time_series(ts_path, data_type, encoding, compressor,
      props=None, tags=None, attributes=None, alias=None)

  session.create_multi_time_series(
      ts_path_lst, data_type_lst, encoding_lst, compressor_lst,
      props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None
  )
  ```

  * Create aligned timeseries

  ```python
  session.create_aligned_time_series(
      device_id, measurements_lst, data_type_lst, encoding_lst, compressor_lst
  )
  ```

  Attention: Alias of measurements are **not supported** currently.

  * Delete one or several timeseries

  ```python
  session.delete_time_series(paths_list)
  ```

  * Check whether the specific timeseries exists

  ```python
  session.check_time_series_exists(path)
  ```





  It is recommended to use insertTablet to help improve write efficiency.

  * Insert a Tablet，which is multiple rows of a device, each row has the same measurements
      * **Better Write Performance**
      * **Support null values**: fill the null value with any value, and then mark the null value via BitMap (from v0.13)


  We have two implementations of Tablet in Python API.

  * Normal Tablet

  ```python
  values_ = [
      [False, 10, 11, 1.1, 10011.1, "test01"],
      [True, 100, 11111, 1.25, 101.0, "test02"],
      [False, 100, 1, 188.1, 688.25, "test03"],
      [True, 0, 0, 0, 6.25, "test04"],
  ]
  timestamps_ = [1, 2, 3, 4]
  tablet_ = Tablet(
      device_id, measurements_, data_types_, values_, timestamps_
  )
  session.insert_tablet(tablet_)

  values_ = [
      [None, 10, 11, 1.1, 10011.1, "test01"],
      [True, None, 11111, 1.25, 101.0, "test02"],
      [False, 100, None, 188.1, 688.25, "test03"],
      [True, 0, 0, 0, None, None],
  ]
  timestamps_ = [16, 17, 18, 19]
  tablet_ = Tablet(
      device_id, measurements_, data_types_, values_, timestamps_
  )
  session.insert_tablet(tablet_)
  ```
  * Numpy Tablet

  Comparing with Tablet, Numpy Tablet is using [numpy.ndarray](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) to record data.
  With less memory footprint and time cost of serialization, the insert performance will be better.

  **Notice**
  1. time and value columns in Tablet are ndarray.
  2. recommended to use the specific dtypes to each ndarray, see the example below
  (if not, the default dtypes are also ok).

  ```python
  import numpy as np
  data_types_ = [
      TSDataType.BOOLEAN,
      TSDataType.INT32,
      TSDataType.INT64,
      TSDataType.FLOAT,
      TSDataType.DOUBLE,
      TSDataType.TEXT,
  ]
  np_values_ = [
      np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()),
      np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()),
      np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()),
      np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()),
      np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()),
      np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()),
  ]
  np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype())
  np_tablet_ = NumpyTablet(
    device_id, measurements_, data_types_, np_values_, np_timestamps_
  )
  session.insert_tablet(np_tablet_)


  np_values_ = [
      np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()),
      np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()),
      np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()),
      np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()),
      np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()),
      np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()),
  ]
  np_timestamps_ = np.array([98, 99, 100, 101], TSDataType.INT64.np_dtype())
  np_bitmaps_ = []
  for i in range(len(measurements_)):
      np_bitmaps_.append(BitMap(len(np_timestamps_)))
  np_bitmaps_[0].mark(0)
  np_bitmaps_[1].mark(1)
  np_bitmaps_[2].mark(2)
  np_bitmaps_[4].mark(3)
  np_bitmaps_[5].mark(3)
  np_tablet_with_none = NumpyTablet(
      device_id, measurements_, data_types_, np_values_, np_timestamps_, np_bitmaps_
  )
  session.insert_tablet(np_tablet_with_none)
  ```

  * Insert multiple Tablets

  ```python
  session.insert_tablets(tablet_lst)
  ```

  * Insert a Record

  ```python
  session.insert_record(device_id, timestamp, measurements_, data_types_, values_)
  ```

  * Insert multiple Records

  ```python
  session.insert_records(
      device_ids_, time_list_, measurements_list_, data_type_list_, values_list_
  )
  ```

  * Insert multiple Records that belong to the same device.
    With type info the server has no need to do type inference, which leads a better performance


  ```python
  session.insert_records_of_one_device(device_id, time_list, measurements_list, data_types_list, values_list)
  ```



  When the data is of String type, we can use the following interface to perform type inference based on the value of the value itself. For example, if value is "true" , it can be automatically inferred to be a boolean type. If value is "3.2" , it can be automatically inferred as a flout type. Without type information, server has to do type inference, which may cost some time.

  * Insert a Record, which contains multiple measurement value of a device at a timestamp

  ```python
  session.insert_str_record(device_id, timestamp, measurements, string_values)
  ```



  The Insert of aligned timeseries uses interfaces like insert_aligned_XXX, and others are similar to the above interfaces:

  * insert_aligned_record
  * insert_aligned_records
  * insert_aligned_records_of_one_device
  * insert_aligned_tablet
  * insert_aligned_tablets




  * Execute query statement

  ```python
  session.execute_query_statement(sql)
  ```

  * Execute non query statement

  ```python
  session.execute_non_query_statement(sql)
  ```

  * Execute statement

  ```python
  session.execute_statement(sql)
  ```





  To easily transform a query result to a [Pandas Dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)
  the SessionDataSet has a method `.todf()` which consumes the dataset and transforms it to a pandas dataframe.

  Example:

  ```python
  from iotdb.Session import Session

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  session = Session(ip, port_, username_, password_)
  session.open(False)
  result = session.execute_query_statement("SELECT * FROM root.*")


  df = result.todf()

  session.close()


  df = ...
  ```




  The Test Support is based on the lib `testcontainers` (https://testcontainers-python.readthedocs.io/en/latest/index.html) which you need to install in your project if you want to use the feature.

  To start (and stop) an IoTDB Database in a Docker container simply do:
  ```python
  class MyTestCase(unittest.TestCase):

      def test_something(self):
          with IoTDBContainer() as c:
              session = Session("localhost", c.get_exposed_port(6667), "root", "root")
              session.open(False)
              result = session.execute_query_statement("SHOW TIMESERIES")
              print(result)
              session.close()
  ```

  by default it will load the image `apache/iotdb:latest`, if you want a specific version just pass it like e.g. `IoTDBContainer("apache/iotdb:0.12.0")` to get version `0.12.0` running.




  IoTDB DBAPI implements the Python DB API 2.0 specification (https://peps.python.org/pep-0249/), which defines a common
  interface for accessing databases in Python.


  + Initialization

  The initialized parameters are consistent with the session part (except for the sqlalchemy_mode).
  ```python
  from iotdb.dbapi import connect

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  conn = connect(ip, port_, username_, password_,fetch_size=1024,zone_id="UTC+8",sqlalchemy_mode=False)
  cursor = conn.cursor()
  ```
  + simple SQL statement execution
  ```python
  cursor.execute("SELECT * FROM root.*")
  for row in cursor.fetchall():
      print(row)
  ```

  + execute SQL with parameter

  IoTDB DBAPI supports pyformat style parameters
  ```python
  cursor.execute("SELECT * FROM root.* WHERE time < s",{"time":"2017-11-01T00:08:00.000"})
  for row in cursor.fetchall():
      print(row)
  ```

  + execute SQL with parameter sequences
  ```python
  seq_of_parameters = [
      {"timestamp": 1, "temperature": 1},
      {"timestamp": 2, "temperature": 2},
      {"timestamp": 3, "temperature": 3},
      {"timestamp": 4, "temperature": 4},
      {"timestamp": 5, "temperature": 5},
  ]
  sql = "insert into root.cursor(timestamp,temperature) values(s,s)"
  cursor.executemany(sql,seq_of_parameters)
  ```

  + close the connection and cursor
  ```python
  cursor.close()
  conn.close()
  ```


  The SQLAlchemy dialect of IoTDB is written to adapt to Apache Superset.
  This part is still being improved.
  Please do not use it in the production environment!

  The data model used by SQLAlchemy is a relational data model, which describes the relationships between different entities through tables.
  While the data model of IoTDB is a hierarchical data model, which organizes the data through a tree structure.
  In order to adapt IoTDB to the dialect of SQLAlchemy, the original data model in IoTDB needs to be reorganized.
  Converting the data model of IoTDB into the data model of SQLAlchemy.

  The metadata in the IoTDB are：

  1. Database
  2. Path
  3. Entity
  4. Measurement

  The metadata in the SQLAlchemy are：
  1. Schema
  2. Table
  3. Column

  The mapping relationship between them is：

  | The metadata in the SQLAlchemy | The metadata in the IoTDB                            |
  | -------------------- | ---------------------------------------------- |
  | Schema               |      Database                                  |
  | Table                | Path ( from database to entity ) + Entity |
  | Column               | Measurement                                    |

  The following figure shows the relationship between the two more intuitively:

  ![sqlalchemy-to-iotdb](https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/API/IoTDB-SQLAlchemy/sqlalchemy-to-iotdb.png?raw=true)


  | data type in IoTDB | data type in SQLAlchemy |
  |--------------------|-------------------------|
  | BOOLEAN            | Boolean                 |
  | INT32              | Integer                 |
  | INT64              | BigInteger              |
  | FLOAT              | Float                   |
  | DOUBLE             | Float                   |
  | TEXT               | Text                    |
  | LONG               | BigInteger              |


  + execute statement

  ```python
  from sqlalchemy import create_engine

  engine = create_engine("iotdb://root:root@127.0.0.1:6667")
  connect = engine.connect()
  result = connect.execute("SELECT ** FROM root")
  for row in result.fetchall():
      print(row)
  ```

  + ORM (now only simple queries are supported)

  ```python
  from sqlalchemy import create_engine, Column, Float, BigInteger, MetaData
  from sqlalchemy.ext.declarative import declarative_base
  from sqlalchemy.orm import sessionmaker

  metadata = MetaData(
      schema='root.factory'
  )
  Base = declarative_base(metadata=metadata)


  class Device(Base):
      __tablename__ = "room2.device1"
      Time = Column(BigInteger, primary_key=True)
      temperature = Column(Float)
      status = Column(Float)


  engine = create_engine("iotdb://root:root@127.0.0.1:6667")

  DbSession = sessionmaker(bind=engine)
  session = DbSession()

  res = session.query(Device.status).filter(Device.temperature > 1)

  for row in res:
      print(row)
  ```






  This is an example of how to connect to IoTDB with python, using the thrift rpc interfaces. Things are almost the same on Windows or Linux, but pay attention to the difference like path separator.





  Python3.6 or later is preferred.

  You have to install Thrift (0.14.1 or later) to compile our thrift file into python code. Below is the official tutorial of installation, eventually, you should have a thrift executable.

  ```
  http://thrift.apache.org/docs/install/
  ```

  Before starting you need to install `requirements_dev.txt` in your python environment, e.g. by calling
  ```shell
  pip install -r requirements_dev.txt
  ```





  In the root of IoTDB's source code folder,  run `mvn clean generate-sources -pl client-py -am`.

  This will automatically delete and repopulate the folder `iotdb/thrift` with the generated thrift files.
  This folder is ignored from git and should **never be pushed to git!**

  **Notice** Do not upload `iotdb/thrift` to the git repo.






  We packed up the Thrift interface in `client-py/src/iotdb/Session.py` (similar with its Java counterpart), also provided an example file `client-py/src/SessionExample.py` of how to use the session module. please read it carefully.


  Or, another simple example:

  ```python
  from iotdb.Session import Session

  ip = "127.0.0.1"
  port_ = "6667"
  username_ = "root"
  password_ = "root"
  session = Session(ip, port_, username_, password_)
  session.open(False)
  zone = session.get_time_zone()
  session.close()
  ```





  Please add your custom tests in `tests` folder.

  To run all defined tests just type `pytest .` in the root folder.

  **Notice** Some tests need docker to be started on your system as a test instance is started in a docker container using [testcontainers](https://testcontainers-python.readthedocs.io/en/latest/index.html).





  [black](https://pypi.org/project/black/) and [flake8](https://pypi.org/project/flake8/) are installed for autoformatting and linting.
  Both can be run by `black .` or `flake8 .` respectively.





  To do a release just ensure that you have the right set of generated thrift files.
  Then run linting and auto-formatting.
  Then, ensure that all tests work (via `pytest .`).
  Then you are good to go to do a release!





  First, install all necessary dev dependencies via `pip install -r requirements_dev.txt`.





  There is a convenient script `release.sh` to do all steps for a release.
  Namely, these are

  * Remove all transient directories from last release (if exists)
  * (Re-)generate all generated sources via mvn
  * Run Tests via pytest (optional)
  * Build
  * Release to pypi


pkgId: 588eba533ad9b3b3ef3b3e9a9565f99933810e4805509d4e2c6daf6f3f5d6581
name: python-apache-libcloud
arch: src
version: 3.8.0
epoch: 0
release: 1
url: https://libcloud.apache.org
rpm_license: Apache License (2.0)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-libcloud-3.8.0-1.src.rpm
checksum_type: sha256
summary:
  A standard Python library that abstracts away differences among multiple cloud provider APIs. For more information and documentation, please see https://libcloud.apache.org

description:
  Apache Libcloud is a Python library which hides differences between different
  cloud provider APIs and allows you to manage different cloud resources
  through a unified and easy to use API.
                              (Python 2.7 and Python 3.4 is supported by the
                              v2.8.x release series, last version which supports
                              Python 3.5 is v3.4.0 and v3.6.x for Python 3.6)
  Resources you can manage with Libcloud are divided into the following categories:
  * **Compute** - Cloud Servers and Block Storage - services such as Amazon EC2 and Rackspace
    Cloud Servers (``libcloud.compute.*``)
  * **Storage** - Cloud Object Storage and CDN  - services such as Amazon S3 and Rackspace
    CloudFiles (``libcloud.storage.*``)
  * **Load Balancers** - Load Balancers as a Service, LBaaS (``libcloud.loadbalancer.*``)
  * **DNS** - DNS as a Service, DNSaaS (``libcloud.dns.*``)
  * **Container** - Container virtualization services (``libcloud.container.*``)
  Apache Libcloud is an Apache project, see <http://libcloud.apache.org> for
  more information.


pkgId: 39d7ad1bb513f180e14d9d9fd3fc92ffe99476828ba001c18b572ba4ec3a4298
name: python-apache-license-check
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: CLI tool to check source files for Apache License headers.
url: https://faculty.ai/
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-license-check-1.0.0-1.src.rpm
checksum_type: sha256
description:
  A command line tool for checking if the source files of a Python project have
  Apache License headers.


pkgId: 8dedb25ce05436f12019bba33a9f55a6a8832c8da1cd8e4c54b1bcb69f098791
name: python-apache-liminal
arch: src
version: 0.0.5
epoch: 0
release: 1
summary: A package for authoring and deploying machine learning workflows
url: https://github.com/apache/incubator-liminal
rpm_license: Apache License, Version 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-liminal-0.0.5-1.src.rpm
checksum_type: sha256
description:
  name: MyLiminalStack
  owner: Bosco Albert Baracus
  volumes:
    - volume: myvol1
      local:
        path: /Users/me/myvol1
  images:
    - image: my_python_task_img
      type: python
      source: write_inputs
    - image: my_parallelized_python_task_img
      source: write_outputs
    - image: my_server_image
      type: python_server
      source: myserver
      endpoints:
        - endpoint: /myendpoint1
          module: my_server
          function: myendpoint1func
  pipelines:
    - pipeline: my_pipeline
      start_date: 1970-01-01
      timeout_minutes: 45
      schedule: 0 * 1 * *
      metrics:
        namespace: TestNamespace
        backends: [ 'cloudwatch' ]
      tasks:
        - task: my_python_task
          type: python
          description: static input task
          image: my_python_task_img
          env_vars:
            NUM_FILES: 10
            NUM_SPLITS: 3
          mounts:
            - mount: mymount
              volume: myvol1
              path: /mnt/vol1
          cmd: python -u write_inputs.py
        - task: my_parallelized_python_task
          type: python
          description: parallelized python task
          image: my_parallelized_python_task_img
          env_vars:
            FOO: BAR
          executors: 3
          mounts:
            - mount: mymount
              volume: myvol1
              path: /mnt/vol1
          cmd: python -u write_inputs.py
  services:
    - service: my_python_server
      description: my python server
      image: my_server_image
  ```

  1. Install this repository (HEAD)
  ```bash
     pip install git+https://github.com/apache/incubator-liminal.git
  ```
  2. Optional: set LIMINAL_HOME to path of your choice (if not set, will default to ~/liminal_home)
  ```bash
  echo 'export LIMINAL_HOME=</path/to/some/folder>' >> ~/.bash_profile && source ~/.bash_profile
  ```

  This involves at minimum creating a single file called liminal.yml as in the example above.
  If your pipeline requires custom python code to implement tasks, they should be organized
  [like this](https://github.com/apache/incubator-liminal/tree/master/tests/runners/airflow/liminal)
  If your pipeline  introduces imports of external packages which are not already a part
  of the liminal framework (i.e. you had to pip install them yourself), you need to also provide
  a requirements.txt in the root of your project.

  When your pipeline code is ready, you can test it by running it locally on your machine.
  1. Ensure you have The Docker engine running locally, and enable a local Kubernetes cluster:
    ![Kubernetes configured](https://raw.githubusercontent.com/apache/incubator-liminal/master/images/k8s_running.png)
    And allocate it at least 3 CPUs (under "Resources" in the Docker preference UI).
    If you want to execute your pipeline on a remote kubernetes cluster, make sure the cluster is configured using:
    ```bash
    kubectl config set-context <your remote kubernetes cluster>
    ```
  2. Build the docker images used by your pipeline.
  In the example pipeline above, you can see that tasks and services have an "image" field - such as
  "my_static_input_task_image". This means that the task is executed inside a docker container, and the docker container
  is created from a docker image where various code and libraries are installed.
  You can take a look at what the build process looks like, e.g.
  [here](https://github.com/apache/incubator-liminal/tree/master/liminal/build/image/python)
  In order for the images to be available for your pipeline, you'll need to build them locally:
  ```bash
  cd </path/to/your/liminal/code>
  liminal build
  ```
  You'll see that a number of outputs indicating various docker images built.
  3. Create a kubernetes local volume \
  In case your Yaml includes working with [volumes](https://github.com/apache/incubator-liminal/blob/6253f8b2c9dc244af032979ec6d462dc3e07e170/docs/getting_started.md#mounted-volumes)
  please first run the following command:
  ```bash
  cd </path/to/your/liminal/code>
  liminal create
  ```
  4. Deploy the pipeline:
  ```bash
  cd </path/to/your/liminal/code>
  liminal deploy
  ```
  Note: after upgrading liminal, it's recommended to issue the command
  ```bash
  liminal deploy --clean
  ```
  This will rebuild the airlfow docker containers from scratch with a fresh version of liminal, ensuring consistency.
  5. Start the server
  ```bash
  liminal start
  ```
  6. Stop the server
  ```bash
  liminal stop
  ```
  7. Display the server logs
  ```bash
  liminal logs --follow/--tail
  Number of lines to show from the end of the log:
  liminal logs --tail=10
  Follow log output:
  liminal logs --follow
  ```
  8. Navigate to [http://localhost:8080/admin](http://localhost:8080/admin)
  9. You should see your ![pipeline](https://raw.githubusercontent.com/apache/incubator-liminal/master/images/airflow.png)
  The pipeline is scheduled to run according to the ```json schedule: 0 * 1 * *``` field in the .yml file you provided.
  10. To manually activate your pipeline:
  - Click your pipeline and then click "trigger DAG"
  - Click "Graph view"
  You should see the steps in your pipeline getting executed in "real time" by clicking "Refresh" periodically.
  ![Pipeline activation](https://raw.githubusercontent.com/apache/incubator-liminal/master/images/airflow_trigger.png)

  More information on contributing can be found [here](CONTRIBUTING.md)

  The Liminal community holds a public call every Monday
  - [Liminal Community Calendar](https://calendar.google.com/calendar/u/0/r?cid=jom1i20emghura6s6ookhe2skk@group.calendar.google.com)
  - [Dev-Mailing-List](https://lists.apache.org/list.html?dev@liminal.apache.org)

  When doing local development and running Liminal unit-tests, make sure to set LIMINAL_STAND_ALONE_MODE=True


pkgId: cc6faf44d4d327c16565137d9970abacfb0642e288b3b3aa0adf3cbbfc45ffb2
name: python-apache-manager
arch: src
version: 2.2
epoch: 0
release: 1
summary: Monitor and control Apache web server workers from Python
url: https://apache-manager.readthedocs.io
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-manager-2.2-1.src.rpm
checksum_type: sha256
description:
  The `apache-manager` package helps to collect monitoring metrics_ about the
  `Apache web server`_ and kill worker processes that exceed resource thresholds.
  It works by parsing the plain text and HTML status pages generated by Apache's
  mod_status_ module. It's currently tested on cPython 2.7, 3.5, 3.6, 3.7, 3.8
  and PyPy. It was developed for and expects to be run on Linux systems.


pkgId: 0e7aacda4af2ac2adbbb6d3814853536547f8093502522d8feadc12d8d9c2438
name: python-apache-sedona
arch: src
version: 1.6.1
epoch: 0
release: 1
summary: Apache Sedona is a cluster computing system for processing large-scale spatial data
url: https://sedona.apache.org
rpm_license: Apache License v2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-sedona-1.6.1-1.src.rpm
checksum_type: sha256
description:
  <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=acc24e73-991b-4e92-8a6d-e33f333a645d" />

  This library is the Python wrapper for Apache Sedona.

  Apache Sedona is a cluster computing system for processing large-scale spatial data.
  Apache Sedona extends Apache Spark / SparkSQL with a set of out-of-the-box Spatial Resilient Distributed Datasets (SRDDs)/ SpatialSQL that efficiently load, process, and analyze large-scale spatial data across machines.

  Please visit the official Apache Sedona website:
  https://sedona.apache.org/

  Development environment setup docs: https://sedona.apache.org/latest-snapshot/setup/compile/#run-python-test


pkgId: faef9d42cdb60f80985e8a2225e548e845a9dbcc176289ec97e14dd799e4ded8
name: python-apache-sedona
arch: src
version: 1.7.0
epoch: 0
release: 1
summary: Apache Sedona is a cluster computing system for processing large-scale spatial data
url: https://sedona.apache.org
rpm_license: Apache License v2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-sedona-1.7.0-1.src.rpm
checksum_type: sha256
description:
  <img alt="" referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=acc24e73-991b-4e92-8a6d-e33f333a645d" />

  This library is the Python wrapper for Apache Sedona.

  Apache Sedona is a cluster computing system for processing large-scale spatial data.
  Apache Sedona extends Apache Spark / SparkSQL with a set of out-of-the-box Spatial Resilient Distributed Datasets (SRDDs)/ SpatialSQL that efficiently load, process, and analyze large-scale spatial data across machines.

  Please visit the official Apache Sedona website:
  https://sedona.apache.org/

  Development environment setup docs: https://sedona.apache.org/latest-snapshot/setup/compile/#run-python-test


pkgId: eebf12f41606f2c665cfa9da2fa00b398678733211e0ddd16374438ca6ff04d2
name: python-apache-skywalking
arch: src
version: 1.1.0
epoch: 0
release: 1
url: https://skywalking.apache.org/
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-skywalking-1.1.0-1.src.rpm
checksum_type: sha256
summary:
  The Python Agent for Apache SkyWalking, which provides the native tracing/metrics/logging/profiling abilities for Python projects.

description:
  <img src="http://skywalking.apache.org/assets/logo.svg" alt="Sky Walking logo" height="90px" align="right" />

  **SkyWalking-Python**: The Python Agent for Apache SkyWalking provides the native tracing/metrics/logging/profiling abilities for Python projects.

  **[SkyWalking](https://github.com/apache/skywalking)**: Application performance monitor tool for distributed systems, especially designed for microservices, cloud native and container-based (Kubernetes) architectures.


  [![GitHub stars](https://img.shields.io/github/stars/apache/skywalking-python.svg?style=for-the-badge&label=Stars&logo=github)](https://github.com/apache/skywalking-python)
  [![Twitter Follow](https://img.shields.io/twitter/follow/asfskywalking.svg?style=for-the-badge&label=Follow&logo=twitter)](https://twitter.com/AsfSkyWalking)

  ![Release](https://img.shields.io/pypi/v/apache-skywalking)
  ![Version](https://img.shields.io/pypi/pyversions/apache-skywalking)
  ![Build](https://github.com/apache/skywalking-python/actions/workflows/CI.yaml/badge.svg?event=push)



  - [Official documentation](https://skywalking.apache.org/docs/#PythonAgent)
  - [Blog](https://skywalking.apache.org/blog/2021-09-12-skywalking-python-profiling/) about the Python Agent Profiling Feature



  | Reporter  | Supported?      | Details                                                    |
  |:----------|:----------------|:-----------------------------------------------------------|
  | Trace     | ✅ (default: ON) | Automatic instrumentation + Manual SDK                     |
  | Log       | ✅ (default: ON) | Direct reporter only. (Tracing context in log planned)     |
  | Meter     | ✅ (default: ON) | Meter API + Automatic PVM metrics                          |
  | Event     | ❌ (Planned)     | Report lifecycle events of your awesome Python application |
  | Profiling | ✅ (default: ON) | Threading and Greenlet Profiler                            |



  SkyWalking Python Agent requires [Apache SkyWalking 8.0+](https://skywalking.apache.org/downloads/#SkyWalkingAPM) and Python 3.7+.

  > If you would like to try out the latest features that are not released yet, please refer to this [guide](docs/en/setup/faq/How-to-build-from-sources.md) to build from sources.


  - Find the [live demo](https://skywalking.apache.org/#demo) with Python agent on our website.
  - Follow the [showcase](https://skywalking.apache.org/docs/skywalking-showcase/next/readme/) to set up preview deployment quickly.



  Before submitting a pull request or pushing a commit, please read our [contributing](CONTRIBUTING.md) and [developer guide](docs/en/contribution/Developer.md).


  * Mail list: **dev@skywalking.apache.org**. Mail to `dev-subscribe@skywalking.apache.org`, follow the reply to subscribe the mail list.
  * Send `Request to join SkyWalking slack` mail to the mail list(`dev@skywalking.apache.org`), we will invite you in.
  * Twitter, [ASFSkyWalking](https://twitter.com/AsfSkyWalking)
  * For Chinese speaker, send `[CN] Request to join SkyWalking slack` mail to the mail list(`dev@skywalking.apache.org`), we will invite you in.
  * [bilibili B站 视频](https://space.bilibili.com/390683219)


  Apache 2.0


pkgId: 0b95d76d170830361495453a581230d88158cc401695147d93902aba10a62879
name: python-apache-superset
arch: src
version: 4.0.2
epoch: 0
release: 1
summary: A modern, enterprise-ready business intelligence web application
url: https://superset.apache.org/
rpm_license: Apache License, Version 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-superset-4.0.2-1.src.rpm
checksum_type: sha256
description:
  <!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  -->



  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
  [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/apache/superset?sort=semver)](https://github.com/apache/superset/tree/latest)
  [![Build Status](https://github.com/apache/superset/workflows/Python/badge.svg)](https://github.com/apache/superset/actions)
  [![PyPI version](https://badge.fury.io/py/apache-superset.svg)](https://badge.fury.io/py/apache-superset)
  [![Coverage Status](https://codecov.io/github/apache/superset/coverage.svg?branch=master)](https://codecov.io/github/apache/superset)
  [![PyPI](https://img.shields.io/pypi/pyversions/apache-superset.svg?maxAge=2592000)](https://pypi.python.org/pypi/apache-superset)
  [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](http://bit.ly/join-superset-slack)
  [![Documentation](https://img.shields.io/badge/docs-apache.org-blue.svg)](https://superset.apache.org)

  <picture width="500">
    <source
      media="(prefers-color-scheme: dark)"
      src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache-dark.png"
      alt="Superset logo (dark)"
    />
    <img
      src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache.png"
      alt="Superset logo (light)"
    />
  </picture>

  A modern, enterprise-ready business intelligence web application.

  [**Why Superset?**](#why-superset) |
  [**Supported Databases**](#supported-databases) |
  [**Installation and Configuration**](#installation-and-configuration) |
  [**Release Notes**](RELEASING/README.md#release-notes-for-recent-releases) |
  [**Get Involved**](#get-involved) |
  [**Contributor Guide**](#contributor-guide) |
  [**Resources**](#resources) |
  [**Organizations Using Superset**](RESOURCES/INTHEWILD.md)



  Superset is a modern data exploration and data visualization platform. Superset can replace or augment proprietary business intelligence tools for many teams. Superset integrates well with a variety of data sources.

  Superset provides:

  - A **no-code interface** for building charts quickly
  - A powerful, web-based **SQL Editor** for advanced querying
  - A **lightweight semantic layer** for quickly defining custom dimensions and metrics
  - Out of the box support for **nearly any SQL** database or data engine
  - A wide array of **beautiful visualizations** to showcase your data, ranging from simple bar charts to geospatial visualizations
  - Lightweight, configurable **caching layer** to help ease database load
  - Highly extensible **security roles and authentication** options
  - An **API** for programmatic customization
  - A **cloud-native architecture** designed from the ground up for scale



  **Video Overview**

  https://user-images.githubusercontent.com/64562059/234390129-321d4f35-cb4b-45e8-89d9-20ae292f34fc.mp4

  <br/>

  **Large Gallery of Visualizations**

  <kbd><img title="Gallery" src="superset-frontend/src/assets/images/screenshots/gallery.jpg"/></kbd><br/>

  **Craft Beautiful, Dynamic Dashboards**

  <kbd><img title="View Dashboards" src="superset-frontend/src/assets/images/screenshots/slack_dash.jpg"/></kbd><br/>

  **No-Code Chart Builder**

  <kbd><img title="Slice & dice your data" src="superset-frontend/src/assets/images/screenshots/explore.jpg"/></kbd><br/>

  **Powerful SQL Editor**

  <kbd><img title="SQL Lab" src="superset-frontend/src/assets/images/screenshots/sql_lab.jpg"/></kbd><br/>



  Superset can query data from any SQL-speaking datastore or data engine (Presto, Trino, Athena, [and more](https://superset.apache.org/docs/databases/installing-database-drivers/)) that has a Python DB-API driver and a SQLAlchemy dialect.

  Here are some of the major database solutions that are supported:

  <p align="center">
    <img src="superset-frontend/src/assets/images/redshift.png" alt="redshift" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/google-biquery.png" alt="google-biquery" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/snowflake.png" alt="snowflake" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/trino.png" alt="trino" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/presto.png" alt="presto" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/databricks.png" alt="databricks" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/druid.png" alt="druid" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/firebolt.png" alt="firebolt" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/timescale.png" alt="timescale" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/rockset.png" alt="rockset" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/postgresql.png" alt="postgresql" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/mysql.png" alt="mysql" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/mssql-server.png" alt="mssql-server" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/db2.png" alt="db2" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/sqlite.png" alt="sqlite" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/sybase.png" alt="sybase" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/mariadb.png" alt="mariadb" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/vertica.png" alt="vertica" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/oracle.png" alt="oracle" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/firebird.png" alt="firebird" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/greenplum.png" alt="greenplum" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/clickhouse.png" alt="clickhouse" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/exasol.png" alt="exasol" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/monet-db.png" alt="monet-db" border="0" width="200" height="80" />
    <img src="superset-frontend/src/assets/images/apache-kylin.png" alt="apache-kylin" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/hologres.png" alt="hologres" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/netezza.png" alt="netezza" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/pinot.png" alt="pinot" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/teradata.png" alt="teradata" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/yugabyte.png" alt="yugabyte" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/databend.png" alt="databend" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/starrocks.png" alt="starrocks" border="0" width="200" height="80"/>
    <img src="superset-frontend/src/assets/images/doris.png" alt="doris" border="0" width="200" height="80"/>
  </p>

  **A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/databases/installing-database-drivers).

  Want to add support for your datastore or data engine? Read more [here](https://superset.apache.org/docs/frequently-asked-questions#does-superset-work-with-insert-database-engine-here) about the technical requirements.



  [Extended documentation for Superset](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose)



  - Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
  - [Join our community's Slack](http://bit.ly/join-superset-slack)
    and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
  - [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org). To join, simply send an email to [dev-subscribe@superset.apache.org](mailto:dev-subscribe@superset.apache.org)
  - If you want to help troubleshoot GitHub Issues involving the numerous database drivers that Superset supports, please consider adding your name and the databases you have access to on the [Superset Database Familiarity Rolodex](https://docs.google.com/spreadsheets/d/1U1qxiLvOX0kBTUGME1AHHi6Ywel6ECF8xk_Qy-V9R8c/edit#gid=0)
  - Join Superset's Town Hall and [Operational Model](https://preset.io/blog/the-superset-operational-model-wants-you/) recurring meetings.  Meeting info is available on the [Superset Community Calendar](https://superset.apache.org/community)



  Interested in contributing? Check out our
  [CONTRIBUTING.md](https://github.com/apache/superset/blob/master/CONTRIBUTING.md)
  to find resources around contributing along with a detailed guide on
  how to set up a development environment.



  - [Superset "In the Wild"](RESOURCES/INTHEWILD.md) - open a PR to add your org to the list!
  - [Feature Flags](RESOURCES/FEATURE_FLAGS.md) - the status of Superset's Feature Flags.
  - [Standard Roles](RESOURCES/STANDARD_ROLES.md) - How RBAC permissions map to roles.
  - [Superset Wiki](https://github.com/apache/superset/wiki) - Tons of additional community resources: best practices, community content and other information.
  - [Superset SIPs](https://github.com/orgs/apache/projects/170) - The status of Superset's SIPs (Superset Improvement Proposals) for both consensus and implementation status.

  Superset 2.0!
  - [Superset 2.0 Meetup](https://preset.io/events/superset-2-0-meetup/)
  - [Superset 2.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-2-0)

  Understanding the Superset Points of View
  - [The Case for Dataset-Centric Visualization](https://preset.io/blog/dataset-centric-visualization/)
  - [Understanding the Superset Semantic Layer](https://preset.io/blog/understanding-superset-semantic-layer/)


  - Getting Started with Superset
    - [Superset in 2 Minutes using Docker Compose](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose#installing-superset-locally-using-docker-compose)
    - [Installing Database Drivers](https://superset.apache.org/docs/databases/docker-add-drivers/)
    - [Building New Database Connectors](https://preset.io/blog/building-database-connector/)
    - [Create Your First Dashboard](https://superset.apache.org/docs/creating-charts-dashboards/first-dashboard)
    - [Comprehensive Tutorial for Contributing Code to Apache Superset
    ](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
  - [Resources to master Superset by Preset](https://preset.io/resources/)

  - Deploying Superset
    - [Official Docker image](https://hub.docker.com/r/apache/superset)
    - [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)

  - Recordings of Past [Superset Community Events](https://preset.io/events)
    - [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
    - [How the Bing Team Customized Superset for the Internal Self-Serve Data & Analytics Platform](https://preset.io/events/how-the-bing-team-heavily-customized-superset-for-their-internal-data/)
    - [Live Demo: Visualizing MongoDB and Pinot Data using Trino](https://preset.io/events/2021-04-13-visualizing-mongodb-and-pinot-data-using-trino/)
  	- [Introduction to the Superset API](https://preset.io/events/introduction-to-the-superset-api/)
  	- [Building a Database Connector for Superset](https://preset.io/events/2021-02-16-building-a-database-connector-for-superset/)

  - Visualizations
    - [Creating Viz Plugins](https://superset.apache.org/docs/contributing/creating-viz-plugins/)
    - [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
    - [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)

  - [Superset API](https://superset.apache.org/docs/rest-api)

  <!-- telemetry/analytics pixel: -->
  <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=bc1c90cd-bc04-4e11-8c7b-289fb2839492" />


pkgId: 29498187bd0f87b9190bfe4d045bb95f8b1b060541ed91868c752eb4e7cedfab
name: python-apache-superset
arch: src
version: 4.1.0
epoch: 0
release: 1
summary: A modern, enterprise-ready business intelligence web application
url: https://pypi.org/project/apache-superset/
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apache-superset-4.1.0-1.src.rpm
checksum_type: sha256
description:
  <!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  -->



  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
  [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/apache/superset?sort=semver)](https://github.com/apache/superset/tree/latest)
  [![Build Status](https://github.com/apache/superset/workflows/Python/badge.svg)](https://github.com/apache/superset/actions)
  [![PyPI version](https://badge.fury.io/py/apache-superset.svg)](https://badge.fury.io/py/apache-superset)
  [![Coverage Status](https://codecov.io/github/apache/superset/coverage.svg?branch=master)](https://codecov.io/github/apache/superset)
  [![PyPI](https://img.shields.io/pypi/pyversions/apache-superset.svg?maxAge=2592000)](https://pypi.python.org/pypi/apache-superset)
  [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](http://bit.ly/join-superset-slack)
  [![Documentation](https://img.shields.io/badge/docs-apache.org-blue.svg)](https://superset.apache.org)

  <picture width="500">
    <source
      width="600"
      media="(prefers-color-scheme: dark)"
      src="https://superset.apache.org/img/superset-logo-horiz-dark.svg"
      alt="Superset logo (dark)"
    />
    <img
      width="600"
      src="https://superset.apache.org/img/superset-logo-horiz-apache.svg"
      alt="Superset logo (light)"
    />
  </picture>

  A modern, enterprise-ready business intelligence web application.

  [**Why Superset?**](#why-superset) |
  [**Supported Databases**](#supported-databases) |
  [**Installation and Configuration**](#installation-and-configuration) |
  [**Release Notes**](https://github.com/apache/superset/blob/master/RELEASING/README.md#release-notes-for-recent-releases) |
  [**Get Involved**](#get-involved) |
  [**Contributor Guide**](#contributor-guide) |
  [**Resources**](#resources) |
  [**Organizations Using Superset**](https://github.com/apache/superset/blob/master/RESOURCES/INTHEWILD.md)



  Superset is a modern data exploration and data visualization platform. Superset can replace or augment proprietary business intelligence tools for many teams. Superset integrates well with a variety of data sources.

  Superset provides:

  - A **no-code interface** for building charts quickly
  - A powerful, web-based **SQL Editor** for advanced querying
  - A **lightweight semantic layer** for quickly defining custom dimensions and metrics
  - Out of the box support for **nearly any SQL** database or data engine
  - A wide array of **beautiful visualizations** to showcase your data, ranging from simple bar charts to geospatial visualizations
  - Lightweight, configurable **caching layer** to help ease database load
  - Highly extensible **security roles and authentication** options
  - An **API** for programmatic customization
  - A **cloud-native architecture** designed from the ground up for scale



  **Video Overview**
  <!-- File hosted here https://github.com/apache/superset-site/raw/lfs/superset-video-4k.mp4 -->
  [superset-video-4k.webm](https://github.com/apache/superset/assets/812905/da036bc2-150c-4ee7-80f9-75e63210ff76)

  <br/>

  **Large Gallery of Visualizations**

  <kbd><img title="Gallery" src="https://superset.apache.org/img/screenshots/gallery.jpg"/></kbd><br/>

  **Craft Beautiful, Dynamic Dashboards**

  <kbd><img title="View Dashboards" src="https://superset.apache.org/img/screenshots/slack_dash.jpg"/></kbd><br/>

  **No-Code Chart Builder**

  <kbd><img title="Slice & dice your data" src="https://superset.apache.org/img/screenshots/explore.jpg"/></kbd><br/>

  **Powerful SQL Editor**

  <kbd><img title="SQL Lab" src="https://superset.apache.org/img/screenshots/sql_lab.jpg"/></kbd><br/>



  Superset can query data from any SQL-speaking datastore or data engine (Presto, Trino, Athena, [and more](https://superset.apache.org/docs/configuration/databases)) that has a Python DB-API driver and a SQLAlchemy dialect.

  Here are some of the major database solutions that are supported:

  <p align="center">
    <img src="https://superset.apache.org/img/databases/redshift.png" alt="redshift" border="0" width="200"/>
    <img src="https://superset.apache.org/img/databases/google-biquery.png" alt="google-biquery" border="0" width="200"/>
    <img src="https://superset.apache.org/img/databases/snowflake.png" alt="snowflake" border="0" width="200"/>
    <img src="https://superset.apache.org/img/databases/trino.png" alt="trino" border="0" width="150" />
    <img src="https://superset.apache.org/img/databases/presto.png" alt="presto" border="0" width="200"/>
    <img src="https://superset.apache.org/img/databases/databricks.png" alt="databricks" border="0" width="160" />
    <img src="https://superset.apache.org/img/databases/druid.png" alt="druid" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/firebolt.png" alt="firebolt" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/timescale.png" alt="timescale" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/rockset.png" alt="rockset" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/postgresql.png" alt="postgresql" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/mysql.png" alt="mysql" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/mssql-server.png" alt="mssql-server" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/ibm-db2.svg" alt="db2" border="0" width="220" />
    <img src="https://superset.apache.org/img/databases/sqlite.png" alt="sqlite" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/sybase.png" alt="sybase" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/mariadb.png" alt="mariadb" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/vertica.png" alt="vertica" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/oracle.png" alt="oracle" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/firebird.png" alt="firebird" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/greenplum.png" alt="greenplum" border="0" width="200"  />
    <img src="https://superset.apache.org/img/databases/clickhouse.png" alt="clickhouse" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/exasol.png" alt="exasol" border="0" width="160" />
    <img src="https://superset.apache.org/img/databases/monet-db.png" alt="monet-db" border="0" width="200"  />
    <img src="https://superset.apache.org/img/databases/apache-kylin.png" alt="apache-kylin" border="0" width="80"/>
    <img src="https://superset.apache.org/img/databases/hologres.png" alt="hologres" border="0" width="80"/>
    <img src="https://superset.apache.org/img/databases/netezza.png" alt="netezza" border="0" width="80"/>
    <img src="https://superset.apache.org/img/databases/pinot.png" alt="pinot" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/teradata.png" alt="teradata" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/yugabyte.png" alt="yugabyte" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/databend.png" alt="databend" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/starrocks.png" alt="starrocks" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/doris.png" alt="doris" border="0" width="200" />
    <img src="https://superset.apache.org/img/databases/oceanbase.svg" alt="oceanbase" border="0" width="220" />
  </p>

  **A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/configuration/databases).

  Want to add support for your datastore or data engine? Read more [here](https://superset.apache.org/docs/frequently-asked-questions#does-superset-work-with-insert-database-engine-here) about the technical requirements.



  [Extended documentation for Superset](https://superset.apache.org/docs/installation/docker-compose)



  - Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
  - [Join our community's Slack](http://bit.ly/join-superset-slack)
    and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
  - [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org). To join, simply send an email to [dev-subscribe@superset.apache.org](mailto:dev-subscribe@superset.apache.org)
  - If you want to help troubleshoot GitHub Issues involving the numerous database drivers that Superset supports, please consider adding your name and the databases you have access to on the [Superset Database Familiarity Rolodex](https://docs.google.com/spreadsheets/d/1U1qxiLvOX0kBTUGME1AHHi6Ywel6ECF8xk_Qy-V9R8c/edit#gid=0)
  - Join Superset's Town Hall and [Operational Model](https://preset.io/blog/the-superset-operational-model-wants-you/) recurring meetings.  Meeting info is available on the [Superset Community Calendar](https://superset.apache.org/community)



  Interested in contributing? Check out our
  [CONTRIBUTING.md](https://github.com/apache/superset/blob/master/CONTRIBUTING.md)
  to find resources around contributing along with a detailed guide on
  how to set up a development environment.



  - [Superset "In the Wild"](https://github.com/apache/superset/blob/master/RESOURCES/INTHEWILD.md) - open a PR to add your org to the list!
  - [Feature Flags](https://github.com/apache/superset/blob/master/RESOURCES/FEATURE_FLAGS.md) - the status of Superset's Feature Flags.
  - [Standard Roles](https://github.com/apache/superset/blob/master/RESOURCES/STANDARD_ROLES.md) - How RBAC permissions map to roles.
  - [Superset Wiki](https://github.com/apache/superset/wiki) - Tons of additional community resources: best practices, community content and other information.
  - [Superset SIPs](https://github.com/orgs/apache/projects/170) - The status of Superset's SIPs (Superset Improvement Proposals) for both consensus and implementation status.

  Understanding the Superset Points of View

  - [The Case for Dataset-Centric Visualization](https://preset.io/blog/dataset-centric-visualization/)
  - [Understanding the Superset Semantic Layer](https://preset.io/blog/understanding-superset-semantic-layer/)

  - Getting Started with Superset
    - [Superset in 2 Minutes using Docker Compose](https://superset.apache.org/docs/installation/docker-compose#installing-superset-locally-using-docker-compose)
    - [Installing Database Drivers](https://superset.apache.org/docs/configuration/databases#installing-database-drivers)
    - [Building New Database Connectors](https://preset.io/blog/building-database-connector/)
    - [Create Your First Dashboard](https://superset.apache.org/docs/using-superset/creating-your-first-dashboard/)
    - [Comprehensive Tutorial for Contributing Code to Apache Superset
    ](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
  - [Resources to master Superset by Preset](https://preset.io/resources/)

  - Deploying Superset
    - [Official Docker image](https://hub.docker.com/r/apache/superset)
    - [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)

  - Recordings of Past [Superset Community Events](https://preset.io/events)
    - [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
    - [How the Bing Team Customized Superset for the Internal Self-Serve Data & Analytics Platform](https://preset.io/events/how-the-bing-team-heavily-customized-superset-for-their-internal-data/)
    - [Live Demo: Visualizing MongoDB and Pinot Data using Trino](https://preset.io/events/2021-04-13-visualizing-mongodb-and-pinot-data-using-trino/)
    - [Introduction to the Superset API](https://preset.io/events/introduction-to-the-superset-api/)
    - [Building a Database Connector for Superset](https://preset.io/events/2021-02-16-building-a-database-connector-for-superset/)

  - Visualizations
    - [Creating Viz Plugins](https://superset.apache.org/docs/contributing/creating-viz-plugins/)
    - [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
    - [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)

  - [Superset API](https://superset.apache.org/docs/rest-api)



  <a href="https://next.ossinsight.io/widgets/official/compose-last-28-days-stats?repo_id=39464018" target="_blank" align="center">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-last-28-days-stats/thumbnail.png?repo_id=39464018&image_size=auto&color_scheme=dark" width="655" height="auto" />
      <img alt="Performance Stats of apache/superset - Last 28 days" src="https://next.ossinsight.io/widgets/official/compose-last-28-days-stats/thumbnail.png?repo_id=39464018&image_size=auto&color_scheme=light" width="655" height="auto" />
    </picture>
  </a>

  <!-- Made with [OSS Insight](https://ossinsight.io/) -->

  <!-- telemetry/analytics pixel: -->
  <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=bc1c90cd-bc04-4e11-8c7b-289fb2839492" />

rpm_license:
  Apache License Version 2.0, January 2004 http://www.apache.org/licenses/  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION  1. Definitions.  "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.  "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.  "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.  "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.  "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.  "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.  "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).  "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.  "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."  "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.  2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.  3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.  4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:  (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and  (b) You must cause any modified files to carry prominent notices stating that You changed the files; and  (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and  (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.  You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.  5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.  6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.  7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.  8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.  9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.  END OF TERMS AND CONDITIONS  APPENDIX: How to apply the Apache License to your work.  To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!)  The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.  Copyright [yyyy] [name of copyright owner]  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at  http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.  ============================================================================ APACHE SUPERSET SUBCOMPONENTS:  The Apache Superset project contains subcomponents with separate copyright notices and license terms. Your use of the source code for the these subcomponents is subject to the terms and conditions of the following licenses.  ======================================================================== Third party SIL Open Font License v1.1 (OFL-1.1) ========================================================================  (SIL OPEN FONT LICENSE Version 1.1) The Inter font family (https://github.com/rsms/inter) (SIL OPEN FONT LICENSE Version 1.1) The Fira Code font family (https://github.com/tonsky/FiraCode)


pkgId: 0d127db8ab358eaeb750175c4ea44792d2ded52b1fc55883414a9a5ad133e47d
name: python-apachelogs
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: Parse Apache access logs
url: https://github.com/jwodder/apachelogs
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apachelogs-0.6.0-1.src.rpm
checksum_type: sha256
description:
  ``apachelogs`` requires Python 3.5 or higher.  Just use `pip
  <https://pip.pypa.io>`_ for Python 3 (You have pip, right?) to install
  ``apachelogs`` and its dependencies::
      python3 -m pip install apachelogs


pkgId: 5ff9095a9996f9e5787401f070d44f99a1fbde7fe56e4aae66ff1e50c78b92d4
name: python-apantias
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: Tools for analysis of data from the DANAE experiment on HEPHY
url: https://github.com/shakamaran/apantias
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apantias-1.0.0-1.src.rpm
checksum_type: sha256
description:
  new features/bugs/requests:
  https://github.com/shakamaran/apantias/issues

  Steps to upload package:
  https://packaging.python.org/en/latest/tutorials/packaging-projects/

  Uploading to PyPi works automatically when merging to the github main-branch.

  Be sure to update the version both in __init__.py and pyproject.toml!

  COL vs ROW Convention:

  In ROOT its (col, row), but:
  data is represented as (frame,row,nreps,col), so i will use (row, col) here, since its the
  natural order in the array.


pkgId: a27ceaca93dc420e7c2b1a2eead820cf60ec712401344dad0b056d426bdf18fb
name: python-apantias
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: Tools for analysis of data from the DANAE experiment on HEPHY
url: https://github.com/shakamaran/apantias
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apantias-1.0.3-1.src.rpm
checksum_type: sha256
description:
  new features/bugs/requests:
  https://github.com/shakamaran/apantias/issues

  Steps to upload package:
  https://packaging.python.org/en/latest/tutorials/packaging-projects/

  Uploading to PyPi works automatically when merging to the github main-branch.
  Install it via pip in your conda environemnt. It is currently not uploaded to conda-forge, so
  it cannot be found in conda.

  Be sure to update the version both in __init__.py and pyproject.toml before merging to main!

  COL vs ROW Convention:
  In ROOT its (col, row), but:
  data is represented as (frame,row,nreps,col), so i will use (row, col) here, since its the
  natural order in the array.

  How-To get the package in JupyterHub:

  first make sure anaconda is loaded as a module on clip. (documentation of modules: https://docs.vbc.ac.at/books/scientific-computing/page/module-collection)
  MAKE SURE THERE IS NO OTHER PYTHON LOADED AS A MODULE

  in the terminal on clip:


  conda create --prefix /users/user.name/.conda/envs/myenv python=3.8 jupyter


  conda activate /path/to/envs/myenv


  pip install apantias


  python -m ipykernel install --user --name myenv --display-name "myname"

  the apantias package already uses a lot of common packages (matplotlib, numpy,..). If you need more packages just install them in the conda manager on jupyterhub.


  pip install --upgrade apantias

  For Development the package can be loaded in conda in editable mode:


  conda activate myenv


  cd /path/to/your/package


  pip install -e .


pkgId: e175a87c5dd104a5a546511b152944ce6669f94461f3bcc37d809bad020b98f1
name: python-apax
arch: src
version: 0.9.1
epoch: 0
release: 1
summary: Atomistic Learned Potential Package in JAX
url: https://github.com/apax-hub/apax
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apax-0.9.1-1.src.rpm
checksum_type: sha256
description:
  [![Read the Docs](https://readthedocs.org/projects/apax/badge/)](https://apax.readthedocs.io/en/latest/)
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10040710.svg)](https://doi.org/10.5281/zenodo.10040710)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![Discord](https://img.shields.io/discord/1034511611802689557)](https://discord.gg/7ncfwhsnm4)

  `apax`[1] is a high-performance, extendable package for training of and inference with atomistic neural networks.
  It implements the Gaussian Moment Neural Network model [2, 3].
  It is based on [JAX](https://jax.readthedocs.io/en/latest/) and uses [JaxMD](https://github.com/jax-md/jax-md) as a molecular dynamics engine.




  Apax is available on PyPI with a CPU version of JAX.

  ```bash
  pip install apax
  ```

  For more detailed instructions, please refer to the [documentation](https://apax.readthedocs.io/en/latest/).



  If you want to enable GPU support (only on Linux), please overwrite the jaxlib version:

  CUDA 12:
  ```bash
  pip install -U "jax[cuda12]"
  ```

  See the [Jax installation instructions](https://github.com/google/jax#installation) for more details.







  In order to train a model, you need to run

  ```bash
  apax train config.yaml
  ```

  We offer some input file templates to get new users started as quickly as possible.
  Simply run the following commands and add the appropriate entries in the marked fields

  ```bash
  apax template train # use --full for a template with all input options
  ```

  Please refer to the [documentation](https://apax.readthedocs.io/en/latest/) for a detailed explanation of all parameters.
  The documentation can convenienty be accessed by running `apax docs`.



  There are two ways in which `apax` models can be used for molecular dynamics out of the box.
  High performance NVT simulations using JaxMD can be started with the CLI by running

  ```bash
  apax md config.yaml md_config.yaml
  ```

  A template command for MD input files is provided as well.

  The second way is to use the ASE calculator provided in `apax.md`.




  use the following command to generate JSON schemata for training and MD configuration files:

  ```bash
  apax schema
  ```

  If you are using VSCode, you can utilize them to lint and autocomplete your input files.
  The command creates the 2 schemata and adds them to the projects `.vscode/settings.json`



  - Moritz René Schäfer
  - Nico Segreto

  Under the supervion of Johannes Kästner




  We are happy to receive your issues and pull requests!

  Do not hesitate to contact any of the authors above if you have any further questions.




  The creation of Apax was supported by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) in the framework of the priority program SPP 2363, “Utilization and Development of Machine Learning for Molecular Applications - Molecular Machine Learning” Project No. 497249646 and the Ministry of Science, Research and the Arts Baden-Württemberg in the Artificial Intelligence Software Academy (AISA).
  Further funding though the DFG under Germany's Excellence Strategy - EXC 2075 - 390740016 and the Stuttgart Center for Simulation Science (SimTech) was provided.



  * [1] 10.5281/zenodo.10040711
  * [2] V. Zaverkin and J. Kästner, [“Gaussian Moments as Physically Inspired Molecular Descriptors for Accurate and Scalable Machine Learning Potentials,”](https://doi.org/10.1021/acs.jctc.0c00347) J. Chem. Theory Comput. **16**, 5410–5421 (2020).
  * [3] V. Zaverkin, D. Holzmüller, I. Steinwart,  and J. Kästner, [“Fast and Sample-Efficient Interatomic Neural Network Potentials for Molecules and Materials Based on Gaussian Moments,”](https://pubs.acs.org/doi/10.1021/acs.jctc.1c00527) J. Chem. Theory Comput. **17**, 6658–6670 (2021).


pkgId: 01eefcd68eda93092116f3ebf36a255b56f2bf55d65cf7287bf99ef994dde02b
name: python-apd
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: Tool to access the Analysis production Data
url: https://pypi.org/project/apd/
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apd-0.8.1-1.src.rpm
checksum_type: sha256
description:
  |LHCb software| |PyPI version| |Conda-forge version|
  Programmatic interface to the LHCb experiment Analysis Productions database,
  which allows retrieving information about the samples produced.
  It queries a REST endpoint provided by the web application, and caches the data locally.


pkgId: cdf983f50858ab5af17fa2ca1eee5e0bb737221635ad7d41ba106920e2359c8f
name: python-ape-alchemy
arch: src
version: 0.8.3
epoch: 0
release: 1
summary: ape-alchemy: Alchemy provider plugins
url: https://github.com/ApeWorX/ape-alchemy
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-alchemy-0.8.3-1.src.rpm
checksum_type: sha256
description:
  Use the [Alchemy](https://alchemy.com/?r=jk3NDM0MTIwODIzM) provider plugin to interact with blockchains via APIs.
  The `ape-alchemy` plugin supports the following ecosystems:

  - Ethereum
  - Arbitrum
  - Base
  - Fantom
  - Optimism
  - Polygon
  - Polygon-ZkEVM



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-alchemy
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-alchemy.git
  cd ape-alchemy
  python3 setup.py install
  ```



  First, make sure you have one of the following environment variables set (it doesn't matter which one):

  - `WEB3_ALCHEMY_PROJECT_ID`
  - `WEB3_ALCHEMY_API_KEY`
  - `WEB3_<ecosystem>_<network>_ALCHEMY_PROJECT_ID`
  - `WEB3_<ecosystem>_<network>_ALCHEMY_PROJECT_ID`

  For example, to use both Arbitrum and Ethereum in the same session, you could set both `WEB3_ARBITRUM_MAINNET_ALCHEMY_PROJECT_ID` and `WEB3_ETHEREUM_MAINNET_ALCHEMY_PROJECT_ID`.

  **NOTE**: If using non-Ethereum networks, take care to install the correct plugins, such as `ape-arbitrum`, `ape-optimism`, etc:

  ```bash
  ape plugins install arbitrum
  ```

  Then, either in your current terminal session or in your root RC file (e.g. `.bashrc`), add the following:

  ```bash
  export WEB3_ALCHEMY_PROJECT_ID=MY_API_TOKEN=<value-of-secret-key>
  ```

  To use the Alchemy provider plugin in most commands, set it via the `--network` option:

  ```bash
  ape console --network ethereum:sepolia:alchemy
  ```

  To connect to Alchemy from a Python script, use the `networks` top-level manager:

  ```python
  from ape import networks

  with networks.parse_network_choice("ethereum:mainnet:alchemy") as provider:
      ...
  ```



  If you are using a paid tier of Alchemy, you have access to both Geth and Parity style traces.
  Parity traces are faster and thus are the ones uses in Ethereum receipts' `show_trace()` method:

  ```python
  from ape import networks

  alchemy = networks.provider  # Assuming connected to Alchemy
  txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d"
  receipt = alchemy.get_transaction(txn_hash)
  receipt.show_trace()  # Prints the Transaction trace
  ```

  To access the raw `CallTree`, do:

  ```python
  from ape import networks

  alchemy = networks.provider  # Assuming connected to Alchemy
  txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d"
  call_tree = alchemy.get_call_tree(txn_hash)
  ```

  To learn more about transaction traces, view [Ape's transaction guide](https://docs.apeworx.io/ape/stable/userguides/transactions.html#traces).


pkgId: e77f5531276cc1ee300585222ef6074d34aa63a0c026767d47865e12d5dbaba4
name: python-ape-alchemy
arch: src
version: 0.8.5
epoch: 0
release: 1
summary: ape-alchemy: Alchemy provider plugins
url: https://github.com/ApeWorX/ape-alchemy
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-alchemy-0.8.5-1.src.rpm
checksum_type: sha256
description:
  Use the [Alchemy](https://alchemy.com/?r=jk3NDM0MTIwODIzM) provider plugin to interact with blockchains via APIs.
  The `ape-alchemy` plugin supports the following ecosystems:

  - Abstract
  - ApeChain
  - Arbitrum
  - Astar
  - Avalanche
  - Base
  - Berachain
  - Blast
  - BSC (including opBNB)
  - CrossFi
  - Ethereum
  - Fantom
  - Flow EVM
  - Geist
  - Gnosis
  - Lens
  - Linea
  - Lumia
  - Mantle
  - Metis
  - Optimism
  - Polygon
  - Polygon-ZkEVM
  - Rootstock
  - Scroll
  - Shape
  - Soneium
  - Unichain
  - XMTP
  - World-Chain
  - zetachain
  - ZkSync
  - Zora



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-alchemy
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-alchemy.git
  cd ape-alchemy
  python3 setup.py install
  ```



  First, make sure you have one of the following environment variables set (it doesn't matter which one):

  - `WEB3_ALCHEMY_PROJECT_ID`
  - `WEB3_ALCHEMY_API_KEY`
  - `WEB3_<ecosystem>_<network>_ALCHEMY_PROJECT_ID`
  - `WEB3_<ecosystem>_<network>_ALCHEMY_PROJECT_ID`

  For example, to use both Arbitrum and Ethereum in the same session, you could set both `WEB3_ARBITRUM_MAINNET_ALCHEMY_PROJECT_ID` and `WEB3_ETHEREUM_MAINNET_ALCHEMY_PROJECT_ID`.

  **NOTE**: If using non-Ethereum networks, take care to install the correct plugins, such as `ape-arbitrum`, `ape-optimism`, etc:

  ```bash
  ape plugins install arbitrum
  ```

  Then, either in your current terminal session or in your root RC file (e.g. `.bashrc`), add the following:

  ```bash
  export WEB3_ALCHEMY_PROJECT_ID=MY_API_TOKEN=<value-of-secret-key>
  ```

  To use the Alchemy provider plugin in most commands, set it via the `--network` option:

  ```bash
  ape console --network ethereum:sepolia:alchemy
  ```

  To connect to Alchemy from a Python script, use the `networks` top-level manager:

  ```python
  from ape import networks

  with networks.parse_network_choice("ethereum:mainnet:alchemy") as provider:
      ...
  ```



  If you are using a paid tier of Alchemy, you have access to both Geth and Parity style traces.
  Parity traces are faster and thus are the ones uses in Ethereum receipts' `show_trace()` method:

  ```python
  from ape import networks

  alchemy = networks.provider  # Assuming connected to Alchemy
  txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d"
  receipt = alchemy.get_transaction(txn_hash)
  receipt.show_trace()  # Prints the Transaction trace
  ```

  To access the raw `CallTree`, do:

  ```python
  from ape import networks

  alchemy = networks.provider  # Assuming connected to Alchemy
  txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d"
  call_tree = alchemy.get_call_tree(txn_hash)
  ```

  To learn more about transaction traces, view [Ape's transaction guide](https://docs.apeworx.io/ape/stable/userguides/transactions.html#traces).


pkgId: 97b5f3da9f9cd04481bf8e0dedd1590f5134ce6aba3c567ea9993002046fbbba
name: python-ape-apeman
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Top-level package for ape-apeman.
url: https://pypi.org/project/ape-apeman/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-apeman-1.0.1-1.src.rpm
checksum_type: sha256
description:
  An opinionated alternative api for the most excellent eth-ape project.
  - 12-factor compliant
  - embeddable in a service
  - independent of user interaction
  ![Image](https://img.shields.io/github/license/rstms/ape-apeman)
  ![Image](https://img.shields.io/pypi/v/ape-apeman.svg)
  ![Image](https://circleci.com/gh/rstms/ape-apeman/tree/master.svg?style=shield)
  ![Image](https://readthedocs.org/projects/ape-apeman/badge/?version=latest)
  manager module facilitating use of eth-ape functions
  * Free software: MIT license
  * Documentation: https://ape-apeman.readthedocs.io.


pkgId: 4e8bcbf48e064dae55d1d4f39ffbd0f99e96c77a84980fd73bc848cb82dc1efd
name: python-ape-arbitrum
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-arbitrum: Ape Ecosystem Plugin for Arbitrum
url: https://github.com/ApeWorX/ape-arbitrum
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-arbitrum-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Arbitrum support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install this plugin using `ape`:

  ```bash
  ape plugins install arbitrum
  ```

  or via config file:

  ```yaml

  plugins:
    - name: arbitrum
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-arbitrum
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-arbitrum.git
  cd ape-arbitrum
  python3 setup.py install
  ```



  Installing this plugin adds support for the Arbitrum ecosystem:

  ```bash
  ape console --network arbitrum:mainnet
  ```



  This project is in development and should be considered a beta.
  Things might not be in their final state and breaking changes may occur.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: 67cc46a5a05865179243f52d7bc57799bfcf5956d770a9ab4bc464e196341cbe
name: python-ape-avalanche
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-avalanche: Ape Ecosystem Plugin for Avalanche
url: https://github.com/ApeWorX/ape-avalanche
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-avalanche-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Avalanche (C-Chain) support in Ape



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install this plugin using `ape`:

  ```bash
  ape plugins install avalanche
  ```

  or via config file:

  ```yaml

  plugins:
    - name: avalanche
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-avalanche
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-avalanche.git
  cd ape-avalanche
  python3 setup.py install
  ```



  Installing this plugin adds support for the Avalanche ecosystem:

  ```bash
  ape console --network avalanche:mainnet
  ```



  This project is in development and should be considered a beta.
  Things might not be in their final state and breaking changes may occur.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: 7f2689daea8d05d0dfcfb94f055b22fe5dc8ec435b914998986d76db0e4cc977
name: python-ape-base
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: ape-base: Base ecosystem for Ape
url: https://github.com/ApeWorX/ape-base
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-base-0.8.0-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for [Base](https://base.org/) support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-base
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-base.git
  cd ape-base
  python3 setup.py install
  ```



  Installing this plugin adds support for the Base ecosystem:

  ```
  ape console --network base:sepolia
  ```



  This project is in development and should be considered a beta.
  Things might not be in their final state and breaking changes may occur.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: d23692b96e1f5b07fcd5c07b5a87deb50cceedeb4c51e3499d7bf0c3147db177
name: python-ape-blast
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-blast: Blast ecosystem for Ape
url: https://github.com/ApeWorX/ape-blast
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-blast-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for [Blast](https://blast.io/) support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-blast
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-blast.git
  cd ape-blast
  python3 setup.py install
  ```



  Installing this plugin adds support for the Blast ecosystem:

  ```
  ape console --network blast:goerli
  ```



  This project is in development and should be considered a beta.
  Things might not be in their final state and breaking changes may occur.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: e8b3dada1c5786e661c3b4cf632046db30a887e79892216d9a60e87329e55989
name: python-ape-bsc
arch: src
version: 0.8.3
epoch: 0
release: 1
summary: ape-bsc: Ape Ecosystem Plugin for Binance Smart Chain
url: https://github.com/ApeWorX/ape-bsc
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-bsc-0.8.3-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Binance Smart Chain support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install this plugin using `ape`:

  ```bash
  ape plugins install bsc
  ```

  or via config file:

  ```yaml

  plugins:
    - name: bsc
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-bsc
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-bsc.git
  cd ape-bsc
  python3 setup.py install
  ```



  Installing this plugin adds support for the Binance Smart Chain ecosystem:

  ```bash
  ape console --network bsc:mainnet
  ```


pkgId: 1fd0f7f5d06c685c29e41256dc73800c63c114dc321d0a672fe14ff02de9746f
name: python-ape-ens
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: ape-ens: Ape plugin for ENS argument conversion and contracts
url: https://github.com/ApeWorX/ape-ens
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-ens-0.8.0-1.src.rpm
checksum_type: sha256
description:
  Ape plugin for ENS argument conversion and contracts



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-ens
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-ens.git
  cd ape-ens
  python3 setup.py install
  ```



  The ENS plugin requires a mainnet connection to resolve ENS names because ENS contracts are only deployed to mainnet.
  Thus, the first thing you should do is ensure you have configured a mainnet provider.
  For example, if you use `infura` or `alchemy`, install the associated plugin:

  ```bash
  ape plugins install infura
  ```

  Afterwards, you should see it in the output of the `list` command:

  ```bash
  $ ape plugins list

  Installed Plugins:
    infura      0.4.0
    ...
  ```

  After your provider plugin of choice is installed, configure it to be your default mainnet provider in your `ape-config.yaml` file:

  ```yaml
  ethereum:
    mainnet:
      default_provider: infura
  ```

  Finally, you can start the ape console using any network of your choice:

  ```bash
  ape console --network :rinkeby:infura
  ```

  Then, convert an `ens` domain to an `AddressType`:

  ```python
  In [1]: from ape.types import AddressType
  In [2]: convert("vitalik.eth", AddressType)
  Out[2]: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
  ```

  Get the Ethereum Name Service (ENS) namehash using the `namehash` function:

  ```py
  from ape_ens.utils import namehash


  >> namehash("eth").hex()
  "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"

  >> namehash("foo.eth")
  HexBytes("0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f")

  >> namehash("ape.rocks.eth").hex()
  "0x6294e43e29c5c1573554a68e6ff302fa867ab0d56b800f623c1abb77609d2b8d"
  ```

  The ENS plugin temporarily connects to mainnet, caches the address resolution, and then your original network uses the result.


pkgId: ca4ffbef28bef6daabb89d410fe30a95da88d5e33ef9cc0ef264730d8845adb8
name: python-ape-etherscan
arch: src
version: 0.8.3
epoch: 0
release: 1
summary: ape-etherscan: Etherscan Explorer Plugin for Ethereum-based networks
url: https://github.com/ApeWorX/ape-etherscan
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-etherscan-0.8.3-1.src.rpm
checksum_type: sha256
description:
  The following blockchain explorers are supported in this plugin:

  - [Etherscan](https://etherscan.io/) for Ethereum networks.
  - [Ftmscan](https://ftmscan.com) for Fantom networks.
  - [Arbiscan](https://arbiscan.io) for Arbitrum networks.
  - [Optimistic Etherscan](https://optimistic.etherscan.io) for Optimism networks.
  - [Polygonscan](https://polygonscan.com) for Polygon networks.
  - [Polygonscan ZkEVM](https://zkevm.polygonscan.com) for Polygon ZkEVM networks.
  - [Snowtrace](https://snowtrace.io) for Avalanche networks.
  - [Basescan](https://basescan.org) for Base networks.
  - [Bscscan](https://bscscan.com) for Binance-Smart-Chain networks.
  - [Blastscan](https://blastscan.io) for Blast networks.
  - [Scrollscan](https://scrollscan.com) for Scroll networks.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-etherscan
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-etherscan.git
  cd ape-etherscan
  python3 setup.py install
  ```





  Specify API keys as environment variables. You could put them in your shell's config like `~/.profile`
  or use a tool like [direnv](https://direnv.net/) and store them locally in `.envrc`.

  You can also specify multiple comma-separated keys, a random key will be chosen for each request.
  This could be useful if you hit API rate limits.

  You can obtain an API key by registering with Etherscan and visiting [this page](https://etherscan.io/myapikey).

  ```bash
  export ETHERSCAN_API_KEY=SAMPLE_KEY
  export FTMSCAN_API_KEY=SAMPLE_KEY
  export ARBISCAN_API_KEY=SAMPLE_KEY
  export POLYGON_ZKEVM_ETHERSCAN_API_KEY=SAMPLE_KEY
  export BASESCAN_API_KEY=SAMPLE_KEY
  ```



  When you have this plugin installed, Etherscan explorer URLs appear in CLI output.

  ```bash
  INFO: Submitted 0x123321123321123321123321123aaaadaaaee4b2aaa07901b80716cc357a9646
  etherscan URL: https://rinkeby.etherscan.io/tx/0x123321123321123321123321123aaaadaaaee4b2aaa07901b80716cc357a9646
  ```



  The `ape-etherscan` plugin also assists in fetching `contract_types`.
  Use the `Contract` top-level construct to create contract instances.
  When the explorer plugin locates a contract type for a given address, the `Contract` return-value uses that contract type.

  ```python
  from ape import accounts, Contract

  contract = Contract("0x55a8a39bc9694714e2874c1ce77aa1e599461e18")
  receipt = contract.call_mutable_method("arg0", sender=accounts.load("acct"))
  ```

  The first line `contract = Contract("0x55a8a39bc9694714e2874c1ce77aa1e599461e18")` checks if ape has a cached contract-type for the address `0x55a8a39bc9694714e2874c1ce77aa1e599461e18`.
  If it does not find a cached contract type, it uses an explorer plugin to attempt to find one.
  If found, the contract type is then cached to disk and in memory for the active session so that subsequent invocations don't require HTTP calls.
  The return value from `Contract` is a `ContractInstance`, so it is connected to your active provider and ready for transactions.

  **NOTE**: Vyper contracts from Etherscan always return the name `Vyper_contract`.
  However, if the plugin detects that the contract type has a method named `symbol`, it will use the return value from that call instead.



  Use the `ape-etherscan` plugin to publish and verify your contracts.
  Contract verification associates a contract type from Ape with an Ethereum address on Etherscan.
  Learn more about Etherscan verification [here](https://info.etherscan.com/types-of-contract-verification/).

  To verify contract in Ape, you can set the `publish` key to `True` when deploying:

  ```python
  from ape import accounts, project

  account = accounts.load("testnetacct")
  account.deploy(project.MyContract, publish=True)
  ```

  You can also use the explorer class directly to publish at a later time:

  ```python
  from ape import networks

  etherscan = networks.provider.network.explorer
  etherscan.publish_contract("0x55a8a39bc9694714e2874c1ce77aa1e599461e18")
  ```

  Not every network's explorer supports multi-file verification.
  For those networks, the corresponding compiler plugin's `flatten` functionality is invoked, in order to verify the contract as a single file.

  **NOTE**: You must set an Etherscan API key environment variable to use the publishing feature.



  If you would like to use ape-etherscan with your [custom network configuration](https://docs.apeworx.io/ape/stable/userguides/networks.html#custom-network-connection), you can use the same network identifier you used to configure it.
  For instance, with a custom Ethereum network called "apechain" your configuration might look something like this:

  ```yaml
  networks:
    custom:
      - name: apechain
        chain_id: 31337

  node:
    ethereum:
      apechain:
        uri: http://localhost:8545

  etherscan:
    ethereum:
      rate_limit: 15
      apechain:
        uri: https://custom.scan
        api_uri: https://api.custom.scan/api
  ```



  You can use dependencies from Etherscan in your projects.
  Configure them like this:

  ```yaml
  dependencies:
    - name: Spork
      etherscan: "0xb624FdE1a972B1C89eC1dAD691442d5E8E891469"
      ecosystem: ethereum
      network: mainnet
  ```

  Then, access contract types from the dependency in your code:

  ```python
  from ape import project

  spork_contract_type = project.dependencies["Spork"]["etherscan"].Spork
  ```



  Etherscan offers a query-provider plugin for account data.
  Query account transactions from Etherscan using the following syntax:

  ```python
  from ape import chain

  history = chain.history["vitalik.eth"]



  result = history.query("*", start_nonce=1000, stop_nonce=1001, engine_to_use="etherscan")
  ```


pkgId: 8c7878d453f7f1384eb1a054fcd0a3c63595b7117270f767cd617d3da4dce4d8
name: python-ape-etherscan
arch: src
version: 0.8.4
epoch: 0
release: 1
summary: ape-etherscan: Etherscan Explorer Plugin for Ethereum-based networks
url: https://github.com/ApeWorX/ape-etherscan
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-etherscan-0.8.4-1.src.rpm
checksum_type: sha256
description:
  The following is a subset of the supported blockchain explorers:

  | Network Name        | Explorer Link                                           |
  | ------------------- | ------------------------------------------------------- |
  | Arbitrum            | [Arbiscan](https://arbiscan.io)                         |
  | Avalanche           | [Snowtrace](https://snowtrace.io)                       |
  | Base                | [Basescan](https://basescan.org)                        |
  | Binance Smart Chain | [Bscscan](https://bscscan.com)                          |
  | Bittorrent          | [BTTCscan](https://bttcscan.com)                        |
  | Blast               | [Blastscan](https://blastscan.io)                       |
  | Celo                | [Celoscan](https://celoscan.com)                        |
  | Ethereum            | [Etherscan](https://etherscan.io/)                      |
  | Fantom              | [Ftmscan](https://ftmscan.com)                          |
  | Fraxtal             | [Fraxscan](https://fraxscan.com)                        |
  | Gnosis              | [Gnosisscan](https://gnosisscan.io)                     |
  | Kroma               | [Kromascan](https://kromascan.com)                      |
  | Moonbeam            | [Moonscan](https://moonscan.io)                         |
  | Optimism            | [Optimistic Etherscan](https://optimistic.etherscan.io) |
  | Polygon             | [Polygonscan](https://polygonscan.com)                  |
  | Polygon ZkEVM       | [Polygonscan ZkEVM](https://zkevm.polygonscan.com)      |
  | Scroll              | [Scrollscan](https://scrollscan.com)                    |
  | Unichain            | [Uniscan](https://sepolia.uniscan.xyz)                  |

  To see the full list of networks supported by Etherscan, see Etherscan's [Supported Chains](https://docs.etherscan.io/contract-verification/supported-chains) guide.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-etherscan
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-etherscan.git
  cd ape-etherscan
  python3 setup.py install
  ```





  Specify API keys as environment variables. You could put them in your shell's config like `~/.profile`
  or use a tool like [direnv](https://direnv.net/) and store them locally in `.envrc`.

  You can also specify multiple comma-separated keys, a random key will be chosen for each request.
  This could be useful if you hit API rate limits.

  You can obtain an API key by registering with Etherscan and visiting [this page](https://etherscan.io/myapikey).

  ```bash
  export ETHERSCAN_API_KEY=SAMPLE_KEY
  export FTMSCAN_API_KEY=SAMPLE_KEY
  export ARBISCAN_API_KEY=SAMPLE_KEY
  export POLYGON_ZKEVM_ETHERSCAN_API_KEY=SAMPLE_KEY
  export BASESCAN_API_KEY=SAMPLE_KEY
  ```



  When you have this plugin installed, Etherscan explorer URLs appear in CLI output.

  ```bash
  INFO: Submitted 0x123321123321123321123321123aaaadaaaee4b2aaa07901b80716cc357a9646
  etherscan URL: https://rinkeby.etherscan.io/tx/0x123321123321123321123321123aaaadaaaee4b2aaa07901b80716cc357a9646
  ```



  The `ape-etherscan` plugin also assists in fetching `contract_types`.
  Use the `Contract` top-level construct to create contract instances.
  When the explorer plugin locates a contract type for a given address, the `Contract` return-value uses that contract type.

  ```python
  from ape import accounts, Contract

  contract = Contract("0x55a8a39bc9694714e2874c1ce77aa1e599461e18")
  receipt = contract.call_mutable_method("arg0", sender=accounts.load("acct"))
  ```

  The first line `contract = Contract("0x55a8a39bc9694714e2874c1ce77aa1e599461e18")` checks if ape has a cached contract-type for the address `0x55a8a39bc9694714e2874c1ce77aa1e599461e18`.
  If it does not find a cached contract type, it uses an explorer plugin to attempt to find one.
  If found, the contract type is then cached to disk and in memory for the active session so that subsequent invocations don't require HTTP calls.
  The return value from `Contract` is a `ContractInstance`, so it is connected to your active provider and ready for transactions.

  **NOTE**: Vyper contracts from Etherscan always return the name `Vyper_contract`.
  However, if the plugin detects that the contract type has a method named `symbol`, it will use the return value from that call instead.



  Use the `ape-etherscan` plugin to publish and verify your contracts.
  Contract verification associates a contract type from Ape with an Ethereum address on Etherscan.
  Learn more about Etherscan verification [here](https://info.etherscan.com/types-of-contract-verification/).

  To verify contract in Ape, you can set the `publish` key to `True` when deploying:

  ```python
  from ape import accounts, project

  account = accounts.load("testnetacct")
  account.deploy(project.MyContract, publish=True)
  ```

  You can also use the explorer class directly to publish at a later time:

  ```python
  from ape import networks

  etherscan = networks.provider.network.explorer
  etherscan.publish_contract("0x55a8a39bc9694714e2874c1ce77aa1e599461e18")
  ```

  Not every network's explorer supports multi-file verification.
  For those networks, the corresponding compiler plugin's `flatten` functionality is invoked, in order to verify the contract as a single file.

  **NOTE**: You must set an Etherscan API key environment variable to use the publishing feature.



  If you would like to use ape-etherscan with your [custom network configuration](https://docs.apeworx.io/ape/stable/userguides/networks.html#custom-network-connection), you can use the same network identifier you used to configure it.
  For instance, with a custom Ethereum network called "apechain" your configuration might look something like this:

  ```yaml
  networks:
    custom:
      - name: apechain
        chain_id: 31337

  node:
    ethereum:
      apechain:
        uri: http://localhost:8545

  etherscan:
    ethereum:
      rate_limit: 15
      apechain:
        uri: https://custom.scan
        api_uri: https://api.custom.scan/api
  ```



  You can use dependencies from Etherscan in your projects.
  Configure them like this:

  ```yaml
  dependencies:
    - name: Spork
      etherscan: "0xb624FdE1a972B1C89eC1dAD691442d5E8E891469"
      ecosystem: ethereum
      network: mainnet
  ```

  Then, access contract types from the dependency in your code:

  ```python
  from ape import project

  spork_contract_type = project.dependencies["Spork"]["etherscan"].Spork
  ```



  Etherscan offers a query-provider plugin for account data.
  Query account transactions from Etherscan using the following syntax:

  ```python
  from ape import chain

  history = chain.history["vitalik.eth"]



  result = history.query("*", start_nonce=1000, stop_nonce=1001, engine_to_use="etherscan")
  ```


pkgId: 1a99fe0e1dbc5c15a3e7707b19876121d132b41955cf31ede623fe5f89d370af
name: python-ape-fantom
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-fantom: Ape Ecosystem Plugin for Fantom
url: https://github.com/ApeWorX/ape-fantom
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-fantom-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Fantom support in Ape



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install this plugin using `ape`:

  ```bash
  ape plugins install fantom
  ```

  or via config file:

  ```yaml

  plugins:
    - name: fantom
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-fantom
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-fantom.git
  cd ape-fantom
  python3 setup.py install
  ```



  Installing this plugin adds support for the Fantom ecosystem:

  ```bash
  ape console --network fantom:opera
  ```


pkgId: b980a9cb10539d52427fc4d0d6a6fcd4268e25327e6fdd1ddfa026485da68279
name: python-ape-foundry
arch: src
version: 0.8.4
epoch: 0
release: 1
summary: ape-foundry: Ape network provider for Foundry
url: https://github.com/ApeWorX/ape-foundry
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-foundry-0.8.4-1.src.rpm
checksum_type: sha256
description:
  Foundry network provider plugin for Ape.
  Foundry is a development framework written in Rust for Ethereum that includes a local network implementation.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.
  - Foundry. See Foundry's [Installation](https://github.com/foundry-rs/foundry#installation) documentation for steps.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-foundry
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-foundry.git
  cd ape-foundry
  python3 setup.py install
  ```



  Use the `--network ethereum:local:foundry` command line flag to use the foundry network (if it's not already configured as the default).

  This network provider takes additional Foundry-specific configuration options. To use them, add these configs in your project's `ape-config.yaml`:

  ```yaml
  foundry:
    host: https://127.0.0.1:8555
  ```

  To select a random port, use a value of "auto":

  ```yaml
  foundry:
    host: auto
  ```

  This is useful for multiprocessing and starting up multiple providers.

  You can also adjust the request timeout setting:

  ```yaml
  foundry:
    request_timeout: 20  # Defaults to 30
    fork_request_timeout: 600  # Defaults to 300
  ```



  The `ape-foundry` plugin also includes a mainnet fork provider.
  It requires using another provider that has access to mainnet.

  Use it in most commands like this:

  ```bash
  ape console --network :mainnet-fork:foundry
  ```

  Specify the upstream archive-data provider in your `ape-config.yaml`:

  ```yaml
  foundry:
    fork:
      ethereum:
        mainnet:
          upstream_provider: alchemy
  ```

  Otherwise, it defaults to the default mainnet provider plugin.
  You can also specify a `block_number` and `evm_version`.

  If the block number is specified, but no EVM version is specified, it is automatically set based on the block height for known networks.

  **NOTE**: Make sure you have the upstream provider plugin installed for ape.

  ```bash
  ape plugins install alchemy
  ```



  To connect to a remote anvil node, set up your config like this:

  ```yaml
  foundry:
    host: https://anvil.example.com
  ```

  Now, instead of launching a local process, it will attempt to connect to the remote anvil node and use this plugin as the ape interface.

  To connect to a remote anvil node using an environment variable, set `APE_FOUNDRY_HOST`:

  ```bash
  export APE_FOUNDRY_HOST=https://your-anvil.example.com`
  ```



  You can impersonate accounts using the `ape-foundry` plugin.
  To impersonate an account, do the following:

  ```python
  import pytest

  @pytest.fixture
  def whale(accounts):
      return accounts["example.eth"]
  ```

  To transact, your impersonated account must have a balance.
  You can achieve this by using a forked network and impersonating an account with a balance.
  Alternatively, you can set your node's base fee and priority fee to `0`.

  To programtically set an account's balance, do the following:

  ```python
  from ape import accounts

  account = accounts["example.eth"]
  account.balance = "1000 ETH"  # This calls `anvil_setBalance` under-the-hood.
  ```



  Configure your node's base fee and priority fee using the `ape-config.yaml` file.

  ```yaml
  foundry:
    base_fee: 0
    priority_fee: 0
  ```



  Anvil nodes by default auto-mine.
  However, you can disable auto-mining on startup by configuring the foundry plugin like so:

  ```yaml
  foundry:
    auto_mine: false
  ```

  Else, you can disable auto-mining using the provider instance:

  ```python
  from ape import chain

  anvil = chain.provider
  anvil.auto_mine = False  # calls `anvil_setAutomine` RPC.
  ```



  By default, Anvil will mine a new block every time a transaction is submitted.
  To mine on an interval instead, set the `block_time` config:

  ```yaml
  foundry:
    block_time: 10  # mine a new block every 10 seconds
  ```



  To change the EVM version for local foundry networks, use the `evm_version` config:

  ```yaml
  foundry:
    evm_version: shanghai
  ```

  To change the EVM version for forked networks, set it the specific forked-network config(s):

  ```yaml
  foundry:
    fork:
      ethereum:
        mainnet:
          evm_version: shanghai
  ```


pkgId: 6400f37b944dc0f3e5363158795247876556f168e9ea9da578ffa43999791fce
name: python-ape-ganache
arch: src
version: 0.7.0
epoch: 0
release: 1
summary: ape-ganache: Ape network provider for Ganache
url: https://github.com/ApeWorX/ape-ganache
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-ganache-0.7.0-1.src.rpm
checksum_type: sha256
description:
  Ganache network provider plugin for Ape. Ganache is a tool for creating a local blockchain for fast Ethereum development.



  - [python3](https://www.python.org/downloads) version 3.8 up to 3.11.
  - Node.js, NPM, and Ganache. See Ganache's [Installation](https://github.com/trufflesuite/ganache#command-line-use%3E) documentation for steps.





  You can install the latest release via [pip](https://pypi.org/project/pip/):

  ```bash
  pip install ape-ganache
  ```



  You can clone the repository and use [setuptools](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-ganache.git
  cd ape-ganache
  python3 setup.py install
  ```



  To use the plugin, first install Ganache locally into your Ape project directory:

  ```bash
  cd your-ape-project
  npm install --global ganache
  ```

  After that, you can use the `--network ethereum:local:ganache` command line flag to use the ganache network (if it's not already configured as the default).

  This network provider takes additional Ganache-specific configuration options.
  To use them, add these configs in your project's `ape-config.yaml`:

  ```yaml
  ganache:
    server:
      port: 8555
  ```

  To select a random port, use a value of "auto":

  ```yaml
  ganache:
    server:
      port: auto
  ```

  This is useful for multiprocessing and starting up multiple providers.



  The `ape-ganache` plugin also includes a mainnet fork provider. It requires using another provider that has access to mainnet.

  Use it in most commands like this:

  ```bash
  ape console --network :mainnet-fork:ganache
  ```

  Specify the upstream archive-data provider in your `ape-config.yaml`:

  ```yaml
  ganache:
    fork:
      ethereum:
        mainnet:
          upstream_provider: infura
  ```

  Otherwise, it defaults to the default mainnet provider plugin.
  You can also specify a `block_number`.

  **NOTE**: Make sure you have the upstream provider plugin installed for ape.

  ```bash
  ape plugins add infura
  ```



  You can unlock / impersonate accounts at genesis time using Ganache.
  To do this, add the accounts to your config like this:

  ```yaml
  ganache:
    wallet:
      unlocked_accounts:
        - 0x04029baca527b69247dbe9243dfc9b5d12c7ba60
  ```


pkgId: 03cea2a83ec5650f63b15b84e7198f70d10100e05835a630484f62e35c6f5f4d
name: python-ape-hardhat
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-hardhat: Ape network provider for Hardhat
url: https://github.com/ApeWorX/ape-hardhat
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-hardhat-0.8.1-1.src.rpm
checksum_type: sha256
description:
  This is a Hardhat network provider plugin for Ape.
  Hardhat is a development framework written in Node.js for Ethereum that includes a local network implementation.
  Use this plugin to manage a Hardhat node process or connect to an existing one.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.
  - Node.js, NPM, and Hardhat 2.12.0 or greater. See Hardhat's [Installation](https://hardhat.org/getting-started/#installation%3E) documentation for steps.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-hardhat
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-hardhat.git
  cd ape-hardhat
  python3 setup.py install
  ```



  To use the plugin, first install Hardhat locally into your Ape project directory:

  ```bash
  cd your-ape-project
  npm install --save-dev hardhat
  ```

  After that, you can use the `--network ethereum:local:hardhat` command line flag to use the hardhat network (if it's not already configured as the default).

  This network provider takes additional Hardhat-specific configuration options. To use them, add these configs in your project's `ape-config.yaml`:

  ```yaml
  hardhat:
    host: 127.0.0.1:8555
  ```

  To select a random port, use a value of "auto":

  ```yaml
  hardhat:
    host: auto
  ```

  **NOTE**: If you plan on running multiple Hardhat nodes of any kind, you likely will want to use `auto` or configure multiple hosts (see examples below).

  This is useful for multiprocessing and starting up multiple providers.

  You can also adjust the request timeout setting:

  ```yaml
  hardhat:
    request_timeout: 20  # Defaults to 30
    fork_request_timeout: 600  # Defaults to 300
  ```



  The `ape-hardhat` plugin also includes a mainnet fork provider. It requires using another provider that has access to mainnet.

  Use it in most commands like this:

  ```bash
  ape console --network :mainnet-fork:hardhat
  ```

  Specify the upstream archive-data provider in your `ape-config.yaml`:

  ```yaml
  hardhat:
    fork:
      ethereum:
        mainnet:
          upstream_provider: alchemy
  ```

  Otherwise, it defaults to the default mainnet provider plugin. You can also specify a `block_number`.

  **NOTE**: Make sure you have the upstream provider plugin installed for ape.

  If you wish to run both a forked network and the local Hardhat network simultaneously, you may configure a separate host for the forked network(s).

  ```yaml
  hardhat:
    fork:
      ethereum:
        mainnet:
          upstream_provider: alchemy
          host: 127.0.0.1:8555
      polygon:
        mainnet:
          upstream_provider: alchemy
          host: 127.0.0.1:8556
  ```

  [Hardhat deployments](https://github.com/wighawag/hardhat-deploy#deploy-scripts-tags-and-dependencies) are disabled for forks for performance reasons. If you want your contract deployments to run on your fork, you can set `enable_hardhat_deployments` to `true` in your config:

  ```yaml
  hardhat:
    fork:
      ethereum:
        mainnet:
          upstream_provider: alchemy
          enable_hardhat_deployments: true
  ```

  ```bash
  ape plugins install alchemy
  ```



  To connect to a Hardhat node, set up your config like this:

  ```yaml
  hardhat:
    host: https://hardhat.example.com
  ```

  Now, instead of launching a local process, it will attempt to connect to the remote Hardhat node and use this plugin as the ape interace.



  By default, Ape generates and uses a basic config file for starting up a Hardhat node and having the same test accounts that Ape expects.
  To avoid conflict with other pre-existing Hardhat config files, Ape generates one in `$HOME/.ape/hardhat` and always refers to that one.
  To use a different one, such as the one in your local project instead, add the following to your `ape-config.yaml`:

  ```yaml
  hardhat:
    hardhat_config_file: ./hardhat.config.ts
  ```

  **NOTE**: You can refer to either a Hardhat JS file or a Hardhat TS file.



  Please see the [contributing guide](CONTRIBUTING.md) to learn more how to contribute to this project.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: 9a597da1eedd426bae3efa6727fb6cd7796012bba87caebb5e9f5eb3ae9188f7
name: python-ape-infura
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-infura: Infura Provider plugins for Ethereum-based networks
url: https://github.com/ApeWorX/ape-infura
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-infura-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Use the [Infura](https://infura.io/) provider plugin to interact with blockchains via APIs.
  This plugin supports the following ecosystems:

  - Ethereum
  - Polygon
  - Arbitrum
  - Optimism
  - Blast
  - ~~Linea~~ (awaiting ape-linea update)



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-infura
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-infura.git
  cd ape-infura
  python3 setup.py install
  ```



  First, make sure you have one of the following environment variables set (it doesn't matter which one):

  - WEB3_INFURA_PROJECT_ID
  - WEB3_INFURA_API_KEY

  Either in your current terminal session or in your root RC file (e.g. `.bashrc`), add the following:

  ```bash
  export WEB3_INFURA_PROJECT_ID=MY_API_TOKEN


  export WEB3_INFURA_PROJECT_ID=MY_API_TOKEN1, MY_API_TOKEN2
  ```

  To use the Infura provider plugin in most commands, set it via the `--network` option:

  ```bash
  ape console --network ethereum:sepolia:infura
  ```

  To connect to Infura from a Python script, use the `networks` top-level manager:

  ```python
  from ape import networks

  with networks.parse_network_choice("ethereum:mainnet:infura") as provider:
      
      print(provider.ws_uri)
  ```


pkgId: 19a2eaca177fde4d88fce0898d848c58bef2cf61d5d8a8ca809e109cf46d58eb
name: python-ape-infura
arch: src
version: 0.8.2
epoch: 0
release: 1
summary: ape-infura: Infura Provider plugins for Ethereum-based networks
url: https://github.com/ApeWorX/ape-infura
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-infura-0.8.2-1.src.rpm
checksum_type: sha256
description:
  Use the [Metamask Developer](https://developer.metamask.io/) (F.K.A. Infura) provider plugin to interact with blockchains via APIs.
  This plugin supports the following ecosystems:

  - Arbitrum
  - Avalanche
  - Base
  - Blast
  - BSC
  - Celo
  - Ethereum
  - Linea
  - Mantle
  - Optimism
  - Palm
  - Polygon
  - Scroll
  - Starknet
  - Unichain
  - zkSync



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-infura
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-infura.git
  cd ape-infura
  python3 setup.py install
  ```



  First, make sure you have one of the following environment variables set (it doesn't matter which one):

  - WEB3_INFURA_PROJECT_ID
  - WEB3_INFURA_API_KEY

  Either in your current terminal session or in your root RC file (e.g. `.bashrc`), add the following:

  ```bash
  export WEB3_INFURA_PROJECT_ID=MY_API_TOKEN


  export WEB3_INFURA_PROJECT_ID=MY_API_TOKEN1, MY_API_TOKEN2
  ```

  Additionally, if your app requires an API secret as well, use either of the following environment variables:

  - WEB3_INFURA_PROJECT_ID
  - WEB3_INFURA_API_KEY

  And each request will use the secret as a form of authentication.

  To use the Infura provider plugin in most commands, set it via the `--network` option:

  ```bash
  ape console --network ethereum:sepolia:infura
  ```

  To connect to Infura from a Python script, use the `networks` top-level manager:

  ```python
  from ape import networks

  with networks.parse_network_choice("ethereum:mainnet:infura") as provider:
      
      print(provider.ws_uri)
  ```


pkgId: 9d8c7a7df75c1ca3a2c3289e9fd17f0210d0b155bb7c131361db2c0e680b9c30
name: python-ape-ledger
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-ledger: Plugin for Ledger Hardware Wallet
url: https://github.com/ApeWorX/ape-ledger
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-ledger-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ape Ledger is a plugin for Ape Framework which integrates with Ledger devices
  to load and create accounts, sign messages, and sign transactions.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-ledger
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-ledger.git
  cd ape-ledger
  python3 setup.py install
  ```



  You must:

  - have the Ledger USB device connected
  - have the Ledger USB device unlocked (by entering the passcode)
  - and have the Ethereum app open.

  Then, add accounts:

  ```bash
  ape ledger add <alias>
  ```

  Ledger accounts have the following capabilities in `ape`:

  1. Can sign transactions
  2. Can sign messages using the default EIP-191 specification
  3. Can sign messages using the EIP-712 specification



  If you need to adjust your HD path, use the `--hd-path` flag when adding the account.

  ```bash
  ape ledger add <alias> --hd-path "m/44'/60'/0'/0/{x}"
  ```

  `{x}` indicates the account node. Note that excluding `{x}` assumes the account node is at the end
  of the path.

  The default HD path for the Ledger plugin is `m/44'/60'/{x}'/0/0`.
  See https://github.com/MyCryptoHQ/MyCrypto/issues/2070 for more information.



  To list just your Ledger accounts in `ape`, do:

  ```bash
  ape ledger list
  ```



  You can also remove accounts:

  ```bash
  ape ledger delete <alias>
  ```



  Please see the [contributing guide](CONTRIBUTING.md) to learn more how to contribute to this project.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: 4a3811370cc27361bb7e6bd1e8511eed75748b63f194af15aa11be6e3b14090d
name: python-ape-optimism
arch: src
version: 0.8.2
epoch: 0
release: 1
summary: ape-optimism: Ape Ecosystem Plugin for Optimism
url: https://github.com/ApeWorX/ape-optimism
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-optimism-0.8.2-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Optimism support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install this plugin using `ape`:

  ```bash
  ape plugins install optimism
  ```

  or via config file:

  ```yaml

  plugins:
    - name: optimism
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-optimism
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-optimism.git
  cd ape-optimism
  python3 setup.py install
  ```



  Installing this plugin adds support for the Optimism ecosystem:

  ```bash
  ape console --network optimism:sepolia
  ```



  Comments, questions, criticisms and pull requests are welcomed.


pkgId: c2164e8cceefc938ab94f75fc4e65f88ad09d741549e7d3df3eaeacc75949353
name: python-ape-pie
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: A small API client abstraction layer on top of requests.
url: https://pypi.org/project/ape-pie/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-pie-0.2.0-1.src.rpm
checksum_type: sha256
description:
  |build-status| |code-quality| |black| |coverage| |docs|
  |python-versions| |pypi-version|
  Ape-pie is a small API client abstraction layer on top of requests_.


pkgId: 3e6ee10cd23d9682674d39b99256ff1770a37e4727b34a0247319d06207373d1
name: python-ape-polygon
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: ape-polygon: Ape Ecosystem Plugin for Polygon
url: https://github.com/ApeWorX/ape-polygon
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-polygon-0.8.0-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Polygon support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install this plugin using `ape`:

  ```bash
  ape plugins install polygon
  ```

  or via config file:

  ```yaml

  plugins:
    - name: polygon
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-polygon
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-polygon.git
  cd ape-polygon
  python3 setup.py install
  ```



  Installing this plugin adds support for the Polygon ecosystem:

  ```bash
  ape console --network polygon:mainnet
  ```



  Comments, questions, criticisms and pull requests are welcomed.


pkgId: cad140826eb0a64ea855c0ce2d663a49fa426ab0ff13ca4e7f27f2b87a828c9d
name: python-ape-polygon-zkevm
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-polygon-zkevm: Ecosystem plugin for Polygon ZkEVM
url: https://github.com/ApeWorX/ape-polygon-zkevm
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-polygon-zkevm-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ecosystem Plugin for Polygon ZkEVM support in Ape.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-polygon-zkevm
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-polygon-zkevm.git
  cd ape-polygon-zkevm
  python3 setup.py install
  ```



  Installing this plugin adds support for the Polygon ZkEVM ecosystem:

  ```
  ape console --network polygon-zkevm:cardona
  ```



  This project is in development and should be considered a beta.
  Things might not be in their final state and breaking changes may occur.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: 002a7a5a517fa3dab14398f54bfb41e7952ccac915475934f5c1c3717b60f207
name: python-ape-safe
arch: src
version: 0.8.4
epoch: 0
release: 1
summary: ape-safe: Gnosis Safe account plugin for Ape
url: https://github.com/ApeWorX/ape-safe
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-safe-0.8.4-1.src.rpm
checksum_type: sha256
description:
  Account plugin for the [Safe](https://safe.global//) Multisig wallet (previously known as Gnosis Safe).



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install using the [ape](https://github.com/ApeWorX/ape) built-in plugin manager:

  ```bash
  $ ape plugins install safe
  ```



  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  $ pip install ape-safe
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  $ git clone https://github.com/ApeWorX/ape-safe.git
  $ cd ape-safe
  $ python3 setup.py install
  ```



  To use the plugin, first use the CLI extension to add a safe you created:

  ```sh
  ape safe add --network ethereum:mainnet "my-safe.eth" my-safe
  ```

  If you made a mistake or just need to remove the safe, use the `remove` command:

  ```sh
  ape safe remove my-safe --yes
  ```

  **NOTE** `--yes` is a way to skip the prompt.

  If you only add one safe, you will not have to specify which safe to use other commands.
  Otherwise, for most `pending` commands, you specify the safe to use (by alias) via the `--safe` option.

  Additionally, you can configure a safe to use as the default in your `ape-config.yaml` file:

  ```yaml
  safe:
    default_safe: my-safe
  ```

  **NOTE**: Also, to avoid always needing to specify `--network`, you can set a default ecosystem, network, and provider in your config file.
  The rest of the guide with not specify `--network` on each command but assume the correct one is set in the config file.
  Here is an example:

  ```yaml
  default_ecosystem: optimism

  ethereum:
    default_network: sepolia
    sepolia:
      default_provider: infura
  ```

  Once you have a safe, you can view pending transactions:

  ```sh
  ape safe pending list
  ```

  It should show transactions like this:

  ```sh
  Transaction 8 rejection (1/2) safe_tx_hash=0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7
  Transaction 8 transfer  (1/2) safe_tx_hash=0xed43d80255bcd5ffacb755e8f51bee825913373705d6baea006419d2a33a0a5b
  ```

  **NOTE**: Use the `--verbose` flag to see more information about each transaction.

  ```sh
  ape safe pending list --verbose
  ```

  There are several operations you can do on a pending transaction.
  One of them is "approve" which adds your local signers' signatures to the transaction.

  ```sh
  ape safe pending approve 0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7
  ```

  **NOTE**: Here we are using the transaction hash `0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7` to specify the transaction because there are more than one.
  However, you can also use the nonce if there is only a single transaction.

  If you want to both execute and approve at the same time, you can use the `--execute` option on approve and specify a sender:

  ```sh
  ape safe pending approve 2 --execute my_account
  ```

  Else, you can use the `execute` command directly:

  ```sh
  ape safe pending execute 2
  ```

  **NOTE**: `execute` requires a full signed transaction ready to be submitted on-chain.

  The last main operation is `reject`.
  Rejecting a transaction replaces that transaction with a zero-value transfer from the safe to itself.

  ```sh
  ape safe pending reject 2
  ```



  The following example shows how to use multisend:

  ```python
  from ape_safe import multisend
  from ape import accounts
  from ape_tokens import tokens

  safe = accounts.load("my-safe")


  dai = tokens["DAI"]
  vault = tokens["yvDAI"]
  amount = dai.balanceOf(safe)  # How much we want to deposit


  txn = multisend.MultiSend()
  txn.add(dai.approve, vault, amount)
  txn.add(vault.deposit, amount)






  txn(sender=safe,gas=0)
  ```



  Please see the [contributing guide](CONTRIBUTING.md) to learn more how to contribute to this project.
  Comments, questions, criticisms and pull requests are welcomed.



  This package was inspired by [the original ape-safe](https://github.com/banteg/ape-safe#readme) by [banteg](https://github.com/banteg).
  For versions prior to v0.6.0, the original package should be referenced.


pkgId: 0a136dad45d361695eecae9325c5edb60793fd87226a0336e93ba87343b5171b
name: python-ape-solidity
arch: src
version: 0.8.4
epoch: 0
release: 1
summary: Plugin for Ape Ethereum Framework for compiling Solidity contracts
url: https://github.com/ApeWorX/ape-solidity
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-solidity-0.8.4-1.src.rpm
checksum_type: sha256
description:
  Compile Solidity contracts.



  - [python3](https://www.python.org/downloads) version 3.9 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-solidity
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-solidity.git
  cd ape-solidity
  python3 setup.py install
  ```



  In your project, make sure you have a `contracts/` directory containing Solidity files (`.sol`).

  Then, while this plugin is installed, compile your contracts:

  ```bash
  ape compile
  ```

  The byte-code and ABI for your contracts should now exist in a `__local__.json` file in a `.build/` directory.



  By default, `ape-solidity` tries to use the best versions of Solidity by looking at all the source files' pragma specifications.
  However, it is often better to specify a version directly.
  If you know the best version to use, set it in your `ape-config.yaml`, like this:

  ```yaml
  solidity:
    version: 0.8.14
  ```



  By default, `ape-solidity` will use whatever version of EVM rules are set as default in the compiler version that gets used.
  Sometimes, you might want to use a different version, such as deploying on Arbitrum or Optimism where new opcodes are not supported yet.
  If you want to require a different version of EVM rules to use in the configuration of the compiler, set it in your `ape-config.yaml` like this:

  ```yaml
  solidity:
    evm_version: paris
  ```



  By default, `ape-solidity` knows to look at installed dependencies for potential remapping-values and will use those when it notices you are importing them.
  For example, if you are using dependencies like:

  ```yaml
  dependencies:
    - name: openzeppelin
      github: OpenZeppelin/openzeppelin-contracts
      version: 4.4.2
  ```

  And your source files import from `openzeppelin` this way:

  ```solidity
  import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
  ```

  Ape knows how to resolve the `@openzeppelin` value and find the correct source.

  If you want to override this behavior or add new remappings that are not dependencies, you can add them to your `ape-config.yaml` under the `solidity:` key.
  For example, let's say you have downloaded `openzeppelin` somewhere and do not have it installed in Ape.
  You can map to your local install of `openzeppelin` this way:

  ```yaml
  solidity:
    import_remapping:
      - "@openzeppelin=path/to/openzeppelin"
  ```



  To compile contracts that use libraries, you need to add the libraries first.
  Use the `add_library()` method from the `ape-solidity` compiler class to add the library.
  A typical flow is:

  1. Deploy the library.
  2. Call `add_library()` using the Solidity compiler plugin, which will also re-compile contracts that need the library.
  3. Deploy and use contracts that require the library.

  For example:

  ```python
  import pytest


  @pytest.fixture
  def contract(accounts, project, compilers):
      
      account = accounts[0]
      library = project.Set.deploy(sender=account)

      
      compilers.solidity.add_library(library)

      
      return project.C.deploy(sender=account)
  ```



  When using `ape-solidity`, your project's manifest's compiler settings will include standard JSON output.
  You should have one listed `compiler` per `solc` version used in your project.
  You can view your current project manifest, including the compiler settings, by doing:

  ```python
  from ape import project

  manifest = project.extract_manifest()

  for compiler_entry in manifest.compilers:
      print(compiler_entry.version)
      print(compiler_entry.settings)
  ```

  **NOTE**: These are the settings used during contract verification when using the [Etherscan plugin](https://github.com/ApeWorX/ape-etherscan).



  You can enable `solc`'s `--via-IR` flag by adding the following values to your `ape-config.yaml`

  ```yaml
  solidity:
    via_ir: True
  ```



  `ape-solidity` has contract-flattening capabilities.
  If you are publishing contracts using Ape, Ape automatically detects and uses the flattened-contract approach if needed.

  To manually flatten a contract for your own benefit, use the following code:

  ```python
  from ape import compilers, project

  source_path = project.source_paths[0]  # Replace with your path.
  flattened_src = compilers.flatten_contract(source_path)
  print(str(flattened_src))
  ```


pkgId: b9847cc4ca91f4efb0e20a5b72c1343f3810526113e3a18d24d547c805984a1b
name: python-ape-tokens
arch: src
version: 0.8.3
epoch: 0
release: 1
summary: ape-tokens: tokenlists plugin for Ape
url: https://github.com/ApeWorX/ape-tokens
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-tokens-0.8.3-1.src.rpm
checksum_type: sha256
description:
  A series of utilities for working with tokens, based on the [`py-tokenlists`](https://github.com/ApeWorX/py-tokenlists).



  - [python3](https://www.python.org/downloads) version 3.8 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-tokens
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-tokens.git
  cd ape-tokens
  python3 setup.py install
  ```





  First, install a token list, such as the `1inch` token list, which contains many tokens that you can use:

  ```bash
  ape tokens install tokens.1inch.eth
  ```

  To see all the tokens you can use, run command:

  ```bash
  ape tokens list-tokens
  ```

  To see other available CLI commands, run:

  ```bash
  ape tokens --help
  ```



  One of the main reasons to use the `ape-tokens` plugin is to have nicer UX for providing token amounts to contract transactions.
  For example, let's say you have a smart-contract named `MyContract` with a function `provideLinkToken()` that takes a decimal value of `LINK` tokens.
  The following is an example script that deploys the contract and makes a transaction by expressing the value of LINK as `8.23 LINK`:

  ```python
  from ape import accounts, project

  my_account = accounts[0]
  contract = my_account.deploy(project.MyContract)

  contract.provideLinkTokens("8.23 LINK")
  ```

  Alternatively, if you need the converted value returned to you, you can use the `convert` tool from the root `ape` namespace:

  ```python
  from ape import convert

  convert("100.1234 BAT", int)
  ```

  Lastly, to get information about a token, including its contract address, you can do so by importing the `tokens` member from the root `ape_tokens` namespace:

  ```python
  from ape_tokens import tokens

  bat = tokens["BAT"]

  print(bat.address)
  ```


pkgId: 664ccf883a35c3caf936479cdf60ba7387e234016d20082b5bda537543b3ee64
name: python-ape-trezor
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: ape-trezor: Plugin for Trezor Hardware Wallets
url: https://github.com/ApeWorX/ape-trezor
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-trezor-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Ape Trezor is a plugin for [Ape Framework](https://github.com/ApeWorx/ape) which integrates [Trezorlib ethereum.py](https://github.com/trezor/trezor-firmware/blob/master/python/src/trezorlib/ethereum.py) to load and create accounts, sign messages, and sign transactions.



  - [python3](https://www.python.org/downloads) version 3.9 up tp 3.12.

  **Note**: USB does not work in WSL2 environments natively and is [not currently supported](https://github.com/microsoft/WSL/issues/5158).





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-trezor
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-trezor.git
  cd ape-trezor
  python3 setup.py install
  ```



  Trezor accounts have the following capabilities in `ape`:

  1. Can sign transactions (both static-fee and EIP-1559 compliant)
  2. Can sign messages using the default EIP-191 specification

  To use the Trezor plugin, you must have the Trezor USB device connected and unlocked.

  **WARNING**: When the Trezor Suite is open, you may face additional connection issues.
  It is recommended to not have the Trezor Suite application open while using the plugin.



  Add accounts using the `add` command:

  ```bash
  ape trezor add <alias>
  ```

  You can also specify the HD Path:

  ```bash
  ape trezor add <alias> --hd-path "m/44'/1'/0'/0"
  ```

  **WARNING**: When using 3rd party wallets, such as this plugin, `trezorlib` discourages signing transactions from the default Ethereum HD Path `m/44'/60'/0'/0`.
  Changing the HD-Path in that circumstance will allow fewer warnings from both Ape and the device, as well as improved security.
  See https://github.com/trezor/trezor-firmware/issues/1336#issuecomment-720126545 for more information.

  ```yaml
  trezor:
    hd_path: "m/44'/1'/0'/0"
  ```



  To list just your Trezor accounts in `ape`, do:

  ```bash
  ape trezor list
  ```



  You can also remove accounts:

  ```bash
  ape trezor delete <alias>
  ape trezor delete-all
  ```



  You can sign messages with your accounts:

  ```bash
  ape trezor sign-message <alias> "hello world"
  ```



  You can also verify a message with a signature:

  ```bash
  ape trezor verify-message "hello world" <signature>
  ```



  Please see the [contributing guide](CONTRIBUTING.md) to learn more how to contribute to this project.
  Comments, questions, criticisms and pull requests are welcomed.


pkgId: 9cc131265110e5e55591d0669403abd9bf4eb997234d8ed60025d17d0b2b9fcb
name: python-ape-vyper
arch: src
version: 0.8.6
epoch: 0
release: 1
summary: Plugin for Ape Ethereum Framework for compiling Vyper contracts
url: https://github.com/ApeWorX/ape-vyper
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ape-vyper-0.8.6-1.src.rpm
checksum_type: sha256
description:
  Ape compiler plugin around [VVM](https://github.com/vyperlang/vvm)



  - [python3](https://www.python.org/downloads) version 3.10 up to 3.12.





  You can install the latest release via [`pip`](https://pypi.org/project/pip/):

  ```bash
  pip install ape-vyper
  ```



  You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

  ```bash
  git clone https://github.com/ApeWorX/ape-vyper.git
  cd ape-vyper
  python3 setup.py install
  ```



  First, place Vyper contract source files (files with extension `.vy`) in your Ape project's contracts folder.
  An example Vyper contract can be found [here](https://vyper.readthedocs.io/en/stable/vyper-by-example.html).
  Then, from your root Ape project folder, run the command:

  ```bash
  ape compile
  ```

  The `.vy` files in your project will compile into `ContractTypes` that you can deploy and interact with in Ape.



  For ease of publishing, validation, and some other cases it's sometimes useful to "flatten" your contract into a single file.
  This combines your contract and any imported interfaces together in a way the compiler can understand.
  You can do so with a command like this:

  ```bash
  ape vyper flatten contracts/MyContract.vy build/MyContractFlattened.vy
  ```

  > \[!WARNING\]
  > This feature is experimental. Please [report any bugs](https://github.com/ApeWorX/ape-solidity/issues/new?assignees=&labels=bug&projects=&template=bug.md) you find when trying it out.



  By default, the `ape-vyper` plugin uses version pragma for version specification.
  However, you can also configure the version directly in your `ape-config.yaml` file:

  ```yaml
  vyper:
    version: 0.3.7
  ```



  By default, `ape-vyper` will use whatever version of EVM rules are set as default in the compiler version that gets used,
  or based on what the `#pragma evm-version ...` pragma comment specifies (available post-`v0.3.10`).
  Sometimes, you might want to use a different version, such as deploying on Arbitrum or Optimism where new opcodes are not supported yet.
  If you want to require a different version of EVM rules to use in the configuration of the compiler, set it in your `ape-config.yaml` like this:

  ```yaml
  vyper:
    evm_version: paris
  ```

  **NOTE**: The config value chosen will not override if a pragma is set in a contract.



  You can not compile interface source files directly.
  Thus, you must place interface files in a directory named `interfaces` in your `contracts_folder` e.g. `contracts/interfaces/IFace.vy`.
  Then, these files can be imported in other `.vy` sources files via:

  ```python
  import interfaces.IFace as IFace
  ```

  Alternatively, use JSON interfaces from dependency contract types by listing them under the `import_remapping` key:

  ```yaml

  dependencies:
    - name: VyperVoting
      github: vyperlang/vyper
      contracts_folder: examples/voting/
      version: v0.3.8


  vyper:
    import_remapping:
      - "voting=VyperVoting@v0.3.8"
  ```

  Import the voting contract types like this:

  ```python


  import voting.ballot as ballot
  ```



  To use decimals on Vyper 0.4, use the following config:

  ```yaml
  vyper:
    enable_decimals: true
  ```



  Ape-Vyper supports Vyper 0.3.10's [new pragma formats](https://github.com/vyperlang/vyper/pull/3493)



  ```python

  ```



  ```python

  ```



  ```python

  ```


pkgId: 889510b2e1bf03d1da7195e4efa391211f00a2098914c4ff34db3acc5d1c7feb
name: python-apeer-dev-kit
arch: src
version: 1.2.2
epoch: 0
release: 1
summary: Development kit for creating modules on apeer
url: https://github.com/apeer-micro/apeer-python-sdk
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apeer-dev-kit-1.2.2-1.src.rpm
checksum_type: sha256
description:
  APEER Python SDK aka (ADK) is a Python library for reading inputs and writing outputs of APEER(https://www.apeer.com) modules.
  The ADK will take care of reading inputs from previous modules in APEER and writing your outputs in the correct format for the next mod ule.
  This project is hosted at https://github.com/apeer-micro/apeer-python-sdk
  The documentation can be found at https://github.com/apeer-micro/apeer-python-sdk/blob/master/README.md


pkgId: 1420506325c9b12ed28fbb2157711a5043149717124ac1cf77a81db3652ec5d3
name: python-apeman-dal-client
arch: src
version: 0.0.15
epoch: 0
release: 1
summary: Apeman DAL service client SDK
url: https://pypi.org/project/apeman-dal-client/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apeman-dal-client-0.0.15-1.src.rpm
checksum_type: sha256
description:
  ```shell
  python -m build
  twine upload --repository-url https://test.pypi.org/legacy/ dist/*

  ```





  ```shell
  export apeman_dal_server_addr='localhost:9090'
  ```



  ```python
  from apeman.dal.tsdb import DataAmount, DataType
  from apeman.dal.tsdb import ApemanDalTsdbClient
  from apeman.dal.tsdb import ColumnDefinitionBuilder, CreateDatafeedRequestBuilder, \
       UniqueKeyBuilder


  tag = ColumnDefinitionBuilder() \
              .set_name(name='tag_nae') \
              .set_non_null(non_null=True) \
              .set_type(data_type=DataType.TEXT) \
              .set_limit(limit=100).build()

  field = ColumnDefinitionBuilder() \
              .set_name(name='field_name') \
              .set_non_null(non_null=True) \
              .set_type(data_type=DataType.TEXT) \
              .set_limit(limit=100).build()

  unique_key = UniqueKeyBuilder().add(name='tag_name').build()
  unique_key_2 = UniqueKeyBuilder().add(name='field_name').build()

  data_amount = DataAmount.SMALL

  create_datafeed_request = CreateDatafeedRequestBuilder() \
              .set_name(name='test') \
              .add_tag(tag=tag) \
              .add_field(field=field) \
              .add_unique_key(unique_key=unique_key) \
              .add_unique_key(unique_key=unique_key_2) \
              .set_data_amount(data_amount=data_amount) \
              .build()

  client = ApemanDalTsdbClient()

  client.create_datafeed(request=create_datafeed_request)



  ```


  ```python
  from apeman.dal.tsdb import ApemanDalTsdbClient

  client = ApemanDalTsdbClient()

  client.delete_datafeed(datafeed='test')
  ```



  ```python
  from apeman.dal.tsdb import ApemanDalTsdbClient

  client = ApemanDalTsdbClient()

  client.get_datafeed(datafeed='test')
  ```



  ```python
  from apeman.dal.tsdb import ApemanDalTsdbClient

  client = ApemanDalTsdbClient()

  client.list_datafeed(query_filter='')
  ```



  ```python
  from apeman.dal.tsdb import ApemanDalTsdbClient
  from apeman.dal.tsdb import DataType
  from apeman.dal.tsdb.proto_builder import TabularDataBuilder, ColumnMetaBuilder, TupleBuilder, ValBuilder
  import time

  client = ApemanDalTsdbClient()

  column_a = ColumnMetaBuilder()  \
                  .set_name(name='column_a') \
                  .set_data_type(data_type=DataType.TEXT) \
                  .build()
  column_b = ColumnMetaBuilder()  \
                  .set_name(name='column_b')  \
                  .set_data_type(data_type=DataType.BIGINT) \
                  .build()

  test_val = ValBuilder().set_ts(epoch_in_millis=int(time.time()*1000)).build()

  tuple_a = TupleBuilder() \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .build()

  tuple_b = TupleBuilder() \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .add_val(val = ValBuilder().set_i32(1000).build()) \
                  .build()

  data = TabularDataBuilder()  \
                  .add_column(column=column_a) \
                  .add_column(column=column_b) \
                  .add_tuple(tuple=tuple_a) \
                  .add_tuple(tuple=tuple_b) \
                  .build()

  client.put_data(datafeed='test', data=data)
  ```



  ```python
  from apeman.dal.tsdb import ApemanDalTsdbClient
  from apeman.dal.tsdb.proto_builder import  OutputColumnBuilder, GetDataRequestBuilder


  client = ApemanDalTsdbClient()

  output_column_builder = OutputColumnBuilder().set_expr(expr='test').set_alias(alias='column_a')
  column_a = output_column_builder.build()

  output_column_builder = OutputColumnBuilder().set_expr(expr='test').set_alias(alias='column_b')
  column_b = output_column_builder.build()

  request = GetDataRequestBuilder()  \
                  .add_column(column=column_a)  \
                  .add_column(column=column_b)  \
                  .set_datafeed(datafeed='test')  \
                  .set_where(where='')  \
                  .set_group_by(group_by='')  \
                  .set_having(having='')  \
                  .set_order_by(order_by='')  \
                  .set_offset(offset=0)  \
                  .set_limit(limit=100)  \
                  .build()

  client.get_data(request=request)
  ```


pkgId: f7d54d1be7400a2b19af57925ff38a7caf52093bb7cd4796fad487c8f8bc1b7b
name: python-apeman-model-client
arch: src
version: 0.2.7.5
epoch: 0
release: 1
summary: Apeman model service client SDK
url: https://pypi.org/project/apeman-model-client/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apeman-model-client-0.2.7.5-1.src.rpm
checksum_type: sha256
description:
  ```shell
  python -m build
  twine upload --repository-url https://test.pypi.org/legacy/ dist/*

  ```





  ```shell
  export apeman_meta_server_addr='localhost:9090'
  ```

  ```python


  from apeman.model.openapi import apeman_open_api_client
  from apeman.model.openapi.model_instance_task_status import TaskStatus
  from apeman.model.openapi.model_instance_task_launch_type import TaskLaunchType
  from apeman.model.openapi.model_instance_task_type import TaskType


  endpoint = apeman_open_api_client.get_endpoint(model_instance_id='')

  apeman_open_api_client.cancel_task(task_id='', force_delete=True, token='')


  response = apeman_open_api_client.report_and_get_status(task_id='', status=TaskStatus.RUNNING, progress=0.1,
                                                          message='Task is running', token='')

  if response.status == TaskStatus.CANCELED:
      raise Exception('Task has been cancelled.')


  apeman_open_api_client.add_model_instance_task(model_instance_id='', tenant_id='', task_token='', task_parameters='',
                                                 job_context='', start_time=1, end_time=2,
                                                 launch_type=TaskLaunchType.TASK_ADHOC, task_type=TaskType.TASK_TRAIN)

  task = apeman_open_api_client.get_instance_task(model_instance_task_id='test', token='token')
  print(task.taskProgress)
  print(task.taskMessage)
  print(task.taskStatus)



  apeman_open_api_client.add_model_instance_task(model_instance_id='', tenant_id='', task_token='', task_parameters='',
                                                 job_context='', start_time=1, end_time=2,
                                                 launch_type=TaskLaunchType.TASK_ADHOC, task_type=TaskType.TASK_TRAIN)

  task_id_list = ['1', '2', '3']
  task_list_response = apeman_open_api_client.batch_get_model_instance_task(task_id_list=task_id_list)
  print(task_list_response.model_instance_task_list)
  ```


pkgId: 3acc4db2bf037dd6a7c49476f92cfbbc6b642ed83544ae6d33286f318d5e85c1
name: python-apertium-lint
arch: src
version: 1.0.8
epoch: 0
release: 1
summary: static analysis of Apertium files
url: http://github.com/apertium/apertium-lint
rpm_license: GPLv3+
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apertium-lint-1.0.8-1.src.rpm
checksum_type: sha256
description:
  linter for Apertium source files

  This package provides the command-line tool `apertium-lint` which statically analyzes Apertium source files for potential issues.

  The linter can be run on a single file, giving output like

  ```
  $ apertium-lint modes.xml
  modes.xml
  Error (install-deps) on line 8: Debug modes using files in .deps/ should not be installed.
  Error (install-deps) on line 25: Debug modes using files in .deps/ should not be installed.
  Error (install-deps) on line 91: Debug modes using files in .deps/ should not be installed.
  Errors: 3 Warnings: 0 Suggestions: 0 Nitpicks: 0
  ```

  or it can be run without arguments, which will apply it to the entire current directory

  ```
  $ apertium-lint
  ./modes.xml
  Error (install-deps) on line 8: Debug modes using files in .deps/ should not be installed.
  Error (install-deps) on line 25: Debug modes using files in .deps/ should not be installed.
  Error (install-deps) on line 91: Debug modes using files in .deps/ should not be installed.
  ./paper/paper.tex
  Warning (unnorm) on line 113: Line contains non-normalized characters.
  Errors: 3 Warnings: 1 Suggestions: 0 Nitpicks: 0
  ```

  With option `-s`, statistics about the files will also be gathered.

  ```
  $ apertium-lint -s apertium-kir.kir.twol
  apertium-kir.kir.twol
  Input alphabet symbols:	169
  Output alphabet symbols:	139
  Rules:	61
  Sets:	35
  Alphabet symbol pairs:	169
  Errors: 0 Warnings: 0 Suggestions: 0 Nitpicks: 0
  ```


pkgId: d093b3a536923291f69d0a8d759f221ee90c7dd093daee245c57a5d273c0090b
name: python-aperture-py
arch: src
version: 2.26.0
epoch: 0
release: 1
summary: SDK to interact with the Aperture Agent
url: https://pypi.org/project/aperture-py/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aperture-py-2.26.0-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
  🚀 <b></b>Just launched v1 of <a href="https://blog.fluxninja.com/blog/aperture-v1-launch-2024/">managed rate limiting service</a></b>
    <br/>Support us with your feedback and questions on <a href="https://www.producthunt.com/posts/fluxninja-aperture">Product Hunt</a> or <a href="https://discord.gg/U3N3fCZEPm">Discord</a>
    <br/>
  </p>

  <p align="center">
    <img src="https://github.com/fluxninja/aperture/raw/main/docs/content/assets/img/aperture_logo.png" alt="FluxNinja Aperture" width="75%">
    <br/>
    <a href="https://docs.fluxninja.com">
      <img alt="Documentation Reference" src="https://img.shields.io/badge/documentation-reference-brightgreen?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5gkaEAsvan7AVwAAB5FJREFUWMPtmFtsHOUVgL/zz+zFe/Oud23n4thOQgJJsXOnBEUoKlHoLVABKn0CVe0DVdUKVWqf2qilV4SqSkhVhaq+0NJGpQq9ASWlkQoEGpqQC5ALJMGOndjxbdf27nq9O/OfPswmaYPtBEFbIfmMRjvSzJz5/nP5zzkL8zIv8/LhFvkglOTHRkE1qiIrARHVtxCZyjRl37du8wHBNajId0T1eVH7NxV5BNVUfmz0/2vB/NgoGqi5S/za4+7+3XGsj3fzPRV1w18EfUKA92NJ95qtFCzGRTWuIkmgUUUWI2YzcL85cyTu7n8KrI9t7oz6q7b8EFilaveNjY32AeOiOolICfAAvRbwOS1Yd5+rIl0Y53aQjaDtqDaJ9VJ4taSU8lHzzmHc/buR8WEQ0EQT3kfvwi5bj8Yz04TCk2qcccTkQfpBD2D950T1CCK1uUDlKnBJFfM1UfslGR9qleFepDCIFMeQUgGZGMEUBpCJETSawNt0Bzgu7qu/R8rjaDKHzSxEUzk0noFEBptegOba0XTrsIrzC1H7MCKF2SBlNjgNbn1DquXvuwf+7DpH/4qMDyHWosYBx4VILIBYtBJ/1RZs2ypAkPMncU/sw/QfRyaGYboMvoeoj4pBkzn87m14N91pNRx7SNR+FxE7E+QcgCxCzB730F8+EnruZ2gqh12+EdvcgSYy0JBCG1JovBEi8QBabV2rAbVIpYSUC8jUJJQnkFIeM3IWc/ogUhikdtsX8DbdcQrVbQK9MwHOkSTSJl61zTlzENwQte0P4F+38Yo1KWg9j60PUr9nfVQEjcbRhsS77OCsOEx49w9wzryGv/bjC9UNd4L2zkQxO6AQxvqGqQmIJtBcGwBGLYKg9c9aQFUvw0FwrYqIYBS0HjCKYkXQ9AIIx6BaAbUuEJ0NY3ZARRETuC8URY2LABemJjg21k9husSieBNd2SXE3AhaP4K1CUaEil/jjdE++ktjJENRVmXaWBjPoI6LhmMQjoIYDVwxm51mj8GlwFNmqGeNVIpo22pOjA/y67dfZnhqgmQoyrRf48ZsO3d0rqc11ojUraiqjFQm+VPPaxwa7iHqhCh50zSGY3xuxS10Ny1G+k+goQh2wXXHRP27G761tUCyaTUwBLwBEH34xTkAjYP43jo1zo8EtherZX76+h4GywV2dK7HU8u0V+OlwbcIG4fubAcdyRwi0Dc5ytHRs5S8aT7VsY6q7zHlVXlx4ATpSJyvdN9OYySBiux13n71x5EnH9oI3I3IGWAn8PpFwBldnGnKBvugyCFR+6BBnh0qj3f0F8dY39yJAs/2HqEz2cyabDt7+99ksFzAEQcAX32sKlsXr6ZmfZ45e5hlqRa6su3sv3CKgVKeTCRxnncOPRTZtfMBHHcFIo8CfwBGLsLNHYOXJQKEtB6WRgzHx87hWZ90JIYRCaoH4KutJ8PlODyeP4dVSzoSv5Tx9R9HG5IGtAg0AD1XwgE4s7kYVQPcqsY8gsiNrhjeHOunrzjKmlwHy1MtZKNJ9l84RcQJsaFlKVsWXk9XbgnpcJyyN83w1CRrcx0sa2wlE4nz6tBpGsMxti3pIupGEprMrvSv3/xL5+jze8XaAiJ9AN/bd/aakuQG4GmTH1jGdBlal/HaSC+73n6ZslclHYlRrFVYlmrlzqUbWJLI4pige/Ot5Xwpzx97DvJWYYBEKMp4tUzUCXPvdZvZ0NyJDPVAKIxtWnwW4+wAjjal0+9hm0Fy4teaQ39/HBk9R/Xeb7O2eSnZaIIjI72MV6dYFM+wqWU5qXADiuLboJKICG2JLPddfysHhs/QPzlKKtxAd66D9mQOSgXCzzyKppqpfubrrYosFPToTBRzbdRgfSgWkEoxqKUCHclmOpLNlyJNUaxaROTSNgNg1RIPRdi6aPWlZ7l45VWDZiIUBWtnCbRAZu+oFQ/jWKJxmC4j40OoGKzI5fPiB+XdkSISVBsL//GOGgPFPNQq4IZBxAeqs2HM4WI9p27ogt/R3eic+iehPY9hbrgFm2uHeAaNJoI6G4mj4XqlqqfnxbIntWmoFJH6SamAGenDOfkKUiliO7pQN3Jhtjo8J6Co9qvILr/rtm/WJkeN+8ZeQi/+JrCA40IoGkA2tmDbVuOvvBnb0hm4ZbgX5+Q/MOeOIfnBAK5WQXwPrEVjKbwNn8Zbux2E34nVXmTm1vRqDWtGjdkpvvd5GelrNIOnkfx5pJQPGtbJUWRiBJmaQFPN1DbfA8bFfeW3mMJQfQHNaCKLxtNoIoNmFmBbl6O59qK6oV+JtTsRGX5PDesVkBEVsxljdgDrUF0k1k/je3FqlZhMjhjn1AHcg09DpRhoDMfw1n8Sf8VNaCpnCTWUcdyyGqeAyABwCGufFrX7rjaeXtNUd2loCsbLNJACySHSjsgtqN7jHnuhNfTMo2AttU98Ga/rY8OI2Y3qS6j2go4AE6JaQGQKsO97aLomcN8TdUP3SW36MfeFJyLi16htvb+q4ehXxfd+jnGuCeS/AngJUrVRRX4ivvdZUFEn9KSoPjjXMPQ/A/w3yKSKWQuIqD2sIhNNH8BfH/MyL/PyYZd/ASXTkEaNSEXqAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTA4LTMxVDEzOjA5OjA2KzAwOjAwaZ/rqgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wOC0zMVQxMzowOTowNiswMDowMBjCUxYAAAAASUVORK5CYII=">
    </a>
    <a href="https://join.slack.com/t/fluxninja-aperture/shared_invite/zt-1eunlrkhh-10P1HUkmBfVJX3qrSLRk~g">
      <img alt="Slack Community" src="https://img.shields.io/badge/Join%20Our%20Community-Slack-brightgreen?style=for-the-badge&logo=slack">
    </a>
  </p>



  The `aperture-py` SDK provides an easy way to integrate your Python applications
  with [FluxNinja Aperture](https://github.com/fluxninja/aperture). It allows flow
  control functionality on fine-grained features inside service code.

  Refer to [documentation](https://docs.fluxninja.com/sdk/python/) for more
  details.





  Run the command below to install the SDK:

  ```bash
  pip install aperture-py
  ```



  The next step is to create an Aperture Client instance, for which, the address
  of the organization created in Aperture Cloud and API key are needed. You can
  locate both these details by clicking on the Aperture tab in the sidebar menu of
  Aperture Cloud.

  ```python
  from aperture_sdk.client import ApertureClient, FlowParams

  agent_address = os.getenv("APERTURE_AGENT_ADDRESS", default_agent_address)
  api_key = os.getenv("APERTURE_API_KEY", "")
  insecure = os.getenv("APERTURE_AGENT_INSECURE", "true").lower() == "true"

  aperture_client = ApertureClient.new_client(
      address=agent_address, insecure=insecure, api_key=api_key
  )
  ```



  The created instance can then be used to start a flow:

  ```python

      labels = {
          "user_id": "some_user_id",
          "user_tier": "gold",
          "priority": "100",
      }
      flow_params = FlowParams(
          check_timeout=timedelta(seconds=200),
          explicit_labels=labels,
      )
      
      
      flow = await aperture_client.start_flow(
          control_point="AwesomeFeature",
          params=flow_params,
      )

      
      if not flow.success:
          logger.info("Flow check failed - will fail-open")

      
      if flow.should_run():
          
          pass
      else:
          
          flow.set_status(FlowStatus.Error)

      res = await flow.end()
      if res.get_error():
          logger.error("Error: {}".format(res.get_error()))
      elif res.get_flow_end_response():
          logger.info("Flow End Response: {}".format(res.get_flow_end_response()))

      
      await asyncio.sleep(2)
      return "", 202
  ```

  The above code snippet is making `start_flow` calls to Aperture. For this call,
  it is important to specify the control point (`AwesomeFeature` in the example)
  and `FlowParams` that will be aligned with the policy created in Aperture Cloud.
  For request prioritization use cases, it's important to set a higher gRPC
  deadline. This parameter specifies the maximum duration a request can remain in
  the queue. For each flow that is started, a `should_run` decision is made,
  determining whether to allow the request into the system or to rate limit it. It
  is important to make the `end` call made after processing each request, to send
  telemetry data that would provide granular visibility for each flow.


pkgId: 941b4cdfa7ec240c8ea791d90f2f4e0ca31fd4aa44e4172227a4c6ae277dace1
name: python-aperturedb
arch: src
version: 0.4.35
epoch: 0
release: 1
summary: ApertureDB Python SDK
url: https://github.com/aperture-data/aperturedb-python
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aperturedb-0.4.35-1.src.rpm
checksum_type: sha256
description:
  This is the Python SDK for building applications with [ApertureDB](https://docs.aperturedata.io/Introduction/WhatIsAperture).

  This comprises of utilities to get sata in and out of ApertureDB in an optimal manner.
  A quick [getting started guide](https://docs.aperturedata.io/HowToGuides/start/Setup) is useful to start building with this SDK.
  For more concrete examples, please refer to:
  * [Simple examples and concepts](https://docs.aperturedata.io/category/simple-usage-examples)
  * [Advanced usage examples](https://docs.aperturedata.io/category/advanced-usage-examples)


  ```bash
  pip install aperturedb[complete]
  ```

  or an installation with only the core part of the SDK
  ```bash
  pip install aperturedb
  ```

  A complete [reference](https://docs.aperturedata.io/category/aperturedb-python-sdk) of this SDK is available on the offical [ApertureDB Documentation](https://docs.aperturedata.io)



  The recommended way is to clone this repo, and do an editable install as follows:
  ```bash
  git clone https://github.com/aperture-data/aperturedb-python.git
  cd aperturedb-python
  pip install -e .[dev]
  ```



  The tests are inside the `test` dir.

  All the tests can be run with:

  ```bash
  export GCP_SERVICE_ACCOUNT_KEY=<content of a GCP SERVICE ACCOUNT JSON file>
  bash run_test.sh
  ```

  Running specefic tests can be accomplished by invoking it with pytest as follows:

  ```bash
  cd test && docker compose up -d && PROJECT=aperturedata KAGGLE_username=ci KAGGLE_key=dummy coverage run -m python -m pytest test_Session.py -v --log-cli-level=DEBUG
  ```


  Any error in the functionality / documentation / tests maybe reported by creating a
  [github issue](https://github.com/aperture-data/aperturedb-python/issues).


  For inclusion of any features, a PR may be created with a patch,
  and a brief description of the problem and the fix.
  The CI enforces a coding style guideline with autopep8 and
  a script to detect trailing white spaces.

  If a PR encounters failures, the log will describe the location of
  the offending line with a description of the problem.

rpm_license:
  The MIT License  @copyright Copyright (c) 2017 Intel Corporation @copyright Copyright (c) 2024 ApertureData Inc  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: 9003991a4bdcd4107764927a4d7ce9314fdeb91fb1f9eccd39d26c95e9fdd37e
name: python-aperturedb
arch: src
version: 0.4.38
epoch: 0
release: 1
summary: ApertureDB Python SDK
url: https://github.com/aperture-data/aperturedb-python
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aperturedb-0.4.38-1.src.rpm
checksum_type: sha256
description:
  This is the Python SDK for building applications with [ApertureDB](https://docs.aperturedata.io/Introduction/WhatIsAperture).

  This comprises of utilities to get sata in and out of ApertureDB in an optimal manner.
  A quick [getting started guide](https://docs.aperturedata.io/HowToGuides/start/Setup) is useful to start building with this SDK.
  For more concrete examples, please refer to:
  * [Simple examples and concepts](https://docs.aperturedata.io/category/simple-usage-examples)
  * [Advanced usage examples](https://docs.aperturedata.io/category/advanced-usage-examples)


  ```bash
  pip install aperturedb[complete]
  ```

  or an installation with only the core part of the SDK
  ```bash
  pip install aperturedb
  ```

  A complete [reference](https://docs.aperturedata.io/category/aperturedb-python-sdk) of this SDK is available on the offical [ApertureDB Documentation](https://docs.aperturedata.io)



  The recommended way is to clone this repo, and do an editable install as follows:
  ```bash
  git clone https://github.com/aperture-data/aperturedb-python.git
  cd aperturedb-python
  pip install -e .[dev]
  ```



  The tests are inside the `test` dir.

  All the tests can be run with:

  ```bash
  export GCP_SERVICE_ACCOUNT_KEY=<content of a GCP SERVICE ACCOUNT JSON file>
  bash run_test.sh
  ```

  Running specific tests can be accomplished by invoking it with pytest as follows:

  ```bash
  cd test && docker compose up -d && PROJECT=aperturedata KAGGLE_username=ci KAGGLE_key=dummy coverage run -m pytest test_Session.py -v --log-cli-level=DEBUG
  ```


  Any error in the functionality / documentation / tests maybe reported by creating a
  [github issue](https://github.com/aperture-data/aperturedb-python/issues).


  For inclusion of any features, a PR may be created with a patch,
  and a brief description of the problem and the fix.
  The CI enforces a coding style guideline with autopep8 and
  a script to detect trailing white spaces.

  If a PR encounters failures, the log will describe the location of
  the offending line with a description of the problem.

rpm_license:
  The MIT License  @copyright Copyright (c) 2017 Intel Corporation @copyright Copyright (c) 2024 ApertureData Inc  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: a53975d57203d495c36583c73bb46a66702f15d8849490e05f9cc47aefd9e11f
name: python-apex
arch: src
version: 0.9.10dev
epoch: 0
release: 1
summary: Pyramid toolkit to add Velruse, Flash Messages,CSRF, ReCaptcha and Sessions
url: http://thesoftwarestudio.com/apex/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apex-0.9.10dev-1.src.rpm
checksum_type: sha256
description:
  Authentication, Form Library, I18N/L10N, Flash Message Template
  (not associated with Pyramid, a Pylons project)
  Uses alchemy


pkgId: 91ca85320d1e77ccfd12535b79acf348c573496fd07a4111236677d3195c9e75
name: python-apex-flow
arch: src
version: 1.2.10
epoch: 0
release: 1
summary: Alloy Properties EXplorer using simulations
url: https://github.com/deepmodeling/APEX.git
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apex-flow-1.2.10-1.src.rpm
checksum_type: sha256
description:
  <div style="text-align: center;">
      <img src="./docs/images/logo.png" style="zoom: 15%;">
  </div>


  [![](https://img.shields.io/badge/release-1.2.0-blue.svg)](https://github.com/deepmodeling/APEX)

  [APEX](https://github.com/deepmodeling/APEX): Alloy Property EXplorer is a component of the [AI Square](https://aissquare.com/) project that involves the restructuring of the [DP-GEN](https://github.com/deepmodeling/dpgen) `auto_test` module to develop a versatile and extensible Python package for general alloy property calculations. This package enables users to conveniently establish a wide range of cloud-native property-test workflows by utilizing various computational approaches, including LAMMPS, VASP, ABACUS, and others.

  ![gif](./docs/images/apex_demo_high_0001.gif)


  * Add a `retrieve` sub-command to allow results to be retrieved independently and manually for multiple properties (Remove `Distributor` and `Collector` OP)
  * Support common **dflow operations** with terminal commands
  * Incorporate results `archive` function to both local paths and NoSQL database ([MongoDB](https://www.mongodb.com/) and [DynamoDB](https://aws.amazon.com/cn/dynamodb/))
  * Add a `report` sub-command for quick results visualization and cross-comparison via a front-end APP based on [Dash](https://dash.plotly.com)
  * Support [SeeK-path](https://seekpath.readthedocs.io/en/latest/index.html) for automatic band path search in `phonon` calculations
  * Support eight conventional HCP interstitial configurations for `interstitial` calculations
  * Add four additional **ML** pair styles (`snap`, `gap`, `rann` and `mace`) and an extra `meam-spline` in LAMMPS interation type support
  * Modify the single-step run command from `test` to `do` for improved clarity and consistencey


  [![](https://img.shields.io/badge/APP-BohriumApp-orange.svg)](https://bohrium.dp.tech/apps/apex)

  APEX also provides a web-based [Bohrium App](https://bohrium.dp.tech/apps/apex) for rapid and easy alloy property calculations without intensive JSON configuration (Note: one will need a Bohrium account to access this service).


  [![](https://img.shields.io/badge/DOI-10.48550/arXiv.2404.17330-red.svg)](https://doi.org/10.48550/arXiv.2404.17330)

  If you use APEX in your research, please cite the following paper for general purpose:

  > Z. Li, T. Wen, Y. Zhang, X. Liu, C. Zhang, A. S. L. S. Pattamatta, X. Gong, B. Ye, H.Wang, L. Zhang, D. J. Srolovitz, An extendable cloud-native alloy property explorer (2024). arXiv:2404.17330.



  - [APEX: Alloy Property EXplorer](#apex-alloy-property-explorer)
    - [v1.2 Main Features Update](#v12-main-features-update)
    - [APEX Bohrium App](#apex-bohrium-app)
    - [How to cite APEX](#how-to-cite-apex)
    - [Table of Contents](#table-of-contents)
    - [1. Overview](#1-overview)
    - [2. Quick Start](#2-quick-start)
      - [2.1. Install APEX](#21-install-apex)
      - [2.2. Install Local Argo (Optional)](#22-install-local-argo-optional)
      - [2.3. Submission Examples](#23-submission-examples)
        - [2.3.1. Submit to Local Argo Service](#231-submit-to-local-argo-service)
        - [2.3.2. Submit Without Argo Service](#232-submit-without-argo-service)
        - [2.3.3. Submit to the Bohrium](#233-submit-to-the-bohrium)
    - [3. Documents \& User Guide](#3-documents--user-guide)
      - [3.1. Before Submission](#31-before-submission)
        - [3.1.1. Global Setting](#311-global-setting)
        - [3.1.2. Calculation Parameters](#312-calculation-parameters)
          - [3.1.2.1. EOS](#3121-eos)
          - [3.1.2.2. Elastic](#3122-elastic)
          - [3.1.2.3. Surface](#3123-surface)
          - [3.1.2.4. Vacancy](#3124-vacancy)
          - [3.1.2.5. Interstitial](#3125-interstitial)
          - [3.1.2.6. Gamma Line](#3126-gamma-line)
          - [3.1.2.7. Phonon Spectra](#3127-phonon-spectra)
      - [3.2. Submission](#32-submission)
        - [3.2.1. Workflow Submission](#321-workflow-submission)
        - [3.2.2. Workflow Inquiry \& Operations](#322-workflow-inquiry--operations)
        - [3.2.3. Run Individual Step](#323-run-individual-step)
      - [3.3. After Submission](#33-after-submission)
        - [3.3.1. Retrieve Results Manually](#331-retrieve-results-manually)
        - [3.3.2. Archive Test Results](#332-archive-test-results)
        - [3.3.3. Results Visualization Report](#333-results-visualization-report)



  APEX adopts the functionality of the second-generation `auto_test` for alloy properties calculations and is developed utilizing the [dflow](https://github.com/deepmodeling/dflow) framework. By integrating the benefits of cloud-native workflows, APEX streamlines the intricate procedure of automatically testing various configurations and properties. Owing to its cloud-native characteristic, APEX provides users with a more intuitive and user-friendly interaction, enhancing the overall user experience by eliminating concerns related to process control, task scheduling, observability, and disaster tolerance.

  The comprehensive architecture of APEX is demonstrated below:

  <div style="text-align: center;">
      <img src="./docs/images/flowchart.png" alt="Fig1" style="zoom: 40%;">
      <p style='font-size:1.0rem; font-weight:none'>Figure 1. Schematic diagram of APEX</p>
  </div>

  APEX consists of three types of pre-defined **workflow** that users can submit: `relaxation`, `property`, and `joint`. The `relaxation` and `property` sub-workflow comprise three sequential **steps**: `Make`, `Run`, and `Post`, while the `joint` workflow essentially combines the `relaxation` and `property` workflows into a comprehensive workflow.

  The `relaxation` process begins with the initial `POSCAR` supplied by the user, which is used to generate critical data such as the final relaxed structure and its corresponding energy, forces, and virial tensor. This equilibrium state information is essential for input into the `property` workflow, enabling further calculations of alloy properties. Upon completion, the final results are automatically retrieved and downloaded to the original working directory.

  In both the `relaxation` and `property` workflows, the `Make` step prepares the corresponding computational tasks. These tasks are then transferred to the `Run` step that is responsible for task dispatch, calculation monitoring, and retrieval of completed tasks (implemented through the [DPDispatcher](https://github.com/deepmodeling/dpdispatcher/tree/master) plugin). Upon completion of all tasks, the `Post` step is initiated to collect data and obtain the desired property results.

  APEX currently offers calculation methods for the following alloy properties:

  * Equation of State (EOS)
  * Elastic constants
  * Surface energy
  * Interstitial formation energy
  * Vacancy formation energy
  * Generalized stacking fault energy (Gamma line)
  * Phonon spectra

  Moreover, APEX supports three types of calculators: **LAMMPS** for molecular dynamics simulations, and **VASP** and **ABACUS** for first-principles calculations.



  The latest version of APEX can be easily installed via `pypi` with following command:
  ```shell
  pip install apex-flow
  ```
  The second approach is to intall from the source code. Firstly clone the code from repository:
  ```shell
  git clone https://github.com/deepmodeling/APEX.git
  ```
  then install APEX by:
  ```shell
  cd APEX
  pip install .
  ```


  APEX workflow can be boosted and better orgnized by the [Argo](https://argoproj.github.io/workflows/) workflow engine, which provides intuitive process monitoring UI and multiple user-friendly workflow management functions.

  To enable this feature on your local computer, you can setup the dflow service by executing [installation scripts](./docs/scripts/) prepared based on Unix-like system. For instance, to install on a Linux system without root access:
  ```shell
  bash install-linux-cn.sh
  ```
  This process will automatically configure the required local tools, including Docker, Minikube, and Argo service, with the default port set to `127.0.0.1:2746`. To setup the service on Windows, please refer to the [dflow setup manual](https://github.com/deepmodeling/dflow/tree/master/tutorials) for more details.



  We present several case studies as introductory illustrations of APEX, tailored to distinct user scenarios. For our demonstration, we will utilize a [LAMMPS_example](./examples/lammps_demo) to compute the Equation of State (EOS) and elastic constants of molybdenum in both Body-Centered Cubic (BCC) and Face-Centered Cubic (FCC) phases. To begin, we will examine the files prepared within the working directory for this specific case.

  ```
  lammps_demo
  ├── confs
  │   ├── std-bcc
  │   │   └── POSCAR
  │   └── std-fcc
  │       └── POSCAR
  ├── frozen_model.pb
  ├── global_bohrium.json
  ├── global_hpc.json
  ├── param_joint.json
  ├── param_props.json
  └── param_relax.json
  ```
  There are three types of parameter files and two types of global config files, as well as a Deep Potential file of molybdenum `frozen_model.pb`. Under the directory of `confs`, structure file `POSCAR` of both phases have been prepared respectively.


  Before this subsection, make sure you have setup a local Argo service environment. If not, please follow the instruction in [2.2. Install Local Argo (Optional)](#22-install-local-argo-optional) to do so.

  To submit workflow to local Argo service, with the default port set to `127.0.0.1:2746`. Consequently, one can modify the `global_hpc.json` file to submit a workflow. Here is an example to submit job to local LAMMPS env:
  ```json
  {
      "apex_image_name":"zhuoyli/apex_amd64",
      "run_image_name": "zhuoyli/apex_amd64",
      "run_command":"lmp -in in.lammps",
      "batch_type": "Shell",
      "context_type": "Local",
      "local_root" : "./",
      "remote_root": "/some/path/not/under/pwd/"
  }
  ```
  Another example to submit job to a remote HPC. In this example, we attempt to distribute tasks to a remote node managed by [Slurm](https://slurm.schedmd.com). Users can replace the relevant parameters within the `machine` dictionary or specify `resources` and `tasks` according to [DPDispatcher](https://docs.deepmodeling.com/projects/dpdispatcher/en/latest/index.html) rules. Here is an example `global_hpc.json` file:
  ```json
  {
      "apex_image_name":"zhuoyli/apex_amd64",
      "run_image_name": "zhuoyli/apex_amd64",
      "run_command":"lmp -in in.lammps",
      "context_type": "SSHContext",
      "mechine":{
        "batch_type": "Slurm",
        "context_type": "SSHContext",
        "local_root" : "./",
        "remote_root": "/your/remote/tasks/path",
        "clean_asynchronously": true,
        "remote_profile": {
            "hostname": "123.12.12.12",
            "username": "USERNAME",
            "password": "PASSWD",
            "port": 22,
            "timeout": 10
        }
      },
      "resources":{
          "number_node": 1,
          "cpu_per_node": 4,
          "gpu_per_node": 0,
          "queue_name": "apex_test",
          "group_size": 1,
          "module_list": ["deepmd-kit/2.1.0/cpu_binary_release"],
          "custom_flags": [
              "#SBATCH --partition=xlong",
              "#SBATCH --ntasks=4",
              "#SBATCH --mem=10G",
              "#SBATCH --nodes=1",
              "#SBATCH --time=1-00:00:00"
              ]
         }
  }
  ```

  Then, one can submit a relaxation workflow via:
  ```shell
  apex submit param_relax.json -c global_hpc.json
  ```

  Upon submission of the workflow, progress can be monitored at local https://127.0.0.1:2746. If the argo is setup on system without monitor UI, you may try to port forward the `127.0.0.1:2746` to another PC by running following command on that PC:
  ```shell
  ssh -nNT -L 127.0.0.1:2746:127.0.0.1:2746 USERNAME@123.12.12.12
  ```
  Then, you can monitor the UI through https://127.0.0.1:2746


  If your local computer experiences difficulties connecting to the internet or installing cloud-native infrastructures like Docker and Argo, APEX offers a **workflow local debug mode** that allows the flow to operate in a basic `Python3` environment, independent of the Docker container. Users will **not** be able to monitor the workflow through the workflow UI. However, the workflows are still running automatically.

  To enable this function, users can add an additional optional argument `-d` to the origin submission command, as demonstrated below:

  ```shell
  apex submit -d param_relax.json -c global_hpc.json
  ```

  In this approach, uses are not required to specify an image for executing APEX. Rather, APEX should be pre-installed in the default `Python3` environment to ensure proper functioning.


  The most efficient method for submitting an APEX workflow is through the pre-built execution environment of Argo on the [Bohrium cloud platform](https://bohrium.dp.tech). This is especially convenient and robust for massive task-intensive workflows running concurrently. It is necessary to create a **Bohrium account** before running. Below is an example of a global.json file for this approach.

  ```json
  {
      "dflow_host": "https://workflows.deepmodeling.com",
      "k8s_api_server": "https://workflows.deepmodeling.com",
      "batch_type": "Bohrium",
      "context_type": "Bohrium",
      "email": "YOUR_EMAIL",
      "password": "YOUR_PASSWD",
      "program_id": 1234,
      "apex_image_name":"registry.dp.tech/dptech/prod-11045/apex-dependency:1.2.0",
      "lammps_image_name": "registry.dp.tech/dptech/prod-11045/deepmdkit-phonolammps:2.1.1",
      "lammps_run_command":"lmp -in in.lammps",
      "scass_type":"c8_m31_1 * NVIDIA T4"
  }
  ```
  Then, one can submit a relaxation workflow via:
  ```shell
  apex submit param_relax.json -c global_bohrium.json
  ```
  Remember to replace `email`, `password` and `program_id` of your own before submission. As for image, you can either build your own or use public images from Bohrium or pulling from the Docker Hub. Once the workflow is submitted, one can monitor it at https://workflows.deepmodeling.com.

  You may also checkout our online [hand-on Bohrium notebook tutorial](https://bohrium.dp.tech/notebooks/15413) for submisson to Bohrium.




  In APEX, there are **three essential components** required before submitting a workflow:
  * **A global JSON file** containing parameters for configuring `dflow` and other global settings (default: "./global.json")
  * **A calculation JSON file** containing parameters associated with calculations (relaxation and property test)
  * **A work directory** consists of necessary files specified in the above JSON files, along with initial structures (default: "./")



  The instructions regarding global configuration, [dflow](https://github.com/deepmodeling/dflow), and [DPDispatcher](https://github.com/deepmodeling/dpdispatcher/tree/master) specific settings must be stored in a JSON format file. The table below describes some crucial keywords, classified into three categories:

  * **Basic config**
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | apex_image_name | String | zhuoy/apex_amd64 | Image for step other than `run`. One can build this Docker image via prepared [Dockerfile](./docs/Dockerfile) |
    | run_image_name | String | None | Image of calculator for `run` step. Use `{calculator}_image_name` to indicate corresponding image for higher priority |
    | run_command | String | None | Shell command for `run` step. Use `{calculator}_run_command` to indicate corresponding command for higher priority |
    | group_size | Int | 1 | Number of tasks per parallel run group |
    | pool_size | Int | 1 | For multi tasks per parallel group, the pool size of multiprocessing pool to handle each task (1 for serial, -1 for infinity) |
    | upload_python_package | Optional[List] | None | Additional python packages required in the container |
    | debug_pool_workers | Int | 1 | Pool size of parallel tasks running in the debug mode |
    | flow_name | String | None | Specify name of workflow to be submitted (default: work path name) |
    | submit_only | Bool | False | Submit workflow only without automatic result retrieving |

  * **Dflow config**
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | dflow_host | String | https://127.0.0.1:2746 | Url of dflow server |
    | k8s_api_server | String | https://127.0.0.1:2746 | Url of kubernetes API server |
    | dflow_config | Optional[Dict] | None | Specify more detailed dflow config in a nested dictionary with higher priority (See [dflow document](https://deepmodeling.com/dflow/dflow.html) for more detail) |
    | dflow_s3_config | Optional[Dict] | None | Specify dflow s3 repository config in a nested dictionary with higher priority (See [dflow document](https://deepmodeling.com/dflow/dflow.html) for more detail) |

  * **Dispatcher config** (One may refer to [DPDispatcher’s documentation](https://docs.deepmodeling.com/projects/dpdispatcher/en/latest/index.html) for details of the following parameters)
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | context_type | String | None | Context type to connect to the remote server |
    | batch_type | String | None | System to dispatch tasks |
    | local_root | String | "./" | Local root path |
    | remote_root | String | None | Remote root path |
    | remote_host | String | None | Remote root path |
    | remote_username | String | None | Remote user name |
    | remote_password | String | None | Remote user password |
    | port | Int | 22 | Remote port |
    | machine | Optional[Dict] | None | Complete **machine setting** dictionary defined in the [DPDispatcher](https://docs.deepmodeling.com/projects/dpdispatcher/en/latest/index.html) with higher priority |
    | resources | Optional[Dict] | None | Complete **resources setting** dictionary defined in the [DPDispatcher](https://docs.deepmodeling.com/projects/dpdispatcher/en/latest/index.html) with higher priority |
    | task | Optional[Dict] | None | Complete **task setting** dictionary defined in the [DPDispatcher](https://docs.deepmodeling.com/projects/dpdispatcher/en/latest/index.html) with higher priority |

  * **Bohrium** (additonal dispatcher config to be specified when you want to quickly adopt the pre-built dflow service or scientific computing resources on the [Bohrium platform](https://bohrium.dp.tech) )
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | email | String | None | Email of your Bohrium account |
    | phone | String | None | Phone number of your Bohrium account |
    | password | String | None | Password of your Bohrium account |
    | program_id | Int | None | Program ID of your Bohrium account |
    | scass_type | String | None | Node type provided by Bohrium |

  Please refer to the [Quick Start](#4-quick-start) section for various instances of global JSON examples in different situations.


  The method for indicating parameters in alloy property calculations is akin to the previous `dpgen.autotest` approach. There are **three** categories of JSON files that determine the parameters to be passed to APEX, based on their contents.

  Categories calculation parameter files:
  | Type | File format | Dictionary contained | Usage |
  | :------------ | ---- | ----- | ------------------- |
  | Relaxation | json | `structures`; `interaction`; `Relaxation` | For `relaxation` worflow |
  | Property | json |  `structures`; `interaction`; `Properties`  | For `property` worflow |
  | Joint | json |  `structures`; `interaction`; `Relaxation`; `Properties` | For `relaxation`, `property` and `joint` worflows |

  It should be noted that files such as POSCAR, located within the `structure` directory, or any other files specified within the JSON file should be defined as relative path to the **working directory** and prepared in advanced.

  Below are three examples (for detailed explanations of each parameter, please refer to the [Hands-on_auto-test](./docs/Hands_on_auto-test.pdf) documentation for further information):

  * **Relaxation parameter file**
    ```json
    {
      "structures":            ["confs/std-*"],
      "interaction": {
              "type":           "deepmd",
              "model":          "frozen_model.pb",
              "type_map":       {"Mo": 0}
  	  },
      "relaxation": {
              "cal_setting":   {"etol":       0,
                                "ftol":     1e-10,
                                "maxiter":   5000,
                                "maximal":  500000}
  	  }
    }
    ```
  * **Property parameter file**
    ```json
    {
      "structures":    ["confs/std-*"],
      "interaction": {
          "type":          "deepmd",
          "model":         "frozen_model.pb",
          "type_map":      {"Mo": 0}
      },
      "properties": [
          {
            "type":         "eos",
            "skip":         false,
            "vol_start":    0.6,
            "vol_end":      1.4,
            "vol_step":     0.1,
            "cal_setting":  {"etol": 0,
                            "ftol": 1e-10}
          },
          {
            "type":         "elastic",
            "skip":         false,
            "norm_deform":  1e-2,
            "shear_deform": 1e-2,
            "cal_setting":  {"etol": 0,
                            "ftol": 1e-10}
          }
          ]
    }
    ```
  * **Joint parameter file**
    ```json
    {
      "structures":            ["confs/std-*"],
      "interaction": {
            "type":           "deepmd",
            "model":          "frozen_model.pb",
            "type_map":       {"Mo": 0}
        },
      "relaxation": {
              "cal_setting":   {"etol":       0,
                              "ftol":     1e-10,
                              "maxiter":   5000,
                              "maximal":  500000}
        },
      "properties": [
        {
          "type":         "eos",
          "skip":         false,
          "vol_start":    0.6,
          "vol_end":      1.4,
          "vol_step":     0.1,
          "cal_setting":  {"etol": 0,
                          "ftol": 1e-10}
        },
        {
          "type":         "elastic",
          "skip":         false,
          "norm_deform":  1e-2,
          "shear_deform": 1e-2,
          "cal_setting":  {"etol": 0,
                          "ftol": 1e-10}
        }
        ]
    }
    ```

    | Key words | Data structure | Example | Description                                               |
    | :------------ | ----- |-----------------------------------------------------------| ------------------- |
    | vol_start | Float | 0.9 | The starting volume related to the equilibrium structure  |
    | vol_end | Float | 1.1 | The maximum volume related to the equilibrium structure   |
    | vol_step | Float | 0.01 | The volume increment related to the equilibrium structure |
    | vol_abs | Bool | False | Whether to treat vol_start and vol_end as absolute volume, default = False |


    | Key words    | Data structure | Example | Description                                                                                                                       |
    |:-------------|----------------|---------|-----------------------------------------------------------------------------------------------------------------------------------|
    | norm_deform  | Float          | 0.01    | The deformation in xx, yy, zz, defaul = 1e-2                                                                                      |
    | shear_deform | Float          | 0.01    | The deformation in other directions, default = 1e-2                                                                               |
    | conventional | Bool           | False   | Whether adopt conventional cell for deformation                                                                                   |
    | ieee         | Bool           | False   | Whether rotate relaxed structure into IEEE-standard format before deformation ([ref](https://ieeexplore.ieee.org/document/26560)) |


    | Key words | Data structure | Example | Description |
    | :------------ | ----- |----------------------------------------------------------------------------------| ------------------- |
    | min_slab_size | Int | 10 | Minimum size of slab thickness |
    | min_vacuum_size | Int | 11 | Minimum size of vacuum width |
    | pert_xz | Float | 0.01 | Perturbation through xz direction used to compute surface energy, default = 0.01 |
    | max_miller | Int | 2 | The maximum miller index number of surface, default = 2 |


    | Key words | Data structure | Example | Description |
    | :------------ | ----- | ----- | ------------------- |
    | supercell | List[Int] | [3, 3, 3] | The supercell to be constructed, default = [1,1,1] |


    | Key words | Data structure | Example | Description |
    | :------------ | ----- | ----- | ------------------- |
    | insert_ele | List[String] | ["Al"] | The element to be inserted |
    | supercell | List[Int] | [3, 3, 3] | The supercell to be constructed, default = [1,1,1] |
    | conf_filters | Dict | "min_dist": 1.5 | Filter out the undesirable configuration |
    <div>
        <img src="./docs/images/interstitial_table.png" alt="Fig3" style="zoom: 90%;">
        <p style='font-size:1.0rem; font-weight:none'> </p>
    </div>


    <div style="text-align: center;">
        <img src="./docs/images/gamma_demo.png" alt="Fig2" style="zoom: 35%;">
        <p style='font-size:1.0rem; font-weight:none'>Figure 2. Schematic diagram of Gamma line calculation</p>
    </div>

  The Gamma line (generalized stacking fault energy) function of APEX calculates energy of a series slab structures of specific crystal plane, which displaced in the middle along a slip vector as illustrated in **Figure 2**. In APEX, the slab structrures are defined by a plane miller index and two orthogonal directions (primary and secondary) on the plane. The **slip vector is always along the primary directions** with slip length defined by users or default settings. Thus, by indicating `plane_miller` and the `slip_direction` (i.e., primary direction), a slip system can be defined.

  For most common slip systems in FCC, BCC and HCP crystal structures, slip direction, secondary direction and default fractional slip lengths are already documented and listed below (users are **strongly advised** to follow those pre-defined slip system, or may need to double-check the generated slab structure, as unexpected results may occur especially for system like HCP):
  * FCC
    | Plane miller index | Slip direction | Secondary direction | Default slip length |
    | :-------- | ----- | ----- | ---- |
    | $(001)$ | $[100]$ | $[010]$ | $a$ |
    | $(110)$ | $[\bar{1}10]$ | $[001]$ | $\sqrt{2}a$ |
    | $(111)$ | $[11\bar{2}]$ | $[\bar{1}10]$ | $\sqrt{6}a$ |
    | $(111)$ | $[\bar{1}\bar{1}2]$ | $[1\bar{1}0]$ | $\sqrt{6}a$ |
    | $(111)$ | $[\bar{1}10]$ | $[\bar{1}\bar{1}2]$ | $\sqrt{2}a$ |
    | $(111)$ | $[1\bar{1}0]$ | $[11\bar{2}]$ | $\sqrt{2}a$ |

  * BCC
    | Plane miller index | Slip direction | Secondary direction | Default slip length |
    | :-------- | ----- | ----- | ---- |
    | $(001)$ | $[100]$ | $[010]$ | $a$ |
    | $(111)$ | $[\bar{1}10]$ | $[\bar{1}\bar{1}2]$ | $\frac{\sqrt{2}}{2}a$ |
    | $(110)$ | $[\bar{1}11]$ | $[00\bar{1}]$ | $\frac{\sqrt{3}}{2}a$ |
    | $(110)$ | $[1\bar{1}\bar{1}]$ | $[001]$ | $\frac{\sqrt{3}}{2}a$ |
    | $(112)$ | $[11\bar{1}]$ | $[\bar{1}10]$ | $\frac{\sqrt{3}}{2}a$ |
    | $(112)$ | $[\bar{1}\bar{1}1]$ | $[1\bar{1}0]$ | $\frac{\sqrt{3}}{2}a$ |
    | $(123)$ | $[11\bar{1}]$ | $[\bar{2}10]$ | $\frac{\sqrt{3}}{2}a$ |
    | $(123)$ | $[\bar{1}\bar{1}1]$ | $[2\bar{1}0]$ | $\frac{\sqrt{3}}{2}a$ |

  * HCP (Bravais lattice)
    | Plane miller index | Slip direction | Secondary direction | Default slip length |
    | :-------- | ----- | ----- | ---- |
    | $(0001)$ | $[2\bar{1}\bar{1}0]$ | $[01\bar{1}0]$ | $a$ |
    | $(0001)$ | $[1\bar{1}00]$ | $[01\bar{1}0]$ | $\sqrt{3}a$ |
    | $(0001)$ | $[10\bar{1}0]$ | $[01\bar{1}0]$ | $\sqrt{3}a$ |
    | $(01\bar{1}0)$ | $[\bar{2}110]$ | $[000\bar{1}]$ | $a$ |
    | $(01\bar{1}0)$ | $[0001]$ | $[\bar{2}110]$ | $c$ |
    | $(01\bar{1}0)$ | $[\bar{2}113]$ | $[000\bar{1}]$ | $\sqrt{a^2+c^2}$ |
    | $(\bar{1}2\bar{1}0)$ | $[\bar{1}010]$ | $[000\bar{1}]$ | $\sqrt{3}a$ |
    | $(\bar{1}2\bar{1}0)$ | $[0001]$ | $[\bar{1}010]$ | $c$ |
    | $(01\bar{1}1)$ | $[\bar{2}110]$ | $[\bar{1}2\bar{1}\bar{3}]$ | $a$ |
    | $(01\bar{1}1)$ | $[\bar{1}2\bar{1}\bar{3}]$ | $[2\bar{1}\bar{1}0]$ | $\sqrt{a^2+c^2}$ |
    | $(01\bar{1}1)$ | $[0\bar{1}12]$ | $[\bar{1}2\bar{1}\bar{3}]$ | $\sqrt{3a^2+4c^2}$ |
    | $(\bar{1}2\bar{1}2)$ | $[10\bar{1}0]$ | $[1\bar{2}13]$ | $\sqrt{3}a$ |
    | $(\bar{1}2\bar{1}2)$ | $[1\bar{2}13]$ | $[\bar{1}010]$ | $\sqrt{a^2+c^2}$ |

  The parameters related to Gamma line calculation are listed below:
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | plane_miller | Sequence[Int] | None | Miller index of the target slab |
    | slip_direction | Sequence[Int] | None | Miller index of slip (primary) direction of the slab |
    | slip_length | Int\|Float; Sequence[Int\|Float, Int\|Float, Int\|Float] | Refer to specific slip system as the table shows above, or 1 if not indicated | Slip length along the primary direction with default unit set by users or default setting. As for format of `[x, y, z]`, the length equals to $\sqrt{(xa)^2+(yb)^2+(zc)^2}$ |
    | plane_shift | Int\|Float | 0 | Shift of displacement plane with unit of lattice parameter **$c$** (positive for upwards). This allows creating slip plane within narrowly-spaced planes (see [ref](https://doi.org/10.1016/j.actamat.2016.10.042)). |
    | n_steps | Int | 10 | Number of steps to displace slab along the slip vector  |
    | vacuum_size | Int\|Float | 0 | Thickness of vacuum layer added around the slab with unit of Angstrom |
    | supercell_size | Sequence[Int, Int, Int] | [1, 1, 5] | Size of generated supercell based on slab structure |
    | add fix | Sequence[Str, Str, Str] | ["true","true","false"] | Whether to add fix position constraint along x, y and z direction during calculation |

    Here is an example:
    ```json
    {
  	  "type":            "gamma",
  	  "skip":            true,
        "plane_miller":    [0,0,1],
        "slip_direction":  [1,0,0],
  	  "hcp": {
          	"plane_miller":    [0,1,-1,1],
          	"slip_direction":  [-2,1,1,0],
            "slip_length":     [1,0,1],
            "plane_shift": 0.25
  		},
        "supercell_size":   [1,1,6],
        "vacuum_size": 10,
  	  "add_fix": ["true","true","false"],
        "n_steps":         10
  	}
    ```
    It should be noted that for various crystal structures, **users can further define slip parameters within the respective nested dictionaries, which will be prioritized for adoption**. In the example above, the slip system configuration within the "hcp" dictionary will be utilized.


  This function incorporates part of [dflow-phonon](https://github.com/Chengqian-Zhang/dflow-phonon) codes into APEX to make it more complete. This workflow is realized via [Phonopy](https://github.com/phonopy/phonopy), and [phonoLAMMPS](https://github.com/abelcarreras/phonolammps) for LAMMPS calculation. In APEX, this part includes the [SeeK-path](https://seekpath.readthedocs.io/en/latest/index.html) for automatically high-symmetry points searching for phonon calculation.

  **IMPORTANT!!**: it should be noted that the **phonoLAMMPS** package must be pre-installed in the user's `run_image` to ensure accurate `LAMMPS` calculations for the phonon spectra.

  Parameters related to `Phonon` calculations are listed below:
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | primitive | Bool | False | Whether to find primitive lattice structure for phonon calculation |
    | approach | String | "linear" | Specify phonon calculation method when using `VASP`; Two options: 1. "linear" for the *Linear Response Method*, and 2. "displacement" for the *Finite Displacement Method* |
    | supercell_size | Sequence[Int] | [2, 2, 2] | Size of supercell created for calculation |
    | MESH | Sequence[Int] | None | Specify the dimensions of the grid in reciprocal space for which the phonon frequencies and eigenvectors are to be calculated. For example: [8, 8, 8]; Refer to [Phonopy MESH](http://phonopy.github.io/phonopy/setting-tags.html#mesh-sampling-tags) |
    | PRIMITIVE_AXES | String | None | To define the basis vectors of a primitive cell in terms of the basis vectors of a conventional cell for input cell transformation. For example: "0.0 0.5 0.5 0.5 0.0 0.5 0.5 0.5 0.0"; Refer to [Phonopy PRIMITIVE_AXES](http://phonopy.github.io/phonopy/setting-tags.html#primitive-axes-or-primitive-axis) |
    | BAND | String | None | (Optional) Indicate band path in reciprocal space as format of [Phonopy BAND](http://phonopy.github.io/phonopy/setting-tags.html#band-and-band-points); For example: "0 0 0 1/2 0 1/2, 1/2 1/2 1 0 0 0 1/2 1/2 1/2". If not specified, the [seekpath](https://seekpath.readthedocs.io/en/latest/#) package will be adopted to automatically determine band path according to relaxed structure |
    | BAND_LABELS | String | None | (Optional) Indication of band path labels for report plot |
    | BAND_POINTS | Int | 51 | Number of sampling points including the path ends |
    | BAND_CONNECTION | Bool | True | With this option, band connections are estimated from eigenvectors and band structure is drawn considering band crossings. In sensitive cases, to obtain better band connections, it requires to increase number of points calculated in band segments by the `BAND_POINTS` tag |
    | seekpath_from_original | Bool | False | Whether to re-seek standard primitive cell for relaxed structure for band path via the seekpath package. If True: `seekpath.get_path_orig_cell` will be adopted, else: `seekpath.get_path`. Refer to [seekpath document](https://seekpath.readthedocs.io/en/latest/maindoc.html#k-point-path-for-non-standard-unit-cells) |
    | seekpath_param | Dict | None | (Optional) Other parameters to be specified for `seekpath.get_path` and `seekpath.get_path`. Refer to [seekpath document](https://seekpath.readthedocs.io/en/latest/maindoc.html#k-point-path-for-non-standard-unit-cells) |

  When utilizing `VASP`, you have **two** primary calculation methods: the **Linear Response Method** and the **Finite Displacement Method**.

  The **Linear Response Method** has an edge over the Finite Displacement Method in that it eliminates the need for creating super-cells, thereby offering computational efficiency in certain cases. Additionally, this method is particularly well-suited for systems with anomalous phonon dispersion (like systems with Kohn anomalies), as it can precisely calculate the phonons at the specified points.

  On the other hand, the advantage of **Finite Displacement Method** lies in its versatility; it functions as an add-on compatible with any code, including those beyond the scope of density functional theory. The only requirement is that the external code can compute forces. For instance, ABACUS may lack an implementation of the Linear Response Method, but can effectively utilize the Finite Displacement Method implemented in phonon calculations.




  APEX will execute a specific dflow workflow upon each invocation of the command in the format: `apex submit [-h] [-c [CONFIG]] [-w WORK [WORK ...]] [-d] [-s] [-f {relax,props,joint}] parameter [parameter ...]`. The type of workflow and calculation method will be automatically determined by APEX based on the parameter file provided by users. Additionally, users can specify the **workflow type**, **configuration JSON file**, and **work directory** through an optional argument (Run `apex submit -h` for further help). Here is an example to submit a `joint` workflow:
  ```shell
  apex submit param_relax.json param_props.json -c ./global_bohrium.json -w 'dp_demo_0?' 'eam_demo'
  ```
  if no config JSON (following `-c`) and work directory (following `-w`) is specified, `./global.json` and `./` will be passed as default values respectively.


  APEX supports several commonly used `dflow` inquiry and operation commands as listed below:
  - `list`: List all workflows information
  - `get`: Get detailed information of a workflow
  - `getsteps`: Get detailed steps information of a workflow
  - `getkeys`: Get keys of steps from a workflow
  - `delete`: Delete a workflow
  - `resubmit`: Resubmit a workflow
  - `retry`: Retry a workflow
  - `resume`: Resume a workflow
  - `stop`: Stop a workflow
  - `suspend`: Suspend a workflow
  - `terminate` Terminate a workflow

  Take `stop` as an example (usage: `apex stop [-h] [-i ID] [-w WORK] [-c [CONFIG]]`) user can refer to following three options:
  1. `apex stop`, as running at the target `work_dir`, and apex will inquiry workflow `ID` from `.workflow.log` file under the current path (`config.json` is the default config file)
  2. `apex stop -w ./EAM_Ti -c ./EAM_Ti/config.json` to indicate target `work_dir` to stop
  3. `apex stop -i relax-fe03j4 -c ./config_bohrium.json` to indicate specific workflow `ID` to stop



  APEX also provides a **single-step test mode**, which can run `Make` `run` and `Post` step individually under local enviornment. **Please note that one needs to run commands under the work directory in this mode.** User can invoke them by format of `apex run [-h] [-c [CONFIG]] parameter {make_relax,run_relax,post_relax,make_props,run_props,post_props}` (Run `apex run -h` for help). Here is a example to do relaxation in this mode:
  1. Firstly, generate relaxation tasks by
     ```shell
     apex do param_relax.json make_relax
     ```
  2. Then dispatch tasks by
     ```shell
     apex do param_relax.json run_relax -c machine.json
     ```
     where `machine.json` is a JSON file to define dispatch method, containing `machine`, `resources`, `task` dictionaries and `run_command` as listed in [DPDispatcher’s documentation](https://docs.deepmodeling.com/projects/dpdispatcher/en/latest/index.html). Here is an example to submit tasks to a remote HPC managed by [Slurm](https://slurm.schedmd.com):
     ```json
      {
        "run_command": "lmp -i in.lammps -v restart 0",
        "machine": {
            "batch_type": "Slurm",
            "context_type": "SSHContext",
            "local_root" : "./",
            "remote_root": "/hpc/home/hku/zyl/Downloads/remote_tasks",
            "remote_profile":{
                "hostname": "***.**.**.**",
                "username": "USERNAME",
                "password": "PASSWD",
                "port": 22,
                "timeout": 10
            }
        },
        "resources":{
            "number_node": 1,
            "cpu_per_node": 4,
            "gpu_per_node": 0,
            "queue_name": "apex_test",
            "group_size": 1,
            "module_list": ["deepmd-kit/2.1.0/cpu_binary_release"],
            "custom_flags": [
                  "#SBATCH --partition=xlong",
                  "#SBATCH --ntasks=1",
                  "#SBATCH --mem=10G",
                  "#SBATCH --nodes=1",
                  "#SBATCH --time=1-00:00:00"
            ]
        }
      }
     ```
  3. Finally, when all tasks are finished, post-process by
     ```shell
     apex do param_relax.json post_relax
     ```
  The property test can follow a similar approach.





  Sometimes when results auto-retrieving fails after workflows finish, you may try to retrieve completed test results manually by the `retrieve` command with a specific workflow `ID` (or target `work_dir`) provided:
  ```shell
  apex retrieve [-h] [-i ID] [-w WORK] [-c [CONFIG]]
  ```
  where the `WORK` defaults to be `./`, and the `CONFIG` JSON (default: `config.json`) is used to connect to the remote storage. The command usage to similar to [3.2.2. Workflow Inquiry \& Operations](#322-workflow-inquiry--operations)


  After completion of each workflow, the results and test parameters of corresponding property will be stored as `json` format automatically under respective work directory named as `all_result.json`. You can also do this manually to update this file based on the latest run by:

  ```shell
  apex archive [parameter …]
  ```
  Argument format of this sub-command is similar to that of `submit` command. Please use `apex archive -h` for complete usage introduction. It should be noticed that each `archive` command will only update property information of those identified as **active** according to the parameter files and indication provided similar to the `submit` mode.

  This mode can also archive results to **NoSQL** database. We currently support two types of database client: [MongoDB](https://www.mongodb.com/) and [DynamoDB](https://aws.amazon.com/cn/dynamodb/). Below shows global configuration parameters for two database archive:

    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | database_type | String | local | Database type, three choices available: `local` (only archive to local `all_result.json`), `mongodb` and `dynamodb`. One can also indicate this by `-d` within `archive` command |
    | archive_method | String | sync | Choose from `sync` and `record`. `sync` synchronizes and updates results into same item based on work directory id; `record` records each archived result into a new item with unique timestamp. One can also indicate this by `-m` within `archive` command |

    For `MongoDB`:
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | mongodb_host | String | localhost | `Mongodb` host |
    | mongodb_port | Int | 27017 | `Mongodb` port |
    | mongodb_database | String | apex_results | `Mongodb` database name |
    | mongodb_collection | String | apex_results | `Mongodb` collection name |
    | mongodb_config | Dict | None | Complete parameter dictionary for [MongoClient](https://www.mongodb.com/blog/post/introducing-mongoclient) |

    For `DynamoDB`:
    | Key words | Data structure | Default | Description |
    | :------------ | ----- | ----- | ------------------- |
    | dynamodb_table_name | String | apex_results | `Dynamodb` table name |
    | dynamodb_config | Dict | None | Complete parameter dictionary for [boto3 session](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html#boto3.session.Session.resource) |


  Note that this mode **only** runs on computer with **interactive UI** frontend.
  In this mode, APEX will create a comprehensive and interactive results visualization report according to `all_result.json` within indicated work directories. This is achieved through [Dash](https://dash.plotly.com) App. You can invoke the report app simply under target work directory by:
  ```shell
  apex report
  ```
  Or indicate multiple work directories or path of result file in `json` format by `-w` for cross-comparison. Here is an example:
  ```shell
  apex report -w DP/all_result.json ./MEAM_00*
  ```
  Once the report app is opened (or manully via http://127.0.0.1:8050/), users can select configurations and property types. Then the corresponding result plot and data table will be shown accordingly.
  **NOTE**:
  - If two Dash pages are automatically opened in your browser, you can close the first one.
  - If the clipboard buttons do not function well, try to reload the page once.
  - Do not over-refresh the page as duplicate errors may occur. Should this occur, stop the server and re-execute the apex report command.
    <div style="text-align: center;">
        <img src="./docs/images/reporter_ui.png" alt="Fig3" style="zoom: 50%;">
        <p style='font-size:1.0rem; font-weight:none'>Figure 3. Demonstration of APEX Results Visualization Report </p>
    </div>


pkgId: dd84007a77310fbd036d3ed164dfcda61ac733b113cdb4880e14656432a57ab8
name: python-apexmf
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: apexmf is a set of python modules for APEX-MODFLOW model evaluation and parameter estimation.
url: https://pypi.org/project/apexmf/
rpm_license: BSD License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apexmf-0.4.0-1.src.rpm
checksum_type: sha256
description:
  `apexmf` is a set of python modules for APEX-MODFLOW model (Bailey et al., 2021) parameter estimation and uncertainty analysis with the open-source suite PEST (Doherty 2010a and 2010b, and Doherty and other, 2010).
     >>> pip install apexmf
     from apexmf import apexmf_pst_utils
     >>> wd = "User-APEX-MODFLOW working directory"
     >>> APEX_wd = "User-APEX working directory"
     >>> apexmf_pst_utils.init_setup(wd, APEX_wd)
     'apex.parm.xlsx' file copied ... passed
     'beopest64.exe' file copied ... passed
     'i64pest.exe' file copied ... passed
     'i64pwtadj1.exe' file copied ... passed
     'forward_run.py' file copied ... passed


pkgId: 25afa36f90ebe214b70aa02a8eac2d08d6ccfa356046eb02e576e1ca7a77f74d
name: python-apexnova-stubs
arch: src
version: 1.2.172
epoch: 0
release: 1
summary: Python stubs generated from gRPC protobuf definitions for Apex Nova services.
url: https://github.com/apexnova-vc/proto
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apexnova-stubs-1.2.172-1.src.rpm
checksum_type: sha256
description:
  This repository contains Python stubs generated from gRPC protobuf definitions for Apex Nova services.



  The stubs are generated using `protoc` and the `grpc_tools` package, which provides the necessary tools to compile `.proto` files into Python code. These stubs include both the protocol buffer message classes and the gRPC service classes.


  The directory structure of this repository is as follows:

  ```
  python-stub/
  ├── build.gradle.kts
  ├── README.md
  ├── src/
  │   ├── apexnova/
  │   │   ├── __init__.py
  │   ├── ...
  ```



  To use the stubs in your Python project, you can install them from PyPI using the following command:

  ```
  pip install apexnova-stubs
  ```


pkgId: a0158f3f0b4b1fd4e2964b31ce75ba6ea865c07dd29275341f691713f3634e0f
name: python-apg-py
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: Python APG - an ABNF parser generator.
url: https://github.com/ldthomas/apg-py
rpm_license: BSD 2-Clause License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apg-py-1.0.3-1.src.rpm
checksum_type: sha256
description:
  <p>
  APG – an ABNF Parser Generator – generates parsers directly from a superset of
  <a href="https://www.rfc-editor.org/rfc/rfc5234"><b>ABNF</b></a>.
  A detailed description of ABNF and the superset (SABNF) is given
  <a href="https://github.com/ldthomas/apg-py/blob/main/docs/SABNF.md"><b>here</b></a>
  </p>



  <p>
  Python APG can be installed from either
  <a href="https://github.com/ldthomas/apg-py"><b>GitHub</b></a>
  or
  <a href="https://pypi.org/project/apg-py/"><b>PyPI</b></a>.
  The PyPI installation will provide the generator and parsing library.
  However, the GitHub installation additionally provides an extensive
  set of examples, a large set of tests and the full documentation.
  </p>



  <p>
  A quick start parser guide using the GitHub installation can be found
  <a href="https://github.com/ldthomas/apg-py/blob/main/docs/quick_github.md"><b>here</b></a>.
  </p>

  <p>
  A quick start parser guide using the PyPI installation can be found
  <a href="https://github.com/ldthomas/apg-py/blob/main/docs/quick_pip.md"><b>here</b></a>.
  </p>



  <p>
  The full documentation is in the code and in additional documentation files.
  It can be generated
  with <a href="https://www.doxygen.nl/"><b>doxygen</b></a>
  from the GitHub installation. For example, using the GitHub zip download
  and the Ubuntu Linux command line:
  <code>
  <pre>
  unzip apg-py-main.zip
  cd apg-py-main
  sudo apt install graphviz
  sudo apt install doxygen
  doxygen
  </pre>
  </code>
  The documentation home page will now be found in <code>html/index.html</code>.
  Or you can view it directly from the
  <a href="https://sabnf.com/docs/python/index.html"><b>APG website</b></a>.
  </p>


pkgId: 9d2f637e46a2aca5abd4a61241dbd30130b31f3b1f84ff25d5e0f6d9dd56a8ee
name: python-apgw
arch: src
version: 0.0.44
epoch: 0
release: 1
summary: A simple wrapper around asyncpg to make some common actions simpler.
url: https://gitlab.com/tcucco/apgw
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-apgw-0.0.44-1.src.rpm
checksum_type: sha256
description:
  apgw is a simple wrapper around the excellent asyncpg library. It is designed to make building
  certain types of simple queries very easy.

  Please note: documentation on this project is currently not provided



  `make` is the best way to interact with the project.



      make install



      make test



      make coverage


pkgId: ada9c940377d119a2254c1bc0b17d09439f29303a8f6760edec11171fb44fc33
name: python-aphos-openapi
arch: src
version: 2.5.3
epoch: 0
release: 1
summary: APhoS Python library for data representation
url: https://pypi.org/project/aphos-openapi/
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aphos-openapi-2.5.3-1.src.rpm
checksum_type: sha256
description:
  This is Amateur Photometric Survey (APhoS) client for web application.
  Contains documentation about modules, models and functions for working with astronomical data from APhoS database.
  Server is accessible from: https://aphos.cerit-sc.cz/
  Swagger UI (Interface for api of the server): https://aphos.cerit-sc.cz/swagger-ui/index.html
  Openapi json or yaml file (documentation of api): https://aphos.cerit-sc.cz/openapi




  Install: `pip install aphos-openapi`
  Upgrade: `pip install aphos-openapi --upgrade`

  (If you have pip3 instead of pip, just use pip3)


  References work only in github: https://github.com/pavel-kinc/aphos-client/blob/main/README.md
  * [Basic info](README.md#aphos-client-for-retrieving-data-in-python)
  * [Installation](README.md#installation)
  * [Requirements](README.md#requirements)
  * [Basic usage](README.md#usage-api-models)
  * [Coordinates usage](README.md#usage-coordinates)
  * [GraphData usage](README.md#usage-graphdata)
  * [Support](README.md#support)
  * [Functions](README.md#documentation-for-functions)
  * [Api models](README.md#documentation-for-models)




  * Python >=3.8,
  * 'urllib3'>=1.25.3,
  * 'python-dateutil',
  * 'matplotlib',
  * 'astropy'




  ```
  from aphos_openapi import aphos
  import datetime  # for setting apertures
  from pprint import pprint  # pretty print for objects

  def my_function():

      """
      Basic usage, info, get_objects_by_params, get_object
      """
      aphos.info()  # prints basic info about aphos_openapi package
      objects = aphos.get_objects_by_params(name="GK Cep") # gets objects which match the name
      if objects:
          print(objects[0].magnitude) # prints magnitude of first found object
      
      list_of_stars = aphos.get_objects_by_params()  # gets 100 space objects from database
      star = aphos.get_object("605-025126", "UCAC4")  # gets space object with fluxes

      """
      get_var_cmp_by_ids, set_var_cmp_apertures, resolve_name_aphos
      """
      if star is not None:
          comparison = aphos.get_var_cmp_by_ids(star.id, "604-024943", star.catalog, "UCAC4")
          pprint(comparison.variable)
          
          if comparison is not None:
              date = datetime.date(2022,1, 6)  # first day of night we want to change apertures
              aphos.set_var_cmp_apertures(comparison, date, 3, 3)
              
              aphos.set_var_cmp_apertures(comparison)  # back to auto apertures
              

      potential_stars = aphos.resolve_name_aphos("V* FU Aur")
      if potential_stars:
          star = potential_stars[0]
          print(f"{star.id} {star.catalog} {str(star.magnitude)}")


  if __name__ == '__main__':
      my_function()
  ```


  __More info about object in package.__

  ```
  from aphos_openapi import aphos
  from aphos_openapi.models.coordinates import Coordinates
  from astropy.coordinates import SkyCoord
  from pprint import pprint  # pretty print for objects

  """
  Coordinates can take astropy.coordinates SkyCoord or other strings format listed below.
  If units are present in string, unit will be ignored.
  Radius is float, and you can choose unit by 'm' or 's', otherwise it will be degrees.

  Coordinates below are more or less equal, more in class documentation.
  """
  coords1 = Coordinates("21h41m55.291s +71d18m41.12s", 8, radius_unit='m')
  coords2 = Coordinates("21 41 55.291 +71 18 41.12", 0.1333333)  # default unit for RA is hour
  coords3 = Coordinates(SkyCoord("21h41m55.291s +71d18m41.12s"), 0.1333333)
  coords4 = Coordinates("21.698691944444448h +71.31142223d", 0.1333333)
  coords5 = Coordinates("21:41:55.291 +71:18:41.12", 0.1333333)
  coords6 = Coordinates("325.48037916666664d +71.31142223d", 0.1333333)
  coords7 = Coordinates("325 28 49.365 +71 18 41.12", 8, 'd', 'm')

  space_objects = aphos.get_objects_by_params(coordinates=coords7)
  pprint(space_objects)
  ```


  __Main methods:__
  * constructor
  * to_file()
  * graph()
  * composite_graph()
  * phase_graph()

  __More info about methods in package.__

  ```
  from aphos_openapi import aphos
  from aphos_openapi.models.graph_data import GraphData
  from pprint import pprint  # pretty print for objects

  var_cmp = aphos.get_var_cmp_by_ids("605-025126", "604-024943")
  if var_cmp is not None:
      data = GraphData(var_cmp)  # create GraphData object from Comparison
      
      data.graph()  # matplotlib graph
      data.to_file("path/to/file.csv")  # saves data to file
  data_from_file = GraphData("path/to/file.csv")  # create GraphData from file
  pprint(f"{data_from_file.variable} {data_from_file.comparison}")
  pprint(data_from_file.data_list[0])  # print how 1 row of data looks like
  data_from_file.composite_graph()
  data_from_file.phase_graph(2455957.5, 1.209373)  # start of epoch and period
  ```



  pavelkinc230@gmail.com





  Get all available catalogs from APhoS.
  Returns: List of available catalogs (strings).
  <br/><br/>



  Get object from APhoS based on parameters.
  Returns: SpaceObjectWithFluxes or None if there is no such object.
  Params:
  &emsp;object_id - object id of the space object
  &emsp;catalog - catalog of the space object
  <br/><br/>


  Get space objects based on multiple parameters, where every can be None.
  Returns: List of space objects.
  Params:
  &emsp;object_id - object id of the space object
  &emsp;catalog - catalog of space objects
  &emsp;name - name of space objects
  &emsp;coordinates - coordinates
  &emsp;min_mag - minimum magnitude (0 and more)
  &emsp;max_mag - maximum magnitude (20 and less)
  <br/><br/>


  Get Comparison object of variable star (space object) and comparison star based on IDs.
  Returns: Data about objects and fluxes.
  Params:
  &emsp;variable_id - id of variable star
  &emsp;comparison_id - id of comparison star
  &emsp;var_catalog - catalog of variable star
  &emsp;cmp_catalog - catalog of comparison star
  <br/><br/>


  Get user by username.
  Returns: User (username and description).
  Params:
  &emsp;username - username of a user
  <br/><br/>


  Sets apertures based on night and desired indexes in comparison object and recalculates magnitude and deviation.
  Params:
  &emsp;comparison - ComparisonObject - object to which the apertures are set
  &emsp;night - night to which the apertures are changing (None is all nights)
  &emsp;var - target index of aperture to set (from variable star)
  &emsp;cmp - target index of aperture to set (from comparison star)
  <br/><br/>


  Resolve name based on astropy name resolver and tries to find equal potential objects in APhoS database (Cross-identification).
  Returns: List of space objects which are potentially equal to given name, from all catalogs.
  Params:
  &emsp;name - any name by which a space object can be resolved
  <br/><br/>


  !!! HIDDEN FOR NOW !!!

  Upload files as Anonymous user. Files are in format csv, with delimiter ';', generated from SIPS software. For authenticated upload use website -> info().
  Returns: List of tuple (file, success of upload of the given file, info about upload).
  Params:
  &emsp;path - path to file or directory with files
  <br/><br/>


  Prints useful documentation and info about this package.
  <br/>

  __Object's methods are documented in package and in usage.__


  (Api models only, mostly genereated)
  References work only in github: https://github.com/pavel-kinc/aphos-client/blob/main/README.md
   - [ComparisonObject](README.md#comparisonobject)
   - [ErrorMessage](README.md#errormessage)
   - [Flux](README.md#flux)
   - [FluxData](README.md#fluxdata)
   - [Night](README.md#night)
   - [PhotoProperties](README.md#photoproperties)
   - [SpaceObject](README.md#spaceobject)
   - [SpaceObjectWithFluxes](README.md#spaceobjectwithfluxes)
   - [User](README.md#user)




  | Name           | Type                                     | Description | Notes |
  |----------------|------------------------------------------|-------------|-------|
  | **variable**   | [**SpaceObject**](README.md#spaceobject) |             |       |
  | **comparison** | [**SpaceObject**](README.md#spaceobject) |             |       |
  | **data**       | [**[FluxData]**](README.md#fluxdata)     |             |       |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name        | Type    | Description | Notes      |
  |-------------|---------|-------------|------------|
  | **id**      | **str** |             | [optional] |
  | **message** | **str** |             | [optional] |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name              | Type                                             | Description | Notes |
  |-------------------|--------------------------------------------------|-------------|-------|
  | **right_asc**     | **str**                                          |             |       |
  | **declination**   | **str**                                          |             |       |
  | **added_by**      | **str**                                          |             |       |
  | **ap_auto**       | **float**                                        |             |       |
  | **apertures**     | **[float]**                                      |             |       |
  | **photo**         | [**PhotoProperties**](README.md#photoproperties) |             |       |
  | **ap_auto_dev**   | **float**                                        |             |       |
  | **aperture_devs** | **[float]**                                      |             |       |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name                  | Type                         | Description | Notes |
  |-----------------------|------------------------------|-------------|-------|
  | **right_asc**         | **str**                      |             |       |
  | **dec**               | **str**                      |             |       |
  | **ap_auto**           | **str**                      |             |       |
  | **ap_auto_dev**       | **float**                    |             |       |
  | **apertures**         | **[str]**                    |             |       |
  | **aperture_devs**     | **[float]**                  |             |       |
  | **magnitude**         | **float**                    |             |       |
  | **deviation**         | **float**                    |             |       |
  | **username**          | **str**                      |             |       |
  | **night**             | [**Night**](README.md#night) |             |       |
  | **exp_middle**        | **str**                      |             |       |
  | **cmp_ap_auto**       | **str**                      |             |       |
  | **cmp_ap_auto_dev**   | **float**                    |             |       |
  | **cmp_apertures**     | **[str]**                    |             |       |
  | **cmp_aperture_devs** | **[float]**                  |             |       |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name                         | Type    | Description | Notes |
  |------------------------------|---------|-------------|-------|
  | **first_date_of_the_night**  | **str** |             |       |
  | **second_date_of_the_night** | **str** |             |       |
  | **ap_to_be_used**            | **str** |             |       |
  | **cmp_ap_to_be_used**        | **str** |             |       |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name               | Type         | Description | Notes |
  |--------------------|--------------|-------------|-------|
  | **exposure_begin** | **datetime** |             |       |
  | **exposure_end**   | **datetime** |             |       |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name             | Type      | Description | Notes |
  |------------------|-----------|-------------|-------|
  | **id**           | **str**   |             |       |
  | **catalog**      | **str**   |             |       |
  | **name**         | **str**   |             |       |
  | **right_asc**    | **str**   |             |       |
  | **declination**  | **str**   |             |       |
  | **magnitude**    | **float** |             |       |
  | **fluxes_count** | **int**   |             |       |

  [[Back to Model list]](README.md#documentation-for-models)


  Extends SpaceObject by fluxes.


  | Name             | Type                         | Description                              | Notes |
  |------------------|------------------------------|------------------------------------------|-------|
  | **fluxes**       | [**[Flux]**](README.md#flux) | Additional field compared to SpaceObject |       |
  | **id**           | **str**                      |                                          |       |
  | **catalog**      | **str**                      |                                          |       |
  | **name**         | **str**                      |                                          |       |
  | **right_asc**    | **str**                      |                                          |       |
  | **declination**  | **str**                      |                                          |       |
  | **magnitude**    | **float**                    |                                          |       |
  | **fluxes_count** | **int**                      |                                          |       |

  [[Back to Model list]](README.md#documentation-for-models)




  | Name            | Type    | Description | Notes |
  |-----------------|---------|-------------|-------|
  | **username**    | **str** | Unique      |       |
  | **description** | **str** |             |       |

  [[Back to Model list]](README.md#documentation-for-models)


pkgId: 13e1c1e90d52ea2955f586ee23560491f35547ee46b15947a229a830f9760044
name: python-api-analytics
arch: src
version: 1.2.5
epoch: 0
release: 1
summary: Monitoring and analytics for Python API frameworks.
url: https://github.com/tom-draper/api-analytics
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-analytics-1.2.5-1.src.rpm
checksum_type: sha256
description:
  If you find value in my work consider supporting me.
  Buy Me a Coffee: https://www.buymeacoffee.com/tomdraper<br>
  PayPal: https://www.paypal.com/paypalme/tomdraper

rpm_license:
  MIT License  Copyright (c) 2023 Tom Draper  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: ea6c86031f105f554016b252b7f8cb5b9b1058e5f2e1d3e288e2337ada38ae0d
name: python-api-brasil
arch: src
version: 2.0.0
epoch: 0
release: 1
url: https://apibrasi.com.br
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-brasil-2.0.0-1.src.rpm
checksum_type: sha256
summary:
  Este SDK foi desenvolvido para simplificar e agilizar a integração com a plataforma APIBrasil, reduzindo o esforço de desenvolvimento e otimizando o tempo dos usuários.

description:
  | ✅ | WhatsAppApi                   | API do WhatsApp                         |   ✅                      | ✅
  | ✅ | SMSApi                        | API de SMS              .               |   ✅                      | ✅
  | ✅ | CNPJApi                       | API Dados CNPJ Receita.                 |   ✅                      | ✅
  | ✅ | CPFApi.                       | API Dados de CPF Serasa.                |   ✅                      | ✅
  | ✅ | CorreiosAPI.                  | API Busca encomendas Correios Brazil.   |   🚧                      | ✅
  | ✅ | CEPGeoLocationAPI             | API CEP Geolocation + IBGE Brazil.      |   ✅                      | ✅
  | ✅ | VehiclesApi                   | API Placa Dados.                        |   ✅                      | ✅
  | ✅ | VehiclesApi                   | API Placa FIPE.                         |   ✅                      | ✅

  1. Faça seu cadastro na plataforma -> https://apibrasil.com.br
  2. Obtenha suas credenciais -> https://plataforma.apibrasil.com.br/myaccount/credentials
      - Importante: Você pode colocar suas credenciais diretamente em código o que chamamos de hard-coded, porém nós recomendamos que você coloque suas credenciais em variáveis de ambiente ou serviços gerenciados específicos para secrets.
  2. Como Instalar
      * Usando pip
      ``` bash
      pip install api-brasil
      ```
      * Usando poetry
      ``` bash
      poetry add api-brasil
      ```


  ```python
  from api_brasil import APIBrasilClient, WhatsAppApi

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")


  whatsapp_api = WhatsAppApi(api_brasil_client=api_brasil_client device_token="your_device_token_here")


  whatsapp_api.to_number(phone_number="5511999999999")   # Número de telefone para enviar a mensagem
  response, status_code = whatsapp_api.send_message(message="Hello, estou integrado com sucesso com Api Brasil!")
  print(response, status_code)

  response, status_code = whatsapp_api.send_file(file_path="https://apibrasil.io/img/capa.png", file_description="Bem vindo a API Brasil")
  print(response, status_code)
  ```

  ```python
  from api_brasil import APIBrasilClient, VehiclesAPI
  from api_brasil.features.vehicles import Endpoints

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")


  vehicles_api = VehiclesApi(api_brasil_client=api_brasil_client, device_token="your_device_token_here")
  vehicles_api.set_plate(plate="ABC-1234")  # Placa do veículo
  response, status_code = vehicles_api.consulta(vechiles_api_endpoint=Endpoints.dados) # Consulta os dados do veículo
  print(response, status_code)
  ```

  ```python
  from api_brasil import APIBrasilClient, CNPJApi

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")


  cnpj_api = CNPJApi(api_brasil_client=api_brasil_client, device_token="your_device_token_here")
  cnpj_api.set_cnpj(cnpj="44.959.669/0001-80")  # CNPJ
  response, status_code = cnpj_api.consulta() # Consulta os dados do CNPJ
  print(response, status_code)
  ```

  ```python

  from api_brasil import APIBrasilClient, CorreiosAPI

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")

  correios_api = CorreiosAPI(api_brasil_client=api_brasil_client,
                             device_token="your_device_token")
  correios_api.set_track_code(track_code="PN123456789BR")  # Código de rastreamento
  response, status_code = correios_api.track() # Rastreia o objeto
  print(response, status_code)
  ```

  ```python

  from api_brasil import APIBrasilClient, CEPGeoLocationAPI

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")

  cep_geolocation_api = CEPGeoLocationAPI(api_brasil_client=api_brasil_client,
                             device_token="your_device_token")
  cep_geolocation_api.set_cep(cep="00000-000")  # CEP
  response, status_code = cep_geolocation_api.consulta() # Consulta a geolocalização do CEP
  print(response, status_code)
  ```

  ```python

  from api_brasil import APIBrasilClient, CPFApi

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")

  cpf_api = CPFApi(api_brasil_client=api_brasil_client,
                             device_token="your_device_token")
  cpf_api.set_cpf(cpf="00000000000")  # CPF
  response, status_code = cpf_api.consulta() # Consulta os dados do CPF
  print(response, status_code)
  ```

  ```python

  from api_brasil import APIBrasilClient, SMSApi

  api_brasil_client = APIBrasilClien(bearer_token="your_bearer_token_here")

  sms = SMSApi(api_brasil_client=api_brasil_client,
               device_token="your_device_token")
  sms.set_phone_number(number="5511900000000")  # Número de telefone
  response, status_code = sms.send(message="Hello, estou integrado com sucesso com Api Brasil!") # Envia a mensagem
  print(response, status_code)
  ```

  [![WhatsApp Group](https://img.shields.io/badge/WhatsApp-Group-25D366?logo=whatsapp)](https://chat.whatsapp.com/EeAWALQb6Ga5oeTbG7DD2k)
  [![Telegram Group](https://img.shields.io/badge/Telegram-Group-32AFED?logo=telegram)](https://t.me/apigratisoficial)


pkgId: 2e95c3b73ea971d48a11767d85dd552b45e3e106a4d101cf7a56714bed299111
name: python-api-canvas-lms
arch: src
version: 0.1.15
epoch: 0
release: 1
summary: Una biblioteca de Python para Canvas LMS
url: https://github.com/jgomezz/api_canvas_lms
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-canvas-lms-0.1.15-1.src.rpm
checksum_type: sha256
description:
  Una biblioteca para Canvas LMS



  ```
  |--api_canvas_lms/        <-- Archivos de python
  |     |--account.py
  |     |--adda.py
  |     |--base.py
  |     |--course.py
  |     |--discussion_topic.py
  |     |--enrollment.py
  |     |--module.py
  |     |--mvc.py
  |     |--user.py
  |     |--utils.py
  |
  |--setup.py               <-- Define el Python build
  ```



  Un ejemplo de como usar la biblioteca

  ```
  import api_canvas_lms.adda as adda
  ```

  ```

  if __name__ == "__main__":

      course_id = "your id course of Canvas"
      TOKEN = "your token"
      API_REST_PATH = "your URL"

      
      print("Start process ... !")
      mccsa = adda.BasicModuleCourseCanvasADDA(course_id, TOKEN, API_REST_PATH)
      data = mccsa.is_valid_structure()
      print(data)
      
  ```


pkgId: cb21bed7b3aff58d88e3c3609fb3e712ee345a31b51fa60c5e1378dc3decd82e
name: python-api-chatbots
arch: src
version: 0.1.4
epoch: 0
release: 1
summary: Facilitates interaction with API LLMs such as ChatGPT, Claude, and Gemini
url: https://pypi.org/project/api-chatbots/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-chatbots-0.1.4-1.src.rpm
checksum_type: sha256
description:
  A Python library that simplifies interactions with various Large Language Model APIs including ChatGPT, Claude, and Gemini.



  The library maintains conversation history automatically. Each interaction is stored in the context:

  ```python
  from api_chatbots import ChatGPT


  chatbot = ChatGPT(api_key="your_api_key")


  chatbot.add_user_message("Hello, how are you?")


  chatbot.respond()


  print(chatbot.get_latest_message())
  ```


  - ChatGPT
  - Claude


pkgId: da96cbd7e0922fff9201a56555ca83ebc8fa8526747c957396d7b633d03ed707
name: python-api-client
arch: src
version: 1.3.1
epoch: 0
release: 1
summary: Separate the high level client implementation from the underlying CRUD.
url: https://github.com/MikeWooster/api-client
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-client-1.3.1-1.src.rpm
checksum_type: sha256
description:
  [![Unit Tests](https://github.com/MikeWooster/api-client/actions/workflows/test.yml/badge.svg)](https://github.com/MikeWooster/api-client/actions/workflows/test.yml)



  A client for communicating with an api should be a clean abstraction
  over the third part api you are communicating with. It should be easy to
  understand and have the sole responsibility of calling the endpoints and
  returning data.

  To achieve this, `APIClient` takes care of the other (often duplicated)
  responsibilities, such as authentication and response handling, moving
  that code away from the clean abstraction you have designed.


  1. [Installation](#Installation)
  2. [Client in action](#Usage)
  3. [Adding retries to requests](#Retrying)
  4. [Working with paginated responses](#Pagination)
  5. [Authenticating your requests](#Authentication-Methods)
  6. [Handling the formats of your responses](#Response-Handlers)
  7. [Correctly encoding your outbound request data](#Request-Formatters)
  8. [Handling bad requests and responses](#Exceptions)
  9. [Endpoints as code](#Endpoints)
  10. [Extensions](#Extensions)



  ```bash
  pip install api-client
  ```




  ```python
  from apiclient import APIClient

  class MyClient(APIClient):

      def list_customers(self):
          url = "http://example.com/customers"
          return self.get(url)

      def add_customer(self, customer_info):
          url = "http://example.com/customers"
          return self.post(url, data=customer_info)

  >>> client = MyClient()
  >>> client.add_customer({"name": "John Smith", "age": 28})
  >>> client.list_customers()
  [
      ...,
      {"name": "John Smith", "age": 28},
  ]
  ```
  The `APIClient` exposes a number of predefined methods that you can call
  This example uses `get` to perform a GET request on an endpoint.
  Other methods include: `post`, `put`, `patch` and `delete`. More
  information on these methods is documented in the [Interface](#APIClient-Interface).


  For a more complex use case example, see: [Extended example](#Extended-Example)



  To add some robustness to your client, the power of [tenacity](https://github.com/jd/tenacity)
  has been harnessed to add a `@retry_request` decorator to the `apiclient` toolkit.

  This will retry any request which responds with a 5xx status_code (which is normally safe
  to do as this indicates something went wrong when trying to make the request), or when an
  `UnexpectedError` occurs when attempting to establish the connection.

  `@retry_request` has been configured to retry for a maximum of 5 minutes, with an exponential
  backoff strategy.  For more complicated uses, the user can use tenacity themselves to create
  their own custom decorator.

  Usage:

  ```python
  from apiclient import retry_request

  class MyClient(APIClient):

      @retry_request
      def retry_enabled_method():
          ...

  ```

  For more complex use cases, you can build your own retry decorator using
  tenacity along with the custom retry strategy.

  For example, you can build a retry decorator that retries `APIRequestError`
  which waits for 2 seconds between retries and gives up after 5 attempts.

  ```python
  import tenacity
  from apiclient.retrying import retry_if_api_request_error

  retry_decorator = tenacity.retry(
      retry=retry_if_api_request_error(),
      wait=tenacity.wait_fixed(2),
      stop=tenacity.stop_after_attempt(5),
      reraise=True,
  )
  ```

  Or you can build a decorator that will retry only on specific status
  codes (following a failure).

  ```python
  retry_decorator = tenacity.retry(
      retry=retry_if_api_request_error(status_codes=[500, 501, 503]),
      wait=tenacity.wait_fixed(2),
      stop=tenacity.stop_after_attempt(5),
      reraise=True,
  )
  ```




  In order to support contacting pages that respond with multiple pages of data when making get requests,
  add a `@paginated` decorator to your client method.  `@paginated` can paginate the requests either where
  the pages are specified in the query parameters, or by modifying the url.

  Usage is simple in both cases; paginator decorators take a Callable with two required arguments:
  - `by_query_params` -> callable takes `response` and `previous_page_params`.
  - `by_url` -> callable takes `respones` and `previous_page_url`.
  The callable will need to return either the params in the case of `by_query_params`, or a new url in the
  case of `by_url`.
  If the response is the last page, the function should return None.

  Usage:

  ```python
  from apiclient import paginated


  def next_page_by_params(response, previous_page_params):
      
      
      return {"next": response["pages"]["next"]}


  def next_page_by_url(response, previous_page_url):
      
      
      return response["pages"]["next"]["url"]


  class MyClient(APIClient):

      @paginated(by_query_params=next_page_by_params)
      def paginated_example_one():
          ...

      @paginated(by_url=next_page_by_url)
      def paginated_example_two():
          ...

  ```



  Authentication methods provide a way in which you can customize the
  client with various authentication schemes through dependency injection,
  meaning you can change the behaviour of the client without changing the
  underlying implementation.

  The apiclient supports the following authentication methods, by specifying
  the initialized class on initialization of the client, as follows:
  ```python
  client = ClientImplementation(
     authentication_method=<AuthenticationMethodClass>(),
     response_handler=...,
     request_formatter=...,
  )
  ```


  This authentication method simply does not add anything to the client,
  allowing the api to contact APIs that do not enforce any authentication.

  Example:
  ```python
  client = ClientImplementation(
     authentication_method=NoAuthentication(),
     response_handler=...,
     request_formatter=...,
  )
  ```


  This authentication method adds the relevant parameter and token to the
  client query parameters.  Usage is as follows:

  ```python
  client = ClientImplementation(
      authentication_method=QueryParameterAuthentication(parameter="apikey", token="secret_token"),
      response_handler=...,
      request_formatter=...,
  )
  ```
  Example. Contacting a url with the following data
  ```
  http://api.example.com/users?age=27
  ```
  Will add the authentication parameters to the outgoing request:
  ```
  http://api.example.com/users?age=27&apikey=secret_token
  ```


  This authentication method adds the relevant authorization header to
  the outgoing request.  Usage is as follows:
  ```python
  client = ClientImplementation(
      authentication_method=HeaderAuthentication(token="secret_value"),
      response_handler=...,
      request_formatter=...,
  )


  {"Authorization": "Bearer secret_value"}
  ```
  The `Authorization` parameter and `Bearer` scheme can be adjusted by
  specifying on method initialization.
  ```python
  authentication_method=HeaderAuthentication(
     token="secret_value"
     parameter="apikey",
     scheme="Token",
  )


  {"apikey": "Token secret_value"}
  ```

  Or alternatively, when APIs do not require a scheme to be set, you can
  specify it as a value that evaluates to False to remove the scheme from
  the header:
  ```python
  authentication_method=HeaderAuthentication(
     token="secret_value"
     parameter="token",
     scheme=None,
  )


  {"token": "secret_value"}
  ```

  Additional header values can be passed in as a dict here when API's require more than one
  header to authenticate:
  ```python
  authentication_method=HeaderAuthentication(
     token="secret_value"
     parameter="token",
     scheme=None,
     extra={"more": "another_secret"}
  )


  {"token": "secret_value", "more": "another_secret"}
  ```


  This authentication method enables specifying a username and password to APIs
  that require such.
  ```python
  client = ClientImplementation(
      authentication_method=BasicAuthentication(username="foo", password="secret_value"),
      response_handler=...,
      request_formatter=...,
  )
  ```


  This authentication method allows a user to specify a url which is used
  to authenticate an initial request, made at APIClient initialization,
  with the authorization tokens then persisted for the duration of the
  client instance in cookie storage.

  These cookies use the `http.cookiejar.CookieJar()` and are set on the
  session so that all future requests contain these cookies.

  As the method of authentication at the endpoint is not standardised
  across API's, the authentication method can be customized using one of
  the already defined authentication methods; `QueryParameterAuthentication`,
  `HeaderAuthentication`, `BasicAuthentication`.

  ```python
  client = ClientImplementation(
      authentication_method=(
          CookieAuthentication(
              auth_url="https://example.com/authenticate",
              authentication=HeaderAuthentication("1234-secret-key"),
          ),
      response_handler=...,
      request_formatter=...,
  )
  ```



  Response handlers provide a standard way of handling the final response
  following a successful request to the API.  These must inherit from
  `BaseResponseHandler` and implement the `get_request_data()` method which
  will take the `requests.Response` object and parse the data accordingly.

  The apiclient supports the following response handlers, by specifying
  the class on initialization of the client as follows:

  The response handler can be omitted, in which case no formatting is applied to the
  outgoing data.

  ```python
  client = ClientImplementation(
     authentication_method=...,
     response_handler=<ResponseHandlerClass>,
     request_formatter=...,
  )
  ```


  Handler that simply returns the original `Response` object with no
  alteration.

  Example:
  ```python
  client = ClientImplementation(
      authentication_method=...,
      response_handler=RequestsResponseHandler,
      request_formatter=...,
  )
  ```


  Handler that parses the response data to `json` and returns the dictionary.
  If an error occurs trying to parse to json then a `UnexpectedError`
  will be raised.

  Example:
  ```python
  client = ClientImplementation(
      authentication_method=...,
      response_handler=JsonResponseHandler,
      request_formatter=...,
  )
  ```


  Handler that parses the response data to an `xml.etree.ElementTree.Element`.
  If an error occurs trying to parse to xml then a `UnexpectedError`
  will be raised.

  Example:
  ```python
  client = ClientImplementation(
      authentication_method=...,
      response_handler=XmlResponseHandler,
      request_formatter=...,
  )
  ```



  Request formatters provide a way in which the outgoing request data can
  be encoded before being sent, and to set the headers appropriately.

  These must inherit from `BaseRequestFormatter` and implement the `format()`
  method which will take the outgoing `data` object and format accordingly
  before making the request.

  The apiclient supports the following request formatters, by specifying
  the class on initialization of the client as follows:

  ```python
  client = ClientImplementation(
     authentication_method=...,
     response_handler=...,
     request_formatter=<RequestFormatterClass>,
  )
  ```



  Formatter that converts the data into a json format and adds the
  `application/json` Content-type header to the outgoing requests.


  Example:
  ```python
  client = ClientImplementation(
      authentication_method=...,
      response_handler=...,
      request_formatter=JsonRequestFormatter,
  )
  ```



  The exception handling for `api-client` has been designed in a way so that all exceptions inherit from
  one base exception type: `APIClientError`.  From there, the exceptions have been broken down into the
  following categories:



  Something went wrong when trying to parse the successful response into the defined format.  This could be due
  to a misuse of the ResponseHandler, i.e. configuring the client with an `XmlResponseHandler` instead of
  a `JsonResponseHandler`



  Something went wrong when making the request.  These are broken down further into the following categories to provide
  greater granularity and control.


  A redirection status code (3xx) was returned as a final code when making the
  request. This means that no data can be returned to the client as we could
  not find the requested resource as it had moved.



  A clienterror status code (4xx) was returned when contacting the API. The most common cause of
  these errors is misuse of the client, i.e. sending bad data to the API.



  The API was unreachable when making the request.  I.e. a 5xx status code.



  An unexpected error occurred when using the client.  This will typically happen when attempting
  to make the request, for example, the client never receives a response.  It can also occur to
  unexpected status codes (>= 600).



  Error handlers allow you to customize the way request errors are handled in the application.

  Create a new error handler, extending `BaseErrorHandler` and implement the `get_exception`
  static method.

  Pass the custom error handler into your client upon initialization.

  Example:
  ```python
  from apiclient.error_handlers import BaseErrorHandler
  from apiclient import exceptions
  from apiclient.response import Response

  class MyErrorHandler(BaseErrorHandler):

      @staticmethod
      def get_exception(response: Response) -> exceptions.APIRequestError:
          """Parses client errors to extract bad request reasons."""
          if 400 <= response.get_status_code() < 500:
              json = response.get_json()
              return exceptions.ClientError(json["error"]["reason"])

          return exceptions.APIRequestError("something went wrong")

  ```
  In the above example, you will notice that we are utilising an internal
  `Response` object. This has been designed to abstract away the underlying response
  returned from whatever strategy that you are using. The `Response` contains the following
  methods:

  * `get_original`: returns the underlying response object. This has been implemented
  for convenience and shouldn't be relied on.
  * `get_status_code`: returns the integer status code.
  * `get_raw_data`: returns the textual data from the response.
  * `get_json`: should return the json from the response.
  * `get_status_reason`: returns the reason for any HTTP error code.
  * `get_requested_url`: returns the url that the client was requesting.



  The design of the client provides a stub of a client, exposing the required methods; `get`,
  `post`, etc. And this then calls the implemented methods of a request strategy.

  This allows us to swap in/out strategies when needed. I.e. you can write your own
  strategy that implements a different library (e.g. `urllib`). Or you could pass in a
  mock strategy for testing purposes.

  Example strategy for testing:
  ```python
  from unittest.mock import Mock

  from apiclient import APIClient
  from apiclient.request_strategies import BaseRequestStrategy

  def test_get_method():
      """test that the get method is called on the underlying strategy.

      This does not execute any external HTTP call.
      """
      mock_strategy = Mock(spec=BaseRequestStrategy)
      client = APIClient(request_strategy=mock_strategy)
      client.get("http://google.com")
      mock_strategy.get.assert_called_with("http://google.com", params=None)
  ```



  The apiclient also provides a convenient way of defining url endpoints with
  use of the `@endpoint` decorator.  In order to decorate a class with `@endpoint`
  the decorated class must define a `base_url` attribute along with the required
  resources.  The decorator will combine the base_url with the resource.

  Example:

  ```python
  from apiclient import endpoint

  @endpoint(base_url="http://foo.com")
  class Endpoint:
      resource = "search"

  >>> Endpoint.resource
  "http://foo.com/search"
  ```





  [api-client-jsonmarshal](https://github.com/MikeWooster/api-client-jsonmarshal): automatically
  marshal to/from JSON into plain python dataclasses. Full usage examples can be found in the extensions home page.



  [api-client-pydantic](https://github.com/mom1/api-client-pydantic): validate request data and converting json straight
  to pydantic class.



  ```python
  from apiclient import (
      APIClient,
      endpoint,
      paginated,
      retry_request,
      HeaderAuthentication,
      JsonResponseHandler,
      JsonRequestFormatter,
  )
  from apiclient.exceptions import APIClientError


  @endpoint(base_url="https://jsonplaceholder.typicode.com")
  class Endpoint:
      todos = "todos"
      todo = "todos/{id}"


  def get_next_page(response):
      return {
          "limit": response["limit"],
          "offset": response["offset"] + response["limit"],
      }



  class JSONPlaceholderClient(APIClient):

      @paginated(by_query_params=get_next_page)
      def get_all_todos(self) -> dict:
          return self.get(Endpoint.todos)

      @retry_request
      def get_todo(self, todo_id: int) -> dict:
          url = Endpoint.todo.format(id=todo_id)
          return self.get(url)




  >>> client = JSONPlaceholderClient(
      authentication_method=HeaderAuthentication(token="<secret_value>"),
      response_handler=JsonResponseHandler,
      request_formatter=JsonRequestFormatter,
  )



  >>> client.get_all_todos()
  [
      {
          'userId': 1,
          'id': 1,
          'title': 'delectus aut autem',
          'completed': False
      },
      ...,
      {
          'userId': 10,
          'id': 200,
          'title': 'ipsam aperiam voluptates qui',
          'completed': False
      }
  ]


  >>> client.get_todo(45)
  {
      'userId': 3,
      'id': 45,
      'title': 'velit soluta adipisci molestias reiciendis harum',
      'completed': False
  }




  >>> client.get_todo(450)


  >>> try:
  ...     client.get_todo(450)
  ... except APIClientError:
  ...     print("All client exceptions inherit from APIClientError")
  "All client exceptions inherit from APIClientError"

  ```


  The `APIClient` provides the following public interface:
  * `post(self, endpoint: str, data: dict, params: OptionalDict = None)`

     Delegate to POST method to send data and return response from endpoint.

  * `get(endpoint: str, params: OptionalDict = None)`

     Delegate to GET method to get response from endpoint.

  * `put(endpoint: str, data: dict, params: OptionalDict = None)`

     Delegate to PUT method to send and overwrite data and return response from endpoint.

  * `patch(endpoint: str, data: dict, params: OptionalDict = None)`

     Delegate to PATCH method to send and update data and return response from endpoint

  * `delete(endpoint: str, params: OptionalDict = None)`

     Delegate to DELETE method to remove resource located at endpoint.

  * `get_request_timeout() -> float`

     By default, all requests have been set to have a default timeout of 10.0 s.  This
     is to avoid the request waiting forever for a response, and is recommended
     to always be set to a value in production applications.  It is however possible to
     override this method to return the timeout required by your application.



  Many thanks to [JetBrains](https://www.jetbrains.com/?from=api-client) for supplying me with a license to use their product in the development
  of this tool.

  ![JetBrains](readme-data/jetbrains.svg)


pkgId: 467c63976d243f8eaddce192bd38c9613878b08ea70ecd0b781a1f797bfd7363
name: python-api-client-lnx-edge
arch: src
version: 0.3.6
epoch: 0
release: 1
summary: Client for the LNX Edge API
url: https://github.com/Lnmix/edge_api_client
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-client-lnx-edge-0.3.6-1.src.rpm
checksum_type: sha256
description:
  When requesting a report:
    - Pass _date_ (YYYY-MM-DD) strings instead of _datetime_ strings (YYYY-MM-DDTHH:MM:SS.sss) to the `dateRange` field.  # TODO FIX THIS
    - Timezone should _always_ be specified in the request body. `EdgeAPI._get_report(...)` defaults to


pkgId: 7514a35508dd0d379b7f9bef35cafc24fb9fbf9da714ed3f2f2860439f84581b
name: python-api-client-lnx-edge
arch: src
version: 0.3.7
epoch: 0
release: 1
summary: Client for the LNX Edge API
url: https://github.com/Lnmix/edge_api_client
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-client-lnx-edge-0.3.7-1.src.rpm
checksum_type: sha256
description:
  Install using pip:
  ```shell
  pip install api-client-lnx-edge
  ```
  Set the following environment variables:
  - `EDGE_API_KEY`: your production API Key (will be looked up automatically on init)
  - `EDGE_STAGING_API_KEY`: your staging API Key (also will be looked up automatically on init, requires the use of the `staging=True` flag. see below)
  Then you're off:
  ```python

  from edge_api_client import EdgeAPI

  edge = EdgeAPI()  # uses the environment variable `EDGE_API_KEY`

  edge = EdgeAPI(api_key='XXX')  # try not to do this, but if you have to...

  edge = EdgeAPI(staging=True)  # uses the environment variable `EDGE_STAGING_API_KEY`, targets the staging backend

  edge = EdgeAPI(api_key='XXX', staging=True)  # provide a staging API key and target staging backend

  resp = edge.get_offers()
  ```

  When requesting a report:
    - Pass _date_ (YYYY-MM-DD) strings instead of _datetime_ strings (YYYY-MM-DDTHH:MM:SS.sss) to the `dateRange` field.  # TODO FIX THIS
    - Timezone should _always_ be specified in the request body. `EdgeAPI._get_report(...)` defaults to


pkgId: 05c30609abb6eaf6b8f6778e852659c0ea24725d95fc54cad23cda9da0d39267
name: python-api-client-pydantic
arch: src
version: 3.0.1
epoch: 0
release: 1
summary: API Client extension for validate and transform requests / responses using pydantic.
url: https://github.com/mom1/api-client-pydantic
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-client-pydantic-3.0.1-1.src.rpm
checksum_type: sha256
description:
  ![GitHub issues](https://img.shields.io/github/issues/mom1/api-client-pydantic.svg)
  ![GitHub stars](https://img.shields.io/github/stars/mom1/api-client-pydantic.svg)
  ![GitHub Release Date](https://img.shields.io/github/release-date/mom1/api-client-pydantic.svg)
  ![GitHub commits since latest release](https://img.shields.io/github/commits-since/mom1/api-client-pydantic/latest.svg)
  ![GitHub last commit](https://img.shields.io/github/last-commit/mom1/api-client-pydantic.svg)
  [![GitHub license](https://img.shields.io/github/license/mom1/api-client-pydantic)](https://github.com/mom1/api-client-pydantic/blob/master/LICENSE)

  [![PyPI](https://img.shields.io/pypi/v/api-client-pydantic.svg)](https://pypi.python.org/pypi/api-client-pydantic)
  [![PyPI](https://img.shields.io/pypi/pyversions/api-client-pydantic.svg)]()
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/api-client-pydantic.svg?label=pip%20installs&logo=python)

  <a href="https://gitmoji.dev"><img src="https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg" alt="Gitmoji"></a>
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)





  ```bash
  pip install api-client-pydantic
  ```



  The following decorators have been provided to validate request data and converting json straight to pydantic class.

  ```python
  from apiclient_pydantic import serialize, serialize_all_methods



  @serialize(config: Optional[ConfigDict] = None, validate_return: bool = True, response: Optional[Type[BaseModel]] = None)


  @serialize_all_methods(config: Optional[ConfigDict] = None)
  ```

  Usage:

  1. Define the schema for your api in pydantic classes.
      ```python
      from pydantic import BaseModel, Field


      class Account(BaseModel):
          account_number: int = Field(alias='accountNumber')
          sort_code: int = Field(alias='sortCode')
          date_opened: datetime = Field(alias='dateOpened')
      ```

  2. Add the `@serialize` decorator to the api client method to transform the response
     directly into your defined schema.
     ```python
      @serialize(response=List[Account])
      def get_accounts():
          ...
      
      @serialize
      def get_accounts() -> List[Account]:
          ...
      ```
  3. Add the `@serialize` decorator to the api client method to translate the incoming kwargs
     into the required dict or instance for the endpoint:
     ```python
      from apiclient_pydantic import ModelDumped

      @serialize
      def create_account(data: AccountHolder):
          
          ...

      create_account(data={'last_name' : 'Smith','first_name' : 'John'})
      

      @serialize
      def create_account(data: ModelDumped[AccountHolder]):
          
          ...

      create_account(data={'last_name' : 'Smith','first_name' : 'John'})
      
      ```
  4. For more convenient use, you can wrap all APIClient methods with `@serialize_all_methods`.
     ```python
      from apiclient import APIClient
      from apiclient_pydantic import serialize_all_methods
      from typing import List

      from .models import Account, AccountHolder


      @serialize_all_methods
      class MyApiClient(APIClient):
          def decorated_func(self, data: Account) -> Account:
              ...

          def decorated_func_holder(self, data: AccountHolder) -> List[Account]:
              ...
      ```





  This code generator creates a [ApiClient](https://github.com/MikeWooster/api-client) app from an openapi file.

  [apiclient-pydantic-generator](https://github.com/mom1/apiclient-pydantic-generator)


pkgId: 3364c31a083d5aea642ae4e03c9f45cf4e06db265b9f1b731c53899f84d57d05
name: python-api-console-solver
arch: src
version: 0.0.27
epoch: 0
release: 1
summary: Wrapper oficial da Plataforma Solver
url: https://pypi.org/project/api-console-solver/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-console-solver-0.0.27-1.src.rpm
checksum_type: sha256
description:
  O primeiro passo Ã© ter o cÃ³digo de sua biblioteca separado em uma pasta



  *   meu\_pacote/ # Pasta do projeto
      *   codigos\_da\_biblioteca/ # DiretÃ³rio onde deve ficar os cÃ³digos de sua biblioteca
      *   LICENCE # Um arquivo com a licenÃ§a da sua lib
      *   [README.MD](http://README.MD) # Uma descriÃ§Ã£o do projeto
      *   [setup.py](http://setup.py) # CÃ³digo Python responsÃ¡vel pelo empacotamento



  Adicione uma licenÃ§a

  ```plain
  The MIT License (MIT)

  Copyright (c) [year] [fullname]

  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
  the Software without restriction, including without limitation the rights to
  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  the Software, and to permit persons to whom the Software is furnished to do so,
  subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  ```



  Adicione um readme

  ```markdown

  ```



  Instale a lib setuptools

  ```plain
  pip install setuptools
  ```



  Crie o [setup.py](http://setup.py)

  ```plain
  from setuptools import setup

  with open("README.md", "r") as arq:
      readme = arq.read()

  setup(name='wrapper-panda-video',
      version='0.0.1',
      license='MIT License',
      author='Caio Sampaio',
      long_description=readme,
      long_description_content_type="text/markdown",
      author_email='caio@pythonando.com.br',
      keywords='panda video',
      description=u'Wrapper nÃ£o oficial do Panda Video',
      packages=['panda_video'],
      install_requires=['requests'],)
  ```



  Execute o comando

  ```plain
  python setup.py sdist
  ```



  Instale o twine para fazer o upload para o pypi

  ```plain
  pip install twine
  ```



  Crie uma conta no pypi



  Execute o comando para criar um repositÃ³rio de teste

  ```plain
  twine upload --repository-url https://test.pypi.org/legacy/ dist/*
  ```



  Ou para criar um repositÃ³rio oficial:

  ```plain
  twine upload dist/*
  ```


pkgId: 6af7290692a3a2183a4a56f77a501dc1036746a163bcf753e4529ea56aa28555
name: python-api-display-purposes
arch: src
version: 0.0.3
epoch: 0
release: 1
summary: python wrapper for displaypurposes.com's api
url: https://github.com/KevinRNelson/displaypurposes
rpm_license: GNU General Public License v3 or later (GPLv3+)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-display-purposes-0.0.3-1.src.rpm
checksum_type: sha256
description:
  DisplayPurposes is a Python library for programmatically interacting with the website https://displaypurposes.com



  Use the package manager [pip](https://pip.pypa.io/en/stable/) to install displaypurposes

  ```bash
  pip install api-display-purposes
  ```



  ```python
  from apidisplaypurposes import displaypurposes


  displaypurposes.tag('happy')

  displaypurposes.tag('happy', limit=10)

  displaypurposes.tag('happy', limit=20, browser='firefox')


  displaypurposes.graph('happy')

  displaypurposes.graph('happy', browser='firefox')


  displaypurposes.map(-118.77636909484865,
                      33.23850805662313,
                      -117.04052925109865,
                      35.10400554120783,
                      zoom=14,
                      limit=20)

  displaypurposes.map(-118.77636909484865,
                      33.23850805662313,
                      -117.04052925109865,
                      35.10400554120783,
                      zoom=14,
                      limit=20,
                      browser='chrome')
  ```



  Of course this project could not exist without the work of the makers of https://displaypurposes.com. Thank you for the work you put into this useful tool.


  [GNU](https://choosealicense.com/licenses/gpl-3.0/)


pkgId: f6ec365143fb63f4a803a03e24f219dfae1fac5b5382b9658ed91204b1886019
name: python-api-endpoint-manager
arch: src
version: 0.0.12
epoch: 0
release: 1
summary: This library contains classes to simplify the process of Flask API end points definition
url: https://github.com/Quakingaspen-codehub/api_endpoint_manager
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-endpoint-manager-0.0.12-1.src.rpm
checksum_type: sha256
description:
  <h6 align="left">
      <img src="https://cdn.sealr.app/quaking+aspen+logo+teal+full-02.png"  />
  </h6>


  [Introduction](#Introduction)\
  [Getting Started](#Started)\
  [Contributors](#Contributors)\
  [License](#License)
  <h2 id="Introduction">Introduction</h2>
  This library contains classes to simplify the process of Flask API end points definition

  <h2 id="Started">Getting Started</h2>
  In order to install, open the command prompt and type ✌️:

  ```
  pip install api_endpoint_manager
  ```



  <h2 id="">Contributors</h2>

  This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
  <a href="https://github.com/Quakingaspen-codehub/api_endpoint_manager/graphs/contributors">
  ""
  </a>

  <h2 id="License">License</h2>

  This library is licensed under the MIT License - see the [LICENSE.md](LICENSE) file for details.


pkgId: 947e2b2c7e9db3b9364b987a7ab8f478607a4714aeb868b0ff26f78ba088b739
name: python-api-foundry
arch: src
version: 0.1.16
epoch: 0
release: 1
url: https://pypi.org/project/api-foundry/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-foundry-0.1.16-1.src.rpm
checksum_type: sha256
summary:
  The `api_foundry` project is a powerful tool designed to automate the deployment of REST APIs on AWS using Lambda services to access and interact with relational databases (RDBMS). This project leverages the OpenAPI specification to define and manage the APIs


pkgId: 30c7b57ca8a765a6c89720c2d5f46aa93ba0361cdcf71b95cf200d41075d0139
name: python-api-foundry-query-engine
arch: src
version: 0.0.5
epoch: 0
release: 1
url: https://pypi.org/project/api-foundry-query-engine/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-foundry-query-engine-0.0.5-1.src.rpm
checksum_type: sha256
summary:
  The AWS lambda service handler use by the `api_foundry` project is a powerful tool designed to automate the deployment of REST APIs on AWS using Lambda services to access and interact with relational databases (RDBMS). This project leverages the OpenAPI specification to define and manage the APIs


pkgId: 900479df93d7dab6c0100f2ac2b2df1549d6269ac991970906f5b9316bb18e7c
name: python-api-gateway-v2-to-wsgi
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: translation from the aws api gateway v2.0 lambda event to wsgi
url: https://github.com/asottile/api-gateway-v2-to-wsgi
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-gateway-v2-to-wsgi-1.1.1-1.src.rpm
checksum_type: sha256
description:
  translation from the aws api gateway v2.0 lambda event to wsgi

  ```bash
  pip install api-gateway-v2-to-wsgi
  ```

  ```python
  import api_gateway_v2_to_wsgi
  from ... import app

  lambda_handler = api_gateway_v2_to_wsgi.make_lambda_handler(app)
  ```

  for a full sample, see [testing/example](testing/example)

  for more information on how I set up my lambda, see
  [testing/example.md](testing/example.md).
  additionally, see the [api gateway documentation] (though it's not very good
  at the time of writing so glhf)
  seems the [lambda integration guide] is slightly better
  [api gateway documentation]: https://docs.aws.amazon.com/apigateway/index.html
  [lambda integration guide]: https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html


pkgId: 8a62b8b8eca8d3e6c079be65b803d8f8fb3fbeeeb93f79cb74b0e4f40525deed
name: python-api-insee
arch: src
version: 1.6
epoch: 0
release: 1
summary: Python helper to request Sirene Api on api.insee.fr
url: https://github.com/sne3ks/api_insee
rpm_license: mit
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-insee-1.6-1.src.rpm
checksum_type: sha256
description:
  Request samples
  ^^^^^^^^^^^^^^^
  -  Fetch data from a siret or sirene number
      data = api.siren('005520135').get()
      data = api.siret('39860733300059').get()
      
      
      
  -  Set parameters to the request:
      data = api.siren('005520135', date='2018-01-01').get()
      
      
  -  Perform an advanced search on given criteria using ``q=`` parameter
      data = api.siren(q='unitePurgeeUniteLegage:True').get()
      
      
  -  Filter fields in the response
      champs = [
          'siret',
          'denominationUniteLegale',
          'nomUsageUniteLegale',
          'prenom1UniteLegale',
      ]
      request = api.siret('39860733300059', champs=champs)


pkgId: be96884c317610ae403246a48c9c4233f7a8049975baa991e474f312e0bda41c
name: python-api-nichotined
arch: src
version: 0.1.13
epoch: 0
release: 1
summary: Simple lib for testing rest API
url: https://github.com/nichotined/simple-api
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-nichotined-0.1.13-1.src.rpm
checksum_type: sha256
description:
  A package that will help on creating session upon making rest API request.

  Installation:

  ```commandline
  pip install api-nichotined
  ```

  Sample usage:

  ```commandline
  import logging

  from api_nichotined import Api, BigQuery


  class TestApi(Api):
      def __init__(self):
          super().__init__("https://restcountries.com")

      def get_upload(self):
          return self.get(path="/v3.1/name/indonesia")

      @classmethod
      def init_bigquery(cls):
          bq = BigQuery()

          bq.authenticate_client_with_json_cred_path("cred.json")
          res = bq.get_rows_from(query="""SELECT * FROM `dummy` LIMIT 1000""")
          assert type(res[0].column_a) == str


  if __name__ == '__main__':
      logging.basicConfig(level=logging.INFO, format="s - s - s")

      response = TestApi().get_upload()
      TestApi.init_bigquery()

  ```


pkgId: 387aa22cbe39d69037e82453cbb8acbb74578d1b5279943a1f8575e56d8b804b
name: python-api-project-generator
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://pypi.org/project/api-project-generator/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-project-generator-0.6.0-1.src.rpm
checksum_type: sha256
description:
  Simple API Structure Generator using tecnologies:

  - FastAPI
  - SQLAlchemy
  - aiohttp
  - aiomysql or asyncpg



  - `create:api`: Creates the project structure and base classes

    > Optional `--code` option auto opens code through a `code project_folder_name` command.
    > Optional `--db-type` option allows to select database type from "postgres" or "mysql". (default: mysql)

    ```bash
    api-project create
    ```

  - `create:table`: Creates a new table in file in {project_name}/database/tables/{table_module}/{table_file}.py

    ```bash
    api-project create:table [table_module] [table_name]
    ```

  - `create:dto`: Creates a new DTO file in {project_name}/dtos/{dtos_module}/{dto_name}.py

    ```bash
    api-project create:dto [dtos_module] [dto_name]
    ```

  - `create:enum`: Creates a new Enum file in {project_name}/dtos/enums/{enum_name}.py

    > The `auto-opts` option in the command can be repeated and will be used as the enum field

    ```bash
    api-project create:enum [enum_name] --auto-opts [opt_name]
    ```

  - `create:entity`: Creates dtos, routes, repository and table for desired entity

    > Optional `--sync` option allow to toggle between async repositories and routes or synchronous ones.

    ```bash
    api-project create:entity [entity_module] [entity_name]
    ```




  > All filenames and foldernames are
  >
  > normalized automatically to snake_case.


pkgId: f3569754a5c6cb27dead5b0dadb2da37cb179f9f0c564c2f559f0fad4de7dd98
name: python-api-session
arch: src
version: 1.4.2
epoch: 0
release: 1
summary: requests.Session to work with JSON APIs
url: https://github.com/Bixoto/api-session
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-session-1.4.2-1.src.rpm
checksum_type: sha256
description:
  **api-session** is a small module providing an extended `requests.Session` class to work with JSON APIs.

  We use it at [Bixoto](https://bixoto.com/) as a basis for JSON API clients such as [PyMagento][] or
  [PyBigBuy][].

  It aims at factoring the common parts of these clients while staying very lightweight (<100 SLOC).

  [PyMagento]: https://github.com/Bixoto/PyMagento
  [PyBigBuy]: https://github.com/Bixoto/PyBigBuy



  * base URL: the base API URL is given only once on object creation; subsequent calls use `.get("/path")`
  * read-only flag: if given, prevents the API from doing `POST` and similar calls
  * offline flag: if given, prevents the API from doing any call. This is useful for tests.
  * `requests.Session` inheritance: the class inherits from `requests.Session`, so it stays 100% compatible with it
  * (since 1.4) Response bodies are included in exception messages for 4xx errors. This behavior can be customized.



      pip install api-session

  Or with Poetry:

      poetry add api-session

  Dependency: Python 3.8+.



  ```python3
  from api_session import APISession

  client = APISession("https://httpbin.org")

  client.get_json_api("/get")

  ```


pkgId: 335751901368382f48906fbb734b572c2686b6821af71e2e78753fc223acca4c
name: python-api-tester-upload-test
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: Testing various api features
url: https://apimatic.io
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-api-tester-upload-test-2.0.0-1.src.rpm
checksum_type: sha256
description:
  Testing various
  api
  features




  You must have Python ```2 >=2.7.9``` or Python ```3 >=3.4``` installed on your system to install and run this SDK. This SDK package depends on other Python packages like nose, jsonpickle etc. These dependencies are defined in the ```requirements.txt``` file that comes with the SDK.To resolve these dependencies, you can use the PIP Dependency manager. Install it by following steps at [https://pip.pypa.io/en/stable/installing/](https://pip.pypa.io/en/stable/installing/).

  Python and PIP executables should be defined in your PATH. Open command prompt and type ```pip --version```. This should display the version of the PIP Dependency Manager installed if your installation was successful and the paths are properly defined.

  * Using command line, navigate to the directory containing the generated files (including ```requirements.txt```) for the SDK.
  * Run the command ```pip install -r requirements.txt```. This should install all the required dependencies.

  ![Building SDK - Step 1](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&step=installDependencies)



  The following section explains how to use the tester library in a new project.



  Open up a Python IDE like PyCharm. The basic workflow presented here is also applicable if you prefer using a different editor or IDE.

  ![Open project in PyCharm - Step 1](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&step=pyCharm)

  Click on `Open` in PyCharm to browse to your generated SDK directory and then click `OK`.

  ![Open project in PyCharm - Step 2](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&step=openProject0)

  The project files will be displayed in the side bar as follows:

  ![Open project in PyCharm - Step 3](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&projectName=tester&step=openProject1)



  Create a new directory by right clicking on the solution name as shown below:

  ![Add a new project in PyCharm - Step 1](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&projectName=tester&step=createDirectory)

  Name the directory as "test".

  ![Add a new project in PyCharm - Step 2](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&step=nameDirectory)

  Add a python file to this project.

  ![Add a new project in PyCharm - Step 3](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&projectName=tester&step=createFile)

  Name it "testSDK".

  ![Add a new project in PyCharm - Step 4](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&projectName=tester&step=nameFile)

  In your python file you will be required to import the generated python library using the following code lines

  ```python
  from tester.tester_client import TesterClient
  ```

  ![Add a new project in PyCharm - Step 5](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&projectName=tester&libraryName=tester.tester_client&className=TesterClient&step=projectFiles)

  After this you can write code to instantiate an API client object, get a controller object and  make API calls. Sample code is given in the subsequent sections.



  To run the file within your test project, right click on your Python file inside your Test project and click on `Run`

  ![Run Test Project - Step 1](https://apidocs.io/illustration/python?workspaceFolder=Tester-Python&projectName=tester&libraryName=tester.tester_client&className=TesterClient&step=runProject)



  You can test the generated SDK and the server with automatically generated test cases. `unittest` is used as the testing framework and `nose` is used as the test runner. You can run the tests as follows:

  1. From terminal/cmd navigate to the root directory of the SDK.
    2. Invoke ```pip install -r test-requirements.txt```
    3. Invoke ```nosetests```



  To initialize the API client, the following parameters need to be passed.

  | Parameter | Type | Description |
  |  --- | --- | --- |
  | `port` | `string` | *Default*: `'80'` |
  | `suites` | `SuiteCode` | *Default*: `1` |

  The API client can be initialized using a Configuration object as following.

  ```python

  client = TesterClient(
      
      environment = Environment.TESTING,

      
      port = '80',
      suites = SuiteCode.HEARTS,)
  ```



  The SDK can be configured to use a different environment for making API calls. Available environments are:

  | Name | Value | Description |
  |  --- | --- | --- |
  | production | `PRODUCTION` |  |
  | testing | `TESTING` | **Default**  |



  This API does not require authentication.



  Here is the list of errors that the API might throw.

  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 400 | 400 Global | `APIException` |
  | 402 | 402 Global | `APIException` |
  | 403 | 403 Global | `APIException` |
  | 404 | 404 Global | `APIException` |
  | 412 | Precondition Failed | [`NestedModelException`](#nestedmodelexception) |
  | 450 | caught global exception | [`CustomErrorResponseException`](#customerrorresponseexception) |
  | 452 | global exception with string | [`ExceptionWithStringException`](#exceptionwithstringexception) |
  | 453 | boolean in global exception | [`ExceptionWithBooleanException`](#exceptionwithbooleanexception) |
  | 454 | dynamic in global exception | [`ExceptionWithDynamicException`](#exceptionwithdynamicexception) |
  | 455 | uuid in global exception | [`ExceptionWithUUIDException`](#exceptionwithuuidexception) |
  | 456 | date in global exception | [`ExceptionWithDateException`](#exceptionwithdateexception) |
  | 457 | number in global  exception | [`ExceptionWithNumberException`](#exceptionwithnumberexception) |
  | 458 | long in global exception | [`ExceptionWithLongException`](#exceptionwithlongexception) |
  | 459 | precision in global  exception | [`ExceptionWithPrecisionException`](#exceptionwithprecisionexception) |
  | 460 | rfc3339 in global exception | [`ExceptionWithRfc3339DateTimeException`](#exceptionwithrfc3339datetimeexception) |
  | 461 | unix time stamp in global exception | [`UnixTimeStampException`](#unixtimestampexception) |
  | 462 | rfc1123 in global exception | [`Rfc1123Exception`](#rfc1123exception) |
  | 463 | boolean in model as global exception | [`SendBooleanInModelAsException`](#sendbooleaninmodelasexception) |
  | 464 | rfc3339 in model as global exception | [`SendRfc3339InModelAsException`](#sendrfc3339inmodelasexception) |
  | 465 | rfc1123 in model as global exception | [`SendRfc1123InModelAsException`](#sendrfc1123inmodelasexception) |
  | 466 | unix time stamp in model as global exception | [`SendUnixTimeStampInModelAsException`](#sendunixtimestampinmodelasexception) |
  | 467 | send date in model as global exception | [`SendDateInModelAsException`](#senddateinmodelasexception) |
  | 468 | send dynamic in model as global exception | [`SendDynamicInModelAsException`](#senddynamicinmodelasexception) |
  | 469 | send string in model as global exception | [`SendStringInModelAsException`](#sendstringinmodelasexception) |
  | 470 | send long in model as global exception | [`SendLongInModelAsException`](#sendlonginmodelasexception) |
  | 471 | send number in model as global exception | [`SendNumberInModelAsException`](#sendnumberinmodelasexception) |
  | 472 | send precision in model as global exception | [`SendPrecisionInModelAsException`](#sendprecisioninmodelasexception) |
  | 473 | send uuid in model as global exception | [`SendUuidInModelAsException`](#senduuidinmodelasexception) |
  | 500 | 500 Global | [`GlobalTestException`](#globaltestexception) |
  | Default | Invalid response. | [`GlobalTestException`](#globaltestexception) |





  * [Response Types](#responsetypescontroller)
  * [Form Params](#formparamscontroller)
  * [Body Params](#bodyparamscontroller)
  * [Error Codes](#errorcodescontroller)
  * [Query Param](#queryparamcontroller)
  * [Echo](#echocontroller)
  * [Header](#headercontroller)
  * [Template Params](#templateparamscontroller)
  * [Query Params](#queryparamscontroller)







  An instance of the `ResponseTypesController` class can be accessed from the API Client.

  ```
  response_types_controller = client.response_types
  ```



  ```python
  def get_date_array(self)
  ```



  `List of date`



  ```python


  result = response_types_controller.get_date_array()
  ```



  ```python
  def get_date(self)
  ```



  `date`



  ```python

  result = response_types_controller.get_date()
  ```



  ```python
  def return_company_model(self)
  ```



  [`Company`](#company)



  ```python

  result = response_types_controller.return_company_model()
  ```



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601"
  }
  ```



  ```python
  def return_boss_model(self)
  ```



  [`BossCompany`](#bosscompany)



  ```python

  result = response_types_controller.return_boss_model()
  ```



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Adeel",
    "last name": "Ali",
    "address_boss": "nust"
  }
  ```



  ```python
  def return_employee_model(self)
  ```



  [`EmployeeComp`](#employeecomp)



  ```python

  result = response_types_controller.return_employee_model()
  ```



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Nauman",
    "last name": "Ali",
    "id": "123456"
  }
  ```



  ```python
  def return_developer_model(self)
  ```



  [`Developer`](#developer)



  ```python

  result = response_types_controller.return_developer_model()
  ```



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Nauman",
    "last name": "Ali",
    "id": "123456",
    "team": "CORE",
    "designation": "Manager",
    "role": "Team Lead"
  }
  ```



  ```python
  def return_tester_model(self)
  ```



  [`SoftwareTester`](#softwaretester)



  ```python

  result = response_types_controller.return_tester_model()
  ```



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Muhammad",
    "last name": "Farhan",
    "id": "123456",
    "team": "Testing",
    "designation": "Tester",
    "role": "Testing"
  }
  ```



  ```python
  def return_complex_1_object(self)
  ```



  [`Complex1`](#complex1)



  ```python

  result = response_types_controller.return_complex_1_object()
  ```



  ```json
  {
    "medications": [
      {
        "aceInhibitors": [
          {
            "name": "lisinopril",
            "strength": "10 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "antianginal": [
          {
            "name": "nitroglycerin",
            "strength": "0.4 mg Sublingual Tab",
            "dose": "1 tab",
            "route": "SL",
            "sig": "q15min PRN",
            "pillCount": "#30",
            "refills": "Refill 1"
          }
        ],
        "anticoagulants": [
          {
            "name": "warfarin sodium",
            "strength": "3 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "betaBlocker": [
          {
            "name": "metoprolol tartrate",
            "strength": "25 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "diuretic": [
          {
            "name": "furosemide",
            "strength": "40 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "mineral": [
          {
            "name": "potassium chloride ER",
            "strength": "10 mEq Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ]
      }
    ],
    "labs": [
      {
        "name": "Arterial Blood Gas",
        "time": "Today",
        "location": "Main Hospital Lab"
      },
      {
        "name": "BMP",
        "time": "Today",
        "location": "Primary Care Clinic"
      },
      {
        "name": "BNP",
        "time": "3 Weeks",
        "location": "Primary Care Clinic"
      },
      {
        "name": "BUN",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      },
      {
        "name": "Cardiac Enzymes",
        "time": "Today",
        "location": "Primary Care Clinic"
      },
      {
        "name": "CBC",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      },
      {
        "name": "Creatinine",
        "time": "1 Year",
        "location": "Main Hospital Lab"
      },
      {
        "name": "Electrolyte Panel",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      },
      {
        "name": "Glucose",
        "time": "1 Year",
        "location": "Main Hospital Lab"
      },
      {
        "name": "PT/INR",
        "time": "3 Weeks",
        "location": "Primary Care Clinic"
      },
      {
        "name": "PTT",
        "time": "3 Weeks",
        "location": "Coumadin Clinic"
      },
      {
        "name": "TSH",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      }
    ],
    "imaging": [
      {
        "name": "Chest X-Ray",
        "time": "Today",
        "location": "Main Hospital Radiology"
      },
      {
        "name": "Chest X-Ray",
        "time": "Today",
        "location": "Main Hospital Radiology"
      },
      {
        "name": "Chest X-Ray",
        "time": "Today",
        "location": "Main Hospital Radiology"
      }
    ]
  }
  ```



  ```python
  def return_response_with_enums(self)
  ```



  [`ResponseWithEnum`](#responsewithenum)



  ```python

  result = response_types_controller.return_response_with_enums()
  ```



  ```json
  {
    "paramFormat": "Template",
    "optional": false,
    "type": "Long",
    "constant": false,
    "isArray": false,
    "isStream": false,
    "isAttribute": false,
    "isMap": false,
    "attributes": {
      "exclusiveMaximum": false,
      "exclusiveMinimum": false,
      "id": "5a9fcb01caacc310dc6bab51"
    },
    "nullable": false,
    "id": "5a9fcb01caacc310dc6bab50",
    "name": "petId",
    "description": "ID of pet to update"
  }
  ```



  ```python
  def return_complex_2_object(self)
  ```



  [`Complex2`](#complex2)



  ```python

  result = response_types_controller.return_complex_2_object()
  ```



  ```json
  {
    "glossary": {
      "title": "example glossary",
      "GlossDiv": {
        "title": "S",
        "GlossList": {
          "GlossEntry": {
            "ID": "SGML",
            "SortAs": "SGML",
            "GlossTerm": "Standard Generalized Markup Language",
            "Acronym": "SGML",
            "Abbrev": "ISO 8879:1986",
            "GlossDef": {
              "para": "A meta-markup language, used to create markup languages such as DocBook.",
              "GlossSeeAlso": [
                "GML",
                "XML"
              ]
            },
            "GlossSee": "markup"
          }
        }
      }
    }
  }
  ```



  ```python
  def return_complex_3_object(self)
  ```



  [`Complex3`](#complex3)



  ```python

  result = response_types_controller.return_complex_3_object()
  ```



  ```json
  {
    "documentId": "099cceda-38a8-4b01-87b9-a8f2007675d6",
    "signers": [
      {
        "id": "1bef97d1-0704-4eb2-a490-a8f2007675db",
        "url": "https://sign-test.idfy.io/start?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJrdmVyc2lvbiI6IjdmNzhjNzNkMmQ1MjQzZWRiYjdiNDI0MmI2MDE1MWU4IiwiZG9jaWQiOiIwOTljY2VkYS0zOGE4LTRiMDEtODdiOS1hOGYyMDA3Njc1ZDYiLCJhaWQiOiJjMGNlMTQ2OC1hYzk0LTRiMzQtODc2ZS1hODg1MDBjMmI5YTEiLCJsZyI6ImVuIiwiZXJyIjpudWxsLCJpZnIiOmZhbHNlLCJ3Ym1zZyI6ZmFsc2UsInNmaWQiOiIxYmVmOTdkMS0wNzA0LTRlYjItYTQ5MC1hOGYyMDA3Njc1ZGIiLCJ1cmxleHAiOm51bGwsImF0aCI6bnVsbCwiZHQiOiJUZXN0IGRvY3VtZW50IiwidmYiOmZhbHNlLCJhbiI6IklkZnkgU0RLIGRlbW8iLCJ0aCI6IlBpbmsiLCJzcCI6IkN1YmVzIiwiZG9tIjpudWxsLCJyZGlyIjpmYWxzZSwidXQiOiJ3ZWIiLCJ1dHYiOm51bGwsInNtIjoidGVzdEB0ZXN0LmNvbSJ9.Dyy2RSeR6dmU8qxOEi-2gEX3Gg7wry6JhkZIWOuADDdu5jJWidQLcxfJn_qAHNpb",
        "links": [],
        "externalSignerId": "uoiahsd321982983jhrmnec2wsadm32",
        "redirectSettings": {
          "redirectMode": "donot_redirect"
        },
        "signatureType": {
          "mechanism": "pkisignature",
          "onEacceptUseHandWrittenSignature": false
        },
        "ui": {
          "dialogs": {
            "before": {
              "useCheckBox": false,
              "title": "Info",
              "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
            }
          },
          "language": "EN",
          "styling": {
            "colorTheme": "Pink",
            "spinner": "Cubes"
          }
        },
        "tags": [],
        "order": 0,
        "required": false
      }
    ],
    "status": {
      "documentStatus": "unsigned",
      "completedPackages": [],
      "attachmentPackages": {}
    },
    "title": "Test document",
    "description": "This is an important document",
    "externalId": "ae7b9ca7-3839-4e0d-a070-9f14bffbbf55",
    "dataToSign": {
      "fileName": "sample.txt",
      "convertToPDF": false
    },
    "contactDetails": {
      "email": "test@test.com",
      "url": "https://idfy.io"
    },
    "advanced": {
      "tags": [
        "develop",
        "fun_with_documents"
      ],
      "attachments": 0,
      "requiredSignatures": 0,
      "getSocialSecurityNumber": false,
      "timeToLive": {
        "deadline": "2018-06-29T14:57:25Z",
        "deleteAfterHours": 1
      }
    }
  }
  ```



  ```python
  def get_long(self)
  ```



  `long|int`



  ```python

  result = response_types_controller.get_long()
  ```



  ```python
  def get_model(self)
  ```



  [`Person`](#person)



  ```python

  result = response_types_controller.get_model()
  ```



  ```python
  def get_string_enum_array(self)
  ```



  [`List of Days`](#days)



  ```python


  result = response_types_controller.get_string_enum_array()
  ```



  ```python
  def get_string_enum(self)
  ```



  [`Days`](#days)



  ```python


  result = response_types_controller.get_string_enum()
  ```



  ```python
  def get_model_array(self)
  ```



  [`List of Person`](#person)



  ```python


  result = response_types_controller.get_model_array()
  ```



  ```python
  def get_int_enum(self)
  ```



  [`SuiteCode`](#suitecode)



  ```python


  result = response_types_controller.get_int_enum()
  ```



  ```python
  def get_int_enum_array(self)
  ```



  [`List of SuiteCode`](#suitecode)



  ```python


  result = response_types_controller.get_int_enum_array()
  ```



  ```python
  def get_precision(self)
  ```



  `float`



  ```python

  result = response_types_controller.get_precision()
  ```



  gets a binary object

  ```python
  def get_binary(self)
  ```



  `binary`



  ```python

  result = response_types_controller.get_binary()
  ```



  Gets a integer response

  ```python
  def get_integer(self)
  ```



  `int`



  ```python

  result = response_types_controller.get_integer()
  ```



  Get an array of integers.

  ```python
  def get_integer_array(self)
  ```



  `List of int`



  ```python


  result = response_types_controller.get_integer_array()
  ```



  ```python
  def get_dynamic(self)
  ```



  `mixed`



  ```python

  result = response_types_controller.get_dynamic()
  ```



  ```python
  def get_dynamic_array(self)
  ```



  `mixed`



  ```python


  result = response_types_controller.get_dynamic_array()
  ```



  ```python
  def get_3339_datetime(self)
  ```



  `datetime`



  ```python

  result = response_types_controller.get_3339_datetime()
  ```



  ```python
  def get_3339_datetime_array(self)
  ```



  `List of datetime`



  ```python


  result = response_types_controller.get_3339_datetime_array()
  ```



  ```python
  def get_boolean(self)
  ```



  `bool`



  ```python

  result = response_types_controller.get_boolean()
  ```



  ```python
  def get_boolean_array(self)
  ```



  `List of bool`



  ```python


  result = response_types_controller.get_boolean_array()
  ```



  ```python
  def get_headers(self)
  ```



  `void`



  ```python

  result = response_types_controller.get_headers()
  ```



  ```python
  def get_1123_date_time(self)
  ```



  `datetime`



  ```python

  result = response_types_controller.get_1123_date_time()
  ```



  ```python
  def get_unix_date_time(self)
  ```



  `datetime`



  ```python

  result = response_types_controller.get_unix_date_time()
  ```



  ```python
  def get_1123_date_time_array(self)
  ```



  `List of datetime`



  ```python


  result = response_types_controller.get_1123_date_time_array()
  ```



  ```python
  def get_unix_date_time_array(self)
  ```



  `List of datetime`



  ```python


  result = response_types_controller.get_unix_date_time_array()
  ```



  ```python
  def get_content_type_headers(self)
  ```



  `void`



  ```python

  result = response_types_controller.get_content_type_headers()
  ```







  An instance of the `FormParamsController` class can be accessed from the API Client.

  ```
  form_params_controller = client.form_params
  ```



  ```python
  def send_delete_form(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`DeleteBody`](#deletebody) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = DeleteBody()()
  body.name = 'name6'
  body.field = 'field0'

  result = form_params_controller.send_delete_form(body)
  ```



  ```python
  def send_delete_multipart(self,
                           file)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `file` | `string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  file = open('dummy_file', 'r')

  result = form_params_controller.send_delete_multipart(file)
  ```



  ```python
  def send_date_array(self,
                     dates)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `dates` | `List of date` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  dates = [dateutil.parser.parse('2016-03-13').date(), dateutil.parser.parse('2016-03-13').date()]

  result = form_params_controller.send_date_array(dates)
  ```



  ```python
  def send_date(self,
               date)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date` | `date` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date = dateutil.parser.parse('2016-03-13').date()

  result = form_params_controller.send_date(date)
  ```



  ```python
  def send_unix_date_time(self,
                         datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = dt.datetime.utcfromtimestamp(1480809600)

  result = form_params_controller.send_unix_date_time(datetime)
  ```



  ```python
  def send_rfc_1123_date_time(self,
                             datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime

  result = form_params_controller.send_rfc_1123_date_time(datetime)
  ```



  ```python
  def send_rfc_3339_date_time(self,
                             datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')

  result = form_params_controller.send_rfc_3339_date_time(datetime)
  ```



  ```python
  def send_unix_date_time_array(self,
                               datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [dt.datetime.utcfromtimestamp(1480809600), dt.datetime.utcfromtimestamp(1480809600), dt.datetime.utcfromtimestamp(1480809600)]

  result = form_params_controller.send_unix_date_time_array(datetimes)
  ```



  ```python
  def send_rfc_1123_date_time_array(self,
                                   datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime, APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime, APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime]

  result = form_params_controller.send_rfc_1123_date_time_array(datetimes)
  ```



  ```python
  def send_long(self,
               value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `long|int` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  value = 64

  result = form_params_controller.send_long(value)
  ```



  ```python
  def send_integer_array(self,
                        integers)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `integers` | `List of int` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  integers = [45, 46, 47]

  result = form_params_controller.send_integer_array(integers)
  ```



  ```python
  def send_string_array(self,
                       strings)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `strings` | `List of string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  strings = ['strings5']

  result = form_params_controller.send_string_array(strings)
  ```



  ```python
  def allow_dynamic_form_fields(self,
                               name,
                               _optional_form_parameters=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `name` | `string` | Form, Required | - |
  | `_optional_form_parameters` | `array` | Optional | Pass additional field parameters. |



  [`ServerResponse`](#serverresponse)



  ```python

  name = 'name0'
  _optional_form_parameters = {'key0' : 'additionalFieldParams9' }

  result = form_params_controller.allow_dynamic_form_fields(name, _optional_form_parameters)
  ```



  ```python
  def send_model(self,
                model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Employee`](#employee) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Employee()()
  model.department = 'department8'
  model.dependents = []

  model.dependents.append(Person())
  model.dependents[0].address = 'address5'
  model.dependents[0].age = 237
  model.dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  model.dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.dependents[0].name = 'name9'
  model.dependents[0].uid = 'uid9'

  model.hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  model.joining_day = Days.TUESDAY
  model.salary = 240
  model.working_days = [Days.THURSDAY, Days.WEDNESDAY_, Days.TUESDAY]
  model.address = 'address8'
  model.age = 186
  model.birthday = dateutil.parser.parse('2016-03-13').date()
  model.birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.name = 'name2'
  model.uid = 'uid2'

  result = form_params_controller.send_model(model)
  ```



  ```python
  def send_model_array(self,
                      models)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `models` | [`List of Employee`](#employee) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'


  result = form_params_controller.send_model_array(models)
  ```



  ```python
  def send_file(self,
               file)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `file` | `string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  file = open('dummy_file', 'r')

  result = form_params_controller.send_file(file)
  ```



  ```python
  def send_multiple_files(self,
                         file,
                         file_1)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `file` | `string` | Form, Required | - |
  | `file_1` | `string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  file = open('dummy_file', 'r')
  file_1 = open('dummy_file', 'r')

  result = form_params_controller.send_multiple_files(file, file_1)
  ```



  ```python
  def send_string(self,
                 value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  value = 'value2'

  result = form_params_controller.send_string(value)
  ```



  ```python
  def send_rfc_3339_date_time_array(self,
                                   datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [dateutil.parser.parse('2016-03-13T12:52:32.123Z'), dateutil.parser.parse('2016-03-13T12:52:32.123Z'), dateutil.parser.parse('2016-03-13T12:52:32.123Z')]

  result = form_params_controller.send_rfc_3339_date_time_array(datetimes)
  ```



  Send a variety for form params. Returns file count and body params

  ```python
  def send_mixed_array(self,
                      options=dict())
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `file` | `string` | Form, Required | - |
  | `integers` | `List of int` | Form, Required | - |
  | `models` | [`List of Employee`](#employee) | Form, Required | - |
  | `strings` | `List of string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  collect = {}
  file = open('dummy_file', 'r')
  collect['file'] = file

  integers = [45, 46, 47]
  collect['integers'] = integers

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'

  collect['models'] = models

  strings = ['strings5']
  collect['strings'] = strings

  result = form_params_controller.send_mixed_array(collect)
  ```



  ```python
  def update_model_with_form(self,
                            model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Employee`](#employee) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Employee()()
  model.department = 'department8'
  model.dependents = []

  model.dependents.append(Person())
  model.dependents[0].address = 'address5'
  model.dependents[0].age = 237
  model.dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  model.dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.dependents[0].name = 'name9'
  model.dependents[0].uid = 'uid9'

  model.hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  model.joining_day = Days.TUESDAY
  model.salary = 240
  model.working_days = [Days.THURSDAY, Days.WEDNESDAY_, Days.TUESDAY]
  model.address = 'address8'
  model.age = 186
  model.birthday = dateutil.parser.parse('2016-03-13').date()
  model.birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.name = 'name2'
  model.uid = 'uid2'

  result = form_params_controller.update_model_with_form(model)
  ```



  ```python
  def send_delete_form_1(self,
                        model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Employee`](#employee) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Employee()()
  model.department = 'department8'
  model.dependents = []

  model.dependents.append(Person())
  model.dependents[0].address = 'address5'
  model.dependents[0].age = 237
  model.dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  model.dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.dependents[0].name = 'name9'
  model.dependents[0].uid = 'uid9'

  model.hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  model.joining_day = Days.TUESDAY
  model.salary = 240
  model.working_days = [Days.THURSDAY, Days.WEDNESDAY_, Days.TUESDAY]
  model.address = 'address8'
  model.age = 186
  model.birthday = dateutil.parser.parse('2016-03-13').date()
  model.birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.name = 'name2'
  model.uid = 'uid2'

  result = form_params_controller.send_delete_form_1(model)
  ```



  ```python
  def send_delete_form_with_model_array(self,
                                       models)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `models` | [`List of Employee`](#employee) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'


  result = form_params_controller.send_delete_form_with_model_array(models)
  ```



  ```python
  def update_model_array_with_form(self,
                                  models)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `models` | [`List of Employee`](#employee) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'


  result = form_params_controller.update_model_array_with_form(models)
  ```



  ```python
  def update_string_with_form(self,
                             value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  value = 'value2'

  result = form_params_controller.update_string_with_form(value)
  ```



  ```python
  def update_string_array_with_form(self,
                                   strings)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `strings` | `List of string` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  strings = ['strings5']

  result = form_params_controller.update_string_array_with_form(strings)
  ```



  ```python
  def send_integer_enum_array(self,
                             suites)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `suites` | [`List of SuiteCode`](#suitecode) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  suites = [SuiteCode.HEARTS, SuiteCode.SPADES, SuiteCode.CLUBS]

  result = form_params_controller.send_integer_enum_array(suites)
  ```



  ```python
  def send_string_enum_array(self,
                            days)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `days` | [`List of Days`](#days) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  days = [Days.SUNDAY, Days.MONDAY, Days.TUESDAY]

  result = form_params_controller.send_string_enum_array(days)
  ```



  ```python
  def send_string_in_form_with_new_line(self,
                                       body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`TestNstringEncoding`](#testnstringencoding) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = TestNstringEncoding()()
  body.field = 'field0'
  body.name = 'name6'

  result = form_params_controller.send_string_in_form_with_new_line(body)
  ```



  ```python
  def send_string_in_form_with_r(self,
                                body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`TestRstringEncoding`](#testrstringencoding) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = TestRstringEncoding()()
  body.field = 'field0'
  body.name = 'name6'

  result = form_params_controller.send_string_in_form_with_r(body)
  ```



  ```python
  def send_string_in_form_with_r_n(self,
                                  body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`TestRNstringEncoding`](#testrnstringencoding) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = TestRNstringEncoding()()
  body.field = 'field0'
  body.name = 'name6'

  result = form_params_controller.send_string_in_form_with_r_n(body)
  ```



  ```python
  def send_optional_unix_date_time_in_body(self,
                                          date_time=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Form, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = dt.datetime.utcfromtimestamp(1484719381)

  result = form_params_controller.send_optional_unix_date_time_in_body(date_time)
  ```



  ```python
  def send_optional_rfc_1123_in_body(self,
                                    body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | `datetime` | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = form_params_controller.send_optional_rfc_1123_in_body(body)
  ```



  ```python
  def send_datetime_optional_in_endpoint(self,
                                        body=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | `datetime` | Form, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python


  result = form_params_controller.send_datetime_optional_in_endpoint()
  ```



  ```python
  def send_optional_unix_time_stamp_in_model_body(self,
                                                 date_time)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`UnixDateTime`](#unixdatetime) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = UnixDateTime()()
  date_time.date_time = dt.datetime.utcfromtimestamp(1484719381)

  result = form_params_controller.send_optional_unix_time_stamp_in_model_body(date_time)
  ```



  ```python
  def send_optional_unix_time_stamp_in_nested_model_body(self,
                                                        date_time)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`SendUnixDateTime`](#sendunixdatetime) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = SendUnixDateTime()()
  date_time.date_time = UnixDateTime()()
  date_time.date_time.date_time = dt.datetime.utcfromtimestamp(1484719381)

  result = form_params_controller.send_optional_unix_time_stamp_in_nested_model_body(date_time)
  ```



  ```python
  def send_rfc_1123_date_time_in_nested_model(self,
                                             body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`SendRfc1123DateTime`](#sendrfc1123datetime) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = SendRfc1123DateTime()()
  body.date_time = ModelWithOptionalRfc1123DateTime()()
  body.date_time.date_time = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = form_params_controller.send_rfc_1123_date_time_in_nested_model(body)
  ```



  ```python
  def send_rfc_1123_date_time_in_model(self,
                                      date_time)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`ModelWithOptionalRfc1123DateTime`](#modelwithoptionalrfc1123datetime) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = ModelWithOptionalRfc1123DateTime()()
  date_time.date_time = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = form_params_controller.send_rfc_1123_date_time_in_model(date_time)
  ```



  ```python
  def send_optional_datetime_in_model(self,
                                     body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`ModelWithOptionalRfc3339DateTime`](#modelwithoptionalrfc3339datetime) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = ModelWithOptionalRfc3339DateTime()()
  body.date_time = dateutil.parser.parse('1994-02-13T14:01:54.9571247Z')

  result = form_params_controller.send_optional_datetime_in_model(body)
  ```



  ```python
  def send_rfc_339_date_time_in_nested_models(self,
                                             body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`SendRfc339DateTime`](#sendrfc339datetime) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = SendRfc339DateTime()()
  body.date_time = ModelWithOptionalRfc3339DateTime()()
  body.date_time.date_time = dateutil.parser.parse('1994-02-13T14:01:54.9571247Z')

  result = form_params_controller.send_rfc_339_date_time_in_nested_models(body)
  ```



  ```python
  def uuid_as_optional(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`UuidAsOptional`](#uuidasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = UuidAsOptional()()
  body.uuid = '123e4567-e89b-12d3-a456-426655440000'

  result = form_params_controller.uuid_as_optional(body)
  ```



  ```python
  def boolean_as_optional(self,
                         body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`BooleanAsOptional`](#booleanasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = BooleanAsOptional()()
  body.boolean = True

  result = form_params_controller.boolean_as_optional(body)
  ```



  ```python
  def date_as_optional(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`DateAsOptional`](#dateasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = DateAsOptional()()
  body.date = dateutil.parser.parse('1994-02-13').date()

  result = form_params_controller.date_as_optional(body)
  ```



  ```python
  def dynamic_as_optional(self,
                         body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`DynamicAsOptional`](#dynamicasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = DynamicAsOptional()()
  body.dynamic = jsonpickle.decode('{"dynamic":"test"}')

  result = form_params_controller.dynamic_as_optional(body)
  ```



  ```python
  def string_as_optional(self,
                        body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`StringAsOptional`](#stringasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = StringAsOptional()()
  body.string = 'test'

  result = form_params_controller.string_as_optional(body)
  ```



  ```python
  def precision_as_optional(self,
                           body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`PrecisionAsOptional`](#precisionasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = PrecisionAsOptional()()
  body.precision = 1.23

  result = form_params_controller.precision_as_optional(body)
  ```



  ```python
  def long_as_optional(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`LongAsOptional`](#longasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = LongAsOptional()()
  body.long = 123123

  result = form_params_controller.long_as_optional(body)
  ```



  ```python
  def send_number_as_optional(self,
                             body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`NumberAsOptional`](#numberasoptional) | Form, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = NumberAsOptional()()
  body.number = 1

  result = form_params_controller.send_number_as_optional(body)
  ```







  An instance of the `BodyParamsController` class can be accessed from the API Client.

  ```
  body_params_controller = client.body_params
  ```



  ```python
  def send_delete_plain_text(self,
                            text_string)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `text_string` | `string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  text_string = 'textString2'

  result = body_params_controller.send_delete_plain_text(text_string)
  ```



  ```python
  def send_delete_body(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`DeleteBody`](#deletebody) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = DeleteBody()()
  body.name = 'name6'
  body.field = 'field0'

  result = body_params_controller.send_delete_body(body)
  ```



  ```python
  def send_date_array(self,
                     dates)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `dates` | `List of date` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  dates = [dateutil.parser.parse('2016-03-13').date(), dateutil.parser.parse('2016-03-13').date()]

  result = body_params_controller.send_date_array(dates)
  ```



  ```python
  def send_date(self,
               date)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date` | `date` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date = dateutil.parser.parse('2016-03-13').date()

  result = body_params_controller.send_date(date)
  ```



  ```python
  def send_unix_date_time(self,
                         datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = dt.datetime.utcfromtimestamp(1480809600)

  result = body_params_controller.send_unix_date_time(datetime)
  ```



  ```python
  def send_rfc_1123_date_time(self,
                             datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime

  result = body_params_controller.send_rfc_1123_date_time(datetime)
  ```



  ```python
  def send_rfc_3339_date_time(self,
                             datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')

  result = body_params_controller.send_rfc_3339_date_time(datetime)
  ```



  ```python
  def send_unix_date_time_array(self,
                               datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [dt.datetime.utcfromtimestamp(1480809600), dt.datetime.utcfromtimestamp(1480809600), dt.datetime.utcfromtimestamp(1480809600)]

  result = body_params_controller.send_unix_date_time_array(datetimes)
  ```



  ```python
  def send_rfc_1123_date_time_array(self,
                                   datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime, APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime, APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime]

  result = body_params_controller.send_rfc_1123_date_time_array(datetimes)
  ```



  ```python
  def send_rfc_3339_date_time_array(self,
                                   datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [dateutil.parser.parse('2016-03-13T12:52:32.123Z'), dateutil.parser.parse('2016-03-13T12:52:32.123Z'), dateutil.parser.parse('2016-03-13T12:52:32.123Z')]

  result = body_params_controller.send_rfc_3339_date_time_array(datetimes)
  ```



  sends a string body param

  ```python
  def send_string_array(self,
                       sarray)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `sarray` | `List of string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  sarray = ['sarray8', 'sarray9']

  result = body_params_controller.send_string_array(sarray)
  ```



  ```python
  def update_string(self,
                   value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  value = 'value2'

  result = body_params_controller.update_string(value)
  ```



  ```python
  def send_integer_array(self,
                        integers)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `integers` | `List of int` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  integers = [45, 46, 47]

  result = body_params_controller.send_integer_array(integers)
  ```



  ```python
  def wrap_body_in_object(self,
                         field,
                         name)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `field` | `string` | Body, Required | - |
  | `name` | `string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  field = 'field6'
  name = 'name0'

  result = body_params_controller.wrap_body_in_object(field, name)
  ```



  ```python
  def additional_model_parameters(self,
                                 model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`AdditionalModelParameters`](#additionalmodelparameters) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = AdditionalModelParameters()()
  model.name = 'name2'
  model.field = 'field4'
  model.address = 'address8'
  model.job = Job()()
  model.job.company = 'company8'

  result = body_params_controller.additional_model_parameters(model)
  ```



  ```python
  def validate_required_parameter(self,
                                 model,
                                 option=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Validate`](#validate) | Body, Required | - |
  | `option` | `string` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Validate()()
  model.field = 'field4'
  model.name = 'name2'

  result = body_params_controller.validate_required_parameter(model)
  ```



  ```python
  def additional_model_parameters_1(self,
                                   model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`AdditionalModelParameters`](#additionalmodelparameters) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = AdditionalModelParameters()()
  model.name = 'name2'
  model.field = 'field4'
  model.address = 'address8'
  model.job = Job()()
  model.job.company = 'company8'

  result = body_params_controller.additional_model_parameters_1(model)
  ```



  ```python
  def send_model(self,
                model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Employee`](#employee) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Employee()()
  model.department = 'department8'
  model.dependents = []

  model.dependents.append(Person())
  model.dependents[0].address = 'address5'
  model.dependents[0].age = 237
  model.dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  model.dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.dependents[0].name = 'name9'
  model.dependents[0].uid = 'uid9'

  model.hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  model.joining_day = Days.TUESDAY
  model.salary = 240
  model.working_days = [Days.THURSDAY, Days.WEDNESDAY_, Days.TUESDAY]
  model.address = 'address8'
  model.age = 186
  model.birthday = dateutil.parser.parse('2016-03-13').date()
  model.birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.name = 'name2'
  model.uid = 'uid2'

  result = body_params_controller.send_model(model)
  ```



  ```python
  def send_model_array(self,
                      models)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `models` | [`List of Employee`](#employee) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'


  result = body_params_controller.send_model_array(models)
  ```



  ```python
  def send_dynamic(self,
                  dynamic)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `dynamic` | `object` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  dynamic = jsonpickle.decode('{"key1":"val1","key2":"val2"}')

  result = body_params_controller.send_dynamic(dynamic)
  ```



  ```python
  def send_string(self,
                 value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  value = 'value2'

  result = body_params_controller.send_string(value)
  ```



  ```python
  def send_string_enum_array(self,
                            days)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `days` | [`List of Days`](#days) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  days = [Days.SUNDAY, Days.MONDAY, Days.TUESDAY]

  result = body_params_controller.send_string_enum_array(days)
  ```



  ```python
  def send_integer_enum_array(self,
                             suites)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `suites` | [`List of SuiteCode`](#suitecode) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  suites = [SuiteCode.HEARTS, SuiteCode.SPADES, SuiteCode.CLUBS]

  result = body_params_controller.send_integer_enum_array(suites)
  ```



  ```python
  def update_model(self,
                  model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Employee`](#employee) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Employee()()
  model.department = 'department8'
  model.dependents = []

  model.dependents.append(Person())
  model.dependents[0].address = 'address5'
  model.dependents[0].age = 237
  model.dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  model.dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.dependents[0].name = 'name9'
  model.dependents[0].uid = 'uid9'

  model.hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  model.joining_day = Days.TUESDAY
  model.salary = 240
  model.working_days = [Days.THURSDAY, Days.WEDNESDAY_, Days.TUESDAY]
  model.address = 'address8'
  model.age = 186
  model.birthday = dateutil.parser.parse('2016-03-13').date()
  model.birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.name = 'name2'
  model.uid = 'uid2'

  result = body_params_controller.update_model(model)
  ```



  ```python
  def send_delete_body_with_model(self,
                                 model)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `model` | [`Employee`](#employee) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  model = Employee()()
  model.department = 'department8'
  model.dependents = []

  model.dependents.append(Person())
  model.dependents[0].address = 'address5'
  model.dependents[0].age = 237
  model.dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  model.dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.dependents[0].name = 'name9'
  model.dependents[0].uid = 'uid9'

  model.hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  model.joining_day = Days.TUESDAY
  model.salary = 240
  model.working_days = [Days.THURSDAY, Days.WEDNESDAY_, Days.TUESDAY]
  model.address = 'address8'
  model.age = 186
  model.birthday = dateutil.parser.parse('2016-03-13').date()
  model.birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  model.name = 'name2'
  model.uid = 'uid2'

  result = body_params_controller.send_delete_body_with_model(model)
  ```



  ```python
  def send_delete_body_with_model_array(self,
                                       models)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `models` | [`List of Employee`](#employee) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'


  result = body_params_controller.send_delete_body_with_model_array(models)
  ```



  ```python
  def update_model_array(self,
                        models)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `models` | [`List of Employee`](#employee) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  models = []

  models.append(Employee())
  models[0].department = 'department6'
  models[0].dependents = []

  models[0].dependents.append(Person())
  models[0].dependents[0].address = 'address9'
  models[0].dependents[0].age = 49
  models[0].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[0].name = 'name3'
  models[0].dependents[0].uid = 'uid3'

  models[0].dependents.append(Person())
  models[0].dependents[1].address = 'address0'
  models[0].dependents[1].age = 50
  models[0].dependents[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[1].name = 'name4'
  models[0].dependents[1].uid = 'uid4'

  models[0].dependents.append(Person())
  models[0].dependents[2].address = 'address1'
  models[0].dependents[2].age = 51
  models[0].dependents[2].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].dependents[2].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].dependents[2].name = 'name5'
  models[0].dependents[2].uid = 'uid5'

  models[0].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[0].joining_day = Days.WEDNESDAY_
  models[0].salary = 84
  models[0].working_days = [Days.SUNDAY]
  models[0].address = 'address2'
  models[0].age = 254
  models[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[0].name = 'name6'
  models[0].uid = 'uid6'

  models.append(Employee())
  models[1].department = 'department7'
  models[1].dependents = []

  models[1].dependents.append(Person())
  models[1].dependents[0].address = 'address0'
  models[1].dependents[0].age = 50
  models[1].dependents[0].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].dependents[0].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].dependents[0].name = 'name4'
  models[1].dependents[0].uid = 'uid4'

  models[1].hired_at = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime
  models[1].joining_day = Days.THURSDAY
  models[1].salary = 85
  models[1].working_days = [Days.MONDAY, Days.TUESDAY]
  models[1].address = 'address3'
  models[1].age = 255
  models[1].birthday = dateutil.parser.parse('2016-03-13').date()
  models[1].birthtime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')
  models[1].name = 'name7'
  models[1].uid = 'uid7'


  result = body_params_controller.update_model_array(models)
  ```



  ```python
  def update_string_1(self,
                     value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  value = 'value2'

  result = body_params_controller.update_string_1(value)
  ```



  ```python
  def update_string_array(self,
                         strings)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `strings` | `List of string` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  strings = ['strings5']

  result = body_params_controller.update_string_array(strings)
  ```



  ```python
  def send_string_with_new_line(self,
                               body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`TestNstringEncoding`](#testnstringencoding) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = TestNstringEncoding()()
  body.field = 'field0'
  body.name = 'name6'

  result = body_params_controller.send_string_with_new_line(body)
  ```



  ```python
  def send_string_with_r(self,
                        body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`TestRstringEncoding`](#testrstringencoding) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = TestRstringEncoding()()
  body.field = 'field0'
  body.name = 'name6'

  result = body_params_controller.send_string_with_r(body)
  ```



  ```python
  def send_string_in_body_with_r_n(self,
                                  body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`TestRNstringEncoding`](#testrnstringencoding) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = TestRNstringEncoding()()
  body.field = 'field0'
  body.name = 'name6'

  result = body_params_controller.send_string_in_body_with_r_n(body)
  ```



  ```python
  def send_optional_unix_date_time_in_body(self,
                                          date_time=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Body, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = dt.datetime.utcfromtimestamp(1484719381)

  result = body_params_controller.send_optional_unix_date_time_in_body(date_time)
  ```



  ```python
  def send_optional_rfc_1123_in_body(self,
                                    body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | `datetime` | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = body_params_controller.send_optional_rfc_1123_in_body(body)
  ```



  ```python
  def send_datetime_optional_in_endpoint(self,
                                        body=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | `datetime` | Body, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python


  result = body_params_controller.send_datetime_optional_in_endpoint()
  ```



  ```python
  def send_optional_unix_time_stamp_in_model_body(self,
                                                 date_time)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`UnixDateTime`](#unixdatetime) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = UnixDateTime()()
  date_time.date_time = dt.datetime.utcfromtimestamp(1484719381)

  result = body_params_controller.send_optional_unix_time_stamp_in_model_body(date_time)
  ```



  ```python
  def send_optional_unix_time_stamp_in_nested_model_body(self,
                                                        date_time)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`SendUnixDateTime`](#sendunixdatetime) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = SendUnixDateTime()()
  date_time.date_time = UnixDateTime()()
  date_time.date_time.date_time = dt.datetime.utcfromtimestamp(1484719381)

  result = body_params_controller.send_optional_unix_time_stamp_in_nested_model_body(date_time)
  ```



  ```python
  def send_rfc_1123_date_time_in_nested_model(self,
                                             body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`SendRfc1123DateTime`](#sendrfc1123datetime) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = SendRfc1123DateTime()()
  body.date_time = ModelWithOptionalRfc1123DateTime()()
  body.date_time.date_time = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = body_params_controller.send_rfc_1123_date_time_in_nested_model(body)
  ```



  ```python
  def send_rfc_1123_date_time_in_model(self,
                                      date_time)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`ModelWithOptionalRfc1123DateTime`](#modelwithoptionalrfc1123datetime) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = ModelWithOptionalRfc1123DateTime()()
  date_time.date_time = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = body_params_controller.send_rfc_1123_date_time_in_model(date_time)
  ```



  ```python
  def send_optional_datetime_in_model(self,
                                     body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`ModelWithOptionalRfc3339DateTime`](#modelwithoptionalrfc3339datetime) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = ModelWithOptionalRfc3339DateTime()()
  body.date_time = dateutil.parser.parse('1994-02-13T14:01:54.9571247Z')

  result = body_params_controller.send_optional_datetime_in_model(body)
  ```



  ```python
  def send_rfc_339_date_time_in_nested_models(self,
                                             body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`SendRfc339DateTime`](#sendrfc339datetime) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = SendRfc339DateTime()()
  body.date_time = ModelWithOptionalRfc3339DateTime()()
  body.date_time.date_time = dateutil.parser.parse('1994-02-13T14:01:54.9571247Z')

  result = body_params_controller.send_rfc_339_date_time_in_nested_models(body)
  ```



  ```python
  def uuid_as_optional(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`UuidAsOptional`](#uuidasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = UuidAsOptional()()
  body.uuid = '123e4567-e89b-12d3-a456-426655440000'

  result = body_params_controller.uuid_as_optional(body)
  ```



  ```python
  def boolean_as_optional(self,
                         body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`BooleanAsOptional`](#booleanasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = BooleanAsOptional()()
  body.boolean = True

  result = body_params_controller.boolean_as_optional(body)
  ```



  ```python
  def date_as_optional(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`DateAsOptional`](#dateasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = DateAsOptional()()
  body.date = dateutil.parser.parse('1994-02-13').date()

  result = body_params_controller.date_as_optional(body)
  ```



  ```python
  def dynamic_as_optional(self,
                         body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`DynamicAsOptional`](#dynamicasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = DynamicAsOptional()()
  body.dynamic = jsonpickle.decode('{"dynamic":"test"}')

  result = body_params_controller.dynamic_as_optional(body)
  ```



  ```python
  def string_as_optional(self,
                        body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`StringAsOptional`](#stringasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = StringAsOptional()()
  body.string = 'test'

  result = body_params_controller.string_as_optional(body)
  ```



  ```python
  def precision_as_optional(self,
                           body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`PrecisionAsOptional`](#precisionasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = PrecisionAsOptional()()
  body.precision = 1.23

  result = body_params_controller.precision_as_optional(body)
  ```



  ```python
  def long_as_optional(self,
                      body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`LongAsOptional`](#longasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = LongAsOptional()()
  body.long = 123123

  result = body_params_controller.long_as_optional(body)
  ```



  ```python
  def send_number_as_optional(self,
                             body)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | [`NumberAsOptional`](#numberasoptional) | Body, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  body = NumberAsOptional()()
  body.number = 1

  result = body_params_controller.send_number_as_optional(body)
  ```







  An instance of the `ErrorCodesController` class can be accessed from the API Client.

  ```
  error_codes_controller = client.error_codes
  ```



  ```python
  def catch_412_global_error(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.catch_412_global_error()
  ```



  ```python
  def get_501(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.get_501()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 501 | error 501 | [`NestedModelException`](#nestedmodelexception) |



  ```python
  def get_400(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.get_400()
  ```



  ```python
  def get_500(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.get_500()
  ```



  ```python
  def get_401(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.get_401()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 401 | 401 Local | [`LocalTestException`](#localtestexception) |
  | 421 | Default | [`LocalTestException`](#localtestexception) |
  | 431 | Default | [`LocalTestException`](#localtestexception) |
  | 432 | Default | [`LocalTestException`](#localtestexception) |
  | 441 | Default | [`LocalTestException`](#localtestexception) |
  | Default | Invalid response. | [`LocalTestException`](#localtestexception) |



  ```python
  def receive_exception_with_unixtimestamp_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.receive_exception_with_unixtimestamp_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | unixtimestamp exception | [`UnixTimeStampException`](#unixtimestampexception) |



  ```python
  def receive_exception_with_rfc_1123_datetime(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.receive_exception_with_rfc_1123_datetime()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | Rfc1123 Exception | [`Rfc1123Exception`](#rfc1123exception) |



  ```python
  def receive_exception_with_rfc_3339_datetime(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.receive_exception_with_rfc_3339_datetime()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | DateTime Exception | [`ExceptionWithRfc3339DateTimeException`](#exceptionwithrfc3339datetimeexception) |



  ```python
  def receive_endpoint_level_exception(self)
  ```



  [`Complex5`](#complex5)



  ```python

  result = error_codes_controller.receive_endpoint_level_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 451 | caught endpoint exception | [`CustomErrorResponseException`](#customerrorresponseexception) |



  ```python
  def receive_global_level_exception(self)
  ```



  [`Complex5`](#complex5)



  ```python

  result = error_codes_controller.receive_global_level_exception()
  ```



  ```python
  def date_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.date_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | date in exception | [`ExceptionWithDateException`](#exceptionwithdateexception) |



  ```python
  def uuid_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.uuid_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | uuid in exception | [`ExceptionWithUUIDException`](#exceptionwithuuidexception) |



  ```python
  def dynamic_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.dynamic_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | dynamic in Exception | [`ExceptionWithDynamicException`](#exceptionwithdynamicexception) |



  ```python
  def precision_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.precision_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | precision in Exception | [`ExceptionWithPrecisionException`](#exceptionwithprecisionexception) |



  ```python
  def boolean_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.boolean_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | Boolean in Exception | [`ExceptionWithBooleanException`](#exceptionwithbooleanexception) |



  ```python
  def long_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.long_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | long in exception | [`ExceptionWithLongException`](#exceptionwithlongexception) |



  ```python
  def number_in_exception(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.number_in_exception()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | number in exception | [`ExceptionWithNumberException`](#exceptionwithnumberexception) |



  ```python
  def get_exception_with_string(self)
  ```



  `mixed`



  ```python

  result = error_codes_controller.get_exception_with_string()
  ```



  | HTTP Status Code | Error Description | Exception Class |
  |  --- | --- | --- |
  | 444 | exception with string | [`ExceptionWithStringException`](#exceptionwithstringexception) |







  An instance of the `QueryParamController` class can be accessed from the API Client.

  ```
  query_param_controller = client.query_param
  ```



  ```python
  def date_array(self,
                dates)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `dates` | `List of date` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  dates = [dateutil.parser.parse('2016-03-13').date(), dateutil.parser.parse('2016-03-13').date()]

  result = query_param_controller.date_array(dates)
  ```



  get optional dynamic query parameter

  ```python
  def optional_dynamic_query_param(self,
                                  name,
                                  _optional_query_parameters=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `name` | `string` | Query, Required | - |
  | `_optional_query_parameters` | `array` | Optional | Pass additional query parameters. |



  [`ServerResponse`](#serverresponse)



  ```python

  name = 'name0'
  _optional_query_parameters = {'key0' : 'additionalQueryParams2' }

  result = query_param_controller.optional_dynamic_query_param(name, _optional_query_parameters)
  ```



  ```python
  def date(self,
          date)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date` | `date` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date = dateutil.parser.parse('2016-03-13').date()

  result = query_param_controller.date(date)
  ```



  ```python
  def unix_date_time_array(self,
                          datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [dt.datetime.utcfromtimestamp(1480809600), dt.datetime.utcfromtimestamp(1480809600), dt.datetime.utcfromtimestamp(1480809600)]

  result = query_param_controller.unix_date_time_array(datetimes)
  ```



  ```python
  def unix_date_time(self,
                    datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = dt.datetime.utcfromtimestamp(1480809600)

  result = query_param_controller.unix_date_time(datetime)
  ```



  ```python
  def rfc_1123_date_time(self,
                        datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime

  result = query_param_controller.rfc_1123_date_time(datetime)
  ```



  ```python
  def rfc_1123_date_time_array(self,
                              datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime, APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime, APIHelper.HttpDateTime.from_value('Mon, 15 Jun 2009 20:45:30 GMT').datetime]

  result = query_param_controller.rfc_1123_date_time_array(datetimes)
  ```



  ```python
  def rfc_3339_date_time_array(self,
                              datetimes)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetimes` | `List of datetime` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetimes = [dateutil.parser.parse('2016-03-13T12:52:32.123Z'), dateutil.parser.parse('2016-03-13T12:52:32.123Z'), dateutil.parser.parse('2016-03-13T12:52:32.123Z')]

  result = query_param_controller.rfc_3339_date_time_array(datetimes)
  ```



  ```python
  def rfc_3339_date_time(self,
                        datetime)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `datetime` | `datetime` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  datetime = dateutil.parser.parse('2016-03-13T12:52:32.123Z')

  result = query_param_controller.rfc_3339_date_time(datetime)
  ```



  ```python
  def no_params(self)
  ```



  [`ServerResponse`](#serverresponse)



  ```python

  result = query_param_controller.no_params()
  ```



  ```python
  def string_param(self,
                  string)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `string` | `string` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  string = 'string4'

  result = query_param_controller.string_param(string)
  ```



  ```python
  def url_param(self,
               url)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `url` | `string` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  url = 'url4'

  result = query_param_controller.url_param(url)
  ```



  ```python
  def number_array(self,
                  integers)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `integers` | `List of int` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  integers = [45, 46, 47]

  result = query_param_controller.number_array(integers)
  ```



  ```python
  def string_array(self,
                  strings)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `strings` | `List of string` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  strings = ['strings5']

  result = query_param_controller.string_array(strings)
  ```



  ```python
  def simple_query(self,
                  boolean,
                  number,
                  string,
                  _optional_query_parameters=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `boolean` | `bool` | Query, Required | - |
  | `number` | `int` | Query, Required | - |
  | `string` | `string` | Query, Required | - |
  | `_optional_query_parameters` | `array` | Optional | Pass additional query parameters. |



  [`ServerResponse`](#serverresponse)



  ```python

  boolean = False
  number = 158
  string = 'string4'
  _optional_query_parameters = {'key0' : 'additionalQueryParams2' }

  result = query_param_controller.simple_query(boolean, number, string, _optional_query_parameters)
  ```



  ```python
  def string_enum_array(self,
                       days)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `days` | [`List of Days`](#days) | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  days = [Days.SUNDAY, Days.MONDAY, Days.TUESDAY]

  result = query_param_controller.string_enum_array(days)
  ```



  ```python
  def multiple_params(self,
                     number,
                     precision,
                     string,
                     url)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `number` | `int` | Query, Required | - |
  | `precision` | `float` | Query, Required | - |
  | `string` | `string` | Query, Required | - |
  | `url` | `string` | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  number = 158
  precision = 112.04
  string = 'string4'
  url = 'url4'

  result = query_param_controller.multiple_params(number, precision, string, url)
  ```



  ```python
  def integer_enum_array(self,
                        suites)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `suites` | [`List of SuiteCode`](#suitecode) | Query, Required | - |



  [`ServerResponse`](#serverresponse)



  ```python

  suites = [SuiteCode.HEARTS, SuiteCode.SPADES, SuiteCode.CLUBS]

  result = query_param_controller.integer_enum_array(suites)
  ```







  An instance of the `EchoController` class can be accessed from the API Client.

  ```
  echo_controller = client.echo
  ```



  Echo's back the request

  ```python
  def json_echo(self,
               input)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `input` | `object` | Body, Required | - |



  `mixed`



  ```python

  input = jsonpickle.decode('{"key1":"val1","key2":"val2"}')

  result = echo_controller.json_echo(input)
  ```



  Sends the request including any form params as JSON

  ```python
  def form_echo(self,
               input)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `input` | `object` | Form, Required | - |



  `mixed`



  ```python

  input = jsonpickle.decode('{"key1":"val1","key2":"val2"}')

  result = echo_controller.form_echo(input)
  ```



  ```python
  def query_echo(self,
                _optional_query_parameters=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `_optional_query_parameters` | `array` | Optional | Pass additional query parameters. |



  [`EchoResponse`](#echoresponse)



  ```python

  _optional_query_parameters = {'key0' : 'additionalQueryParams2' }

  result = echo_controller.query_echo(_optional_query_parameters)
  ```







  An instance of the `HeaderController` class can be accessed from the API Client.

  ```
  header_controller = client.header
  ```



  Sends a single header params

  ```python
  def send_headers(self,
                  custom_header,
                  value)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `custom_header` | `string` | Header, Required | - |
  | `value` | `string` | Form, Required | Represents the value of the custom header |



  [`ServerResponse`](#serverresponse)



  ```python

  custom_header = 'custom-header2'
  value = 'value2'

  result = header_controller.send_headers(custom_header, value)
  ```







  An instance of the `TemplateParamsController` class can be accessed from the API Client.

  ```
  template_params_controller = client.template_params
  ```



  ```python
  def send_string_array(self,
                       strings)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `strings` | `List of string` | Template, Required | - |



  [`EchoResponse`](#echoresponse)



  ```python

  strings = ['strings5']

  result = template_params_controller.send_string_array(strings)
  ```



  ```python
  def send_integer_array(self,
                        integers)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `integers` | `List of int` | Template, Required | - |



  [`EchoResponse`](#echoresponse)



  ```python

  integers = [45, 46, 47]

  result = template_params_controller.send_integer_array(integers)
  ```







  An instance of the `QueryParamsController` class can be accessed from the API Client.

  ```
  query_params_controller = client.query_params
  ```



  ```python
  def send_number_as_optional(self,
                             number,
                             number_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `number` | `int` | Query, Required | - |
  | `number_1` | `int` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  number = 1
  number_1 = 1

  result = query_params_controller.send_number_as_optional(number, number_1)
  ```



  ```python
  def send_long_as_optional(self,
                           long,
                           long_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `long` | `long|int` | Query, Required | - |
  | `long_1` | `long|int` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  long = 123123
  long_1 = 123123

  result = query_params_controller.send_long_as_optional(long, long_1)
  ```



  ```python
  def precision_as_optional(self,
                           precision,
                           precision_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `precision` | `float` | Query, Required | - |
  | `precision_1` | `float` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  precision = 1.23
  precision_1 = 1.23

  result = query_params_controller.precision_as_optional(precision, precision_1)
  ```



  ```python
  def boolean_as_optional(self,
                         boolean,
                         boolean_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `boolean` | `bool` | Query, Required | - |
  | `boolean_1` | `bool` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  boolean = True
  boolean_1 = True

  result = query_params_controller.boolean_as_optional(boolean, boolean_1)
  ```



  ```python
  def rfc_1123_datetime_as_optional(self,
                                   date_time,
                                   date_time_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Query, Required | - |
  | `date_time_1` | `datetime` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime
  date_time_1 = APIHelper.HttpDateTime.from_value('Sun, 06 Nov 1994 08:49:37 GMT').datetime

  result = query_params_controller.rfc_1123_datetime_as_optional(date_time, date_time_1)
  ```



  ```python
  def rfc_3339_datetime_as_optional(self,
                                   date_time,
                                   date_time_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Query, Required | - |
  | `date_time_1` | `datetime` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = dateutil.parser.parse('1994-02-13 14:01:54')
  date_time_1 = dateutil.parser.parse('1994-02-13 14:01:54')

  result = query_params_controller.rfc_3339_datetime_as_optional(date_time, date_time_1)
  ```



  ```python
  def send_date_as_optional(self,
                           date,
                           date_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date` | `date` | Query, Required | - |
  | `date_1` | `date` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date = dateutil.parser.parse('1994-02-13').date()
  date_1 = dateutil.parser.parse('1994-02-13').date()

  result = query_params_controller.send_date_as_optional(date, date_1)
  ```



  ```python
  def send_string_as_optional(self,
                             string,
                             string_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `string` | `string` | Query, Required | - |
  | `string_1` | `string` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  string = 'test'
  string_1 = 'test'

  result = query_params_controller.send_string_as_optional(string, string_1)
  ```



  ```python
  def unixdatetime_as_optional(self,
                              date_time,
                              date_time_1=None)
  ```



  | Parameter | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Query, Required | - |
  | `date_time_1` | `datetime` | Query, Optional | - |



  [`ServerResponse`](#serverresponse)



  ```python

  date_time = dt.datetime.utcfromtimestamp(1484719381)
  date_time_1 = dt.datetime.utcfromtimestamp(1484719381)

  result = query_params_controller.unixdatetime_as_optional(date_time, date_time_1)
  ```





  * [Employee](#employee)
  * [Boss](#boss)
  * [DeleteBody](#deletebody)
  * [EchoResponse](#echoresponse)
  * [Person](#person)
  * [ServerResponse](#serverresponse)
  * [QueryParameter](#queryparameter)
  * [Job](#job)
  * [AdditionalModelParameters](#additionalmodelparameters)
  * [Validate](#validate)
  * [TestNstringEncoding](#testnstringencoding)
  * [TestRstringEncoding](#testrstringencoding)
  * [TestRNstringEncoding](#testrnstringencoding)
  * [SendRfc1123DateTime](#sendrfc1123datetime)
  * [ModelWithOptionalRfc1123DateTime](#modelwithoptionalrfc1123datetime)
  * [SendRfc339DateTime](#sendrfc339datetime)
  * [UuidAsOptional](#uuidasoptional)
  * [DynamicAsOptional](#dynamicasoptional)
  * [ModelWithOptionalRfc3339DateTime](#modelwithoptionalrfc3339datetime)
  * [UnixDateTime](#unixdatetime)
  * [SendUnixDateTime](#sendunixdatetime)
  * [PrecisionAsOptional](#precisionasoptional)
  * [StringAsOptional](#stringasoptional)
  * [LongAsOptional](#longasoptional)
  * [NumberAsOptional](#numberasoptional)
  * [BooleanAsOptional](#booleanasoptional)
  * [SoftwareTester](#softwaretester)
  * [Developer](#developer)
  * [GlossEntry](#glossentry)
  * [Mineral](#mineral)
  * [Diuretic](#diuretic)
  * [BossCompany](#bosscompany)
  * [BetaBlocker](#betablocker)
  * [Anticoagulant](#anticoagulant)
  * [EmployeeComp](#employeecomp)
  * [Company](#company)
  * [Attributes](#attributes)
  * [ResponseWithEnum](#responsewithenum)
  * [GlossDef](#glossdef)
  * [GlossList](#glosslist)
  * [GlossDiv](#glossdiv)
  * [Glossary](#glossary)
  * [Imaging](#imaging)
  * [Lab](#lab)
  * [Antianginal](#antianginal)
  * [AceInhibitor](#aceinhibitor)
  * [Medication](#medication)
  * [Complex1](#complex1)
  * [Complex2](#complex2)
  * [Advanced](#advanced)
  * [DataToSign](#datatosign)
  * [ContactDetails](#contactdetails)
  * [Styling](#styling)
  * [Dialogs](#dialogs)
  * [SignatureType](#signaturetype)
  * [RedirectSettings](#redirectsettings)
  * [TimeToLive](#timetolive)
  * [Status](#status)
  * [Before](#before)
  * [Ui](#ui)
  * [Complex3](#complex3)
  * [Signer](#signer)
  * [Complex5](#complex5)
  * [ResponseData](#responsedata)
  * [Feed](#feed)
  * [Entry](#entry)
  * [DateAsOptional](#dateasoptional)
  * [AddPrecisionInException](#addprecisioninexception)
  * [AddUuidInGlobalException](#adduuidinglobalexception)
  * [AddRfc1123DatetimeInGlobalException](#addrfc1123datetimeinglobalexception)
  * [AddNumberInException](#addnumberinexception)
  * [AddDynamicInException](#adddynamicinexception)
  * [AddRfc3339DatetimeInGlobalException](#addrfc3339datetimeinglobalexception)
  * [AddBooleanInGlobalException](#addbooleaninglobalexception)
  * [AddDateInGlobalException](#adddateinglobalexception)
  * [AddStringInGlobalException](#addstringinglobalexception)
  * [AddUnixTimeStampInGlobalException](#addunixtimestampinglobalexception)
  * [AddLongInGlobalException](#addlonginglobalexception)





  `Employee`



  [`Person`](#person)



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `department` | `string` |  | - |
  | `dependents` | [`List of Person`](#person) |  | - |
  | `hired_at` | `datetime` |  | - |
  | `joining_day` | [`Days`](#days) |  | *Default: `'Monday'`* |
  | `salary` | `int` |  | - |
  | `working_days` | [`List of Days`](#days) |  | - |
  | `boss` | [`Person`](#person) | Optional | - |



  ```json
  {
    "department": "department0",
    "dependents": [
      {
        "address": "address3",
        "age": 45,
        "birthday": "2016-03-13",
        "birthtime": "2016-03-13T12:52:32.123Z",
        "name": "name7",
        "uid": "uid7",
        "personType": null
      },
      {
        "address": "address4",
        "age": 46,
        "birthday": "2016-03-13",
        "birthtime": "2016-03-13T12:52:32.123Z",
        "name": "name8",
        "uid": "uid8",
        "personType": null
      },
      {
        "address": "address5",
        "age": 47,
        "birthday": "2016-03-13",
        "birthtime": "2016-03-13T12:52:32.123Z",
        "name": "name9",
        "uid": "uid9",
        "personType": null
      }
    ],
    "hiredAt": "Mon, 15 Jun 2009 20:45:30 GMT",
    "joiningDay": "Sunday",
    "salary": 176,
    "workingDays": [
      "Monday"
    ],
    "boss": null,
    "address": "address6",
    "age": 250,
    "birthday": "2016-03-13",
    "birthtime": "2016-03-13T12:52:32.123Z",
    "name": "name0",
    "uid": "uid0",
    "personType": null
  }
  ```



  Testing circular reference.



  `Boss`



  [`Employee`](#employee)



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `promoted_at` | `datetime` |  | - |
  | `assistant` | [`Employee`](#employee) | Optional | - |



  ```json
  {
    "promotedAt": 1480809600,
    "assistant": null,
    "department": "department0",
    "dependents": [
      {
        "address": "address3",
        "age": 45,
        "birthday": "2016-03-13",
        "birthtime": "2016-03-13T12:52:32.123Z",
        "name": "name7",
        "uid": "uid7",
        "personType": null
      },
      {
        "address": "address4",
        "age": 46,
        "birthday": "2016-03-13",
        "birthtime": "2016-03-13T12:52:32.123Z",
        "name": "name8",
        "uid": "uid8",
        "personType": null
      },
      {
        "address": "address5",
        "age": 47,
        "birthday": "2016-03-13",
        "birthtime": "2016-03-13T12:52:32.123Z",
        "name": "name9",
        "uid": "uid9",
        "personType": null
      }
    ],
    "hiredAt": "Mon, 15 Jun 2009 20:45:30 GMT",
    "joiningDay": "Sunday",
    "salary": 176,
    "workingDays": [
      "Monday"
    ],
    "boss": null,
    "address": "address6",
    "age": 250,
    "birthday": "2016-03-13",
    "birthtime": "2016-03-13T12:52:32.123Z",
    "name": "name0",
    "uid": "uid0",
    "personType": null
  }
  ```





  `DeleteBody`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `field` | `string` | - |



  ```json
  {
    "name": "name0",
    "field": "field6"
  }
  ```



  Raw http Request info



  `EchoResponse`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `body` | `dict` | Optional | - |
  | `headers` | `dict` | Optional | - |
  | `method` | `string` | Optional | - |
  | `path` | `string` | Optional | relativePath |
  | `query` | [`dict`](#queryparameter) | Optional | - |
  | `upload_count` | `int` | Optional | - |



  ```json
  {
    "body": null,
    "headers": null,
    "method": null,
    "path": null,
    "query": null,
    "uploadCount": null
  }
  ```





  `Person`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `address` | `string` |  | - |
  | `age` | `long|int` |  | - |
  | `birthday` | `date` |  | - |
  | `birthtime` | `datetime` |  | - |
  | `name` | `string` |  | - |
  | `uid` | `string` |  | - |
  | `person_type` | `string` | Optional | - |



  ```json
  {
    "address": "address6",
    "age": 250,
    "birthday": "2016-03-13",
    "birthtime": "2016-03-13T12:52:32.123Z",
    "name": "name0",
    "uid": "uid0",
    "personType": null
  }
  ```





  `ServerResponse`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `passed` | `bool` |  | - |
  | `message` | `string` | Optional | - |
  | `input` | `dict` | Optional | - |



  ```json
  {
    "passed": false,
    "Message": null,
    "input": null
  }
  ```



  Query parameter key value pair echoed back from the server.



  `QueryParameter`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `key` | `string` | Optional | - |



  ```json
  {
    "key": null
  }
  ```





  `Job`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `company` | `string` | - |



  ```json
  {
    "company": "company0"
  }
  ```





  `AdditionalModelParameters`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `field` | `string` | - |
  | `address` | `string` | - |
  | `job` | [`Job`](#job) | - |



  ```json
  {
    "name": "name0",
    "field": "field6",
    "address": "address6",
    "Job": {
      "company": "company6"
    }
  }
  ```





  `Validate`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `field` | `string` |  | - |
  | `name` | `string` |  | - |
  | `address` | `string` | Optional | - |



  ```json
  {
    "field": "field6",
    "name": "name0",
    "address": null
  }
  ```





  `TestNstringEncoding`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `field` | `string` | - |
  | `name` | `string` | - |



  ```json
  {
    "field": "field6",
    "name": "name0"
  }
  ```





  `TestRstringEncoding`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `field` | `string` | - |
  | `name` | `string` | - |



  ```json
  {
    "field": "field6",
    "name": "name0"
  }
  ```





  `TestRNstringEncoding`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `field` | `string` | - |
  | `name` | `string` | - |



  ```json
  {
    "field": "field6",
    "name": "name0"
  }
  ```





  `SendRfc1123DateTime`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`ModelWithOptionalRfc1123DateTime`](#modelwithoptionalrfc1123datetime) | Optional | - |



  ```json
  {
    "dateTime": null
  }
  ```





  `ModelWithOptionalRfc1123DateTime`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": null
  }
  ```





  `SendRfc339DateTime`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`ModelWithOptionalRfc3339DateTime`](#modelwithoptionalrfc3339datetime) | Optional | - |



  ```json
  {
    "dateTime": {
      "dateTime": "1994-02-13T14:01:54.9571247Z"
    }
  }
  ```





  `UuidAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `uuid` | `uuid|string` | Optional | - |



  ```json
  {
    "uuid": null
  }
  ```





  `DynamicAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `dynamic` | `object` | Optional | - |



  ```json
  {
    "dynamic": null
  }
  ```





  `ModelWithOptionalRfc3339DateTime`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": null
  }
  ```





  `UnixDateTime`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": null
  }
  ```





  `SendUnixDateTime`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | [`UnixDateTime`](#unixdatetime) | Optional | - |



  ```json
  {
    "dateTime": null
  }
  ```





  `PrecisionAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `precision` | `float` | Optional | - |



  ```json
  {
    "precision": null
  }
  ```





  `StringAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `string` | `string` | Optional | - |



  ```json
  {
    "string": null
  }
  ```





  `LongAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `long` | `long|int` | Optional | - |



  ```json
  {
    "long": null
  }
  ```





  `NumberAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `number` | `int` | Optional | - |



  ```json
  {
    "number": null
  }
  ```





  `BooleanAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `boolean` | `bool` | Optional | - |



  ```json
  {
    "boolean": null
  }
  ```





  `SoftwareTester`



  [`EmployeeComp`](#employeecomp)



  | Name | Type | Description |
  |  --- | --- | --- |
  | `team` | `string` | - |
  | `designation` | `string` | - |
  | `role` | `string` | - |



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Muhammad",
    "last name": "Farhan",
    "id": "123456",
    "team": "Testing",
    "designation": "Tester",
    "role": "Testing"
  }
  ```





  `Developer`



  [`EmployeeComp`](#employeecomp)



  | Name | Type | Description |
  |  --- | --- | --- |
  | `team` | `string` | - |
  | `designation` | `string` | - |
  | `role` | `string` | - |



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Muhammad",
    "last name": "Farhan",
    "id": "123456",
    "team": "CORE",
    "designation": "Manager",
    "role": "Team Lead"
  }
  ```





  `GlossEntry`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `id` | `string` | - |
  | `sort_as` | `string` | - |
  | `gloss_term` | `string` | - |
  | `acronym` | `string` | - |
  | `abbrev` | `string` | - |
  | `gloss_def` | [`GlossDef`](#glossdef) | - |
  | `gloss_see` | `string` | - |



  ```json
  {
    "ID": "SGML",
    "SortAs": "SGML",
    "GlossTerm": "Standard Generalized Markup Language",
    "Acronym": "SGML",
    "Abbrev": "ISO 8879:1986",
    "GlossDef": {
      "para": "A meta-markup language, used to create markup languages such as DocBook.",
      "GlossSeeAlso": [
        "GML",
        "XML"
      ]
    },
    "GlossSee": "markup"
  }
  ```





  `Mineral`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `strength` | `string` | - |
  | `dose` | `string` | - |
  | `route` | `string` | - |
  | `sig` | `string` | - |
  | `pill_count` | `string` | - |
  | `refills` | `string` | - |



  ```json
  {
    "name": "potassium chloride ER",
    "strength": "10 mEq Tab",
    "dose": "1 tab",
    "route": "PO",
    "sig": "daily",
    "pillCount": "#90",
    "refills": "Refill 3"
  }
  ```





  `Diuretic`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `strength` | `string` | - |
  | `dose` | `string` | - |
  | `route` | `string` | - |
  | `sig` | `string` | - |
  | `pill_count` | `string` | - |
  | `refills` | `string` | - |



  ```json
  {
    "name": "furosemide",
    "strength": "40 mg Tab",
    "dose": "1 tab",
    "route": "PO",
    "sig": "daily",
    "pillCount": "#90",
    "refills": "Refill 3"
  }
  ```





  `BossCompany`



  [`Company`](#company)



  | Name | Type | Description |
  |  --- | --- | --- |
  | `first_name` | `string` | - |
  | `last_name` | `string` | - |
  | `address_boss` | `string` | - |



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Adeel",
    "last name": "Ali",
    "address_boss": "nust"
  }
  ```





  `BetaBlocker`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `strength` | `string` | - |
  | `dose` | `string` | - |
  | `route` | `string` | - |
  | `sig` | `string` | - |
  | `pill_count` | `string` | - |
  | `refills` | `string` | - |



  ```json
  {
    "name": "metoprolol tartrate",
    "strength": "25 mg Tab",
    "dose": "1 tab",
    "route": "PO",
    "sig": "daily",
    "pillCount": "#90",
    "refills": "Refill 3"
  }
  ```





  `Anticoagulant`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `strength` | `string` | - |
  | `dose` | `string` | - |
  | `route` | `string` | - |
  | `sig` | `string` | - |
  | `pill_count` | `string` | - |
  | `refills` | `string` | - |



  ```json
  {
    "name": "warfarin sodium",
    "strength": "3 mg Tab",
    "dose": "1 tab",
    "route": "PO",
    "sig": "daily",
    "pillCount": "#90",
    "refills": "Refill 3"
  }
  ```





  `EmployeeComp`



  [`Company`](#company)



  | Name | Type | Description |
  |  --- | --- | --- |
  | `first_name` | `string` | - |
  | `last_name` | `string` | - |
  | `id` | `string` | - |



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601",
    "first name": "Muhammad",
    "last name": "Farhan",
    "id": "123456"
  }
  ```





  `Company`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `company_name` | `string` |  | - |
  | `address` | `string` |  | - |
  | `cell_number` | `string` |  | - |
  | `company` | `string` | Optional | - |



  ```json
  {
    "company name": "APIMatic",
    "address": "nust",
    "cell number": "090078601"
  }
  ```





  `Attributes`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `exclusive_maximum` | `bool` | - |
  | `exclusive_minimum` | `bool` | - |
  | `id` | `string` | - |



  ```json
  {
    "exclusiveMaximum": false,
    "exclusiveMinimum": false,
    "id": "5a9fcb01caacc310dc6bab51"
  }
  ```





  `ResponseWithEnum`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `param_format` | [`ParamFormat`](#paramformat) | - |
  | `optional` | `bool` | - |
  | `mtype` | [`Type`](#type) | - |
  | `constant` | `bool` | - |
  | `is_array` | `bool` | - |
  | `is_stream` | `bool` | - |
  | `is_attribute` | `bool` | - |
  | `is_map` | `bool` | - |
  | `attributes` | [`Attributes`](#attributes) | - |
  | `nullable` | `bool` | - |
  | `id` | `string` | - |
  | `name` | `string` | - |
  | `description` | `string` | - |



  ```json
  {
    "paramFormat": "Template",
    "optional": false,
    "type": "Long",
    "constant": false,
    "isArray": false,
    "isStream": false,
    "isAttribute": false,
    "isMap": false,
    "attributes": {
      "exclusiveMaximum": false,
      "exclusiveMinimum": false,
      "id": "5a9fcb01caacc310dc6bab51"
    },
    "nullable": false,
    "id": "5a9fcb01caacc310dc6bab50",
    "name": "petId",
    "description": "ID of pet to update"
  }
  ```





  `GlossDef`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `para` | `string` | - |
  | `gloss_see_also` | `List of string` | - |



  ```json
  {
    "para": "A meta-markup language, used to create markup languages such as DocBook.",
    "GlossSeeAlso": [
      "GML",
      "XML"
    ]
  }
  ```





  `GlossList`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `gloss_entry` | [`GlossEntry`](#glossentry) | - |



  ```json
  {
    "GlossEntry": {
      "ID": "SGML",
      "SortAs": "SGML",
      "GlossTerm": "Standard Generalized Markup Language",
      "Acronym": "SGML",
      "Abbrev": "ISO 8879:1986",
      "GlossDef": {
        "para": "A meta-markup language, used to create markup languages such as DocBook.",
        "GlossSeeAlso": [
          "GML",
          "XML"
        ]
      },
      "GlossSee": "markup"
    }
  }
  ```





  `GlossDiv`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `title` | `string` | - |
  | `gloss_list` | [`GlossList`](#glosslist) | - |



  ```json
  {
    "title": "S",
    "GlossList": {
      "GlossEntry": {
        "ID": "SGML",
        "SortAs": "SGML",
        "GlossTerm": "Standard Generalized Markup Language",
        "Acronym": "SGML",
        "Abbrev": "ISO 8879:1986",
        "GlossDef": {
          "para": "A meta-markup language, used to create markup languages such as DocBook.",
          "GlossSeeAlso": [
            "GML",
            "XML"
          ]
        },
        "GlossSee": "markup"
      }
    }
  }
  ```





  `Glossary`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `title` | `string` | - |
  | `gloss_div` | [`GlossDiv`](#glossdiv) | - |



  ```json
  {
    "title": "example glossary",
    "GlossDiv": {
      "title": "S",
      "GlossList": {
        "GlossEntry": {
          "ID": "SGML",
          "SortAs": "SGML",
          "GlossTerm": "Standard Generalized Markup Language",
          "Acronym": "SGML",
          "Abbrev": "ISO 8879:1986",
          "GlossDef": {
            "para": "A meta-markup language, used to create markup languages such as DocBook.",
            "GlossSeeAlso": [
              "GML",
              "XML"
            ]
          },
          "GlossSee": "markup"
        }
      }
    }
  }
  ```





  `Imaging`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `time` | `string` | - |
  | `location` | `string` | - |



  ```json
  {
    "name": "Chest X-Ray",
    "time": "Today",
    "location": "Main Hospital Radiology"
  }
  ```





  `Lab`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `time` | `string` | - |
  | `location` | `string` | - |



  ```json
  {
    "name": "Arterial Blood Gas",
    "time": "Today",
    "location": "Main Hospital Lab"
  }
  ```





  `Antianginal`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `strength` | `string` | - |
  | `dose` | `string` | - |
  | `route` | `string` | - |
  | `sig` | `string` | - |
  | `pill_count` | `string` | - |
  | `refills` | `string` | - |



  ```json
  {
    "name": "nitroglycerin",
    "strength": "0.4 mg Sublingual Tab",
    "dose": "1 tab",
    "route": "SL",
    "sig": "q15min PRN",
    "pillCount": "#30",
    "refills": "Refill 1"
  }
  ```





  `AceInhibitor`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `name` | `string` | - |
  | `strength` | `string` | - |
  | `dose` | `string` | - |
  | `route` | `string` | - |
  | `sig` | `string` | - |
  | `pill_count` | `string` | - |
  | `refills` | `string` | - |



  ```json
  {
    "name": "lisinopril",
    "strength": "10 mg Tab",
    "dose": "1 tab",
    "route": "PO",
    "sig": "daily",
    "pillCount": "#90",
    "refills": "Refill 3"
  }
  ```





  `Medication`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `ace_inhibitors` | [`List of AceInhibitor`](#aceinhibitor) | - |
  | `antianginal` | [`List of Antianginal`](#antianginal) | - |
  | `anticoagulants` | [`List of Anticoagulant`](#anticoagulant) | - |
  | `beta_blocker` | [`List of BetaBlocker`](#betablocker) | - |
  | `diuretic` | [`List of Diuretic`](#diuretic) | - |
  | `mineral` | [`List of Mineral`](#mineral) | - |



  ```json
  {
    "aceInhibitors": [
      {
        "name": "lisinopril",
        "strength": "10 mg Tab",
        "dose": "1 tab",
        "route": "PO",
        "sig": "daily",
        "pillCount": "#90",
        "refills": "Refill 3"
      }
    ],
    "antianginal": [
      {
        "name": "nitroglycerin",
        "strength": "0.4 mg Sublingual Tab",
        "dose": "1 tab",
        "route": "SL",
        "sig": "q15min PRN",
        "pillCount": "#30",
        "refills": "Refill 1"
      }
    ],
    "anticoagulants": [
      {
        "name": "warfarin sodium",
        "strength": "3 mg Tab",
        "dose": "1 tab",
        "route": "PO",
        "sig": "daily",
        "pillCount": "#90",
        "refills": "Refill 3"
      }
    ],
    "betaBlocker": [
      {
        "name": "metoprolol tartrate",
        "strength": "25 mg Tab",
        "dose": "1 tab",
        "route": "PO",
        "sig": "daily",
        "pillCount": "#90",
        "refills": "Refill 3"
      }
    ],
    "diuretic": [
      {
        "name": "furosemide",
        "strength": "40 mg Tab",
        "dose": "1 tab",
        "route": "PO",
        "sig": "daily",
        "pillCount": "#90",
        "refills": "Refill 3"
      }
    ],
    "mineral": [
      {
        "name": "potassium chloride ER",
        "strength": "10 mEq Tab",
        "dose": "1 tab",
        "route": "PO",
        "sig": "daily",
        "pillCount": "#90",
        "refills": "Refill 3"
      }
    ]
  }
  ```





  `Complex1`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `medications` | [`List of Medication`](#medication) | - |
  | `labs` | [`List of Lab`](#lab) | - |
  | `imaging` | [`List of Imaging`](#imaging) | - |



  ```json
  {
    "medications": [
      {
        "aceInhibitors": [
          {
            "name": "lisinopril",
            "strength": "10 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "antianginal": [
          {
            "name": "nitroglycerin",
            "strength": "0.4 mg Sublingual Tab",
            "dose": "1 tab",
            "route": "SL",
            "sig": "q15min PRN",
            "pillCount": "#30",
            "refills": "Refill 1"
          }
        ],
        "anticoagulants": [
          {
            "name": "warfarin sodium",
            "strength": "3 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "betaBlocker": [
          {
            "name": "metoprolol tartrate",
            "strength": "25 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "diuretic": [
          {
            "name": "furosemide",
            "strength": "40 mg Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ],
        "mineral": [
          {
            "name": "potassium chloride ER",
            "strength": "10 mEq Tab",
            "dose": "1 tab",
            "route": "PO",
            "sig": "daily",
            "pillCount": "#90",
            "refills": "Refill 3"
          }
        ]
      }
    ],
    "labs": [
      {
        "name": "Arterial Blood Gas",
        "time": "Today",
        "location": "Main Hospital Lab"
      },
      {
        "name": "BMP",
        "time": "Today",
        "location": "Primary Care Clinic"
      },
      {
        "name": "BNP",
        "time": "3 Weeks",
        "location": "Primary Care Clinic"
      },
      {
        "name": "BUN",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      },
      {
        "name": "Cardiac Enzymes",
        "time": "Today",
        "location": "Primary Care Clinic"
      },
      {
        "name": "CBC",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      },
      {
        "name": "Creatinine",
        "time": "1 Year",
        "location": "Main Hospital Lab"
      },
      {
        "name": "Electrolyte Panel",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      },
      {
        "name": "Glucose",
        "time": "1 Year",
        "location": "Main Hospital Lab"
      },
      {
        "name": "PT/INR",
        "time": "3 Weeks",
        "location": "Primary Care Clinic"
      },
      {
        "name": "PTT",
        "time": "3 Weeks",
        "location": "Coumadin Clinic"
      },
      {
        "name": "TSH",
        "time": "1 Year",
        "location": "Primary Care Clinic"
      }
    ],
    "imaging": [
      {
        "name": "Chest X-Ray",
        "time": "Today",
        "location": "Main Hospital Radiology"
      },
      {
        "name": "Chest X-Ray",
        "time": "Today",
        "location": "Main Hospital Radiology"
      },
      {
        "name": "Chest X-Ray",
        "time": "Today",
        "location": "Main Hospital Radiology"
      }
    ]
  }
  ```





  `Complex2`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `glossary` | [`Glossary`](#glossary) | - |



  ```json
  {
    "glossary": {
      "title": "example glossary",
      "GlossDiv": {
        "title": "S",
        "GlossList": {
          "GlossEntry": {
            "ID": "SGML",
            "SortAs": "SGML",
            "GlossTerm": "Standard Generalized Markup Language",
            "Acronym": "SGML",
            "Abbrev": "ISO 8879:1986",
            "GlossDef": {
              "para": "A meta-markup language, used to create markup languages such as DocBook.",
              "GlossSeeAlso": [
                "GML",
                "XML"
              ]
            },
            "GlossSee": "markup"
          }
        }
      }
    }
  }
  ```





  `Advanced`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `tags` | `List of string` | - |
  | `attachments` | `int` | - |
  | `required_signatures` | `int` | - |
  | `get_social_security_number` | `bool` | - |
  | `time_to_live` | [`TimeToLive`](#timetolive) | - |



  ```json
  {
    "tags": [
      "develop",
      "fun_with_documents"
    ],
    "attachments": 0,
    "requiredSignatures": 0,
    "getSocialSecurityNumber": false,
    "timeToLive": {
      "deadline": "2018-06-29T14:57:25Z",
      "deleteAfterHours": 1
    }
  }
  ```





  `DataToSign`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `file_name` | `string` | - |
  | `convert_to_pdf` | `bool` | - |



  ```json
  {
    "fileName": "sample.txt",
    "convertToPDF": false
  }
  ```





  `ContactDetails`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `email` | `string` | - |
  | `url` | `string` | - |



  ```json
  {
    "email": "test@test.com",
    "url": "https://idfy.io"
  }
  ```





  `Styling`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `color_theme` | `string` | - |
  | `spinner` | `string` | - |



  ```json
  {
    "colorTheme": "Pink",
    "spinner": "Cubes"
  }
  ```





  `Dialogs`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `before` | [`Before`](#before) | - |



  ```json
  {
    "before": {
      "useCheckBox": false,
      "title": "Info",
      "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
    }
  }
  ```





  `SignatureType`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `mechanism` | `string` | - |
  | `on_eaccept_use_hand_written_signature` | `bool` | - |



  ```json
  {
    "mechanism": "pkisignature",
    "onEacceptUseHandWrittenSignature": false
  }
  ```





  `RedirectSettings`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `redirect_mode` | `string` | - |



  ```json
  {
    "redirectMode": "donot_redirect"
  }
  ```





  `TimeToLive`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `deadline` | `string` | - |
  | `delete_after_hours` | `int` | - |



  ```json
  {
    "deadline": "2018-06-29T14:57:25Z",
    "deleteAfterHours": 1
  }
  ```





  `Status`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `document_status` | `string` | - |
  | `completed_packages` | `List of string` | - |
  | `attachment_packages` | `object` | - |



  ```json
  {
    "documentStatus": "unsigned",
    "completedPackages": [],
    "attachmentPackages": {}
  }
  ```





  `Before`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `use_check_box` | `bool` | - |
  | `title` | `string` | - |
  | `message` | `string` | - |



  ```json
  {
    "useCheckBox": false,
    "title": "Info",
    "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
  }
  ```





  `Ui`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `dialogs` | [`Dialogs`](#dialogs) | - |
  | `language` | [`LanguageEnum`](#languageenum) | - |
  | `styling` | [`Styling`](#styling) | - |



  ```json
  {
    "dialogs": {
      "before": {
        "useCheckBox": false,
        "title": "Info",
        "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
      }
    },
    "language": "EN",
    "styling": {
      "colorTheme": "Pink",
      "spinner": "Cubes"
    }
  }
  ```





  `Complex3`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `document_id` | `string` | - |
  | `signers` | [`List of Signer`](#signer) | - |
  | `status` | [`Status`](#status) | - |
  | `title` | `string` | - |
  | `description` | `string` | - |
  | `external_id` | `string` | - |
  | `data_to_sign` | [`DataToSign`](#datatosign) | - |
  | `contact_details` | [`ContactDetails`](#contactdetails) | - |
  | `advanced` | [`Advanced`](#advanced) | - |



  ```json
  {
    "documentId": "099cceda-38a8-4b01-87b9-a8f2007675d6",
    "signers": [
      {
        "id": "1bef97d1-0704-4eb2-a490-a8f2007675db",
        "url": "https://sign-test.idfy.io/start?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJrdmVyc2lvbiI6IjdmNzhjNzNkMmQ1MjQzZWRiYjdiNDI0MmI2MDE1MWU4IiwiZG9jaWQiOiIwOTljY2VkYS0zOGE4LTRiMDEtODdiOS1hOGYyMDA3Njc1ZDYiLCJhaWQiOiJjMGNlMTQ2OC1hYzk0LTRiMzQtODc2ZS1hODg1MDBjMmI5YTEiLCJsZyI6ImVuIiwiZXJyIjpudWxsLCJpZnIiOmZhbHNlLCJ3Ym1zZyI6ZmFsc2UsInNmaWQiOiIxYmVmOTdkMS0wNzA0LTRlYjItYTQ5MC1hOGYyMDA3Njc1ZGIiLCJ1cmxleHAiOm51bGwsImF0aCI6bnVsbCwiZHQiOiJUZXN0IGRvY3VtZW50IiwidmYiOmZhbHNlLCJhbiI6IklkZnkgU0RLIGRlbW8iLCJ0aCI6IlBpbmsiLCJzcCI6IkN1YmVzIiwiZG9tIjpudWxsLCJyZGlyIjpmYWxzZSwidXQiOiJ3ZWIiLCJ1dHYiOm51bGwsInNtIjoidGVzdEB0ZXN0LmNvbSJ9.Dyy2RSeR6dmU8qxOEi-2gEX3Gg7wry6JhkZIWOuADDdu5jJWidQLcxfJn_qAHNpb",
        "links": [],
        "externalSignerId": "uoiahsd321982983jhrmnec2wsadm32",
        "redirectSettings": {
          "redirectMode": "donot_redirect"
        },
        "signatureType": {
          "mechanism": "pkisignature",
          "onEacceptUseHandWrittenSignature": false
        },
        "ui": {
          "dialogs": {
            "before": {
              "useCheckBox": false,
              "title": "Info",
              "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
            }
          },
          "language": "EN",
          "styling": {
            "colorTheme": "Pink",
            "spinner": "Cubes"
          }
        },
        "tags": [],
        "order": 0,
        "required": false
      }
    ],
    "status": {
      "documentStatus": "unsigned",
      "completedPackages": [],
      "attachmentPackages": {}
    },
    "title": "Test document",
    "description": "This is an important document",
    "externalId": "ae7b9ca7-3839-4e0d-a070-9f14bffbbf55",
    "dataToSign": {
      "fileName": "sample.txt",
      "convertToPDF": false
    },
    "contactDetails": {
      "email": "test@test.com",
      "url": "https://idfy.io"
    },
    "advanced": {
      "tags": [
        "develop",
        "fun_with_documents"
      ],
      "attachments": 0,
      "requiredSignatures": 0,
      "getSocialSecurityNumber": false,
      "timeToLive": {
        "deadline": "2018-06-29T14:57:25Z",
        "deleteAfterHours": 1
      }
    }
  }
  ```





  `Signer`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `id` | `string` | - |
  | `url` | `string` | - |
  | `links` | `List of string` | - |
  | `external_signer_id` | `string` | - |
  | `redirect_settings` | [`RedirectSettings`](#redirectsettings) | - |
  | `signature_type` | [`SignatureType`](#signaturetype) | - |
  | `ui` | [`Ui`](#ui) | - |
  | `tags` | `List of string` | - |
  | `order` | `int` | - |
  | `required` | `bool` | - |



  ```json
  {
    "id": "1bef97d1-0704-4eb2-a490-a8f2007675db",
    "url": "https://sign-test.idfy.io/start?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJrdmVyc2lvbiI6IjdmNzhjNzNkMmQ1MjQzZWRiYjdiNDI0MmI2MDE1MWU4IiwiZG9jaWQiOiIwOTljY2VkYS0zOGE4LTRiMDEtODdiOS1hOGYyMDA3Njc1ZDYiLCJhaWQiOiJjMGNlMTQ2OC1hYzk0LTRiMzQtODc2ZS1hODg1MDBjMmI5YTEiLCJsZyI6ImVuIiwiZXJyIjpudWxsLCJpZnIiOmZhbHNlLCJ3Ym1zZyI6ZmFsc2UsInNmaWQiOiIxYmVmOTdkMS0wNzA0LTRlYjItYTQ5MC1hOGYyMDA3Njc1ZGIiLCJ1cmxleHAiOm51bGwsImF0aCI6bnVsbCwiZHQiOiJUZXN0IGRvY3VtZW50IiwidmYiOmZhbHNlLCJhbiI6IklkZnkgU0RLIGRlbW8iLCJ0aCI6IlBpbmsiLCJzcCI6IkN1YmVzIiwiZG9tIjpudWxsLCJyZGlyIjpmYWxzZSwidXQiOiJ3ZWIiLCJ1dHYiOm51bGwsInNtIjoidGVzdEB0ZXN0LmNvbSJ9.Dyy2RSeR6dmU8qxOEi-2gEX3Gg7wry6JhkZIWOuADDdu5jJWidQLcxfJn_qAHNpb",
    "links": [],
    "externalSignerId": "uoiahsd321982983jhrmnec2wsadm32",
    "redirectSettings": {
      "redirectMode": "donot_redirect"
    },
    "signatureType": {
      "mechanism": "pkisignature",
      "onEacceptUseHandWrittenSignature": false
    },
    "ui": {
      "dialogs": {
        "before": {
          "useCheckBox": false,
          "title": "Info",
          "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
        }
      },
      "language": "EN",
      "styling": {
        "colorTheme": "Pink",
        "spinner": "Cubes"
      }
    },
    "tags": [],
    "order": 0,
    "required": false
  }
  ```





  `Complex5`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `response_data` | [`ResponseData`](#responsedata) |  | - |
  | `response_details` | `string` | Optional | - |
  | `response_status` | `int` |  | - |



  ```json
  {
    "responseData": {
      "feed": {
        "feedUrl": "http://ramrojob.com/feed",
        "title": "Ramro Job",
        "link": "http://ramrojob.com",
        "author": "",
        "description": "...your pathway to success",
        "type": "rss20",
        "entries": [
          {
            "title": "Monitoring and Evaluation Specialist Wanted at GRM International",
            "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html",
            "author": "Bandana Aryal",
            "publishedDate": "Sun, 12 May 2013 01:10:24 -0700",
            "contentSnippet": "Key Responsibilities Under direction of the Team Leader, responsible for the design and roll out of programme M&#38;E plan, ...",
            "content": "<p><strong>Key Responsibilities</strong></p>\n<ul>\n<li>Under direction of the Team Leader, responsible for the design and roll out of programme M&amp;E plan, including design of the logframe and key performance indicators.</li>\n<li>Track programme progress against indicators and ensure early identification of any areas requiring remedial action.</li>\n<li>Carry out site visits and provide M&amp;E support and training for local partners.</li>\n<li>Harmonise programme monitoring indicators and systems with national M&amp;E systems.</li>\n<li>Promote use of data to inform decision making and link evidence-based approaches to achievement of results.</li>\n<li>Support operations research and specialised studies, such as client satisfaction, cost-effectiveness, and impact evaluation.</li>\n<li>Solicit and manage local data collection and research teams, as needed.</li>\n<li>Contribute to the preparation of regular progress reports, technical deliverables, presentations, and annual work plans.</li>\n</ul>\n<p><strong>Qualifications</strong></p>\n<ul>\n<li>Seven or more years of experience monitoring and evaluating reproductive health and family planning programmes, including promoting use of data for decision-making.</li>\n<li>Strong technical grasp of relevant health issues: sexual and reproductive health; family planning; maternal, new-born, and child health; HIV and AIDS; and health equity.</li>\n<li>Understanding of health market dynamics and the health system in Nepal.</li>\n<li>Demonstrated experience working with government, private sector, and nongovernmental health sector partners in Nepal, at national and decentralised levels.</li>\n<li>Experience supporting DFID, European Union, USAID, World Bank, or other donor-funded or government health programmes.</li>\n<li>Strong quantitative and qualitative research and analysis skills.</li>\n<li>Demonstrated experience with computerised management information systems, databases, MS Office, and other relevant skills.</li>\n<li>Ability to graphically present data in ways that engage and influence target audiences.</li>\n<li>Knowledge of in-country and international guidelines pertaining to research ethics.</li>\n<li>Strong personal qualities, including integrity, commitment to excellence, equality, openness, inclusiveness, and collegiality.</li>\n<li>Excellent written and spoken English required, local languages are a distinct advantage.</li>\n<li>Advanced degree/s in relevant discipline preferred.</li>\n<li>Nepali nationals strongly encouraged to apply.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html\">Monitoring and Evaluation Specialist Wanted at GRM International</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
            "categories": [
              "Uncategorized"
            ]
          },
          {
            "title": "Director of Finance and Admin Wanted at Abt Associates",
            "link": "http://ramrojob.com/job/2013/05/12/director-of-finance-and-admin-wanted-at-abt-associates.html",
            "author": "Bandana Aryal",
            "publishedDate": "Sun, 12 May 2013 01:02:28 -0700",
            "contentSnippet": "Job Responsibilities: Abt Associates seeks a Director of Finance and Administration for an upcoming DFID-funded family planning ...",
            "content": "<p><strong>Job Responsibilities:</strong></p>\n<p>Abt Associates seeks a Director of Finance and Administration for an upcoming DFID-funded family planning program in Nepal. The initiative will work with the Ministry of Health and Population to increase use of modern high-quality family planning methods by the most vulnerable and excluded women by supply innovative and high quality family planning services. The program will also work with the Ministry of Health and Population to ensure better choices and availabilites of reproductive health commodities.</p>\n<p>The Director of Finance and Administration will be responsible for the management of the contract, procurement, subcontracting, financial management and reporting, and general administrative support of the program. S/he will develop and track budgets, manage payroll and vendor relations, and control all financial transactions and reporting, both for the client and for Abt Associates headquarters.</p>\n<p>Specific responsibilities will include:</p>\n<ul>\n<li>Ensure compliance with terms and references in the contract;</li>\n<li>Develop and implement financial and administrative policies and procedures that meet project requirements and donor regulations;</li>\n<li>Create and maintain financial reporting and tracking systems, and provide financial performance updates on project activities;</li>\n<li>Prepare budgets and revenue plans for project programming and corporate reporting;</li>\n<li>Oversee financial and HR administration of project (purchase requisitions, consulting agreements, vendor invoices, client invoices, payroll etc.);</li>\n<li>Manage vendors and subcontractors in compliance with Abt and DfID policies and regulations;</li>\n<li>Supervise all financial and administrative staff;</li>\n<li>Provide training to field staff on project procedures as well as building skill-levels of project staff in the area of finance, administration, and project management.</li>\n</ul>\n<p><strong>Skills Prerequisites:</strong></p>\n<ul>\n<li>Bachelorï¿½s Degree (minimum) or masterï¿½s degree (preferred) in Business, Finance, Accounting or other relevant field;</li>\n<li>10 years of experience in administration, project management and/or financial management;</li>\n<li>5 years of experience working with international donors in a development setting;</li>\n<li>Experience with DfID contracts desirable;</li>\n<li>Strong analytical and computer skills, with emphasis on budgeting and financial analysis;</li>\n<li>Excellent inter-personal, communication and organizational skills;</li>\n<li>Capabilities in Nepali or other South Asian languages are desirable.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/director-of-finance-and-admin-wanted-at-abt-associates.html\">Director of Finance and Admin Wanted at Abt Associates</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
            "categories": [
              "Uncategorized"
            ]
          },
          {
            "title": "Technical Director Wanted at Family Planning Nepal",
            "link": "http://ramrojob.com/job/2013/05/12/technical-director-wanted-at-family-planning-nepal.html",
            "author": "Bandana Aryal",
            "publishedDate": "Sun, 12 May 2013 00:57:03 -0700",
            "contentSnippet": "Skills Prerequisites: Masters Degree (minimum) in Public Health, Business Administration or related relevant discipline Ten ...",
            "content": "<p><strong>Skills Prerequisites:</strong></p>\n<ul>\n<li>Masters Degree (minimum) in Public Health, Business Administration or related relevant discipline</li>\n<li>Ten years (10) of relevant professional experience, including sales or marketing, and strong business acumen in areas of business process and analysis would be highly valued</li>\n<li>Eight (8) years experience working in health sector projects or initiatives involving multiple stakeholder groups, including NGOs and the private health sector</li>\n<li>Successful prior experience in social marketing or franchising</li>\n<li>Proven track record of building and sustaining effective partnerships, advocating effectively and communicating to various constituencies</li>\n<li>Ability to coordinate in a dynamic environment</li>\n<li>Substantial experience in building capacity in the non-state/private sector</li>\n<li>Ability to independently plan and execute complex tasks while addressing daily management details and remaining organized and focused on long-term deadlines and strategies</li>\n<li>Solid professional reputation and strong, demonstrated interpersonal skills</li>\n<li>Professional working experience in Nepal desirable</li>\n<li>Fluency in Nepali desirable</li>\n<li>Excellent written and oral presentation skills in English</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/technical-director-wanted-at-family-planning-nepal.html\">Technical Director Wanted at Family Planning Nepal</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
            "categories": [
              "Uncategorized"
            ]
          },
          {
            "title": "Monitoring and Evaluation Analyst Wanted at UN Women",
            "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-analyst-wanted-at-un-women.html",
            "author": "Bandana Aryal",
            "publishedDate": "Sun, 12 May 2013 00:46:37 -0700",
            "contentSnippet": "Core Competencies Knowledge of current practices in the area of monitoring and evaluation, knowledge management Promotes the ...",
            "content": "<p><b>Core Competencies</b></p>\n<ul>\n<li>Knowledge of current practices in the area of monitoring and evaluation, knowledge management</li>\n<li>Promotes the vision, mission, and strategic goals of UN Women;</li>\n<li>Displays cultural, gender, religion, race, nationality and age sensitivity and adaptability</li>\n<li>Fostering innovation and empowerment</li>\n<li>Working in teams at all levels</li>\n<li>Communicating information and ideas/knowledge sharing</li>\n<li>Analytical and strategic thinking/results orientation/commitment to Excellence</li>\n</ul>\n<p><span style=\"text-decoration:underline\"><strong>Qualifications and Experience:</strong></span></p>\n<ul>\n<li>Masterï¿½s Degree in Economics, Management, Rural Development, Social Sciences, or related field. Additional certification in statistics, MIS management and Monitoring and Evaluation will be considered as an asset.</li>\n<li>Two years of relevant professional experience in the field of rights based monitoring and evaluation;</li>\n<li>Experience in the management of gender equality and womenï¿½s empowerment programmes or analytic work in gender and development, gender analysis and/or human rights;</li>\n<li> Good knowledge of rights-based approach and result-based management.</li>\n<li> Experience related to UN Womenï¿½s mandate and activities would be an added advantage;</li>\n<li> Sound knowledge of international standards on human rights, womenï¿½s rights and related instruments;</li>\n<li>A proven ability to liaise with a myriad of stakeholders and partners, including government, civil society, international organizations and grassroots organizations</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-analyst-wanted-at-un-women.html\">Monitoring and Evaluation Analyst Wanted at UN Women</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
            "categories": [
              "The Himalayan Times"
            ]
          }
        ]
      }
    },
    "responseStatus": 200
  }
  ```





  `ResponseData`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `feed` | [`Feed`](#feed) | - |



  ```json
  {
    "feed": {
      "feedUrl": "http://ramrojob.com/feed",
      "title": "Ramro Job",
      "link": "http://ramrojob.com",
      "author": "",
      "description": "...your pathway to success",
      "type": "rss20",
      "entries": [
        {
          "title": "Monitoring and Evaluation Specialist Wanted at GRM International",
          "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html",
          "author": "Bandana Aryal",
          "publishedDate": "Sun, 12 May 2013 01:10:24 -0700",
          "contentSnippet": "Key Responsibilities Under direction of the Team Leader, responsible for the design and roll out of programme M&#38;E plan, ...",
          "content": "<p><strong>Key Responsibilities</strong></p>\n<ul>\n<li>Under direction of the Team Leader, responsible for the design and roll out of programme M&amp;E plan, including design of the logframe and key performance indicators.</li>\n<li>Track programme progress against indicators and ensure early identification of any areas requiring remedial action.</li>\n<li>Carry out site visits and provide M&amp;E support and training for local partners.</li>\n<li>Harmonise programme monitoring indicators and systems with national M&amp;E systems.</li>\n<li>Promote use of data to inform decision making and link evidence-based approaches to achievement of results.</li>\n<li>Support operations research and specialised studies, such as client satisfaction, cost-effectiveness, and impact evaluation.</li>\n<li>Solicit and manage local data collection and research teams, as needed.</li>\n<li>Contribute to the preparation of regular progress reports, technical deliverables, presentations, and annual work plans.</li>\n</ul>\n<p><strong>Qualifications</strong></p>\n<ul>\n<li>Seven or more years of experience monitoring and evaluating reproductive health and family planning programmes, including promoting use of data for decision-making.</li>\n<li>Strong technical grasp of relevant health issues: sexual and reproductive health; family planning; maternal, new-born, and child health; HIV and AIDS; and health equity.</li>\n<li>Understanding of health market dynamics and the health system in Nepal.</li>\n<li>Demonstrated experience working with government, private sector, and nongovernmental health sector partners in Nepal, at national and decentralised levels.</li>\n<li>Experience supporting DFID, European Union, USAID, World Bank, or other donor-funded or government health programmes.</li>\n<li>Strong quantitative and qualitative research and analysis skills.</li>\n<li>Demonstrated experience with computerised management information systems, databases, MS Office, and other relevant skills.</li>\n<li>Ability to graphically present data in ways that engage and influence target audiences.</li>\n<li>Knowledge of in-country and international guidelines pertaining to research ethics.</li>\n<li>Strong personal qualities, including integrity, commitment to excellence, equality, openness, inclusiveness, and collegiality.</li>\n<li>Excellent written and spoken English required, local languages are a distinct advantage.</li>\n<li>Advanced degree/s in relevant discipline preferred.</li>\n<li>Nepali nationals strongly encouraged to apply.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html\">Monitoring and Evaluation Specialist Wanted at GRM International</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
          "categories": [
            "Uncategorized"
          ]
        },
        {
          "title": "Director of Finance and Admin Wanted at Abt Associates",
          "link": "http://ramrojob.com/job/2013/05/12/director-of-finance-and-admin-wanted-at-abt-associates.html",
          "author": "Bandana Aryal",
          "publishedDate": "Sun, 12 May 2013 01:02:28 -0700",
          "contentSnippet": "Job Responsibilities: Abt Associates seeks a Director of Finance and Administration for an upcoming DFID-funded family planning ...",
          "content": "<p><strong>Job Responsibilities:</strong></p>\n<p>Abt Associates seeks a Director of Finance and Administration for an upcoming DFID-funded family planning program in Nepal. The initiative will work with the Ministry of Health and Population to increase use of modern high-quality family planning methods by the most vulnerable and excluded women by supply innovative and high quality family planning services. The program will also work with the Ministry of Health and Population to ensure better choices and availabilites of reproductive health commodities.</p>\n<p>The Director of Finance and Administration will be responsible for the management of the contract, procurement, subcontracting, financial management and reporting, and general administrative support of the program. S/he will develop and track budgets, manage payroll and vendor relations, and control all financial transactions and reporting, both for the client and for Abt Associates headquarters.</p>\n<p>Specific responsibilities will include:</p>\n<ul>\n<li>Ensure compliance with terms and references in the contract;</li>\n<li>Develop and implement financial and administrative policies and procedures that meet project requirements and donor regulations;</li>\n<li>Create and maintain financial reporting and tracking systems, and provide financial performance updates on project activities;</li>\n<li>Prepare budgets and revenue plans for project programming and corporate reporting;</li>\n<li>Oversee financial and HR administration of project (purchase requisitions, consulting agreements, vendor invoices, client invoices, payroll etc.);</li>\n<li>Manage vendors and subcontractors in compliance with Abt and DfID policies and regulations;</li>\n<li>Supervise all financial and administrative staff;</li>\n<li>Provide training to field staff on project procedures as well as building skill-levels of project staff in the area of finance, administration, and project management.</li>\n</ul>\n<p><strong>Skills Prerequisites:</strong></p>\n<ul>\n<li>Bachelorï¿½s Degree (minimum) or masterï¿½s degree (preferred) in Business, Finance, Accounting or other relevant field;</li>\n<li>10 years of experience in administration, project management and/or financial management;</li>\n<li>5 years of experience working with international donors in a development setting;</li>\n<li>Experience with DfID contracts desirable;</li>\n<li>Strong analytical and computer skills, with emphasis on budgeting and financial analysis;</li>\n<li>Excellent inter-personal, communication and organizational skills;</li>\n<li>Capabilities in Nepali or other South Asian languages are desirable.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/director-of-finance-and-admin-wanted-at-abt-associates.html\">Director of Finance and Admin Wanted at Abt Associates</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
          "categories": [
            "Uncategorized"
          ]
        },
        {
          "title": "Technical Director Wanted at Family Planning Nepal",
          "link": "http://ramrojob.com/job/2013/05/12/technical-director-wanted-at-family-planning-nepal.html",
          "author": "Bandana Aryal",
          "publishedDate": "Sun, 12 May 2013 00:57:03 -0700",
          "contentSnippet": "Skills Prerequisites: Masters Degree (minimum) in Public Health, Business Administration or related relevant discipline Ten ...",
          "content": "<p><strong>Skills Prerequisites:</strong></p>\n<ul>\n<li>Masters Degree (minimum) in Public Health, Business Administration or related relevant discipline</li>\n<li>Ten years (10) of relevant professional experience, including sales or marketing, and strong business acumen in areas of business process and analysis would be highly valued</li>\n<li>Eight (8) years experience working in health sector projects or initiatives involving multiple stakeholder groups, including NGOs and the private health sector</li>\n<li>Successful prior experience in social marketing or franchising</li>\n<li>Proven track record of building and sustaining effective partnerships, advocating effectively and communicating to various constituencies</li>\n<li>Ability to coordinate in a dynamic environment</li>\n<li>Substantial experience in building capacity in the non-state/private sector</li>\n<li>Ability to independently plan and execute complex tasks while addressing daily management details and remaining organized and focused on long-term deadlines and strategies</li>\n<li>Solid professional reputation and strong, demonstrated interpersonal skills</li>\n<li>Professional working experience in Nepal desirable</li>\n<li>Fluency in Nepali desirable</li>\n<li>Excellent written and oral presentation skills in English</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/technical-director-wanted-at-family-planning-nepal.html\">Technical Director Wanted at Family Planning Nepal</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
          "categories": [
            "Uncategorized"
          ]
        },
        {
          "title": "Monitoring and Evaluation Analyst Wanted at UN Women",
          "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-analyst-wanted-at-un-women.html",
          "author": "Bandana Aryal",
          "publishedDate": "Sun, 12 May 2013 00:46:37 -0700",
          "contentSnippet": "Core Competencies Knowledge of current practices in the area of monitoring and evaluation, knowledge management Promotes the ...",
          "content": "<p><b>Core Competencies</b></p>\n<ul>\n<li>Knowledge of current practices in the area of monitoring and evaluation, knowledge management</li>\n<li>Promotes the vision, mission, and strategic goals of UN Women;</li>\n<li>Displays cultural, gender, religion, race, nationality and age sensitivity and adaptability</li>\n<li>Fostering innovation and empowerment</li>\n<li>Working in teams at all levels</li>\n<li>Communicating information and ideas/knowledge sharing</li>\n<li>Analytical and strategic thinking/results orientation/commitment to Excellence</li>\n</ul>\n<p><span style=\"text-decoration:underline\"><strong>Qualifications and Experience:</strong></span></p>\n<ul>\n<li>Masterï¿½s Degree in Economics, Management, Rural Development, Social Sciences, or related field. Additional certification in statistics, MIS management and Monitoring and Evaluation will be considered as an asset.</li>\n<li>Two years of relevant professional experience in the field of rights based monitoring and evaluation;</li>\n<li>Experience in the management of gender equality and womenï¿½s empowerment programmes or analytic work in gender and development, gender analysis and/or human rights;</li>\n<li> Good knowledge of rights-based approach and result-based management.</li>\n<li> Experience related to UN Womenï¿½s mandate and activities would be an added advantage;</li>\n<li> Sound knowledge of international standards on human rights, womenï¿½s rights and related instruments;</li>\n<li>A proven ability to liaise with a myriad of stakeholders and partners, including government, civil society, international organizations and grassroots organizations</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-analyst-wanted-at-un-women.html\">Monitoring and Evaluation Analyst Wanted at UN Women</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
          "categories": [
            "The Himalayan Times"
          ]
        }
      ]
    }
  }
  ```





  `Feed`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `feed_url` | `string` | - |
  | `title` | `string` | - |
  | `link` | `string` | - |
  | `author` | `string` | - |
  | `description` | `string` | - |
  | `mtype` | `string` | - |
  | `entries` | [`List of Entry`](#entry) | - |



  ```json
  {
    "feedUrl": "http://ramrojob.com/feed",
    "title": "Ramro Job",
    "link": "http://ramrojob.com",
    "author": "",
    "description": "...your pathway to success",
    "type": "rss20",
    "entries": [
      {
        "title": "Monitoring and Evaluation Specialist Wanted at GRM International",
        "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html",
        "author": "Bandana Aryal",
        "publishedDate": "Sun, 12 May 2013 01:10:24 -0700",
        "contentSnippet": "Key Responsibilities Under direction of the Team Leader, responsible for the design and roll out of programme M&#38;E plan, ...",
        "content": "<p><strong>Key Responsibilities</strong></p>\n<ul>\n<li>Under direction of the Team Leader, responsible for the design and roll out of programme M&amp;E plan, including design of the logframe and key performance indicators.</li>\n<li>Track programme progress against indicators and ensure early identification of any areas requiring remedial action.</li>\n<li>Carry out site visits and provide M&amp;E support and training for local partners.</li>\n<li>Harmonise programme monitoring indicators and systems with national M&amp;E systems.</li>\n<li>Promote use of data to inform decision making and link evidence-based approaches to achievement of results.</li>\n<li>Support operations research and specialised studies, such as client satisfaction, cost-effectiveness, and impact evaluation.</li>\n<li>Solicit and manage local data collection and research teams, as needed.</li>\n<li>Contribute to the preparation of regular progress reports, technical deliverables, presentations, and annual work plans.</li>\n</ul>\n<p><strong>Qualifications</strong></p>\n<ul>\n<li>Seven or more years of experience monitoring and evaluating reproductive health and family planning programmes, including promoting use of data for decision-making.</li>\n<li>Strong technical grasp of relevant health issues: sexual and reproductive health; family planning; maternal, new-born, and child health; HIV and AIDS; and health equity.</li>\n<li>Understanding of health market dynamics and the health system in Nepal.</li>\n<li>Demonstrated experience working with government, private sector, and nongovernmental health sector partners in Nepal, at national and decentralised levels.</li>\n<li>Experience supporting DFID, European Union, USAID, World Bank, or other donor-funded or government health programmes.</li>\n<li>Strong quantitative and qualitative research and analysis skills.</li>\n<li>Demonstrated experience with computerised management information systems, databases, MS Office, and other relevant skills.</li>\n<li>Ability to graphically present data in ways that engage and influence target audiences.</li>\n<li>Knowledge of in-country and international guidelines pertaining to research ethics.</li>\n<li>Strong personal qualities, including integrity, commitment to excellence, equality, openness, inclusiveness, and collegiality.</li>\n<li>Excellent written and spoken English required, local languages are a distinct advantage.</li>\n<li>Advanced degree/s in relevant discipline preferred.</li>\n<li>Nepali nationals strongly encouraged to apply.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html\">Monitoring and Evaluation Specialist Wanted at GRM International</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
        "categories": [
          "Uncategorized"
        ]
      },
      {
        "title": "Director of Finance and Admin Wanted at Abt Associates",
        "link": "http://ramrojob.com/job/2013/05/12/director-of-finance-and-admin-wanted-at-abt-associates.html",
        "author": "Bandana Aryal",
        "publishedDate": "Sun, 12 May 2013 01:02:28 -0700",
        "contentSnippet": "Job Responsibilities: Abt Associates seeks a Director of Finance and Administration for an upcoming DFID-funded family planning ...",
        "content": "<p><strong>Job Responsibilities:</strong></p>\n<p>Abt Associates seeks a Director of Finance and Administration for an upcoming DFID-funded family planning program in Nepal. The initiative will work with the Ministry of Health and Population to increase use of modern high-quality family planning methods by the most vulnerable and excluded women by supply innovative and high quality family planning services. The program will also work with the Ministry of Health and Population to ensure better choices and availabilites of reproductive health commodities.</p>\n<p>The Director of Finance and Administration will be responsible for the management of the contract, procurement, subcontracting, financial management and reporting, and general administrative support of the program. S/he will develop and track budgets, manage payroll and vendor relations, and control all financial transactions and reporting, both for the client and for Abt Associates headquarters.</p>\n<p>Specific responsibilities will include:</p>\n<ul>\n<li>Ensure compliance with terms and references in the contract;</li>\n<li>Develop and implement financial and administrative policies and procedures that meet project requirements and donor regulations;</li>\n<li>Create and maintain financial reporting and tracking systems, and provide financial performance updates on project activities;</li>\n<li>Prepare budgets and revenue plans for project programming and corporate reporting;</li>\n<li>Oversee financial and HR administration of project (purchase requisitions, consulting agreements, vendor invoices, client invoices, payroll etc.);</li>\n<li>Manage vendors and subcontractors in compliance with Abt and DfID policies and regulations;</li>\n<li>Supervise all financial and administrative staff;</li>\n<li>Provide training to field staff on project procedures as well as building skill-levels of project staff in the area of finance, administration, and project management.</li>\n</ul>\n<p><strong>Skills Prerequisites:</strong></p>\n<ul>\n<li>Bachelorï¿½s Degree (minimum) or masterï¿½s degree (preferred) in Business, Finance, Accounting or other relevant field;</li>\n<li>10 years of experience in administration, project management and/or financial management;</li>\n<li>5 years of experience working with international donors in a development setting;</li>\n<li>Experience with DfID contracts desirable;</li>\n<li>Strong analytical and computer skills, with emphasis on budgeting and financial analysis;</li>\n<li>Excellent inter-personal, communication and organizational skills;</li>\n<li>Capabilities in Nepali or other South Asian languages are desirable.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/director-of-finance-and-admin-wanted-at-abt-associates.html\">Director of Finance and Admin Wanted at Abt Associates</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
        "categories": [
          "Uncategorized"
        ]
      },
      {
        "title": "Technical Director Wanted at Family Planning Nepal",
        "link": "http://ramrojob.com/job/2013/05/12/technical-director-wanted-at-family-planning-nepal.html",
        "author": "Bandana Aryal",
        "publishedDate": "Sun, 12 May 2013 00:57:03 -0700",
        "contentSnippet": "Skills Prerequisites: Masters Degree (minimum) in Public Health, Business Administration or related relevant discipline Ten ...",
        "content": "<p><strong>Skills Prerequisites:</strong></p>\n<ul>\n<li>Masters Degree (minimum) in Public Health, Business Administration or related relevant discipline</li>\n<li>Ten years (10) of relevant professional experience, including sales or marketing, and strong business acumen in areas of business process and analysis would be highly valued</li>\n<li>Eight (8) years experience working in health sector projects or initiatives involving multiple stakeholder groups, including NGOs and the private health sector</li>\n<li>Successful prior experience in social marketing or franchising</li>\n<li>Proven track record of building and sustaining effective partnerships, advocating effectively and communicating to various constituencies</li>\n<li>Ability to coordinate in a dynamic environment</li>\n<li>Substantial experience in building capacity in the non-state/private sector</li>\n<li>Ability to independently plan and execute complex tasks while addressing daily management details and remaining organized and focused on long-term deadlines and strategies</li>\n<li>Solid professional reputation and strong, demonstrated interpersonal skills</li>\n<li>Professional working experience in Nepal desirable</li>\n<li>Fluency in Nepali desirable</li>\n<li>Excellent written and oral presentation skills in English</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/technical-director-wanted-at-family-planning-nepal.html\">Technical Director Wanted at Family Planning Nepal</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
        "categories": [
          "Uncategorized"
        ]
      },
      {
        "title": "Monitoring and Evaluation Analyst Wanted at UN Women",
        "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-analyst-wanted-at-un-women.html",
        "author": "Bandana Aryal",
        "publishedDate": "Sun, 12 May 2013 00:46:37 -0700",
        "contentSnippet": "Core Competencies Knowledge of current practices in the area of monitoring and evaluation, knowledge management Promotes the ...",
        "content": "<p><b>Core Competencies</b></p>\n<ul>\n<li>Knowledge of current practices in the area of monitoring and evaluation, knowledge management</li>\n<li>Promotes the vision, mission, and strategic goals of UN Women;</li>\n<li>Displays cultural, gender, religion, race, nationality and age sensitivity and adaptability</li>\n<li>Fostering innovation and empowerment</li>\n<li>Working in teams at all levels</li>\n<li>Communicating information and ideas/knowledge sharing</li>\n<li>Analytical and strategic thinking/results orientation/commitment to Excellence</li>\n</ul>\n<p><span style=\"text-decoration:underline\"><strong>Qualifications and Experience:</strong></span></p>\n<ul>\n<li>Masterï¿½s Degree in Economics, Management, Rural Development, Social Sciences, or related field. Additional certification in statistics, MIS management and Monitoring and Evaluation will be considered as an asset.</li>\n<li>Two years of relevant professional experience in the field of rights based monitoring and evaluation;</li>\n<li>Experience in the management of gender equality and womenï¿½s empowerment programmes or analytic work in gender and development, gender analysis and/or human rights;</li>\n<li> Good knowledge of rights-based approach and result-based management.</li>\n<li> Experience related to UN Womenï¿½s mandate and activities would be an added advantage;</li>\n<li> Sound knowledge of international standards on human rights, womenï¿½s rights and related instruments;</li>\n<li>A proven ability to liaise with a myriad of stakeholders and partners, including government, civil society, international organizations and grassroots organizations</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-analyst-wanted-at-un-women.html\">Monitoring and Evaluation Analyst Wanted at UN Women</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
        "categories": [
          "The Himalayan Times"
        ]
      }
    ]
  }
  ```





  `Entry`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `title` | `string` | - |
  | `link` | `string` | - |
  | `author` | `string` | - |
  | `published_date` | `string` | - |
  | `content_snippet` | `string` | - |
  | `content` | `string` | - |
  | `categories` | `List of string` | - |



  ```json
  {
    "title": "Monitoring and Evaluation Specialist Wanted at GRM International",
    "link": "http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html",
    "author": "Bandana Aryal",
    "publishedDate": "Sun, 12 May 2013 01:10:24 -0700",
    "contentSnippet": "Key Responsibilities Under direction of the Team Leader, responsible for the design and roll out of programme M&#38;E plan, ...",
    "content": "<p><strong>Key Responsibilities</strong></p>\n<ul>\n<li>Under direction of the Team Leader, responsible for the design and roll out of programme M&amp;E plan, including design of the logframe and key performance indicators.</li>\n<li>Track programme progress against indicators and ensure early identification of any areas requiring remedial action.</li>\n<li>Carry out site visits and provide M&amp;E support and training for local partners.</li>\n<li>Harmonise programme monitoring indicators and systems with national M&amp;E systems.</li>\n<li>Promote use of data to inform decision making and link evidence-based approaches to achievement of results.</li>\n<li>Support operations research and specialised studies, such as client satisfaction, cost-effectiveness, and impact evaluation.</li>\n<li>Solicit and manage local data collection and research teams, as needed.</li>\n<li>Contribute to the preparation of regular progress reports, technical deliverables, presentations, and annual work plans.</li>\n</ul>\n<p><strong>Qualifications</strong></p>\n<ul>\n<li>Seven or more years of experience monitoring and evaluating reproductive health and family planning programmes, including promoting use of data for decision-making.</li>\n<li>Strong technical grasp of relevant health issues: sexual and reproductive health; family planning; maternal, new-born, and child health; HIV and AIDS; and health equity.</li>\n<li>Understanding of health market dynamics and the health system in Nepal.</li>\n<li>Demonstrated experience working with government, private sector, and nongovernmental health sector partners in Nepal, at national and decentralised levels.</li>\n<li>Experience supporting DFID, European Union, USAID, World Bank, or other donor-funded or government health programmes.</li>\n<li>Strong quantitative and qualitative research and analysis skills.</li>\n<li>Demonstrated experience with computerised management information systems, databases, MS Office, and other relevant skills.</li>\n<li>Ability to graphically present data in ways that engage and influence target audiences.</li>\n<li>Knowledge of in-country and international guidelines pertaining to research ethics.</li>\n<li>Strong personal qualities, including integrity, commitment to excellence, equality, openness, inclusiveness, and collegiality.</li>\n<li>Excellent written and spoken English required, local languages are a distinct advantage.</li>\n<li>Advanced degree/s in relevant discipline preferred.</li>\n<li>Nepali nationals strongly encouraged to apply.</li>\n</ul>\n<p>The post <a href=\"http://ramrojob.com/job/2013/05/12/monitoring-and-evaluation-specialist-wanted-at-grm-international.html\">Monitoring and Evaluation Specialist Wanted at GRM International</a> appeared first on <a href=\"http://ramrojob.com\">Ramro Job</a>.</p>",
    "categories": [
      "Uncategorized"
    ]
  }
  ```





  `DateAsOptional`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date` | `date` | Optional | - |



  ```json
  {
    "date": null
  }
  ```





  `AddPrecisionInException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `float` |  | - |
  | `value_1` | `float` | Optional | - |



  ```json
  {
    "value": 1.23
  }
  ```





  `AddUuidInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `uuid|string` |  | - |
  | `value_1` | `uuid|string` | Optional | - |



  ```json
  {
    "value": "123e4567-e89b-12d3-a456-426655440000"
  }
  ```





  `AddRfc1123DatetimeInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` |  | - |
  | `date_time_1` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": "Sun, 06 Nov 1994 08:49:37 GMT"
  }
  ```





  `AddNumberInException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `int` |  | - |
  | `value_1` | `int` | Optional | - |



  ```json
  {
    "value": 1
  }
  ```





  `AddDynamicInException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `object` |  | - |
  | `value_1` | `object` | Optional | - |



  ```json
  {
    "value": " {\r\n\t\t\t\"value\" : \"test\"\r\n\t\t}"
  }
  ```





  `AddRfc3339DatetimeInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` |  | - |
  | `date_time_1` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": "2016-03-13T12:52:32.123Z",
    "dateTime1": null
  }
  ```





  `AddBooleanInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `bool` |  | - |
  | `value_1` | `bool` | Optional | - |



  ```json
  {
    "value": false,
    "value1": null
  }
  ```





  `AddDateInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `date` |  | - |
  | `value_1` | `date` | Optional | - |



  ```json
  {
    "value": "1994-02-13"
  }
  ```





  `AddStringInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` |  | - |
  | `value_1` | `string` | Optional | - |



  ```json
  {
    "value": "test"
  }
  ```





  `AddUnixTimeStampInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` |  | - |
  | `date_time_1` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": 1484719381
  }
  ```





  `AddLongInGlobalException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `long|int` |  | - |
  | `value_1` | `long|int` | Optional | - |



  ```json
  {
    "value": 123123
  }
  ```



  * [Days](#days)
  * [SuiteCode](#suitecode)
  * [ParamFormat](#paramformat)
  * [Type](#type)
  * [LanguageEnum](#languageenum)
  * [Team](#team)
  * [TeamInteger](#teaminteger)



  A string enum representing days of the week



  `Days`



  | Name | Description |
  |  --- | --- |
  | `SUNDAY` | - |
  | `MONDAY` | - |
  | `TUESDAY` | - |
  | `WEDNESDAY_` | - |
  | `THURSDAY` | - |
  | `FRI_DAY` | - |
  | `SATURDAY` | - |



  A integer based enum representing a Suite in a game of cards



  `SuiteCode`



  | Name | Description |
  |  --- | --- |
  | `HEARTS` | - |
  | `SPADES` | - |
  | `CLUBS` | - |
  | `DIAMONDS` | - |





  `ParamFormat`



  | Name | Description |
  |  --- | --- |
  | `TEMPLATE` | - |
  | `FORM` | - |
  | `BODY` | - |
  | `HEADER` | - |
  | `QUERY` | - |





  `Type`



  | Name | Description |
  |  --- | --- |
  | `LONG` | - |
  | `NUMBER` | - |
  | `PRECISION` | - |
  | `BOOLEAN` | - |
  | `DATETIME` | - |
  | `DATE` | - |
  | `STRING` | - |





  `LanguageEnum`



  | Name | Description |
  |  --- | --- |
  | `EN` | - |
  | `DZ` | - |
  | `NL` | - |





  `Team`



  | Name | Description |
  |  --- | --- |
  | `CODEGEN` | - |
  | `CGAAS` | - |
  | `UX` | - |
  | `QA` | - |





  `TeamInteger`



  | Name | Description |
  |  --- | --- |
  | `CODEGEN` | - |
  | `CGAAS` | - |
  | `UX` | - |
  | `QA` | - |



  * [LocalTestException](#localtestexception)
  * [GlobalTestException](#globaltestexception)
  * [NestedModelException](#nestedmodelexception)
  * [Rfc1123Exception](#rfc1123exception)
  * [UnixTimeStampException](#unixtimestampexception)
  * [ExceptionWithRfc3339DateTimeException](#exceptionwithrfc3339datetimeexception)
  * [ExceptionWithDateException](#exceptionwithdateexception)
  * [ExceptionWithUUIDException](#exceptionwithuuidexception)
  * [ExceptionWithDynamicException](#exceptionwithdynamicexception)
  * [ExceptionWithPrecisionException](#exceptionwithprecisionexception)
  * [ExceptionWithBooleanException](#exceptionwithbooleanexception)
  * [ExceptionWithLongException](#exceptionwithlongexception)
  * [ExceptionWithNumberException](#exceptionwithnumberexception)
  * [ExceptionWithStringException](#exceptionwithstringexception)
  * [CustomErrorResponseException](#customerrorresponseexception)
  * [SendUuidInModelAsException](#senduuidinmodelasexception)
  * [SendPrecisionInModelAsException](#sendprecisioninmodelasexception)
  * [SendNumberInModelAsException](#sendnumberinmodelasexception)
  * [SendLongInModelAsException](#sendlonginmodelasexception)
  * [SendStringInModelAsException](#sendstringinmodelasexception)
  * [SendDynamicInModelAsException](#senddynamicinmodelasexception)
  * [SendDateInModelAsException](#senddateinmodelasexception)
  * [SendUnixTimeStampInModelAsException](#sendunixtimestampinmodelasexception)
  * [SendRfc3339InModelAsException](#sendrfc3339inmodelasexception)
  * [SendRfc1123InModelAsException](#sendrfc1123inmodelasexception)
  * [SendBooleanInModelAsException](#sendbooleaninmodelasexception)
  * [ComplexObjectInException](#complexobjectinexception)
  * [EnumInException](#enuminexception)



  To test specific local exceptions.



  `LocalTestException`



  [`GlobalTestException`](#globaltestexception)



  | Name | Type | Description |
  |  --- | --- | --- |
  | `secret_message_for_endpoint` | `string` | Represents the specific endpoint info |



  ```json
  {
    "SecretMessageForEndpoint": "SecretMessageForEndpoint6",
    "ServerMessage": "ServerMessage6",
    "ServerCode": 170
  }
  ```



  To test specific global exceptions.



  `GlobalTestException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `server_message` | `string` | Represents the server's exception message |
  | `server_code` | `int` | Represents the server's error code |



  ```json
  {
    "ServerMessage": "ServerMessage6",
    "ServerCode": 170
  }
  ```





  `NestedModelException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `server_message` | `string` | - |
  | `server_code` | `string` | - |
  | `model` | [`Validate`](#validate) | - |



  ```json
  {
    "ServerMessage": "ServerMessage6",
    "ServerCode": "ServerCode0",
    "model": {
      "field": "field4",
      "name": "name2",
      "address": null
    }
  }
  ```





  `Rfc1123Exception`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` |  | - |
  | `date_time_1` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": "Sun, 06 Nov 1994 08:49:37 GMT"
  }
  ```





  `UnixTimeStampException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` |  | - |
  | `date_time_1` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": 1484719381
  }
  ```





  `ExceptionWithRfc3339DateTimeException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `date_time` | `datetime` |  | - |
  | `date_time_1` | `datetime` | Optional | - |



  ```json
  {
    "dateTime": "2016-03-13T12:52:32.123Z",
    "dateTime1": null
  }
  ```





  `ExceptionWithDateException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `date` |  | - |
  | `value_1` | `date` | Optional | - |



  ```json
  {
    "value": "1994-02-13"
  }
  ```





  `ExceptionWithUUIDException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `uuid|string` |  | - |
  | `value_1` | `uuid|string` | Optional | - |



  ```json
  {
    "value": "123e4567-e89b-12d3-a456-426655440000"
  }
  ```





  `ExceptionWithDynamicException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `object` |  | - |
  | `value_1` | `object` | Optional | - |



  ```json
  {
    "value": "{\n  \"value\" : \"test\"\n}"
  }
  ```





  `ExceptionWithPrecisionException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `float` |  | - |
  | `value_1` | `float` | Optional | - |



  ```json
  {
    "value": 1.23
  }
  ```





  `ExceptionWithBooleanException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `bool` |  | - |
  | `value_1` | `bool` | Optional | - |



  ```json
  {
    "value": true
  }
  ```





  `ExceptionWithLongException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `long|int` |  | - |
  | `value_1` | `long|int` | Optional | - |



  ```json
  {
    "value": 12312312
  }
  ```





  `ExceptionWithNumberException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `int` |  | - |
  | `value_1` | `int` | Optional | - |



  ```json
  {
    "value": 1
  }
  ```





  `ExceptionWithStringException`



  | Name | Type | Tags | Description |
  |  --- | --- | --- | --- |
  | `value` | `string` |  | - |
  | `value_1` | `string` | Optional | - |



  ```json
  {
    "value": "test"
  }
  ```





  `CustomErrorResponseException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `error_description` | `string` | - |
  | `caught` | `string` | - |
  | `exception` | `string` | - |
  | `inner_exception` | `string` | - |



  ```json
  {
    "error description": null,
    "caught": "Error in CatchInner caused by calling the ThrowInner method.",
    "Exception": "In catch block of Main method.",
    "Inner Exception": "AppException: Exception in ThrowInner method."
  }
  ```





  `SendUuidInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddUuidInGlobalException`](#adduuidinglobalexception) | - |



  ```json
  {
    "body": {
      "value": "123e4567-e89b-12d3-a456-426655440000"
    }
  }
  ```





  `SendPrecisionInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddPrecisionInException`](#addprecisioninexception) | - |



  ```json
  {
    "body": {
      "value": 1.23
    }
  }
  ```





  `SendNumberInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddNumberInException`](#addnumberinexception) | - |



  ```json
  {
    "body": {
      "value": 1
    }
  }
  ```





  `SendLongInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddLongInGlobalException`](#addlonginglobalexception) | - |



  ```json
  {
    "body": {
      "value": 123123
    }
  }
  ```





  `SendStringInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddStringInGlobalException`](#addstringinglobalexception) | - |



  ```json
  {
    "body": {
      "value": "test"
    }
  }
  ```





  `SendDynamicInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddDynamicInException`](#adddynamicinexception) | - |



  ```json
  {
    "body": {
      "value": " {\r\n\t\t\t\"value\" : \"test\"\r\n\t\t}"
    }
  }
  ```





  `SendDateInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddDateInGlobalException`](#adddateinglobalexception) | - |



  ```json
  {
    "body": {
      "value": "1994-02-13"
    }
  }
  ```





  `SendUnixTimeStampInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddUnixTimeStampInGlobalException`](#addunixtimestampinglobalexception) | - |



  ```json
  {
    "body": {
      "dateTime": 1484719381
    }
  }
  ```





  `SendRfc3339InModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddRfc3339DatetimeInGlobalException`](#addrfc3339datetimeinglobalexception) | - |



  ```json
  {
    "body": {
      "dateTime": "2016-03-13T12:52:32.123Z",
      "dateTime1": null
    }
  }
  ```





  `SendRfc1123InModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddRfc1123DatetimeInGlobalException`](#addrfc1123datetimeinglobalexception) | - |



  ```json
  {
    "body": {
      "dateTime": "Sun, 06 Nov 1994 08:49:37 GMT"
    }
  }
  ```





  `SendBooleanInModelAsException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`AddBooleanInGlobalException`](#addbooleaninglobalexception) | - |



  ```json
  {
    "body": {
      "value": false,
      "value1": null
    }
  }
  ```





  `ComplexObjectInException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `body` | [`Complex3`](#complex3) | - |



  ```json
  {
    "body": {
      "documentId": "099cceda-38a8-4b01-87b9-a8f2007675d6",
      "signers": [
        {
          "id": "1bef97d1-0704-4eb2-a490-a8f2007675db",
          "url": "https://sign-test.idfy.io/start?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJrdmVyc2lvbiI6IjdmNzhjNzNkMmQ1MjQzZWRiYjdiNDI0MmI2MDE1MWU4IiwiZG9jaWQiOiIwOTljY2VkYS0zOGE4LTRiMDEtODdiOS1hOGYyMDA3Njc1ZDYiLCJhaWQiOiJjMGNlMTQ2OC1hYzk0LTRiMzQtODc2ZS1hODg1MDBjMmI5YTEiLCJsZyI6ImVuIiwiZXJyIjpudWxsLCJpZnIiOmZhbHNlLCJ3Ym1zZyI6ZmFsc2UsInNmaWQiOiIxYmVmOTdkMS0wNzA0LTRlYjItYTQ5MC1hOGYyMDA3Njc1ZGIiLCJ1cmxleHAiOm51bGwsImF0aCI6bnVsbCwiZHQiOiJUZXN0IGRvY3VtZW50IiwidmYiOmZhbHNlLCJhbiI6IklkZnkgU0RLIGRlbW8iLCJ0aCI6IlBpbmsiLCJzcCI6IkN1YmVzIiwiZG9tIjpudWxsLCJyZGlyIjpmYWxzZSwidXQiOiJ3ZWIiLCJ1dHYiOm51bGwsInNtIjoidGVzdEB0ZXN0LmNvbSJ9.Dyy2RSeR6dmU8qxOEi-2gEX3Gg7wry6JhkZIWOuADDdu5jJWidQLcxfJn_qAHNpb",
          "links": [],
          "externalSignerId": "uoiahsd321982983jhrmnec2wsadm32",
          "redirectSettings": {
            "redirectMode": "donot_redirect"
          },
          "signatureType": {
            "mechanism": "pkisignature",
            "onEacceptUseHandWrittenSignature": false
          },
          "ui": {
            "dialogs": {
              "before": {
                "useCheckBox": false,
                "title": "Info",
                "message": "Please read the contract on the next pages carefully. Pay some extra attention to paragraph 5."
              }
            },
            "language": "EN",
            "styling": {
              "colorTheme": "Pink",
              "spinner": "Cubes"
            }
          },
          "tags": [],
          "order": 0,
          "required": false
        }
      ],
      "status": {
        "documentStatus": "unsigned",
        "completedPackages": [],
        "attachmentPackages": {}
      },
      "title": "Test document",
      "description": "This is an important document",
      "externalId": "ae7b9ca7-3839-4e0d-a070-9f14bffbbf55",
      "dataToSign": {
        "fileName": "sample.txt",
        "convertToPDF": false
      },
      "contactDetails": {
        "email": "test@test.com",
        "url": "https://idfy.io"
      },
      "advanced": {
        "tags": [
          "develop",
          "fun_with_documents"
        ],
        "attachments": 0,
        "requiredSignatures": 0,
        "getSocialSecurityNumber": false,
        "timeToLive": {
          "deadline": "2018-06-29T14:57:25Z",
          "deleteAfterHours": 1
        }
      }
    }
  }
  ```





  `EnumInException`



  | Name | Type | Description |
  |  --- | --- | --- |
  | `param` | [`ParamFormat`](#paramformat) | - |
  | `mtype` | [`Type`](#type) | - |



  ```json
  {
    "param": "Template",
    "type": "Long"
  }
  ```


