personal_knowledge_library 3.2.1__tar.gz → 3.2.2__tar.gz
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.
Potentially problematic release.
This version of personal_knowledge_library might be problematic. Click here for more details.
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/PKG-INFO +1 -1
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/__init__.py +1 -1
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/asyncio/graph.py +55 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/base.py +6 -2
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/graph.py +65 -10
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/search.py +4 -1
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/pyproject.toml +1 -1
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/LICENSE +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/README.md +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/access.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/entity.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/language.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/ontology.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/response.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/search.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/tenant.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/nel/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/nel/base.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/nel/engine.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/ontomapping/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/ontomapping/manager.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/cache.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/client.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/helper.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/relations.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/wikidata.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/asyncio/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/asyncio/base.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/asyncio/group.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/asyncio/search.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/asyncio/users.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/group.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/helper.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/ontology.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/session.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/tenant.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/users.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/__init__.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/diff.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/graph.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/import_format.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/wikidata.py +0 -0
- {personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/wikipedia.py +0 -0
|
@@ -180,6 +180,61 @@ class AsyncWacomKnowledgeService(AsyncServiceAPIClient):
|
|
|
180
180
|
thing: ThingObject = ThingObject.from_dict(e)
|
|
181
181
|
return thing
|
|
182
182
|
|
|
183
|
+
async def entities(self, uris: List[str], locale: Optional[LocaleCode] = None, auth_key: Optional[str] = None) \
|
|
184
|
+
-> List[ThingObject]:
|
|
185
|
+
"""
|
|
186
|
+
Retrieve entities information from personal knowledge, using the URI as identifier.
|
|
187
|
+
|
|
188
|
+
**Remark:** Object properties (relations) must be requested separately.
|
|
189
|
+
|
|
190
|
+
Parameters
|
|
191
|
+
----------
|
|
192
|
+
uris: List[str]
|
|
193
|
+
List of URIs of the entities
|
|
194
|
+
locale: LocaleCode
|
|
195
|
+
ISO-3166 Country Codes and ISO-639 Language Codes in the format <language_code>_<country>, e.g., en_US.
|
|
196
|
+
auth_key: Optional[str]
|
|
197
|
+
Use a different auth key than the one from the client
|
|
198
|
+
|
|
199
|
+
Returns
|
|
200
|
+
-------
|
|
201
|
+
things: List[ThingObject]
|
|
202
|
+
Entities with is type URI, description, an image/icon, and tags (labels).
|
|
203
|
+
|
|
204
|
+
Raises
|
|
205
|
+
------
|
|
206
|
+
WacomServiceException
|
|
207
|
+
If the graph service returns an error code or the entity is not found in the knowledge graph
|
|
208
|
+
"""
|
|
209
|
+
if auth_key is None:
|
|
210
|
+
auth_key, _ = await self.handle_token()
|
|
211
|
+
url: str = f"{self.service_base_url}{AsyncWacomKnowledgeService.ENTITY_ENDPOINT}/"
|
|
212
|
+
headers: Dict[str, str] = {
|
|
213
|
+
USER_AGENT_HEADER_FLAG: self.user_agent,
|
|
214
|
+
AUTHORIZATION_HEADER_FLAG: f"Bearer {auth_key}",
|
|
215
|
+
}
|
|
216
|
+
things: List[ThingObject] = []
|
|
217
|
+
params: Dict[str, Any] = {
|
|
218
|
+
URIS_TAG: uris
|
|
219
|
+
}
|
|
220
|
+
if locale:
|
|
221
|
+
params[LOCALE_TAG] = locale
|
|
222
|
+
async with AsyncServiceAPIClient.__async_session__() as session:
|
|
223
|
+
async with session.get(url, headers=headers, params=params, verify_ssl=self.verify_calls) as response:
|
|
224
|
+
if response.ok:
|
|
225
|
+
entities: List[Dict[str, Any]] = await response.json()
|
|
226
|
+
for e in entities:
|
|
227
|
+
thing: ThingObject = ThingObject.from_dict(e)
|
|
228
|
+
things.append(thing)
|
|
229
|
+
else:
|
|
230
|
+
raise await handle_error(
|
|
231
|
+
f"Retrieving of entities content failed. List of URIs: {uris}.", response,
|
|
232
|
+
headers=headers
|
|
233
|
+
)
|
|
234
|
+
await asyncio.sleep(0.25 if self.use_graceful_shutdown else 0.0)
|
|
235
|
+
# Create ThingObject
|
|
236
|
+
return things
|
|
237
|
+
|
|
183
238
|
async def set_entity_image_local(self, entity_uri: str, path: Path, auth_key: Optional[str] = None) -> str:
|
|
184
239
|
"""Setting the image of the entity.
|
|
185
240
|
The image is stored locally.
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/base.py
RENAMED
|
@@ -300,7 +300,8 @@ class WacomServiceAPIClient(RESTAPIClient):
|
|
|
300
300
|
raise WacomServiceException(f"Unknown session id:= {self.__current_session_id}. Please login first.")
|
|
301
301
|
return session
|
|
302
302
|
|
|
303
|
-
def request_user_token(self, tenant_api_key: str, external_id: str
|
|
303
|
+
def request_user_token(self, tenant_api_key: str, external_id: str, timeout: int = DEFAULT_TIMEOUT) \
|
|
304
|
+
-> Tuple[str, str, datetime]:
|
|
304
305
|
"""
|
|
305
306
|
Login as user by using the tenant key and its external user id.
|
|
306
307
|
|
|
@@ -310,6 +311,8 @@ class WacomServiceAPIClient(RESTAPIClient):
|
|
|
310
311
|
Tenant API key
|
|
311
312
|
external_id: str
|
|
312
313
|
External id.
|
|
314
|
+
timeout: int (Default:= DEFAULT_TIMEOUT)
|
|
315
|
+
Timeout for the request in seconds.
|
|
313
316
|
|
|
314
317
|
Returns
|
|
315
318
|
-------
|
|
@@ -333,7 +336,8 @@ class WacomServiceAPIClient(RESTAPIClient):
|
|
|
333
336
|
}
|
|
334
337
|
payload: dict = {EXTERNAL_USER_ID: external_id}
|
|
335
338
|
response: Response = requests.post(
|
|
336
|
-
url, headers=headers, json=payload, timeout=
|
|
339
|
+
url, headers=headers, json=payload, timeout=timeout, verify=self.verify_calls,
|
|
340
|
+
allow_redirects=True
|
|
337
341
|
)
|
|
338
342
|
if response.ok:
|
|
339
343
|
try:
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/graph.py
RENAMED
|
@@ -18,7 +18,6 @@ from knowledge.base.entity import (
|
|
|
18
18
|
DATA_PROPERTIES_TAG,
|
|
19
19
|
TYPE_TAG,
|
|
20
20
|
LABELS_TAG,
|
|
21
|
-
IS_MAIN_TAG,
|
|
22
21
|
RELATIONS_TAG,
|
|
23
22
|
LOCALE_TAG,
|
|
24
23
|
EntityStatus,
|
|
@@ -226,18 +225,74 @@ class WacomKnowledgeService(WacomServiceAPIClient):
|
|
|
226
225
|
response: Response = session.get(url, headers=headers, timeout=timeout, verify=self.verify_calls)
|
|
227
226
|
if response.ok:
|
|
228
227
|
e: Dict[str, Any] = response.json()
|
|
229
|
-
pref_label: List[Label] = []
|
|
230
|
-
aliases: List[Label] = []
|
|
231
|
-
# Extract labels and alias
|
|
232
|
-
for label in e[LABELS_TAG]:
|
|
233
|
-
if label[IS_MAIN_TAG]: # Labels
|
|
234
|
-
pref_label.append(Label.create_from_dict(label))
|
|
235
|
-
else: # Alias
|
|
236
|
-
aliases.append(Label.create_from_dict(label))
|
|
237
228
|
thing: ThingObject = ThingObject.from_dict(e)
|
|
238
229
|
return thing
|
|
239
230
|
raise handle_error(f"Retrieving of entity content failed. URI:={uri}.", response)
|
|
240
231
|
|
|
232
|
+
def entities(self,
|
|
233
|
+
uris: List[str],
|
|
234
|
+
locale: Optional[LocaleCode] = None,
|
|
235
|
+
auth_key: Optional[str] = None,
|
|
236
|
+
timeout: int = DEFAULT_TIMEOUT,
|
|
237
|
+
max_retries: int = DEFAULT_MAX_RETRIES,
|
|
238
|
+
backoff_factor: float = DEFAULT_BACKOFF_FACTOR,
|
|
239
|
+
) -> List[ThingObject]:
|
|
240
|
+
"""
|
|
241
|
+
Retrieve entity information from personal knowledge, using the URI as identifier.
|
|
242
|
+
|
|
243
|
+
**Remark:** Object properties (relations) must be requested separately.
|
|
244
|
+
|
|
245
|
+
Parameters
|
|
246
|
+
----------
|
|
247
|
+
uris: List[str]
|
|
248
|
+
List of URIs of entities
|
|
249
|
+
locale: Optional[LocaleCode]
|
|
250
|
+
ISO-3166 Country Codes and ISO-639 Language Codes in the format <language_code>_<country>, e.g., en_US.
|
|
251
|
+
auth_key: Optional[str]
|
|
252
|
+
If the auth key is set the logged-in user (if any) will be ignored and the auth key will be used.
|
|
253
|
+
timeout: int
|
|
254
|
+
Timeout for the request (default: 60 seconds)
|
|
255
|
+
max_retries: int
|
|
256
|
+
Maximum number of retries (default: 3)
|
|
257
|
+
backoff_factor: float
|
|
258
|
+
A backoff factor to apply between attempts after the second try (most errors are resolved immediately by a
|
|
259
|
+
second try without a delay) (default: 0.1)
|
|
260
|
+
|
|
261
|
+
Returns
|
|
262
|
+
-------
|
|
263
|
+
things: List[ThingObject]
|
|
264
|
+
Entities with is type URI, description, an image/icon, and tags (labels).
|
|
265
|
+
|
|
266
|
+
Raises
|
|
267
|
+
------
|
|
268
|
+
WacomServiceException
|
|
269
|
+
If the graph service returns an error code or the entity is not found in the knowledge graph
|
|
270
|
+
"""
|
|
271
|
+
if auth_key is None:
|
|
272
|
+
auth_key, _ = self.handle_token()
|
|
273
|
+
url: str = f"{self.service_base_url}{WacomKnowledgeService.ENTITY_ENDPOINT}/"
|
|
274
|
+
headers: Dict[str, str] = {
|
|
275
|
+
USER_AGENT_HEADER_FLAG: self.user_agent,
|
|
276
|
+
AUTHORIZATION_HEADER_FLAG: f"Bearer {auth_key}",
|
|
277
|
+
}
|
|
278
|
+
params: Dict[str, Any] = {URIS_TAG: uris}
|
|
279
|
+
if locale is not None:
|
|
280
|
+
params[LOCALE_TAG] = locale
|
|
281
|
+
mount_point: str = "https://" if self.service_url.startswith("https") else "http://"
|
|
282
|
+
with requests.Session() as session:
|
|
283
|
+
retries: Retry = Retry(total=max_retries, backoff_factor=backoff_factor, status_forcelist=STATUS_FORCE_LIST)
|
|
284
|
+
session.mount(mount_point, HTTPAdapter(max_retries=retries))
|
|
285
|
+
response: Response = session.get(url, params=params, headers=headers, timeout=timeout,
|
|
286
|
+
verify=self.verify_calls)
|
|
287
|
+
if response.ok:
|
|
288
|
+
things: List[ThingObject] = []
|
|
289
|
+
entities: List[Dict[str, Any]] = response.json()
|
|
290
|
+
for e in entities:
|
|
291
|
+
thing: ThingObject = ThingObject.from_dict(e)
|
|
292
|
+
things.append(thing)
|
|
293
|
+
return things
|
|
294
|
+
raise handle_error(f"Retrieving of entity content failed. URIs:={uris}.", response)
|
|
295
|
+
|
|
241
296
|
def delete_entities(
|
|
242
297
|
self,
|
|
243
298
|
uris: List[str],
|
|
@@ -2017,7 +2072,7 @@ class WacomKnowledgeService(WacomServiceAPIClient):
|
|
|
2017
2072
|
|
|
2018
2073
|
def rebuild_nel_index(
|
|
2019
2074
|
self,
|
|
2020
|
-
nel_index: Literal["
|
|
2075
|
+
nel_index: Literal["Western", "Japanese"],
|
|
2021
2076
|
prune: bool = False,
|
|
2022
2077
|
auth_key: Optional[str] = None,
|
|
2023
2078
|
timeout: int = DEFAULT_TIMEOUT,
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/search.py
RENAMED
|
@@ -263,6 +263,7 @@ class SemanticSearchClient(WacomServiceAPIClient):
|
|
|
263
263
|
locale: LocaleCode,
|
|
264
264
|
concept_type: Optional[str] = None,
|
|
265
265
|
auth_key: Optional[str] = None,
|
|
266
|
+
timeout: float = DEFAULT_TIMEOUT,
|
|
266
267
|
max_retries: int = 3,
|
|
267
268
|
backoff_factor: float = 0.1,
|
|
268
269
|
) -> int:
|
|
@@ -275,6 +276,8 @@ class SemanticSearchClient(WacomServiceAPIClient):
|
|
|
275
276
|
ISO-3166 Country Codes and ISO-639 Language Codes in the format '<language_code>_<country>', e.g., en_US.
|
|
276
277
|
concept_type: Optional[str] (Default:= None)
|
|
277
278
|
Concept type.
|
|
279
|
+
timeout: int (Default:= DEFAULT_TIMEOUT)
|
|
280
|
+
Timeout for the request in seconds.
|
|
278
281
|
max_retries: int
|
|
279
282
|
Maximum number of retries
|
|
280
283
|
backoff_factor: float
|
|
@@ -306,7 +309,7 @@ class SemanticSearchClient(WacomServiceAPIClient):
|
|
|
306
309
|
with requests.Session() as session:
|
|
307
310
|
retries: Retry = Retry(total=max_retries, backoff_factor=backoff_factor, status_forcelist=STATUS_FORCE_LIST)
|
|
308
311
|
session.mount(mount_point, HTTPAdapter(max_retries=retries))
|
|
309
|
-
response = session.get(url, params=params, headers=headers)
|
|
312
|
+
response = session.get(url, params=params, headers=headers, timeout=timeout)
|
|
310
313
|
if response.ok:
|
|
311
314
|
return response.json().get("count", 0)
|
|
312
315
|
raise handle_error("Counting labels failed.", response, headers=headers, parameters={"locale": locale})
|
|
File without changes
|
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/__init__.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/access.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/entity.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/language.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/ontology.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/response.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/search.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/base/tenant.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/nel/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/nel/engine.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/__init__.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/cache.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/client.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/helper.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/relations.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/public/wikidata.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/group.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/helper.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/ontology.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/session.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/tenant.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/services/users.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/__init__.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/diff.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/wikidata.py
RENAMED
|
File without changes
|
{personal_knowledge_library-3.2.1 → personal_knowledge_library-3.2.2}/knowledge/utils/wikipedia.py
RENAMED
|
File without changes
|