Metadata-Version: 2.4
Name: entryscape
Version: 1.6.1
Summary: EntryScape API client for Python - provides access to EntryScape data following DCAT-AP standards
Author-email: Metasolutions <contact@entryscape.com>
License-Expression: LGPL-3.0-or-later
Project-URL: Homepage, https://entryscape.com
Keywords: entryscape,dcat-ap,open-data,api-client,linked-data,rdf
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Typing :: Typed
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: urllib3<3.0.0,>=2.1.0
Requires-Dist: python-dateutil>=2.8.2
Requires-Dist: aiohttp>=3.8.4
Requires-Dist: aiohttp-retry>=2.8.3
Requires-Dist: pydantic>=2
Requires-Dist: typing-extensions>=4.7.1
Provides-Extra: dev
Requires-Dist: pytest>=7.2.1; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: mypy>=1.8; extra == "dev"
Requires-Dist: ruff>=0.2; extra == "dev"
Requires-Dist: responses>=0.25; extra == "dev"
Requires-Dist: types-python-dateutil>=2.8.19; extra == "dev"
Provides-Extra: rdf
Requires-Dist: rdflib>=7.0.0; extra == "rdf"
Requires-Dist: pyld>=2.0.4; extra == "rdf"
Dynamic: license-file

# entryscape

EntryScape API client for Python - provides access to EntryScape data following DCAT-AP standards

[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License: LGPL v3](https://img.shields.io/badge/License-LGPL_v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)

This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:

- API version: 1.6.1
- Package version: 1.6.1
- Generator version: 7.22.0

For more information, please visit [https://entryscape.com/en/contact-us/](https://entryscape.com/en/contact-us/)

## Requirements

- Python 3.10+
- Dependencies are managed via `pyproject.toml`

## Installation

### From PyPI (recommended)

```bash
pip install entryscape
```

### From a download

Every release is also published as `python-sdk.tar.gz` at
<https://api.entryscape.com/sdk/latest/python-sdk.tar.gz>, for a build that cannot reach
PyPI or has to vendor its dependencies:

The archive has no top-level directory of its own, so unpack it into one:

```bash
mkdir entryscape-python && tar -xzf python-sdk.tar.gz -C entryscape-python
pip install ./entryscape-python
```

## Quick Start

```python
import entryscape
from entryscape import ApiException

# Configure the client
configuration = entryscape.Configuration(
    host="http://localhost:8080"  # API server URL
)

# Async usage
import asyncio

async def main():
    async with entryscape.ApiClient(configuration) as api_client:
        api = entryscape.CatalogApi(api_client)

        try:
            # List catalogs from an EntryStore instance
            catalogs = await api.list_catalogs(
                entrystore_host="dev.entryscape.com/store/"
            )
            print(f"Found {catalogs.results} catalogs")

            for item in catalogs.items or []:
                print(f"  - {item.uri}")
        except ApiException as e:
            print(f"API error: {e}")

asyncio.run(main())
```

## EntryStore Hosts

Pass a host string permitted by the API deployment's effective EntryStore allowlist.
Omit it to use the deployment's configured default. A bare hostname uses `/store/`;
a host with a base path selects that path. Do not include a URL scheme.

```python
entrystore_host = "dev.entryscape.com/store/"
```

## Getting Started

Please follow the [installation procedure](#installation) and then run the following:

```python
import asyncio
import os

import entryscape
from entryscape import ApiException
from pprint import pprint

# Defining the host is optional and defaults to https://api.entryscape.com
# See configuration.py for a list of all supported configuration parameters.
configuration = entryscape.Configuration(
    host = "https://api.entryscape.com"
)

# The client must configure the authentication and authorization parameters
# in accordance with the API server security policy.
# Examples for each auth method are provided below, use the example that
# satisfies your auth use case.

# Configure API key authorization: auth_token
configuration.api_key['auth_token'] = os.environ["API_KEY"]

# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
# configuration.api_key_prefix['auth_token'] = 'Bearer'

# Configure API key authorization: auth_header
configuration.api_key['auth_header'] = os.environ["API_KEY"]

# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
# configuration.api_key_prefix['auth_header'] = 'Bearer'

# Configure API key authorization: app_token_header
configuration.api_key['app_token_header'] = os.environ["API_KEY"]

# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
# configuration.api_key_prefix['app_token_header'] = 'Bearer'


async def main():
    # Enter a context with an instance of the API client
    async with entryscape.ApiClient(configuration) as api_client:
        # Create an instance of the API class
        api_instance = entryscape.AppTokenApi(api_client)
        app_token_create_request = {"name":"my-data-app","email":"owner@example.com"} # AppTokenCreateRequest | 

        try:
            # Create app token
            api_response = await api_instance.create_app_token(app_token_create_request)
            print("The response of AppTokenApi->create_app_token:\n")
            pprint(api_response)
        except ApiException as e:
            print("Exception when calling AppTokenApi->create_app_token: %s\n" % e)

asyncio.run(main())

```

## Documentation for API Endpoints

All URIs are relative to *https://api.entryscape.com*. Every endpoint is documented, with request and
response examples, in the [API reference](https://entryscape.org/api/).

Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*AppTokenApi* | **create_app_token** | **POST** /app-token | Create app token
*AppTokenApi* | **get_app_token** | **GET** /app-token/{app_token_id} | Get app token details
*AppTokenApi* | **verify_app_token** | **POST** /app-token/verify | Verify app token
*AuthApi* | **login** | **POST** /auth/login | Log in (start a user session)
*AuthApi* | **logout** | **POST** /auth/logout | Log out (end the user session)
*AuthApi* | **whoami** | **GET** /auth/whoami | Current user for the session
*CatalogApi* | **create_catalog** | **POST** /catalog | Create catalog
*CatalogApi* | **delete_catalog** | **DELETE** /catalog/{context_id}/{entry_id} | Delete catalog
*CatalogApi* | **get_catalog** | **GET** /catalog/{context_id}/{entry_id} | Get catalog
*CatalogApi* | **get_catalog_metadata** | **GET** /catalog/{context_id}/{entry_id}/metadata | Get catalog metadata
*CatalogApi* | **list_catalog_dataservices** | **GET** /catalog/{context_id}/{entry_id}/dataservices | List data services in catalog
*CatalogApi* | **list_catalog_datasets** | **GET** /catalog/{context_id}/{entry_id}/datasets | List datasets in catalog
*CatalogApi* | **list_catalogs** | **GET** /catalog | List catalogs
*CatalogApi* | **update_catalog_metadata** | **PUT** /catalog/{context_id}/{entry_id}/metadata | Update catalog metadata
*CatalogApi* | **validate_catalog** | **GET** /catalog/{context_id}/{entry_id}/validate | Validate catalog metadata
*ContactApi* | **create_contact** | **POST** /contact | Create contact
*ContactApi* | **delete_contact** | **DELETE** /contact/{context_id}/{entry_id} | Delete contact
*ContactApi* | **get_contact** | **GET** /contact/{context_id}/{entry_id} | Get contact
*ContactApi* | **get_contact_metadata** | **GET** /contact/{context_id}/{entry_id}/metadata | Get contact metadata
*ContactApi* | **list_contacts** | **GET** /contact | List contacts
*ContactApi* | **update_contact_metadata** | **PUT** /contact/{context_id}/{entry_id}/metadata | Update contact metadata
*ContactApi* | **validate_contact** | **GET** /contact/{context_id}/{entry_id}/validate | Validate contact metadata
*DataserviceApi* | **create_data_service** | **POST** /dataservice | Create data service
*DataserviceApi* | **delete_data_service** | **DELETE** /dataservice/{context_id}/{entry_id} | Delete data service
*DataserviceApi* | **get_data_service** | **GET** /dataservice/{context_id}/{entry_id} | Get data service
*DataserviceApi* | **get_data_service_metadata** | **GET** /dataservice/{context_id}/{entry_id}/metadata | Get data service metadata
*DataserviceApi* | **list_data_services** | **GET** /dataservice | List data services
*DataserviceApi* | **update_data_service_metadata** | **PUT** /dataservice/{context_id}/{entry_id}/metadata | Update data service metadata
*DataserviceApi* | **validate_data_service** | **GET** /dataservice/{context_id}/{entry_id}/validate | Validate data service metadata
*DatasetApi* | **create_dataset** | **POST** /dataset | Create dataset
*DatasetApi* | **delete_dataset** | **DELETE** /dataset/{context_id}/{entry_id} | Delete dataset
*DatasetApi* | **get_dataset** | **GET** /dataset/{context_id}/{entry_id} | Get dataset
*DatasetApi* | **get_dataset_metadata** | **GET** /dataset/{context_id}/{entry_id}/metadata | Get dataset metadata
*DatasetApi* | **list_dataset_distributions** | **GET** /dataset/{context_id}/{entry_id}/distributions | List distributions for dataset
*DatasetApi* | **list_datasets** | **GET** /dataset | List datasets
*DatasetApi* | **update_dataset_metadata** | **PUT** /dataset/{context_id}/{entry_id}/metadata | Update dataset metadata
*DatasetApi* | **validate_dataset** | **GET** /dataset/{context_id}/{entry_id}/validate | Validate dataset metadata
*DistributionApi* | **create_distribution** | **POST** /distribution | Create distribution
*DistributionApi* | **delete_distribution** | **DELETE** /distribution/{context_id}/{entry_id} | Delete distribution
*DistributionApi* | **get_distribution** | **GET** /distribution/{context_id}/{entry_id} | Get distribution
*DistributionApi* | **get_distribution_metadata** | **GET** /distribution/{context_id}/{entry_id}/metadata | Get distribution metadata
*DistributionApi* | **list_distributions** | **GET** /distribution | List distributions
*DistributionApi* | **update_distribution_metadata** | **PUT** /distribution/{context_id}/{entry_id}/metadata | Update distribution metadata
*DistributionApi* | **validate_distribution** | **GET** /distribution/{context_id}/{entry_id}/validate | Validate distribution metadata
*DocumentApi* | **create_document** | **POST** /document | Create document
*DocumentApi* | **delete_document** | **DELETE** /document/{context_id}/{entry_id} | Delete document
*DocumentApi* | **get_document** | **GET** /document/{context_id}/{entry_id} | Get document
*DocumentApi* | **get_document_metadata** | **GET** /document/{context_id}/{entry_id}/metadata | Get document metadata
*DocumentApi* | **list_documents** | **GET** /document | List documents
*DocumentApi* | **update_document_metadata** | **PUT** /document/{context_id}/{entry_id}/metadata | Update document metadata
*IdeaApi* | **create_idea** | **POST** /idea | Create idea
*IdeaApi* | **delete_idea** | **DELETE** /idea/{context_id}/{entry_id} | Delete idea
*IdeaApi* | **get_idea** | **GET** /idea/{context_id}/{entry_id} | Get idea
*IdeaApi* | **get_idea_metadata** | **GET** /idea/{context_id}/{entry_id}/metadata | Get idea metadata
*IdeaApi* | **list_ideas** | **GET** /idea | List ideas
*IdeaApi* | **update_idea_metadata** | **PUT** /idea/{context_id}/{entry_id}/metadata | Update idea metadata
*JobApi* | **get_job_status** | **GET** /job/{job_id} | Get job status
*ModelApi* | **create_model** | **POST** /model | Create model
*ModelApi* | **delete_model** | **DELETE** /model/{context_id} | Delete model
*ModelApi* | **get_model** | **GET** /model/{context_id} | Get model
*ModelApi* | **get_model_metadata** | **GET** /model/{context_id}/metadata | Get model metadata
*ModelApi* | **list_models** | **GET** /model | List models
*ModelApi* | **update_model_metadata** | **PUT** /model/{context_id}/metadata | Update model metadata
*ModelClassApi* | **create_model_class** | **POST** /model/{context_id}/classes | Create model class
*ModelClassApi* | **delete_model_class** | **DELETE** /model/{context_id}/classes/{entry_id} | Delete model class
*ModelClassApi* | **get_model_class** | **GET** /model/{context_id}/classes/{entry_id} | Get model class
*ModelClassApi* | **get_model_class_metadata** | **GET** /model/{context_id}/classes/{entry_id}/metadata | Get model class metadata
*ModelClassApi* | **list_model_classes** | **GET** /model/{context_id}/classes | List model classes
*ModelClassApi* | **update_model_class_metadata** | **PUT** /model/{context_id}/classes/{entry_id}/metadata | Update model class metadata
*ModelDiagramApi* | **create_model_diagram** | **POST** /model/{context_id}/diagrams | Create model diagram
*ModelDiagramApi* | **delete_model_diagram** | **DELETE** /model/{context_id}/diagrams/{entry_id} | Delete model diagram
*ModelDiagramApi* | **get_model_diagram** | **GET** /model/{context_id}/diagrams/{entry_id} | Get model diagram
*ModelDiagramApi* | **get_model_diagram_metadata** | **GET** /model/{context_id}/diagrams/{entry_id}/metadata | Get model diagram metadata
*ModelDiagramApi* | **list_model_diagrams** | **GET** /model/{context_id}/diagrams | List model diagrams
*ModelDiagramApi* | **update_model_diagram_metadata** | **PUT** /model/{context_id}/diagrams/{entry_id}/metadata | Update model diagram metadata
*ModelFieldApi* | **create_model_field** | **POST** /model/{context_id}/fields | Create model field
*ModelFieldApi* | **delete_model_field** | **DELETE** /model/{context_id}/fields/{entry_id} | Delete model field
*ModelFieldApi* | **get_model_field** | **GET** /model/{context_id}/fields/{entry_id} | Get model field
*ModelFieldApi* | **get_model_field_metadata** | **GET** /model/{context_id}/fields/{entry_id}/metadata | Get model field metadata
*ModelFieldApi* | **list_model_fields** | **GET** /model/{context_id}/fields | List model fields
*ModelFieldApi* | **update_model_field_metadata** | **PUT** /model/{context_id}/fields/{entry_id}/metadata | Update model field metadata
*ModelFormApi* | **create_model_form** | **POST** /model/{context_id}/forms | Create model form
*ModelFormApi* | **delete_model_form** | **DELETE** /model/{context_id}/forms/{entry_id} | Delete model form
*ModelFormApi* | **get_model_form** | **GET** /model/{context_id}/forms/{entry_id} | Get model form
*ModelFormApi* | **get_model_form_metadata** | **GET** /model/{context_id}/forms/{entry_id}/metadata | Get model form metadata
*ModelFormApi* | **list_model_forms** | **GET** /model/{context_id}/forms | List model forms
*ModelFormApi* | **update_model_form_metadata** | **PUT** /model/{context_id}/forms/{entry_id}/metadata | Update model form metadata
*ModelNamespaceApi* | **create_model_namespace** | **POST** /model/{context_id}/namespaces | Create model namespace
*ModelNamespaceApi* | **delete_model_namespace** | **DELETE** /model/{context_id}/namespaces/{entry_id} | Delete model namespace
*ModelNamespaceApi* | **get_model_namespace** | **GET** /model/{context_id}/namespaces/{entry_id} | Get model namespace
*ModelNamespaceApi* | **get_model_namespace_metadata** | **GET** /model/{context_id}/namespaces/{entry_id}/metadata | Get model namespace metadata
*ModelNamespaceApi* | **list_model_namespaces** | **GET** /model/{context_id}/namespaces | List model namespaces
*ModelNamespaceApi* | **update_model_namespace_metadata** | **PUT** /model/{context_id}/namespaces/{entry_id}/metadata | Update model namespace metadata
*ModelPropertyApi* | **create_model_property** | **POST** /model/{context_id}/properties | Create model property
*ModelPropertyApi* | **delete_model_property** | **DELETE** /model/{context_id}/properties/{entry_id} | Delete model property
*ModelPropertyApi* | **get_model_property** | **GET** /model/{context_id}/properties/{entry_id} | Get model property
*ModelPropertyApi* | **get_model_property_metadata** | **GET** /model/{context_id}/properties/{entry_id}/metadata | Get model property metadata
*ModelPropertyApi* | **list_model_properties** | **GET** /model/{context_id}/properties | List model properties
*ModelPropertyApi* | **update_model_property_metadata** | **PUT** /model/{context_id}/properties/{entry_id}/metadata | Update model property metadata
*OrganizationApi* | **create_organization** | **POST** /organization | Create organization
*OrganizationApi* | **delete_organization** | **DELETE** /organization/{context_id}/{entry_id} | Delete organization
*OrganizationApi* | **get_organization** | **GET** /organization/{context_id}/{entry_id} | Get organization
*OrganizationApi* | **get_organization_metadata** | **GET** /organization/{context_id}/{entry_id}/metadata | Get organization metadata
*OrganizationApi* | **list_organizations** | **GET** /organization | List organizations
*OrganizationApi* | **update_organization_metadata** | **PUT** /organization/{context_id}/{entry_id}/metadata | Update organization metadata
*OrganizationApi* | **validate_organization** | **GET** /organization/{context_id}/{entry_id}/validate | Validate organization metadata
*SearchApi* | **advanced_search** | **POST** /search | Advanced search
*SearchApi* | **get_search_facets** | **GET** /search/facets | Get available facet fields
*SearchApi* | **search** | **GET** /search | Search entries
*ShowcaseApi* | **create_showcase** | **POST** /showcase | Create showcase
*ShowcaseApi* | **delete_showcase** | **DELETE** /showcase/{context_id}/{entry_id} | Delete showcase
*ShowcaseApi* | **get_showcase** | **GET** /showcase/{context_id}/{entry_id} | Get showcase
*ShowcaseApi* | **get_showcase_metadata** | **GET** /showcase/{context_id}/{entry_id}/metadata | Get showcase metadata
*ShowcaseApi* | **list_showcases** | **GET** /showcase | List showcases
*ShowcaseApi* | **update_showcase_metadata** | **PUT** /showcase/{context_id}/{entry_id}/metadata | Update showcase metadata
*SuggestionApi* | **create_suggestion** | **POST** /suggestion | Create suggestion
*SuggestionApi* | **delete_suggestion** | **DELETE** /suggestion/{context_id}/{entry_id} | Delete suggestion
*SuggestionApi* | **get_suggestion** | **GET** /suggestion/{context_id}/{entry_id} | Get suggestion
*SuggestionApi* | **get_suggestion_metadata** | **GET** /suggestion/{context_id}/{entry_id}/metadata | Get suggestion metadata
*SuggestionApi* | **list_suggestions** | **GET** /suggestion | List suggestions
*SuggestionApi* | **update_suggestion_metadata** | **PUT** /suggestion/{context_id}/{entry_id}/metadata | Update suggestion metadata
*TerminologyApi* | **delete_terminology** | **DELETE** /terminology/{context_id} | Delete terminology
*TerminologyApi* | **get_terminology** | **GET** /terminology/{context_id} | Get terminology
*TerminologyApi* | **import_terminology** | **POST** /terminology/import | Import SKOS terminology
*TerminologyApi* | **list_terminologies** | **GET** /terminology | List terminologies
*UploadApi* | **add_file_to_distribution** | **POST** /distribution/addFile | Add file to distribution
*UploadApi* | **replace_file_in_distribution** | **POST** /distribution/replaceFile | Replace file in distribution


## Documentation For Models

 - `AppToken`
 - `AppTokenCreateRequest`
 - `AppTokenCreateResponse`
 - `AppTokenStatus`
 - `AppTokenVerifyRequest`
 - `EntityListItem`
 - `EntityListResponse`
 - `EntityReference`
 - `EntityType`
 - `Error`
 - `FacetField`
 - `FacetFieldValuesInner`
 - `FacetList`
 - `FacetListAvailableInner`
 - `JobResponse`
 - `JobStatus`
 - `JobStatusProgress`
 - `JobStatusValue`
 - `JobType`
 - `ListCatalogsEntryTypeParameter`
 - `ListCatalogsGraphTypeParameter`
 - `ListCatalogsResourceTypeParameter`
 - `LoginRequest`
 - `LoginResponse`
 - `MetadataFormat`
 - `MetadataRequest`
 - `ParentReference`
 - `SearchRequest`
 - `SearchRequestFilters`
 - `SearchRequestFiltersGraphType`
 - `SearchRequestFiltersResourceType`
 - `SearchRequestSort`
 - `SearchRequestSortOrder`
 - `SearchResponse`
 - `SearchResult`
 - `SearchResultGraphType`
 - `SearchResultResourceType`
 - `SearchSortOrderParameter`
 - `TerminologyImportMode`
 - `ValidationProfile`
 - `ValidationResponse`
 - `ValidationResult`
 - `ValidationSeverity`
 - `ValidationSummary`
 - `WhoamiResponse`


<a id="documentation-for-authorization"></a>
## Documentation For Authorization

Authentication schemes defined for the API:
<a id="auth_token"></a>
### auth_token

- **Type**: API key
- **API key parameter name**: auth_token
- **Location**: Cookie

<a id="auth_header"></a>
### auth_header

- **Type**: API key
- **API key parameter name**: X-Auth-Token
- **Location**: HTTP header

<a id="app_token_header"></a>
### app_token_header

- **Type**: API key
- **API key parameter name**: X-App-Token
- **Location**: HTTP header


## Author

contact@entryscape.com


## Examples

Complete runnable examples are under `examples/` in the
[download](https://api.entryscape.com/sdk/latest/python-sdk.tar.gz) described above:

| Example | Description |
|---------|-------------|
| `quickstart` | Minimal hello-world — configure SDK, list catalogs |
| `browse-catalog` | Navigate DCAT-AP hierarchy: catalogs → datasets → distributions |
| `search` | Simple search, advanced search, and faceted search |
| `file-upload` | Upload/replace files with async job tracking |
| `explore-entities` | Browse organizations, contacts, ideas, suggestions, showcases, documents |

See also: [Generated API docs](https://entryscape.org/api-wip) — per-endpoint documentation with inline code samples

## License

This project is licensed under the GNU Lesser General Public License v3.0 or later - see
LICENSE.txt for details.
