entryscape 1.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- entryscape/__init__.py +219 -0
- entryscape/api/__init__.py +26 -0
- entryscape/api/app_token_api.py +835 -0
- entryscape/api/auth_api.py +965 -0
- entryscape/api/catalog_api.py +4473 -0
- entryscape/api/contact_api.py +3135 -0
- entryscape/api/dataservice_api.py +3135 -0
- entryscape/api/dataset_api.py +3804 -0
- entryscape/api/distribution_api.py +3135 -0
- entryscape/api/document_api.py +2740 -0
- entryscape/api/idea_api.py +2740 -0
- entryscape/api/job_api.py +360 -0
- entryscape/api/model_api.py +2446 -0
- entryscape/api/model_class_api.py +2611 -0
- entryscape/api/model_diagram_api.py +2611 -0
- entryscape/api/model_field_api.py +2611 -0
- entryscape/api/model_form_api.py +2611 -0
- entryscape/api/model_namespace_api.py +2611 -0
- entryscape/api/model_property_api.py +2611 -0
- entryscape/api/organization_api.py +3135 -0
- entryscape/api/search_api.py +1513 -0
- entryscape/api/showcase_api.py +2740 -0
- entryscape/api/suggestion_api.py +2740 -0
- entryscape/api/terminology_api.py +1726 -0
- entryscape/api/upload_api.py +814 -0
- entryscape/api_client.py +763 -0
- entryscape/api_response.py +20 -0
- entryscape/configuration.py +673 -0
- entryscape/exceptions.py +222 -0
- entryscape/models/__init__.py +71 -0
- entryscape/models/app_token.py +156 -0
- entryscape/models/app_token_create_request.py +98 -0
- entryscape/models/app_token_create_response.py +169 -0
- entryscape/models/app_token_status.py +35 -0
- entryscape/models/app_token_verify_request.py +109 -0
- entryscape/models/entity_list_item.py +175 -0
- entryscape/models/entity_list_response.py +139 -0
- entryscape/models/entity_reference.py +189 -0
- entryscape/models/entity_type.py +57 -0
- entryscape/models/error.py +135 -0
- entryscape/models/facet_field.py +115 -0
- entryscape/models/facet_field_values_inner.py +100 -0
- entryscape/models/facet_list.py +113 -0
- entryscape/models/facet_list_available_inner.py +107 -0
- entryscape/models/job_response.py +112 -0
- entryscape/models/job_status.py +189 -0
- entryscape/models/job_status_progress.py +100 -0
- entryscape/models/job_status_value.py +37 -0
- entryscape/models/job_type.py +37 -0
- entryscape/models/list_catalogs_entry_type_parameter.py +37 -0
- entryscape/models/list_catalogs_graph_type_parameter.py +44 -0
- entryscape/models/list_catalogs_resource_type_parameter.py +37 -0
- entryscape/models/login_request.py +108 -0
- entryscape/models/login_response.py +115 -0
- entryscape/models/metadata_format.py +38 -0
- entryscape/models/metadata_request.py +99 -0
- entryscape/models/parent_reference.py +130 -0
- entryscape/models/search_request.py +158 -0
- entryscape/models/search_request_filters.py +144 -0
- entryscape/models/search_request_filters_graph_type.py +44 -0
- entryscape/models/search_request_filters_resource_type.py +37 -0
- entryscape/models/search_request_sort.py +38 -0
- entryscape/models/search_request_sort_order.py +35 -0
- entryscape/models/search_response.py +175 -0
- entryscape/models/search_result.py +175 -0
- entryscape/models/search_result_graph_type.py +44 -0
- entryscape/models/search_result_resource_type.py +37 -0
- entryscape/models/search_sort_order_parameter.py +35 -0
- entryscape/models/terminology_import_mode.py +35 -0
- entryscape/models/validation_profile.py +36 -0
- entryscape/models/validation_response.py +149 -0
- entryscape/models/validation_result.py +162 -0
- entryscape/models/validation_severity.py +36 -0
- entryscape/models/validation_summary.py +122 -0
- entryscape/models/whoami_response.py +104 -0
- entryscape/py.typed +0 -0
- entryscape/rest.py +210 -0
- entryscape-1.3.0.dist-info/METADATA +696 -0
- entryscape-1.3.0.dist-info/RECORD +82 -0
- entryscape-1.3.0.dist-info/WHEEL +5 -0
- entryscape-1.3.0.dist-info/licenses/LICENSE.txt +165 -0
- entryscape-1.3.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,696 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: entryscape
|
|
3
|
+
Version: 1.3.0
|
|
4
|
+
Summary: EntryScape API - Python client for accessing EntryScape data following DCAT-AP standards
|
|
5
|
+
Author-email: Metasolutions <contact@entryscape.com>
|
|
6
|
+
License-Expression: LGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://entryscape.com
|
|
8
|
+
Project-URL: Documentation, https://bitbucket.org/metasolutions/entryscape-api
|
|
9
|
+
Project-URL: Repository, https://bitbucket.org/metasolutions/entryscape-api
|
|
10
|
+
Project-URL: Changelog, https://bitbucket.org/metasolutions/entryscape-api/src/master/CHANGELOG.md
|
|
11
|
+
Keywords: entryscape,dcat-ap,open-data,api-client,linked-data,rdf
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
23
|
+
Classifier: Typing :: Typed
|
|
24
|
+
Requires-Python: >=3.9
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE.txt
|
|
27
|
+
Requires-Dist: urllib3<3.0.0,>=2.1.0
|
|
28
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
29
|
+
Requires-Dist: aiohttp>=3.8.4
|
|
30
|
+
Requires-Dist: aiohttp-retry>=2.8.3
|
|
31
|
+
Requires-Dist: pydantic>=2
|
|
32
|
+
Requires-Dist: typing-extensions>=4.7.1
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest>=7.2.1; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy>=1.8; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff>=0.2; extra == "dev"
|
|
39
|
+
Requires-Dist: responses>=0.25; extra == "dev"
|
|
40
|
+
Requires-Dist: types-python-dateutil>=2.8.19; extra == "dev"
|
|
41
|
+
Provides-Extra: rdf
|
|
42
|
+
Requires-Dist: rdflib>=7.0.0; extra == "rdf"
|
|
43
|
+
Requires-Dist: pyld>=2.0.4; extra == "rdf"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# entryscape
|
|
47
|
+
|
|
48
|
+
This API provides structured access to EntryScape data following DCAT-AP standards.
|
|
49
|
+
All entity endpoints follow a consistent pattern:
|
|
50
|
+
- GET /{entity} - List all entities
|
|
51
|
+
- POST /{entity} - Create a new entity (DCAT types only)
|
|
52
|
+
- GET /{entity}/{context_id}/{entry_id} - Get entity reference info
|
|
53
|
+
- DELETE /{entity}/{context_id}/{entry_id} - Delete an entity (DCAT types only)
|
|
54
|
+
- GET /{entity}/{context_id}/{entry_id}/metadata - Get raw RDF metadata
|
|
55
|
+
- PUT /{entity}/{context_id}/{entry_id}/metadata - Replace raw RDF metadata (JSON-LD, Turtle, RDF/XML, or N-Triples passthrough)
|
|
56
|
+
|
|
57
|
+
## Reading and consistency
|
|
58
|
+
|
|
59
|
+
Reads of a single entity — `GET /{entity}/{context_id}/{entry_id}` and its
|
|
60
|
+
`/metadata` — go straight to the store and always reflect the latest write.
|
|
61
|
+
|
|
62
|
+
Lists and search do not. They are answered from a search index that is updated
|
|
63
|
+
asynchronously, so for a short interval after a write:
|
|
64
|
+
|
|
65
|
+
- an entry that was just created may be missing from the list it belongs to,
|
|
66
|
+
while reading it by id already works;
|
|
67
|
+
- an entry that was just deleted may still appear;
|
|
68
|
+
- `results` counts what the index holds, not what the store holds.
|
|
69
|
+
|
|
70
|
+
Write a client that tolerates this: after creating an entry, use the id the
|
|
71
|
+
create returned rather than searching for what you just wrote. `results` is
|
|
72
|
+
also an upper bound rather than an exact count when the caller cannot read
|
|
73
|
+
every hit (see the field's own description).
|
|
74
|
+
|
|
75
|
+
Separately, responses are cached for 15 minutes by default, which is a second
|
|
76
|
+
and unrelated source of staleness. A write invalidates the cache entries it
|
|
77
|
+
affects, but a read that lands in the indexing gap can cache a list that does
|
|
78
|
+
not yet show it.
|
|
79
|
+
|
|
80
|
+
## Authentication
|
|
81
|
+
|
|
82
|
+
Most endpoints require an authenticated session. Reading public data works
|
|
83
|
+
without authentication, while creating, updating, and deleting entities
|
|
84
|
+
requires a valid user session.
|
|
85
|
+
|
|
86
|
+
1. **Log in** with `POST /auth/login`, supplying an EntryStore username and
|
|
87
|
+
password. The response returns an `auth_token`.
|
|
88
|
+
2. **Send the token** on subsequent requests via the `X-Auth-Token` header.
|
|
89
|
+
This is the recommended method for SDK and programmatic access. Browser
|
|
90
|
+
clients can instead rely on the `auth_token` cookie, which the server sets
|
|
91
|
+
automatically on login (`SameSite=Lax; Secure`).
|
|
92
|
+
3. **Inspect the session** with `GET /auth/whoami`, which returns the current
|
|
93
|
+
user or an anonymous/guest identity when no valid token is supplied.
|
|
94
|
+
4. **Log out** with `POST /auth/logout` to invalidate the token and clear the
|
|
95
|
+
cookie.
|
|
96
|
+
|
|
97
|
+
### Writes and CSRF
|
|
98
|
+
|
|
99
|
+
Send the token as the `X-Auth-Token` **header** and there is nothing else to
|
|
100
|
+
do: creates, updates and deletes work as they are, which is how the SDKs and
|
|
101
|
+
the MCP server are built.
|
|
102
|
+
|
|
103
|
+
The `auth_token` cookie is different. A cookie is attached by the browser
|
|
104
|
+
automatically, so a state-changing request authenticated by it alone is what
|
|
105
|
+
cross-site request forgery abuses, and those requests additionally need a
|
|
106
|
+
double-submit token: read the `XSRF-TOKEN` cookie the server sets on any
|
|
107
|
+
response and send its value back as the `X-XSRF-TOKEN` header. Without it the
|
|
108
|
+
request is rejected with `403` before it reaches the endpoint.
|
|
109
|
+
|
|
110
|
+
A custom header cannot be forged this way — cross-origin JavaScript cannot set
|
|
111
|
+
one without a CORS preflight, which this API grants only to configured
|
|
112
|
+
origins — so the header is the recommended path for anything that is not a
|
|
113
|
+
browser session.
|
|
114
|
+
|
|
115
|
+
### App Tokens
|
|
116
|
+
|
|
117
|
+
An app token identifies an integration. Create one with `POST /app-token`
|
|
118
|
+
(unauthenticated). Creation requires an email address: the token starts in the
|
|
119
|
+
`pending` state and a 6-digit code is emailed to the owner. Confirm the code
|
|
120
|
+
with `POST /app-token/verify` to activate the token and receive its value,
|
|
121
|
+
which is shown only once — store it securely. `GET /app-token/{app_token_id}`
|
|
122
|
+
then returns its details and quota usage, authenticated by the token itself via
|
|
123
|
+
the `X-App-Token` header.
|
|
124
|
+
|
|
125
|
+
**The `X-App-Token` header is accepted only by `GET /app-token/{app_token_id}`.**
|
|
126
|
+
No other operation reads it, and the read quota is recorded but not yet
|
|
127
|
+
enforced: reading public data needs no token of any kind, and sending an app
|
|
128
|
+
token with a read neither grants nor meters anything. Metered public read
|
|
129
|
+
access is the intent of the two-token model, not a description of this release
|
|
130
|
+
— see the `security` declared on each operation for what it actually accepts.
|
|
131
|
+
|
|
132
|
+
## SDKs
|
|
133
|
+
|
|
134
|
+
Generated clients for Python, TypeScript, JavaScript and C# wrap every
|
|
135
|
+
operation below, and each operation on this page shows the SDK call beside
|
|
136
|
+
the `curl` command. Two of them install from a public registry:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
pip install entryscape # Python
|
|
140
|
+
npm install @entryscape/api-client # TypeScript and JavaScript
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
`@entryscape/api-client` ships an ESM and a CommonJS build, so `import` and
|
|
144
|
+
`require()` both work and TypeScript is not required to use it — the name
|
|
145
|
+
describes what it is written in, not what you have to write. There is a
|
|
146
|
+
separate generated JavaScript SDK, and it is deliberately **not** on npm;
|
|
147
|
+
this package is the npm client for both languages.
|
|
148
|
+
|
|
149
|
+
Every SDK, including the C# and JavaScript ones, is also published as a
|
|
150
|
+
tarball. The downloads are linked in the sidebar, they are the route to take
|
|
151
|
+
when a registry is unreachable or a build has to vendor its dependencies, and
|
|
152
|
+
each archive carries the SDK's own README:
|
|
153
|
+
|
|
154
|
+
- **Python** — `pip install entryscape`, or `python-sdk.tar.gz`.
|
|
155
|
+
- **TypeScript and JavaScript** — `npm install @entryscape/api-client`, or
|
|
156
|
+
`typescript-sdk.tar.gz`.
|
|
157
|
+
- **JavaScript (the separate generated client)** — not published to a
|
|
158
|
+
registry, by design; `javascript-sdk.tar.gz` only.
|
|
159
|
+
- **C#** — not published to NuGet yet; `csharp-sdk.tar.gz` only.
|
|
160
|
+
- **MCP server** — `npx -y @entryscape/mcp-server`, or `mcp-server.tar.gz`.
|
|
161
|
+
|
|
162
|
+
## MCP Server
|
|
163
|
+
|
|
164
|
+
A Model Context Protocol (MCP) server is generated from this specification and
|
|
165
|
+
published alongside the SDKs (`@entryscape/mcp-server`), exposing the API as
|
|
166
|
+
tools for AI assistants and agents. Each operation becomes one tool named after
|
|
167
|
+
its `operationId` — `listDatasets`, `createCatalog`, `search`, `getJobStatus`.
|
|
168
|
+
The `auth` operations are the exception: the server reads its token once at
|
|
169
|
+
startup, so a `login` tool could install nothing and a `logout` tool would only
|
|
170
|
+
invalidate the token the server was started with. On connect the server also
|
|
171
|
+
hands the assistant a short set of rules that hold across every tool: a token is
|
|
172
|
+
bound to one EntryStore instance, the search index lags a write, uploads finish
|
|
173
|
+
as jobs.
|
|
174
|
+
|
|
175
|
+
### Install
|
|
176
|
+
|
|
177
|
+
The server is on npm, and MCP servers are normally launched straight from
|
|
178
|
+
there, so nothing has to be installed first:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
npx -y @entryscape/mcp-server
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`npm install -g @entryscape/mcp-server` works too and puts an
|
|
185
|
+
`entryscape-mcp` binary on `PATH`. It is also listed in the MCP Registry as
|
|
186
|
+
`com.entryscape/mcp-server`, which is where clients and marketplaces look it
|
|
187
|
+
up.
|
|
188
|
+
|
|
189
|
+
Without npm, download `mcp-server.tar.gz` from the SDK downloads and unpack
|
|
190
|
+
it. The package ships prebuilt; install its runtime dependency once:
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
mkdir entryscape-mcp && tar -xzf mcp-server.tar.gz -C entryscape-mcp
|
|
194
|
+
cd entryscape-mcp && npm install --omit=dev
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Configure
|
|
198
|
+
|
|
199
|
+
The server is a stdio MCP server configured through environment variables,
|
|
200
|
+
read once at startup:
|
|
201
|
+
|
|
202
|
+
- `ENTRYSCAPE_API_URL` — base URL of the API server, path included. Required:
|
|
203
|
+
there is no default, and the server refuses to start without it.
|
|
204
|
+
- `ENTRYSCAPE_AUTH_TOKEN` — a session token from `POST /auth/login`, sent as
|
|
205
|
+
the `X-Auth-Token` header. Optional: without it reads see public entries and
|
|
206
|
+
every write is refused. A token is valid only for the EntryStore instance
|
|
207
|
+
that issued it.
|
|
208
|
+
- `ENTRYSCAPE_ENTRYSTORE_HOST` — the EntryStore instance the API server should
|
|
209
|
+
use, for example `dev.entryscape.com/store/`. Unset means the API server's
|
|
210
|
+
own default.
|
|
211
|
+
- `ENTRYSCAPE_MCP_UPLOAD_ROOT` — the directory the upload tools may read files
|
|
212
|
+
from. **Unset means uploads are disabled**: `addFileToDistribution`,
|
|
213
|
+
`replaceFileInDistribution` and `importTerminology` refuse and say so.
|
|
214
|
+
- `ENTRYSCAPE_MCP_TAGS` — comma-separated tags to serve tools for, for example
|
|
215
|
+
`catalog,dataset,distribution,search`. Unset serves every tool.
|
|
216
|
+
|
|
217
|
+
The package's `README.md` lists the remaining variables (timeouts and size
|
|
218
|
+
caps). Register the server with any MCP-capable client by adding it to the
|
|
219
|
+
client's `mcpServers` configuration:
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
\"mcpServers\": {
|
|
224
|
+
\"entryscape\": {
|
|
225
|
+
\"command\": \"npx\",
|
|
226
|
+
\"args\": [\"-y\", \"@entryscape/mcp-server\"],
|
|
227
|
+
\"env\": {
|
|
228
|
+
\"ENTRYSCAPE_API_URL\": \"https://<your EntryScape API host>\",
|
|
229
|
+
\"ENTRYSCAPE_AUTH_TOKEN\": \"your-session-token\"
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
From an unpacked download instead, the command is
|
|
237
|
+
`\"command\": \"node\", \"args\": [\"/path/to/entryscape-mcp/dist/bin/entryscape-mcp.js\"]`.
|
|
238
|
+
|
|
239
|
+
### Claude Code
|
|
240
|
+
|
|
241
|
+
The unpacked package is also a Claude Code plugin, so one install gives the
|
|
242
|
+
server and the skills below together. Claude Code installs plugins from
|
|
243
|
+
marketplaces, and the package carries a one-entry marketplace pointing at
|
|
244
|
+
itself:
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
claude plugin marketplace add /path/to/entryscape-mcp
|
|
248
|
+
claude plugin install entryscape@entryscape --scope user
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
The plugin passes `ENTRYSCAPE_API_URL`, `ENTRYSCAPE_AUTH_TOKEN`,
|
|
252
|
+
`ENTRYSCAPE_ENTRYSTORE_HOST`, `ENTRYSCAPE_MCP_TAGS` and
|
|
253
|
+
`ENTRYSCAPE_MCP_UPLOAD_ROOT` through from the shell Claude Code was started in,
|
|
254
|
+
so set them there. To try the plugin for one session without installing it,
|
|
255
|
+
start Claude Code with `--plugin-dir /path/to/entryscape-mcp`.
|
|
256
|
+
|
|
257
|
+
### Skills
|
|
258
|
+
|
|
259
|
+
`skills/` in the package holds procedures that span several tools, in the
|
|
260
|
+
Agent Skills format (a `SKILL.md` with `name` and `description`): which tools
|
|
261
|
+
to call in which order, what to check between calls, and where to stop. Claude
|
|
262
|
+
Code loads them from the plugin; other clients that read the format can be
|
|
263
|
+
pointed at the directory. The `find` skill covers discovery, facets and
|
|
264
|
+
selective metadata reads; `publish-dataset` takes a dataset from catalog to
|
|
265
|
+
validated distribution with its file; `edit-metadata` changes an entry that
|
|
266
|
+
already exists without dropping the rest of its graph, models included;
|
|
267
|
+
`migrate-from-taskrunner` moves an integration off the deprecated Taskrunner
|
|
268
|
+
API. Every tool a skill names is checked against this specification when the
|
|
269
|
+
package is built.
|
|
270
|
+
|
|
271
|
+
## Deprecation Policy
|
|
272
|
+
|
|
273
|
+
When endpoints or features are deprecated:
|
|
274
|
+
1. The operation is marked with `deprecated: true` in this spec
|
|
275
|
+
2. The operation description documents the replacement endpoint and sunset date
|
|
276
|
+
3. Deprecated endpoints remain functional for at least 6 months after announcement
|
|
277
|
+
4. The server returns a `Sunset` header with the planned removal date
|
|
278
|
+
5. After the sunset date, the endpoint may be removed in a future release
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
[](https://www.python.org/downloads/)
|
|
282
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
283
|
+
|
|
284
|
+
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
|
285
|
+
|
|
286
|
+
- API version: 1.3.0
|
|
287
|
+
- Package version: 1.3.0
|
|
288
|
+
- Generator version: 7.22.0
|
|
289
|
+
|
|
290
|
+
For more information, please visit [https://entryscape.com/en/contact-us/](https://entryscape.com/en/contact-us/)
|
|
291
|
+
|
|
292
|
+
## Requirements
|
|
293
|
+
|
|
294
|
+
- Python 3.10+
|
|
295
|
+
- Dependencies are managed via `pyproject.toml`
|
|
296
|
+
|
|
297
|
+
## Installation
|
|
298
|
+
|
|
299
|
+
### From PyPI (recommended)
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
pip install entryscape
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### From a download
|
|
306
|
+
|
|
307
|
+
Every release is also published as `python-sdk.tar.gz` at
|
|
308
|
+
<https://api.entryscape.com/sdk/latest/python-sdk.tar.gz>, for a build that cannot reach
|
|
309
|
+
PyPI or has to vendor its dependencies:
|
|
310
|
+
|
|
311
|
+
The archive has no top-level directory of its own, so unpack it into one:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
mkdir entryscape-python && tar -xzf python-sdk.tar.gz -C entryscape-python
|
|
315
|
+
pip install ./entryscape-python
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### From Bitbucket
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
pip install git+https://bitbucket.org/metasolutions/entryscape-api.git#subdirectory=out/python-sdk
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### From source
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
git clone https://bitbucket.org/metasolutions/entryscape-api.git
|
|
328
|
+
cd entryscape-api/out/python-sdk
|
|
329
|
+
pip install .
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### For development
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
pip install -e ".[dev]"
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Quick Start
|
|
339
|
+
|
|
340
|
+
```python
|
|
341
|
+
import entryscape
|
|
342
|
+
from entryscape import ApiException
|
|
343
|
+
|
|
344
|
+
# Configure the client
|
|
345
|
+
configuration = entryscape.Configuration(
|
|
346
|
+
host="http://localhost:8080" # API server URL
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
# Async usage
|
|
350
|
+
import asyncio
|
|
351
|
+
|
|
352
|
+
async def main():
|
|
353
|
+
async with entryscape.ApiClient(configuration) as api_client:
|
|
354
|
+
api = entryscape.CatalogApi(api_client)
|
|
355
|
+
|
|
356
|
+
try:
|
|
357
|
+
# List catalogs from an EntryStore instance
|
|
358
|
+
catalogs = await api.list_catalogs(
|
|
359
|
+
entrystore_host="dev.entryscape.com/store/"
|
|
360
|
+
)
|
|
361
|
+
print(f"Found {catalogs.results} catalogs")
|
|
362
|
+
|
|
363
|
+
for item in catalogs.items or []:
|
|
364
|
+
print(f" - {item.uri}")
|
|
365
|
+
except ApiException as e:
|
|
366
|
+
print(f"API error: {e}")
|
|
367
|
+
|
|
368
|
+
asyncio.run(main())
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## EntryStore Hosts
|
|
372
|
+
|
|
373
|
+
Pass a host string permitted by the API deployment's effective EntryStore allowlist.
|
|
374
|
+
Omit it to use the deployment's configured default. A bare hostname uses `/store/`;
|
|
375
|
+
a host with a base path selects that path. Do not include a URL scheme.
|
|
376
|
+
|
|
377
|
+
```python
|
|
378
|
+
entrystore_host = "dev.entryscape.com/store/"
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Getting Started
|
|
382
|
+
|
|
383
|
+
Please follow the [installation procedure](#installation) and then run the following:
|
|
384
|
+
|
|
385
|
+
```python
|
|
386
|
+
import asyncio
|
|
387
|
+
import os
|
|
388
|
+
|
|
389
|
+
import entryscape
|
|
390
|
+
from entryscape import ApiException
|
|
391
|
+
from pprint import pprint
|
|
392
|
+
|
|
393
|
+
# Defining the host is optional and defaults to https://api.entryscape.com
|
|
394
|
+
# See configuration.py for a list of all supported configuration parameters.
|
|
395
|
+
configuration = entryscape.Configuration(
|
|
396
|
+
host = "https://api.entryscape.com"
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
# The client must configure the authentication and authorization parameters
|
|
400
|
+
# in accordance with the API server security policy.
|
|
401
|
+
# Examples for each auth method are provided below, use the example that
|
|
402
|
+
# satisfies your auth use case.
|
|
403
|
+
|
|
404
|
+
# Configure API key authorization: auth_token
|
|
405
|
+
configuration.api_key['auth_token'] = os.environ["API_KEY"]
|
|
406
|
+
|
|
407
|
+
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
|
|
408
|
+
# configuration.api_key_prefix['auth_token'] = 'Bearer'
|
|
409
|
+
|
|
410
|
+
# Configure API key authorization: auth_header
|
|
411
|
+
configuration.api_key['auth_header'] = os.environ["API_KEY"]
|
|
412
|
+
|
|
413
|
+
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
|
|
414
|
+
# configuration.api_key_prefix['auth_header'] = 'Bearer'
|
|
415
|
+
|
|
416
|
+
# Configure API key authorization: app_token_header
|
|
417
|
+
configuration.api_key['app_token_header'] = os.environ["API_KEY"]
|
|
418
|
+
|
|
419
|
+
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
|
|
420
|
+
# configuration.api_key_prefix['app_token_header'] = 'Bearer'
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
async def main():
|
|
424
|
+
# Enter a context with an instance of the API client
|
|
425
|
+
async with entryscape.ApiClient(configuration) as api_client:
|
|
426
|
+
# Create an instance of the API class
|
|
427
|
+
api_instance = entryscape.AppTokenApi(api_client)
|
|
428
|
+
app_token_create_request = {"name":"my-data-app","email":"owner@example.com"} # AppTokenCreateRequest |
|
|
429
|
+
|
|
430
|
+
try:
|
|
431
|
+
# Create app token
|
|
432
|
+
api_response = await api_instance.create_app_token(app_token_create_request)
|
|
433
|
+
print("The response of AppTokenApi->create_app_token:\n")
|
|
434
|
+
pprint(api_response)
|
|
435
|
+
except ApiException as e:
|
|
436
|
+
print("Exception when calling AppTokenApi->create_app_token: %s\n" % e)
|
|
437
|
+
|
|
438
|
+
asyncio.run(main())
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## Documentation for API Endpoints
|
|
443
|
+
|
|
444
|
+
All URIs are relative to *https://api.entryscape.com*
|
|
445
|
+
|
|
446
|
+
Class | Method | HTTP request | Description
|
|
447
|
+
------------ | ------------- | ------------- | -------------
|
|
448
|
+
*AppTokenApi* | [**create_app_token**](docs/AppTokenApi.md#create_app_token) | **POST** /app-token | Create app token
|
|
449
|
+
*AppTokenApi* | [**get_app_token**](docs/AppTokenApi.md#get_app_token) | **GET** /app-token/{app_token_id} | Get app token details
|
|
450
|
+
*AppTokenApi* | [**verify_app_token**](docs/AppTokenApi.md#verify_app_token) | **POST** /app-token/verify | Verify app token
|
|
451
|
+
*AuthApi* | [**login**](docs/AuthApi.md#login) | **POST** /auth/login | Log in (start a user session)
|
|
452
|
+
*AuthApi* | [**logout**](docs/AuthApi.md#logout) | **POST** /auth/logout | Log out (end the user session)
|
|
453
|
+
*AuthApi* | [**whoami**](docs/AuthApi.md#whoami) | **GET** /auth/whoami | Current user for the session
|
|
454
|
+
*CatalogApi* | [**create_catalog**](docs/CatalogApi.md#create_catalog) | **POST** /catalog | Create catalog
|
|
455
|
+
*CatalogApi* | [**delete_catalog**](docs/CatalogApi.md#delete_catalog) | **DELETE** /catalog/{context_id}/{entry_id} | Delete catalog
|
|
456
|
+
*CatalogApi* | [**get_catalog**](docs/CatalogApi.md#get_catalog) | **GET** /catalog/{context_id}/{entry_id} | Get catalog
|
|
457
|
+
*CatalogApi* | [**get_catalog_metadata**](docs/CatalogApi.md#get_catalog_metadata) | **GET** /catalog/{context_id}/{entry_id}/metadata | Get catalog metadata
|
|
458
|
+
*CatalogApi* | [**list_catalog_dataservices**](docs/CatalogApi.md#list_catalog_dataservices) | **GET** /catalog/{context_id}/{entry_id}/dataservices | List data services in catalog
|
|
459
|
+
*CatalogApi* | [**list_catalog_datasets**](docs/CatalogApi.md#list_catalog_datasets) | **GET** /catalog/{context_id}/{entry_id}/datasets | List datasets in catalog
|
|
460
|
+
*CatalogApi* | [**list_catalogs**](docs/CatalogApi.md#list_catalogs) | **GET** /catalog | List catalogs
|
|
461
|
+
*CatalogApi* | [**update_catalog_metadata**](docs/CatalogApi.md#update_catalog_metadata) | **PUT** /catalog/{context_id}/{entry_id}/metadata | Update catalog metadata
|
|
462
|
+
*CatalogApi* | [**validate_catalog**](docs/CatalogApi.md#validate_catalog) | **GET** /catalog/{context_id}/{entry_id}/validate | Validate catalog metadata
|
|
463
|
+
*ContactApi* | [**create_contact**](docs/ContactApi.md#create_contact) | **POST** /contact | Create contact
|
|
464
|
+
*ContactApi* | [**delete_contact**](docs/ContactApi.md#delete_contact) | **DELETE** /contact/{context_id}/{entry_id} | Delete contact
|
|
465
|
+
*ContactApi* | [**get_contact**](docs/ContactApi.md#get_contact) | **GET** /contact/{context_id}/{entry_id} | Get contact
|
|
466
|
+
*ContactApi* | [**get_contact_metadata**](docs/ContactApi.md#get_contact_metadata) | **GET** /contact/{context_id}/{entry_id}/metadata | Get contact metadata
|
|
467
|
+
*ContactApi* | [**list_contacts**](docs/ContactApi.md#list_contacts) | **GET** /contact | List contacts
|
|
468
|
+
*ContactApi* | [**update_contact_metadata**](docs/ContactApi.md#update_contact_metadata) | **PUT** /contact/{context_id}/{entry_id}/metadata | Update contact metadata
|
|
469
|
+
*ContactApi* | [**validate_contact**](docs/ContactApi.md#validate_contact) | **GET** /contact/{context_id}/{entry_id}/validate | Validate contact metadata
|
|
470
|
+
*DataserviceApi* | [**create_data_service**](docs/DataserviceApi.md#create_data_service) | **POST** /dataservice | Create data service
|
|
471
|
+
*DataserviceApi* | [**delete_data_service**](docs/DataserviceApi.md#delete_data_service) | **DELETE** /dataservice/{context_id}/{entry_id} | Delete data service
|
|
472
|
+
*DataserviceApi* | [**get_data_service**](docs/DataserviceApi.md#get_data_service) | **GET** /dataservice/{context_id}/{entry_id} | Get data service
|
|
473
|
+
*DataserviceApi* | [**get_data_service_metadata**](docs/DataserviceApi.md#get_data_service_metadata) | **GET** /dataservice/{context_id}/{entry_id}/metadata | Get data service metadata
|
|
474
|
+
*DataserviceApi* | [**list_data_services**](docs/DataserviceApi.md#list_data_services) | **GET** /dataservice | List data services
|
|
475
|
+
*DataserviceApi* | [**update_data_service_metadata**](docs/DataserviceApi.md#update_data_service_metadata) | **PUT** /dataservice/{context_id}/{entry_id}/metadata | Update data service metadata
|
|
476
|
+
*DataserviceApi* | [**validate_data_service**](docs/DataserviceApi.md#validate_data_service) | **GET** /dataservice/{context_id}/{entry_id}/validate | Validate data service metadata
|
|
477
|
+
*DatasetApi* | [**create_dataset**](docs/DatasetApi.md#create_dataset) | **POST** /dataset | Create dataset
|
|
478
|
+
*DatasetApi* | [**delete_dataset**](docs/DatasetApi.md#delete_dataset) | **DELETE** /dataset/{context_id}/{entry_id} | Delete dataset
|
|
479
|
+
*DatasetApi* | [**get_dataset**](docs/DatasetApi.md#get_dataset) | **GET** /dataset/{context_id}/{entry_id} | Get dataset
|
|
480
|
+
*DatasetApi* | [**get_dataset_metadata**](docs/DatasetApi.md#get_dataset_metadata) | **GET** /dataset/{context_id}/{entry_id}/metadata | Get dataset metadata
|
|
481
|
+
*DatasetApi* | [**list_dataset_distributions**](docs/DatasetApi.md#list_dataset_distributions) | **GET** /dataset/{context_id}/{entry_id}/distributions | List distributions for dataset
|
|
482
|
+
*DatasetApi* | [**list_datasets**](docs/DatasetApi.md#list_datasets) | **GET** /dataset | List datasets
|
|
483
|
+
*DatasetApi* | [**update_dataset_metadata**](docs/DatasetApi.md#update_dataset_metadata) | **PUT** /dataset/{context_id}/{entry_id}/metadata | Update dataset metadata
|
|
484
|
+
*DatasetApi* | [**validate_dataset**](docs/DatasetApi.md#validate_dataset) | **GET** /dataset/{context_id}/{entry_id}/validate | Validate dataset metadata
|
|
485
|
+
*DistributionApi* | [**create_distribution**](docs/DistributionApi.md#create_distribution) | **POST** /distribution | Create distribution
|
|
486
|
+
*DistributionApi* | [**delete_distribution**](docs/DistributionApi.md#delete_distribution) | **DELETE** /distribution/{context_id}/{entry_id} | Delete distribution
|
|
487
|
+
*DistributionApi* | [**get_distribution**](docs/DistributionApi.md#get_distribution) | **GET** /distribution/{context_id}/{entry_id} | Get distribution
|
|
488
|
+
*DistributionApi* | [**get_distribution_metadata**](docs/DistributionApi.md#get_distribution_metadata) | **GET** /distribution/{context_id}/{entry_id}/metadata | Get distribution metadata
|
|
489
|
+
*DistributionApi* | [**list_distributions**](docs/DistributionApi.md#list_distributions) | **GET** /distribution | List distributions
|
|
490
|
+
*DistributionApi* | [**update_distribution_metadata**](docs/DistributionApi.md#update_distribution_metadata) | **PUT** /distribution/{context_id}/{entry_id}/metadata | Update distribution metadata
|
|
491
|
+
*DistributionApi* | [**validate_distribution**](docs/DistributionApi.md#validate_distribution) | **GET** /distribution/{context_id}/{entry_id}/validate | Validate distribution metadata
|
|
492
|
+
*DocumentApi* | [**create_document**](docs/DocumentApi.md#create_document) | **POST** /document | Create document
|
|
493
|
+
*DocumentApi* | [**delete_document**](docs/DocumentApi.md#delete_document) | **DELETE** /document/{context_id}/{entry_id} | Delete document
|
|
494
|
+
*DocumentApi* | [**get_document**](docs/DocumentApi.md#get_document) | **GET** /document/{context_id}/{entry_id} | Get document
|
|
495
|
+
*DocumentApi* | [**get_document_metadata**](docs/DocumentApi.md#get_document_metadata) | **GET** /document/{context_id}/{entry_id}/metadata | Get document metadata
|
|
496
|
+
*DocumentApi* | [**list_documents**](docs/DocumentApi.md#list_documents) | **GET** /document | List documents
|
|
497
|
+
*DocumentApi* | [**update_document_metadata**](docs/DocumentApi.md#update_document_metadata) | **PUT** /document/{context_id}/{entry_id}/metadata | Update document metadata
|
|
498
|
+
*IdeaApi* | [**create_idea**](docs/IdeaApi.md#create_idea) | **POST** /idea | Create idea
|
|
499
|
+
*IdeaApi* | [**delete_idea**](docs/IdeaApi.md#delete_idea) | **DELETE** /idea/{context_id}/{entry_id} | Delete idea
|
|
500
|
+
*IdeaApi* | [**get_idea**](docs/IdeaApi.md#get_idea) | **GET** /idea/{context_id}/{entry_id} | Get idea
|
|
501
|
+
*IdeaApi* | [**get_idea_metadata**](docs/IdeaApi.md#get_idea_metadata) | **GET** /idea/{context_id}/{entry_id}/metadata | Get idea metadata
|
|
502
|
+
*IdeaApi* | [**list_ideas**](docs/IdeaApi.md#list_ideas) | **GET** /idea | List ideas
|
|
503
|
+
*IdeaApi* | [**update_idea_metadata**](docs/IdeaApi.md#update_idea_metadata) | **PUT** /idea/{context_id}/{entry_id}/metadata | Update idea metadata
|
|
504
|
+
*JobApi* | [**get_job_status**](docs/JobApi.md#get_job_status) | **GET** /job/{job_id} | Get job status
|
|
505
|
+
*ModelApi* | [**create_model**](docs/ModelApi.md#create_model) | **POST** /model | Create model
|
|
506
|
+
*ModelApi* | [**delete_model**](docs/ModelApi.md#delete_model) | **DELETE** /model/{context_id} | Delete model
|
|
507
|
+
*ModelApi* | [**get_model**](docs/ModelApi.md#get_model) | **GET** /model/{context_id} | Get model
|
|
508
|
+
*ModelApi* | [**get_model_metadata**](docs/ModelApi.md#get_model_metadata) | **GET** /model/{context_id}/metadata | Get model metadata
|
|
509
|
+
*ModelApi* | [**list_models**](docs/ModelApi.md#list_models) | **GET** /model | List models
|
|
510
|
+
*ModelApi* | [**update_model_metadata**](docs/ModelApi.md#update_model_metadata) | **PUT** /model/{context_id}/metadata | Update model metadata
|
|
511
|
+
*ModelClassApi* | [**create_model_class**](docs/ModelClassApi.md#create_model_class) | **POST** /model/{context_id}/classes | Create model class
|
|
512
|
+
*ModelClassApi* | [**delete_model_class**](docs/ModelClassApi.md#delete_model_class) | **DELETE** /model/{context_id}/classes/{entry_id} | Delete model class
|
|
513
|
+
*ModelClassApi* | [**get_model_class**](docs/ModelClassApi.md#get_model_class) | **GET** /model/{context_id}/classes/{entry_id} | Get model class
|
|
514
|
+
*ModelClassApi* | [**get_model_class_metadata**](docs/ModelClassApi.md#get_model_class_metadata) | **GET** /model/{context_id}/classes/{entry_id}/metadata | Get model class metadata
|
|
515
|
+
*ModelClassApi* | [**list_model_classes**](docs/ModelClassApi.md#list_model_classes) | **GET** /model/{context_id}/classes | List model classes
|
|
516
|
+
*ModelClassApi* | [**update_model_class_metadata**](docs/ModelClassApi.md#update_model_class_metadata) | **PUT** /model/{context_id}/classes/{entry_id}/metadata | Update model class metadata
|
|
517
|
+
*ModelDiagramApi* | [**create_model_diagram**](docs/ModelDiagramApi.md#create_model_diagram) | **POST** /model/{context_id}/diagrams | Create model diagram
|
|
518
|
+
*ModelDiagramApi* | [**delete_model_diagram**](docs/ModelDiagramApi.md#delete_model_diagram) | **DELETE** /model/{context_id}/diagrams/{entry_id} | Delete model diagram
|
|
519
|
+
*ModelDiagramApi* | [**get_model_diagram**](docs/ModelDiagramApi.md#get_model_diagram) | **GET** /model/{context_id}/diagrams/{entry_id} | Get model diagram
|
|
520
|
+
*ModelDiagramApi* | [**get_model_diagram_metadata**](docs/ModelDiagramApi.md#get_model_diagram_metadata) | **GET** /model/{context_id}/diagrams/{entry_id}/metadata | Get model diagram metadata
|
|
521
|
+
*ModelDiagramApi* | [**list_model_diagrams**](docs/ModelDiagramApi.md#list_model_diagrams) | **GET** /model/{context_id}/diagrams | List model diagrams
|
|
522
|
+
*ModelDiagramApi* | [**update_model_diagram_metadata**](docs/ModelDiagramApi.md#update_model_diagram_metadata) | **PUT** /model/{context_id}/diagrams/{entry_id}/metadata | Update model diagram metadata
|
|
523
|
+
*ModelFieldApi* | [**create_model_field**](docs/ModelFieldApi.md#create_model_field) | **POST** /model/{context_id}/fields | Create model field
|
|
524
|
+
*ModelFieldApi* | [**delete_model_field**](docs/ModelFieldApi.md#delete_model_field) | **DELETE** /model/{context_id}/fields/{entry_id} | Delete model field
|
|
525
|
+
*ModelFieldApi* | [**get_model_field**](docs/ModelFieldApi.md#get_model_field) | **GET** /model/{context_id}/fields/{entry_id} | Get model field
|
|
526
|
+
*ModelFieldApi* | [**get_model_field_metadata**](docs/ModelFieldApi.md#get_model_field_metadata) | **GET** /model/{context_id}/fields/{entry_id}/metadata | Get model field metadata
|
|
527
|
+
*ModelFieldApi* | [**list_model_fields**](docs/ModelFieldApi.md#list_model_fields) | **GET** /model/{context_id}/fields | List model fields
|
|
528
|
+
*ModelFieldApi* | [**update_model_field_metadata**](docs/ModelFieldApi.md#update_model_field_metadata) | **PUT** /model/{context_id}/fields/{entry_id}/metadata | Update model field metadata
|
|
529
|
+
*ModelFormApi* | [**create_model_form**](docs/ModelFormApi.md#create_model_form) | **POST** /model/{context_id}/forms | Create model form
|
|
530
|
+
*ModelFormApi* | [**delete_model_form**](docs/ModelFormApi.md#delete_model_form) | **DELETE** /model/{context_id}/forms/{entry_id} | Delete model form
|
|
531
|
+
*ModelFormApi* | [**get_model_form**](docs/ModelFormApi.md#get_model_form) | **GET** /model/{context_id}/forms/{entry_id} | Get model form
|
|
532
|
+
*ModelFormApi* | [**get_model_form_metadata**](docs/ModelFormApi.md#get_model_form_metadata) | **GET** /model/{context_id}/forms/{entry_id}/metadata | Get model form metadata
|
|
533
|
+
*ModelFormApi* | [**list_model_forms**](docs/ModelFormApi.md#list_model_forms) | **GET** /model/{context_id}/forms | List model forms
|
|
534
|
+
*ModelFormApi* | [**update_model_form_metadata**](docs/ModelFormApi.md#update_model_form_metadata) | **PUT** /model/{context_id}/forms/{entry_id}/metadata | Update model form metadata
|
|
535
|
+
*ModelNamespaceApi* | [**create_model_namespace**](docs/ModelNamespaceApi.md#create_model_namespace) | **POST** /model/{context_id}/namespaces | Create model namespace
|
|
536
|
+
*ModelNamespaceApi* | [**delete_model_namespace**](docs/ModelNamespaceApi.md#delete_model_namespace) | **DELETE** /model/{context_id}/namespaces/{entry_id} | Delete model namespace
|
|
537
|
+
*ModelNamespaceApi* | [**get_model_namespace**](docs/ModelNamespaceApi.md#get_model_namespace) | **GET** /model/{context_id}/namespaces/{entry_id} | Get model namespace
|
|
538
|
+
*ModelNamespaceApi* | [**get_model_namespace_metadata**](docs/ModelNamespaceApi.md#get_model_namespace_metadata) | **GET** /model/{context_id}/namespaces/{entry_id}/metadata | Get model namespace metadata
|
|
539
|
+
*ModelNamespaceApi* | [**list_model_namespaces**](docs/ModelNamespaceApi.md#list_model_namespaces) | **GET** /model/{context_id}/namespaces | List model namespaces
|
|
540
|
+
*ModelNamespaceApi* | [**update_model_namespace_metadata**](docs/ModelNamespaceApi.md#update_model_namespace_metadata) | **PUT** /model/{context_id}/namespaces/{entry_id}/metadata | Update model namespace metadata
|
|
541
|
+
*ModelPropertyApi* | [**create_model_property**](docs/ModelPropertyApi.md#create_model_property) | **POST** /model/{context_id}/properties | Create model property
|
|
542
|
+
*ModelPropertyApi* | [**delete_model_property**](docs/ModelPropertyApi.md#delete_model_property) | **DELETE** /model/{context_id}/properties/{entry_id} | Delete model property
|
|
543
|
+
*ModelPropertyApi* | [**get_model_property**](docs/ModelPropertyApi.md#get_model_property) | **GET** /model/{context_id}/properties/{entry_id} | Get model property
|
|
544
|
+
*ModelPropertyApi* | [**get_model_property_metadata**](docs/ModelPropertyApi.md#get_model_property_metadata) | **GET** /model/{context_id}/properties/{entry_id}/metadata | Get model property metadata
|
|
545
|
+
*ModelPropertyApi* | [**list_model_properties**](docs/ModelPropertyApi.md#list_model_properties) | **GET** /model/{context_id}/properties | List model properties
|
|
546
|
+
*ModelPropertyApi* | [**update_model_property_metadata**](docs/ModelPropertyApi.md#update_model_property_metadata) | **PUT** /model/{context_id}/properties/{entry_id}/metadata | Update model property metadata
|
|
547
|
+
*OrganizationApi* | [**create_organization**](docs/OrganizationApi.md#create_organization) | **POST** /organization | Create organization
|
|
548
|
+
*OrganizationApi* | [**delete_organization**](docs/OrganizationApi.md#delete_organization) | **DELETE** /organization/{context_id}/{entry_id} | Delete organization
|
|
549
|
+
*OrganizationApi* | [**get_organization**](docs/OrganizationApi.md#get_organization) | **GET** /organization/{context_id}/{entry_id} | Get organization
|
|
550
|
+
*OrganizationApi* | [**get_organization_metadata**](docs/OrganizationApi.md#get_organization_metadata) | **GET** /organization/{context_id}/{entry_id}/metadata | Get organization metadata
|
|
551
|
+
*OrganizationApi* | [**list_organizations**](docs/OrganizationApi.md#list_organizations) | **GET** /organization | List organizations
|
|
552
|
+
*OrganizationApi* | [**update_organization_metadata**](docs/OrganizationApi.md#update_organization_metadata) | **PUT** /organization/{context_id}/{entry_id}/metadata | Update organization metadata
|
|
553
|
+
*OrganizationApi* | [**validate_organization**](docs/OrganizationApi.md#validate_organization) | **GET** /organization/{context_id}/{entry_id}/validate | Validate organization metadata
|
|
554
|
+
*SearchApi* | [**advanced_search**](docs/SearchApi.md#advanced_search) | **POST** /search | Advanced search
|
|
555
|
+
*SearchApi* | [**get_search_facets**](docs/SearchApi.md#get_search_facets) | **GET** /search/facets | Get available facet fields
|
|
556
|
+
*SearchApi* | [**search**](docs/SearchApi.md#search) | **GET** /search | Search entries
|
|
557
|
+
*ShowcaseApi* | [**create_showcase**](docs/ShowcaseApi.md#create_showcase) | **POST** /showcase | Create showcase
|
|
558
|
+
*ShowcaseApi* | [**delete_showcase**](docs/ShowcaseApi.md#delete_showcase) | **DELETE** /showcase/{context_id}/{entry_id} | Delete showcase
|
|
559
|
+
*ShowcaseApi* | [**get_showcase**](docs/ShowcaseApi.md#get_showcase) | **GET** /showcase/{context_id}/{entry_id} | Get showcase
|
|
560
|
+
*ShowcaseApi* | [**get_showcase_metadata**](docs/ShowcaseApi.md#get_showcase_metadata) | **GET** /showcase/{context_id}/{entry_id}/metadata | Get showcase metadata
|
|
561
|
+
*ShowcaseApi* | [**list_showcases**](docs/ShowcaseApi.md#list_showcases) | **GET** /showcase | List showcases
|
|
562
|
+
*ShowcaseApi* | [**update_showcase_metadata**](docs/ShowcaseApi.md#update_showcase_metadata) | **PUT** /showcase/{context_id}/{entry_id}/metadata | Update showcase metadata
|
|
563
|
+
*SuggestionApi* | [**create_suggestion**](docs/SuggestionApi.md#create_suggestion) | **POST** /suggestion | Create suggestion
|
|
564
|
+
*SuggestionApi* | [**delete_suggestion**](docs/SuggestionApi.md#delete_suggestion) | **DELETE** /suggestion/{context_id}/{entry_id} | Delete suggestion
|
|
565
|
+
*SuggestionApi* | [**get_suggestion**](docs/SuggestionApi.md#get_suggestion) | **GET** /suggestion/{context_id}/{entry_id} | Get suggestion
|
|
566
|
+
*SuggestionApi* | [**get_suggestion_metadata**](docs/SuggestionApi.md#get_suggestion_metadata) | **GET** /suggestion/{context_id}/{entry_id}/metadata | Get suggestion metadata
|
|
567
|
+
*SuggestionApi* | [**list_suggestions**](docs/SuggestionApi.md#list_suggestions) | **GET** /suggestion | List suggestions
|
|
568
|
+
*SuggestionApi* | [**update_suggestion_metadata**](docs/SuggestionApi.md#update_suggestion_metadata) | **PUT** /suggestion/{context_id}/{entry_id}/metadata | Update suggestion metadata
|
|
569
|
+
*TerminologyApi* | [**delete_terminology**](docs/TerminologyApi.md#delete_terminology) | **DELETE** /terminology/{context_id} | Delete terminology
|
|
570
|
+
*TerminologyApi* | [**get_terminology**](docs/TerminologyApi.md#get_terminology) | **GET** /terminology/{context_id} | Get terminology
|
|
571
|
+
*TerminologyApi* | [**import_terminology**](docs/TerminologyApi.md#import_terminology) | **POST** /terminology/import | Import SKOS terminology
|
|
572
|
+
*TerminologyApi* | [**list_terminologies**](docs/TerminologyApi.md#list_terminologies) | **GET** /terminology | List terminologies
|
|
573
|
+
*UploadApi* | [**add_file_to_distribution**](docs/UploadApi.md#add_file_to_distribution) | **POST** /distribution/addFile | Add file to distribution
|
|
574
|
+
*UploadApi* | [**replace_file_in_distribution**](docs/UploadApi.md#replace_file_in_distribution) | **POST** /distribution/replaceFile | Replace file in distribution
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
## Documentation For Models
|
|
578
|
+
|
|
579
|
+
- [AppToken](docs/AppToken.md)
|
|
580
|
+
- [AppTokenCreateRequest](docs/AppTokenCreateRequest.md)
|
|
581
|
+
- [AppTokenCreateResponse](docs/AppTokenCreateResponse.md)
|
|
582
|
+
- [AppTokenStatus](docs/AppTokenStatus.md)
|
|
583
|
+
- [AppTokenVerifyRequest](docs/AppTokenVerifyRequest.md)
|
|
584
|
+
- [EntityListItem](docs/EntityListItem.md)
|
|
585
|
+
- [EntityListResponse](docs/EntityListResponse.md)
|
|
586
|
+
- [EntityReference](docs/EntityReference.md)
|
|
587
|
+
- [EntityType](docs/EntityType.md)
|
|
588
|
+
- [Error](docs/Error.md)
|
|
589
|
+
- [FacetField](docs/FacetField.md)
|
|
590
|
+
- [FacetFieldValuesInner](docs/FacetFieldValuesInner.md)
|
|
591
|
+
- [FacetList](docs/FacetList.md)
|
|
592
|
+
- [FacetListAvailableInner](docs/FacetListAvailableInner.md)
|
|
593
|
+
- [JobResponse](docs/JobResponse.md)
|
|
594
|
+
- [JobStatus](docs/JobStatus.md)
|
|
595
|
+
- [JobStatusProgress](docs/JobStatusProgress.md)
|
|
596
|
+
- [JobStatusValue](docs/JobStatusValue.md)
|
|
597
|
+
- [JobType](docs/JobType.md)
|
|
598
|
+
- [ListCatalogsEntryTypeParameter](docs/ListCatalogsEntryTypeParameter.md)
|
|
599
|
+
- [ListCatalogsGraphTypeParameter](docs/ListCatalogsGraphTypeParameter.md)
|
|
600
|
+
- [ListCatalogsResourceTypeParameter](docs/ListCatalogsResourceTypeParameter.md)
|
|
601
|
+
- [LoginRequest](docs/LoginRequest.md)
|
|
602
|
+
- [LoginResponse](docs/LoginResponse.md)
|
|
603
|
+
- [MetadataFormat](docs/MetadataFormat.md)
|
|
604
|
+
- [MetadataRequest](docs/MetadataRequest.md)
|
|
605
|
+
- [ParentReference](docs/ParentReference.md)
|
|
606
|
+
- [SearchRequest](docs/SearchRequest.md)
|
|
607
|
+
- [SearchRequestFilters](docs/SearchRequestFilters.md)
|
|
608
|
+
- [SearchRequestFiltersGraphType](docs/SearchRequestFiltersGraphType.md)
|
|
609
|
+
- [SearchRequestFiltersResourceType](docs/SearchRequestFiltersResourceType.md)
|
|
610
|
+
- [SearchRequestSort](docs/SearchRequestSort.md)
|
|
611
|
+
- [SearchRequestSortOrder](docs/SearchRequestSortOrder.md)
|
|
612
|
+
- [SearchResponse](docs/SearchResponse.md)
|
|
613
|
+
- [SearchResult](docs/SearchResult.md)
|
|
614
|
+
- [SearchResultGraphType](docs/SearchResultGraphType.md)
|
|
615
|
+
- [SearchResultResourceType](docs/SearchResultResourceType.md)
|
|
616
|
+
- [SearchSortOrderParameter](docs/SearchSortOrderParameter.md)
|
|
617
|
+
- [TerminologyImportMode](docs/TerminologyImportMode.md)
|
|
618
|
+
- [ValidationProfile](docs/ValidationProfile.md)
|
|
619
|
+
- [ValidationResponse](docs/ValidationResponse.md)
|
|
620
|
+
- [ValidationResult](docs/ValidationResult.md)
|
|
621
|
+
- [ValidationSeverity](docs/ValidationSeverity.md)
|
|
622
|
+
- [ValidationSummary](docs/ValidationSummary.md)
|
|
623
|
+
- [WhoamiResponse](docs/WhoamiResponse.md)
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
<a id="documentation-for-authorization"></a>
|
|
627
|
+
## Documentation For Authorization
|
|
628
|
+
|
|
629
|
+
Authentication schemes defined for the API:
|
|
630
|
+
<a id="auth_token"></a>
|
|
631
|
+
### auth_token
|
|
632
|
+
|
|
633
|
+
- **Type**: API key
|
|
634
|
+
- **API key parameter name**: auth_token
|
|
635
|
+
- **Location**: Cookie
|
|
636
|
+
|
|
637
|
+
<a id="auth_header"></a>
|
|
638
|
+
### auth_header
|
|
639
|
+
|
|
640
|
+
- **Type**: API key
|
|
641
|
+
- **API key parameter name**: X-Auth-Token
|
|
642
|
+
- **Location**: HTTP header
|
|
643
|
+
|
|
644
|
+
<a id="app_token_header"></a>
|
|
645
|
+
### app_token_header
|
|
646
|
+
|
|
647
|
+
- **Type**: API key
|
|
648
|
+
- **API key parameter name**: X-App-Token
|
|
649
|
+
- **Location**: HTTP header
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
## Author
|
|
653
|
+
|
|
654
|
+
contact@entryscape.com
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
## Examples
|
|
658
|
+
|
|
659
|
+
Complete runnable examples are included in the [`examples/`](examples/) directory:
|
|
660
|
+
|
|
661
|
+
| Example | Description |
|
|
662
|
+
|---------|-------------|
|
|
663
|
+
| [quickstart](examples/quickstart/) | Minimal hello-world — configure SDK, list catalogs |
|
|
664
|
+
| [browse-catalog](examples/browse-catalog/) | Navigate DCAT-AP hierarchy: catalogs → datasets → distributions |
|
|
665
|
+
| [search](examples/search/) | Simple search, advanced search, and faceted search |
|
|
666
|
+
| [file-upload](examples/file-upload/) | Upload/replace files with async job tracking |
|
|
667
|
+
| [explore-entities](examples/explore-entities/) | Browse organizations, contacts, ideas, suggestions, showcases, documents |
|
|
668
|
+
|
|
669
|
+
See also: [Generated API docs](https://entryscape.org/api-wip) — per-endpoint documentation with inline code samples
|
|
670
|
+
|
|
671
|
+
## Running Tests
|
|
672
|
+
|
|
673
|
+
```bash
|
|
674
|
+
# Install dev dependencies
|
|
675
|
+
pip install -e ".[dev]"
|
|
676
|
+
|
|
677
|
+
# Run tests
|
|
678
|
+
pytest
|
|
679
|
+
|
|
680
|
+
# Run tests with coverage
|
|
681
|
+
pytest --cov=entryscape
|
|
682
|
+
|
|
683
|
+
# Type checking
|
|
684
|
+
mypy entryscape
|
|
685
|
+
|
|
686
|
+
# Linting
|
|
687
|
+
ruff check entryscape
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
## Contributing
|
|
691
|
+
|
|
692
|
+
Contributions are welcome! Please see the [repository](https://bitbucket.org/metasolutions/entryscape-api) for guidelines.
|
|
693
|
+
|
|
694
|
+
## License
|
|
695
|
+
|
|
696
|
+
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
|