From fbebc19629cfc008a085283e61c0669de326add9 Mon Sep 17 00:00:00 2001 From: Roman Kalyakin Date: Wed, 18 Sep 2024 17:04:39 +0200 Subject: [PATCH] Version 1.0.0beta1 (#2) * Prepare initial structure and generate a client * Add API client test notebook * connect method * Replaced api client generator with the one that better supports types. * regenerated code with literals * Refactor search resource to use literal values for group_by, order_by, and facets * Add pandas dependency and support for converting data to DataFrame * basic library use and fixes * Refactor get_enum_from_literal function to handle Unset values in py.py * added article resource * clean output in basic.ipynb * optional persisted token * regenerated api client * rebuilt api client and models * protobuf filers. code regenerated. various fixes. * WIP on fliters * complex filters * added search facet method * added text reuse search * added newspapers and TR passages * added collections resource * generated entity service and models * added entities resource * regenerated code and added collections methods * filter by wikidata ID * updated entities notebook * updated config loading code and added documentation to the `basic` notebook * Partially updated documentation * updated client to log errors and all notebooks * raise error when an unexpected response status is returned * added url to search response container * added notebook friendly result container representation * added urls to all resources * render facets as a graph * updated resource repr and sample notebooks * Fixed newspapers URL * order facets by value by default * added NER tool * updated facets app links * updated dependency for python * updated dependencies * version update second go * added search entities by ids and expand wikidata * use getpass to get token * added precision and modifiers * exact precision for strings by default * updated token url * updated api client and re-ran notebooks to confirm they still work * made mypy and linter happy * removed unused imports --- .apigen.yml | 2 + .flake8 | 3 + .github/workflows/qa.yml | 38 + .gitignore | 17 + .python-version | 1 - .vscode/extensions.json | 9 + .vscode/launch.json | 17 + .vscode/settings.json | 14 + LICENSE | 661 -- Pipfile | 16 - Pipfile.lock | 411 - README.md | 44 +- examples/notebooks/basic.ipynb | 1092 ++ examples/notebooks/collections.ipynb | 156 + examples/notebooks/entities.ipynb | 2069 ++++ examples/notebooks/newspapers.ipynb | 226 + examples/notebooks/search.ipynb | 8893 +++++++++++++++++ examples/notebooks/textReuse.ipynb | 5370 ++++++++++ examples/notebooks/tools.ipynb | 158 + impresso/__init__.py | 15 +- impresso/api_client/__init__.py | 8 + impresso/api_client/api/__init__.py | 1 + impresso/api_client/api/articles/__init__.py | 0 .../api_client/api/articles/find_articles.py | 238 + .../api_client/api/articles/get_article.py | 175 + .../api_client/api/authentication/__init__.py | 0 .../authentication_issue_token.py | 169 + .../api_client/api/collections/__init__.py | 0 .../api/collections/create_collection.py | 181 + .../api/collections/find_collections.py | 245 + .../api/collections/get_collection.py | 175 + .../patch_collections_collection_id_items.py | 198 + .../api/collections/remove_collection.py | 175 + .../api/collections/update_collection.py | 198 + impresso/api_client/api/entities/__init__.py | 0 .../api_client/api/entities/find_entities.py | 275 + .../api_client/api/entities/get_entity.py | 175 + .../api_client/api/newspapers/__init__.py | 0 .../api/newspapers/find_newspapers.py | 263 + .../api/newspapers/get_newspaper.py | 175 + impresso/api_client/api/not_used/__init__.py | 0 ...atch_collections_collection_id_items_id.py | 211 + impresso/api_client/api/search/__init__.py | 0 impresso/api_client/api/search/search.py | 297 + .../api_client/api/search_facets/__init__.py | 0 .../api/search_facets/find_search_facets.py | 351 + .../search_facets/find_tr_clusters_facets.py | 351 + .../search_facets/find_tr_passages_facets.py | 351 + .../api/search_facets/get_search_facet.py | 344 + .../search_facets/get_tr_clusters_facet.py | 344 + .../search_facets/get_tr_passages_facet.py | 344 + .../api/text_reuse_clusters/__init__.py | 0 .../find_text_reuse_clusters.py | 260 + .../get_text_reuse_cluster.py | 196 + .../api/text_reuse_passages/__init__.py | 0 .../find_text_reuse_passages.py | 285 + .../get_text_reuse_passage.py | 175 + impresso/api_client/api/tools/__init__.py | 0 impresso/api_client/api/tools/perform_ner.py | 181 + impresso/api_client/api/version/__init__.py | 0 .../api/version/get_version_details.py | 139 + impresso/api_client/client.py | 268 + impresso/api_client/errors.py | 16 + impresso/api_client/models/__init__.py | 273 + impresso/api_client/models/api_version.py | 103 + .../models/api_version_api_version.py | 76 + .../models/api_version_documents_date_span.py | 83 + .../api_client/models/api_version_features.py | 56 + ...pi_version_features_additional_property.py | 43 + .../api_client/models/api_version_mysql.py | 58 + .../models/api_version_newspapers.py | 56 + ..._version_newspapers_additional_property.py | 58 + .../api_client/models/api_version_solr.py | 71 + .../models/api_version_solr_endpoints.py | 43 + impresso/api_client/models/article.py | 478 + .../api_client/models/article_access_right.py | 20 + .../api_client/models/article_labels_item.py | 12 + impresso/api_client/models/article_match.py | 70 + .../models/article_mentions_item.py | 69 + impresso/api_client/models/article_region.py | 77 + impresso/api_client/models/article_topic.py | 72 + .../models/authentication_create_request.py | 89 + .../authentication_create_request_strategy.py | 16 + .../models/authentication_response.py | 63 + .../authentication_response_authentication.py | 80 + ...ication_response_authentication_payload.py | 43 + impresso/api_client/models/base_find.py | 76 + impresso/api_client/models/base_find_info.py | 43 + impresso/api_client/models/base_user.py | 66 + .../models/collectable_item_group.py | 142 + .../collectable_item_group_content_type.py | 20 + .../collectable_items_updated_response.py | 67 + impresso/api_client/models/collection.py | 120 + impresso/api_client/models/entity.py | 47 + impresso/api_client/models/entity_details.py | 105 + .../api_client/models/entity_details_type.py | 16 + impresso/api_client/models/error.py | 86 + impresso/api_client/models/filter_.py | 148 + impresso/api_client/models/filter_context.py | 16 + impresso/api_client/models/filter_op.py | 16 + .../api_client/models/filter_precision.py | 20 + .../models/find_articles_order_by.py | 20 + .../models/find_articles_resolve.py | 16 + .../models/find_articles_response_200.py | 86 + .../models/find_articles_response_200_info.py | 43 + .../models/find_collections_order_by.py | 20 + .../models/find_collections_response_200.py | 86 + .../find_collections_response_200_info.py | 43 + .../models/find_entities_order_by.py | 28 + .../models/find_entities_response_200.py | 86 + .../models/find_entities_response_200_info.py | 43 + .../models/find_newspapers_order_by.py | 36 + .../models/find_newspapers_response_200.py | 86 + .../find_newspapers_response_200_info.py | 43 + .../models/find_search_facets_facets_item.py | 42 + .../models/find_search_facets_group_by.py | 42 + .../models/find_search_facets_order_by.py | 20 + .../find_search_facets_range_include.py | 18 + .../models/find_search_facets_response_200.py | 86 + .../find_search_facets_response_200_info.py | 43 + .../find_text_reuse_clusters_order_by.py | 16 + .../find_text_reuse_clusters_response.py | 61 + .../models/find_text_reuse_passages_addons.py | 38 + .../find_text_reuse_passages_group_by.py | 12 + .../find_text_reuse_passages_order_by.py | 32 + .../find_text_reuse_passages_response_200.py | 86 + ...d_text_reuse_passages_response_200_info.py | 43 + .../find_tr_clusters_facets_facets_item.py | 22 + .../find_tr_clusters_facets_group_by.py | 22 + .../find_tr_clusters_facets_order_by.py | 20 + .../find_tr_clusters_facets_range_include.py | 18 + .../find_tr_clusters_facets_response_200.py | 86 + ...nd_tr_clusters_facets_response_200_info.py | 43 + .../find_tr_passages_facets_facets_item.py | 46 + .../find_tr_passages_facets_group_by.py | 46 + .../find_tr_passages_facets_order_by.py | 20 + .../find_tr_passages_facets_range_include.py | 18 + .../find_tr_passages_facets_response_200.py | 86 + ...nd_tr_passages_facets_response_200_info.py | 43 + .../models/get_search_facet_group_by.py | 42 + .../api_client/models/get_search_facet_id.py | 42 + .../models/get_search_facet_order_by.py | 20 + .../models/get_search_facet_range_include.py | 18 + .../models/get_tr_clusters_facet_group_by.py | 22 + .../models/get_tr_clusters_facet_id.py | 22 + .../models/get_tr_clusters_facet_order_by.py | 20 + .../get_tr_clusters_facet_range_include.py | 18 + .../models/get_tr_passages_facet_group_by.py | 46 + .../models/get_tr_passages_facet_id.py | 46 + .../models/get_tr_passages_facet_order_by.py | 20 + .../get_tr_passages_facet_range_include.py | 18 + ...mpresso_named_entity_recognition_entity.py | 93 + ...ed_entity_recognition_entity_confidence.py | 49 + ..._named_entity_recognition_entity_offset.py | 46 + ...so_named_entity_recognition_entity_type.py | 76 + ...presso_named_entity_recognition_request.py | 39 + ...resso_named_entity_recognition_response.py | 79 + .../models/location_specific_fields.py | 109 + .../location_specific_fields_descriptions.py | 43 + .../location_specific_fields_images_item.py | 74 + .../models/location_specific_fields_labels.py | 43 + impresso/api_client/models/new_collection.py | 59 + impresso/api_client/models/newspaper.py | 209 + impresso/api_client/models/newspaper_issue.py | 99 + .../api_client/models/newspaper_property.py | 85 + impresso/api_client/models/page.py | 154 + .../api_client/models/page_regions_item.py | 43 + .../models/remove_collection_response.py | 55 + .../remove_collection_response_params.py | 55 + ...emove_collection_response_params_status.py | 12 + .../models/remove_collection_response_task.py | 48 + impresso/api_client/models/search_facet.py | 128 + .../api_client/models/search_facet_bucket.py | 140 + .../models/search_facet_range_bucket.py | 67 + impresso/api_client/models/search_facets.py | 42 + impresso/api_client/models/search_group_by.py | 16 + impresso/api_client/models/search_order_by.py | 24 + .../api_client/models/search_response_200.py | 86 + .../models/search_response_200_info.py | 43 + .../api_client/models/text_reuse_cluster.py | 90 + .../models/text_reuse_cluster_compound.py | 81 + .../models/text_reuse_cluster_details.py | 72 + .../text_reuse_cluster_details_facets_item.py | 76 + ...luster_details_facets_item_buckets_item.py | 43 + .../text_reuse_cluster_details_resolution.py | 18 + .../text_reuse_cluster_time_coverage.py | 64 + .../api_client/models/text_reuse_passage.py | 220 + .../text_reuse_passage_article_details.py | 39 + .../text_reuse_passage_cluster_details.py | 68 + ...t_reuse_passage_connected_clusters_item.py | 39 + .../models/text_reuse_passage_issue.py | 39 + impresso/api_client/models/topic.py | 177 + .../models/topic_related_topics_item.py | 46 + impresso/api_client/models/topic_word.py | 60 + .../models/update_collectable_items.py | 72 + impresso/api_client/models/user.py | 95 + impresso/api_client/models/year.py | 77 + impresso/api_client/models/year_weights.py | 75 + impresso/api_client/py.typed | 1 + impresso/api_client/types.py | 45 + impresso/api_models.py | 943 ++ impresso/client.py | 125 + impresso/client_base.py | 43 + impresso/config_file.py | 85 + impresso/data_container.py | 98 + impresso/echo.py | 3 +- impresso/protobuf/__init__.py | 0 impresso/protobuf/query_pb2.py | 50 + impresso/protobuf/query_pb2.pyi | 207 + impresso/resources/__init__.py | 0 impresso/resources/articles.py | 103 + impresso/resources/base.py | 16 + impresso/resources/collections.py | 186 + impresso/resources/entities.py | 144 + impresso/resources/newspapers.py | 83 + impresso/resources/search.py | 416 + impresso/resources/text_reuse/__init__.py | 18 + impresso/resources/text_reuse/clusters.py | 348 + impresso/resources/text_reuse/passages.py | 206 + impresso/resources/tools.py | 74 + impresso/structures.py | 205 + impresso/util/__init__.py | 0 impresso/util/error.py | 27 + impresso/util/filters.py | 127 + impresso/util/py.py | 28 + impresso/util/token.py | 24 + poetry.lock | 1808 ++++ poetry.toml | 2 + pyproject.toml | 94 +- requirements.txt | 34 - scripts/__init__.py | 0 scripts/generate_data_models.sh | 10 + scripts/generate_openapi_client.sh | 11 + scripts/generate_protobuf.sh | 8 + scripts/scripts.py | 22 + setup.py | 3 - tests/impresso/__ini__.py | 0 tests/impresso/test_structures.py | 13 + tests/test_echo.py | 2 +- 239 files changed, 38859 insertions(+), 1172 deletions(-) create mode 100644 .apigen.yml create mode 100644 .flake8 create mode 100644 .github/workflows/qa.yml delete mode 100644 .python-version create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json delete mode 100644 LICENSE delete mode 100644 Pipfile delete mode 100644 Pipfile.lock create mode 100644 examples/notebooks/basic.ipynb create mode 100644 examples/notebooks/collections.ipynb create mode 100644 examples/notebooks/entities.ipynb create mode 100644 examples/notebooks/newspapers.ipynb create mode 100644 examples/notebooks/search.ipynb create mode 100644 examples/notebooks/textReuse.ipynb create mode 100644 examples/notebooks/tools.ipynb create mode 100644 impresso/api_client/__init__.py create mode 100644 impresso/api_client/api/__init__.py create mode 100644 impresso/api_client/api/articles/__init__.py create mode 100644 impresso/api_client/api/articles/find_articles.py create mode 100644 impresso/api_client/api/articles/get_article.py create mode 100644 impresso/api_client/api/authentication/__init__.py create mode 100644 impresso/api_client/api/authentication/authentication_issue_token.py create mode 100644 impresso/api_client/api/collections/__init__.py create mode 100644 impresso/api_client/api/collections/create_collection.py create mode 100644 impresso/api_client/api/collections/find_collections.py create mode 100644 impresso/api_client/api/collections/get_collection.py create mode 100644 impresso/api_client/api/collections/patch_collections_collection_id_items.py create mode 100644 impresso/api_client/api/collections/remove_collection.py create mode 100644 impresso/api_client/api/collections/update_collection.py create mode 100644 impresso/api_client/api/entities/__init__.py create mode 100644 impresso/api_client/api/entities/find_entities.py create mode 100644 impresso/api_client/api/entities/get_entity.py create mode 100644 impresso/api_client/api/newspapers/__init__.py create mode 100644 impresso/api_client/api/newspapers/find_newspapers.py create mode 100644 impresso/api_client/api/newspapers/get_newspaper.py create mode 100644 impresso/api_client/api/not_used/__init__.py create mode 100644 impresso/api_client/api/not_used/patch_collections_collection_id_items_id.py create mode 100644 impresso/api_client/api/search/__init__.py create mode 100644 impresso/api_client/api/search/search.py create mode 100644 impresso/api_client/api/search_facets/__init__.py create mode 100644 impresso/api_client/api/search_facets/find_search_facets.py create mode 100644 impresso/api_client/api/search_facets/find_tr_clusters_facets.py create mode 100644 impresso/api_client/api/search_facets/find_tr_passages_facets.py create mode 100644 impresso/api_client/api/search_facets/get_search_facet.py create mode 100644 impresso/api_client/api/search_facets/get_tr_clusters_facet.py create mode 100644 impresso/api_client/api/search_facets/get_tr_passages_facet.py create mode 100644 impresso/api_client/api/text_reuse_clusters/__init__.py create mode 100644 impresso/api_client/api/text_reuse_clusters/find_text_reuse_clusters.py create mode 100644 impresso/api_client/api/text_reuse_clusters/get_text_reuse_cluster.py create mode 100644 impresso/api_client/api/text_reuse_passages/__init__.py create mode 100644 impresso/api_client/api/text_reuse_passages/find_text_reuse_passages.py create mode 100644 impresso/api_client/api/text_reuse_passages/get_text_reuse_passage.py create mode 100644 impresso/api_client/api/tools/__init__.py create mode 100644 impresso/api_client/api/tools/perform_ner.py create mode 100644 impresso/api_client/api/version/__init__.py create mode 100644 impresso/api_client/api/version/get_version_details.py create mode 100644 impresso/api_client/client.py create mode 100644 impresso/api_client/errors.py create mode 100644 impresso/api_client/models/__init__.py create mode 100644 impresso/api_client/models/api_version.py create mode 100644 impresso/api_client/models/api_version_api_version.py create mode 100644 impresso/api_client/models/api_version_documents_date_span.py create mode 100644 impresso/api_client/models/api_version_features.py create mode 100644 impresso/api_client/models/api_version_features_additional_property.py create mode 100644 impresso/api_client/models/api_version_mysql.py create mode 100644 impresso/api_client/models/api_version_newspapers.py create mode 100644 impresso/api_client/models/api_version_newspapers_additional_property.py create mode 100644 impresso/api_client/models/api_version_solr.py create mode 100644 impresso/api_client/models/api_version_solr_endpoints.py create mode 100644 impresso/api_client/models/article.py create mode 100644 impresso/api_client/models/article_access_right.py create mode 100644 impresso/api_client/models/article_labels_item.py create mode 100644 impresso/api_client/models/article_match.py create mode 100644 impresso/api_client/models/article_mentions_item.py create mode 100644 impresso/api_client/models/article_region.py create mode 100644 impresso/api_client/models/article_topic.py create mode 100644 impresso/api_client/models/authentication_create_request.py create mode 100644 impresso/api_client/models/authentication_create_request_strategy.py create mode 100644 impresso/api_client/models/authentication_response.py create mode 100644 impresso/api_client/models/authentication_response_authentication.py create mode 100644 impresso/api_client/models/authentication_response_authentication_payload.py create mode 100644 impresso/api_client/models/base_find.py create mode 100644 impresso/api_client/models/base_find_info.py create mode 100644 impresso/api_client/models/base_user.py create mode 100644 impresso/api_client/models/collectable_item_group.py create mode 100644 impresso/api_client/models/collectable_item_group_content_type.py create mode 100644 impresso/api_client/models/collectable_items_updated_response.py create mode 100644 impresso/api_client/models/collection.py create mode 100644 impresso/api_client/models/entity.py create mode 100644 impresso/api_client/models/entity_details.py create mode 100644 impresso/api_client/models/entity_details_type.py create mode 100644 impresso/api_client/models/error.py create mode 100644 impresso/api_client/models/filter_.py create mode 100644 impresso/api_client/models/filter_context.py create mode 100644 impresso/api_client/models/filter_op.py create mode 100644 impresso/api_client/models/filter_precision.py create mode 100644 impresso/api_client/models/find_articles_order_by.py create mode 100644 impresso/api_client/models/find_articles_resolve.py create mode 100644 impresso/api_client/models/find_articles_response_200.py create mode 100644 impresso/api_client/models/find_articles_response_200_info.py create mode 100644 impresso/api_client/models/find_collections_order_by.py create mode 100644 impresso/api_client/models/find_collections_response_200.py create mode 100644 impresso/api_client/models/find_collections_response_200_info.py create mode 100644 impresso/api_client/models/find_entities_order_by.py create mode 100644 impresso/api_client/models/find_entities_response_200.py create mode 100644 impresso/api_client/models/find_entities_response_200_info.py create mode 100644 impresso/api_client/models/find_newspapers_order_by.py create mode 100644 impresso/api_client/models/find_newspapers_response_200.py create mode 100644 impresso/api_client/models/find_newspapers_response_200_info.py create mode 100644 impresso/api_client/models/find_search_facets_facets_item.py create mode 100644 impresso/api_client/models/find_search_facets_group_by.py create mode 100644 impresso/api_client/models/find_search_facets_order_by.py create mode 100644 impresso/api_client/models/find_search_facets_range_include.py create mode 100644 impresso/api_client/models/find_search_facets_response_200.py create mode 100644 impresso/api_client/models/find_search_facets_response_200_info.py create mode 100644 impresso/api_client/models/find_text_reuse_clusters_order_by.py create mode 100644 impresso/api_client/models/find_text_reuse_clusters_response.py create mode 100644 impresso/api_client/models/find_text_reuse_passages_addons.py create mode 100644 impresso/api_client/models/find_text_reuse_passages_group_by.py create mode 100644 impresso/api_client/models/find_text_reuse_passages_order_by.py create mode 100644 impresso/api_client/models/find_text_reuse_passages_response_200.py create mode 100644 impresso/api_client/models/find_text_reuse_passages_response_200_info.py create mode 100644 impresso/api_client/models/find_tr_clusters_facets_facets_item.py create mode 100644 impresso/api_client/models/find_tr_clusters_facets_group_by.py create mode 100644 impresso/api_client/models/find_tr_clusters_facets_order_by.py create mode 100644 impresso/api_client/models/find_tr_clusters_facets_range_include.py create mode 100644 impresso/api_client/models/find_tr_clusters_facets_response_200.py create mode 100644 impresso/api_client/models/find_tr_clusters_facets_response_200_info.py create mode 100644 impresso/api_client/models/find_tr_passages_facets_facets_item.py create mode 100644 impresso/api_client/models/find_tr_passages_facets_group_by.py create mode 100644 impresso/api_client/models/find_tr_passages_facets_order_by.py create mode 100644 impresso/api_client/models/find_tr_passages_facets_range_include.py create mode 100644 impresso/api_client/models/find_tr_passages_facets_response_200.py create mode 100644 impresso/api_client/models/find_tr_passages_facets_response_200_info.py create mode 100644 impresso/api_client/models/get_search_facet_group_by.py create mode 100644 impresso/api_client/models/get_search_facet_id.py create mode 100644 impresso/api_client/models/get_search_facet_order_by.py create mode 100644 impresso/api_client/models/get_search_facet_range_include.py create mode 100644 impresso/api_client/models/get_tr_clusters_facet_group_by.py create mode 100644 impresso/api_client/models/get_tr_clusters_facet_id.py create mode 100644 impresso/api_client/models/get_tr_clusters_facet_order_by.py create mode 100644 impresso/api_client/models/get_tr_clusters_facet_range_include.py create mode 100644 impresso/api_client/models/get_tr_passages_facet_group_by.py create mode 100644 impresso/api_client/models/get_tr_passages_facet_id.py create mode 100644 impresso/api_client/models/get_tr_passages_facet_order_by.py create mode 100644 impresso/api_client/models/get_tr_passages_facet_range_include.py create mode 100644 impresso/api_client/models/impresso_named_entity_recognition_entity.py create mode 100644 impresso/api_client/models/impresso_named_entity_recognition_entity_confidence.py create mode 100644 impresso/api_client/models/impresso_named_entity_recognition_entity_offset.py create mode 100644 impresso/api_client/models/impresso_named_entity_recognition_entity_type.py create mode 100644 impresso/api_client/models/impresso_named_entity_recognition_request.py create mode 100644 impresso/api_client/models/impresso_named_entity_recognition_response.py create mode 100644 impresso/api_client/models/location_specific_fields.py create mode 100644 impresso/api_client/models/location_specific_fields_descriptions.py create mode 100644 impresso/api_client/models/location_specific_fields_images_item.py create mode 100644 impresso/api_client/models/location_specific_fields_labels.py create mode 100644 impresso/api_client/models/new_collection.py create mode 100644 impresso/api_client/models/newspaper.py create mode 100644 impresso/api_client/models/newspaper_issue.py create mode 100644 impresso/api_client/models/newspaper_property.py create mode 100644 impresso/api_client/models/page.py create mode 100644 impresso/api_client/models/page_regions_item.py create mode 100644 impresso/api_client/models/remove_collection_response.py create mode 100644 impresso/api_client/models/remove_collection_response_params.py create mode 100644 impresso/api_client/models/remove_collection_response_params_status.py create mode 100644 impresso/api_client/models/remove_collection_response_task.py create mode 100644 impresso/api_client/models/search_facet.py create mode 100644 impresso/api_client/models/search_facet_bucket.py create mode 100644 impresso/api_client/models/search_facet_range_bucket.py create mode 100644 impresso/api_client/models/search_facets.py create mode 100644 impresso/api_client/models/search_group_by.py create mode 100644 impresso/api_client/models/search_order_by.py create mode 100644 impresso/api_client/models/search_response_200.py create mode 100644 impresso/api_client/models/search_response_200_info.py create mode 100644 impresso/api_client/models/text_reuse_cluster.py create mode 100644 impresso/api_client/models/text_reuse_cluster_compound.py create mode 100644 impresso/api_client/models/text_reuse_cluster_details.py create mode 100644 impresso/api_client/models/text_reuse_cluster_details_facets_item.py create mode 100644 impresso/api_client/models/text_reuse_cluster_details_facets_item_buckets_item.py create mode 100644 impresso/api_client/models/text_reuse_cluster_details_resolution.py create mode 100644 impresso/api_client/models/text_reuse_cluster_time_coverage.py create mode 100644 impresso/api_client/models/text_reuse_passage.py create mode 100644 impresso/api_client/models/text_reuse_passage_article_details.py create mode 100644 impresso/api_client/models/text_reuse_passage_cluster_details.py create mode 100644 impresso/api_client/models/text_reuse_passage_connected_clusters_item.py create mode 100644 impresso/api_client/models/text_reuse_passage_issue.py create mode 100644 impresso/api_client/models/topic.py create mode 100644 impresso/api_client/models/topic_related_topics_item.py create mode 100644 impresso/api_client/models/topic_word.py create mode 100644 impresso/api_client/models/update_collectable_items.py create mode 100644 impresso/api_client/models/user.py create mode 100644 impresso/api_client/models/year.py create mode 100644 impresso/api_client/models/year_weights.py create mode 100644 impresso/api_client/py.typed create mode 100644 impresso/api_client/types.py create mode 100644 impresso/api_models.py create mode 100644 impresso/client.py create mode 100644 impresso/client_base.py create mode 100644 impresso/config_file.py create mode 100644 impresso/data_container.py create mode 100644 impresso/protobuf/__init__.py create mode 100644 impresso/protobuf/query_pb2.py create mode 100644 impresso/protobuf/query_pb2.pyi create mode 100644 impresso/resources/__init__.py create mode 100644 impresso/resources/articles.py create mode 100644 impresso/resources/base.py create mode 100644 impresso/resources/collections.py create mode 100644 impresso/resources/entities.py create mode 100644 impresso/resources/newspapers.py create mode 100644 impresso/resources/search.py create mode 100644 impresso/resources/text_reuse/__init__.py create mode 100644 impresso/resources/text_reuse/clusters.py create mode 100644 impresso/resources/text_reuse/passages.py create mode 100644 impresso/resources/tools.py create mode 100644 impresso/structures.py create mode 100644 impresso/util/__init__.py create mode 100644 impresso/util/error.py create mode 100644 impresso/util/filters.py create mode 100644 impresso/util/py.py create mode 100644 impresso/util/token.py create mode 100644 poetry.lock create mode 100644 poetry.toml delete mode 100644 requirements.txt create mode 100644 scripts/__init__.py create mode 100755 scripts/generate_data_models.sh create mode 100755 scripts/generate_openapi_client.sh create mode 100755 scripts/generate_protobuf.sh create mode 100644 scripts/scripts.py delete mode 100644 setup.py create mode 100644 tests/impresso/__ini__.py create mode 100644 tests/impresso/test_structures.py diff --git a/.apigen.yml b/.apigen.yml new file mode 100644 index 0000000..8e8bbd7 --- /dev/null +++ b/.apigen.yml @@ -0,0 +1,2 @@ +project_name_override: impresso +package_name_override: api_client \ No newline at end of file diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..d89f543 --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +max-line-length = 120 +exclude = impresso/api_client, impresso/protobuf diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml new file mode 100644 index 0000000..de0ee39 --- /dev/null +++ b/.github/workflows/qa.yml @@ -0,0 +1,38 @@ +#file: noinspection YAMLSchemaValidation +name: Run QA (test, lint, type check) + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + qa: + env: + commitmsg: ${{ github.event.head_commit.message }} + strategy: + fail-fast: false + matrix: + python-version: ["3.11"] + poetry-version: ["1.5"] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - uses: abatilo/actions-poetry@v2 + with: + poetry-version: ${{ matrix.poetry-version }} + - name: Install dependencies + run: | + poetry install + - name: Unit tests + run: | + poetry run pytest + - name: Linting + run: | + poetry run flake8 impresso tests + - name: Type checking + run: | + poetry run mypy -p impresso -p tests diff --git a/.gitignore b/.gitignore index 420e4d6..9786b33 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,19 @@ +# Pycharm +.idea/ +__pycache__/ +/.pytest_cache/ + +# jupyter +.ipynb_checkpoints/ + +.mypy_cache/ + +.DS_Store +.venv +.env +.env.* +!.env.example impresso.egg-info/* +tmp/ +dist/ \ No newline at end of file diff --git a/.python-version b/.python-version deleted file mode 100644 index e4fba21..0000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.12 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..43482a1 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "ms-python.python", + "ms-python.black-formatter", + "ms-python.mypy-type-checker" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..05536ed --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Debug Tests", + "type": "python", + "request": "launch", + "program": "${file}", + "purpose": ["debug-test"], + "console": "integratedTerminal", + "justMyCode": false, + "presentation": { + "hidden": true // keep original launch order in 'run and debug' tab + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0b017f0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "python.testing.pytestEnabled": true, + "python.testing.unittestEnabled": false, + "python.defaultInterpreterPath": ".venv/bin/python", + "[python]": { + "editor.formatOnSave": true, + "editor.formatOnPaste": false, + "editor.formatOnSaveMode": "file", + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "python.testing.pytestArgs": ["-vv"], + "editor.formatOnSave": true, + "pylint.args": ["--generate-members"] +} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 0ad25db..0000000 --- a/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 814d1ab..0000000 --- a/Pipfile +++ /dev/null @@ -1,16 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] -python-socketio = "*" -requests = "*" -black = "*" -twine = "*" - -[dev-packages] - -[requires] -python_version = "3.12" -python_full_version = "3.12.0" diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index b5193ac..0000000 --- a/Pipfile.lock +++ /dev/null @@ -1,411 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "c8ec92b7f8e56addccec0feb54e1523b2133644d0ef44de3d7e82140ff9f38a0" - }, - "pipfile-spec": 6, - "requires": { - "python_full_version": "3.12.0", - "python_version": "3.12" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "bidict": { - "hashes": [ - "sha256:03069d763bc387bbd20e7d49914e75fc4132a41937fa3405417e1a5a2d006d71", - "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5" - ], - "markers": "python_version >= '3.8'", - "version": "==0.23.1" - }, - "black": { - "hashes": [ - "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8", - "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8", - "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd", - "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9", - "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31", - "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92", - "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f", - "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29", - "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4", - "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693", - "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218", - "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a", - "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23", - "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0", - "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982", - "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894", - "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540", - "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430", - "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b", - "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2", - "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6", - "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==24.2.0" - }, - "certifi": { - "hashes": [ - "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", - "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" - ], - "markers": "python_version >= '3.6'", - "version": "==2024.2.2" - }, - "charset-normalizer": { - "hashes": [ - "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", - "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", - "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", - "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", - "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", - "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", - "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", - "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", - "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", - "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", - "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", - "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", - "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", - "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", - "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", - "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", - "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", - "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", - "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", - "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", - "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", - "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", - "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", - "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", - "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", - "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", - "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", - "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", - "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", - "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", - "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", - "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", - "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", - "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", - "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", - "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", - "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", - "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", - "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", - "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", - "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", - "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", - "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", - "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", - "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", - "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", - "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", - "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", - "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", - "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", - "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", - "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", - "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", - "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", - "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", - "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", - "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", - "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", - "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", - "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", - "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", - "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", - "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", - "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", - "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", - "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", - "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", - "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", - "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", - "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", - "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", - "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", - "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", - "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", - "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", - "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", - "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", - "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", - "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", - "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", - "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", - "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", - "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", - "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", - "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", - "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", - "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", - "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", - "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", - "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.2" - }, - "click": { - "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" - ], - "markers": "python_version >= '3.7'", - "version": "==8.1.7" - }, - "docutils": { - "hashes": [ - "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", - "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b" - ], - "markers": "python_version >= '3.7'", - "version": "==0.20.1" - }, - "h11": { - "hashes": [ - "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", - "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" - ], - "markers": "python_version >= '3.7'", - "version": "==0.14.0" - }, - "idna": { - "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" - ], - "markers": "python_version >= '3.5'", - "version": "==3.6" - }, - "importlib-metadata": { - "hashes": [ - "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e", - "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc" - ], - "markers": "python_version >= '3.8'", - "version": "==7.0.1" - }, - "jaraco.classes": { - "hashes": [ - "sha256:86b534de565381f6b3c1c830d13f931d7be1a75f0081c57dff615578676e2206", - "sha256:cb28a5ebda8bc47d8c8015307d93163464f9f2b91ab4006e09ff0ce07e8bfb30" - ], - "markers": "python_version >= '3.8'", - "version": "==3.3.1" - }, - "keyring": { - "hashes": [ - "sha256:4446d35d636e6a10b8bce7caa66913dd9eca5fd222ca03a3d42c38608ac30836", - "sha256:e730ecffd309658a08ee82535a3b5ec4b4c8669a9be11efb66249d8e0aeb9a25" - ], - "markers": "python_version >= '3.8'", - "version": "==24.3.0" - }, - "markdown-it-py": { - "hashes": [ - "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", - "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" - ], - "markers": "python_version >= '3.8'", - "version": "==3.0.0" - }, - "mdurl": { - "hashes": [ - "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", - "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" - ], - "markers": "python_version >= '3.7'", - "version": "==0.1.2" - }, - "more-itertools": { - "hashes": [ - "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684", - "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1" - ], - "markers": "python_version >= '3.8'", - "version": "==10.2.0" - }, - "mypy-extensions": { - "hashes": [ - "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", - "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.0" - }, - "nh3": { - "hashes": [ - "sha256:0d02d0ff79dfd8208ed25a39c12cbda092388fff7f1662466e27d97ad011b770", - "sha256:3277481293b868b2715907310c7be0f1b9d10491d5adf9fce11756a97e97eddf", - "sha256:3b803a5875e7234907f7d64777dfde2b93db992376f3d6d7af7f3bc347deb305", - "sha256:427fecbb1031db085eaac9931362adf4a796428ef0163070c484b5a768e71601", - "sha256:5f0d77272ce6d34db6c87b4f894f037d55183d9518f948bba236fe81e2bb4e28", - "sha256:60684857cfa8fdbb74daa867e5cad3f0c9789415aba660614fe16cd66cbb9ec7", - "sha256:6f42f99f0cf6312e470b6c09e04da31f9abaadcd3eb591d7d1a88ea931dca7f3", - "sha256:86e447a63ca0b16318deb62498db4f76fc60699ce0a1231262880b38b6cff911", - "sha256:8d595df02413aa38586c24811237e95937ef18304e108b7e92c890a06793e3bf", - "sha256:9c0d415f6b7f2338f93035bba5c0d8c1b464e538bfbb1d598acd47d7969284f0", - "sha256:a5167a6403d19c515217b6bcaaa9be420974a6ac30e0da9e84d4fc67a5d474c5", - "sha256:ac19c0d68cd42ecd7ead91a3a032fdfff23d29302dbb1311e641a130dfefba97", - "sha256:b1e97221cedaf15a54f5243f2c5894bb12ca951ae4ddfd02a9d4ea9df9e1a29d", - "sha256:bc2d086fb540d0fa52ce35afaded4ea526b8fc4d3339f783db55c95de40ef02e", - "sha256:d1e30ff2d8d58fb2a14961f7aac1bbb1c51f9bdd7da727be35c63826060b0bf3", - "sha256:f3b53ba93bb7725acab1e030bc2ecd012a817040fd7851b332f86e2f9bb98dc6" - ], - "version": "==0.2.15" - }, - "packaging": { - "hashes": [ - "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", - "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" - ], - "markers": "python_version >= '3.7'", - "version": "==23.2" - }, - "pathspec": { - "hashes": [ - "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", - "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" - ], - "markers": "python_version >= '3.8'", - "version": "==0.12.1" - }, - "pkginfo": { - "hashes": [ - "sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546", - "sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046" - ], - "markers": "python_version >= '3.6'", - "version": "==1.9.6" - }, - "platformdirs": { - "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" - ], - "markers": "python_version >= '3.8'", - "version": "==4.2.0" - }, - "pygments": { - "hashes": [ - "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", - "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" - ], - "markers": "python_version >= '3.7'", - "version": "==2.17.2" - }, - "python-engineio": { - "hashes": [ - "sha256:979859bff770725b75e60353d7ae53b397e8b517d05ba76733b404a3dcca3e4c", - "sha256:e87459c15638e567711fd156e6f9c4a402668871bed79523f0ecfec744729ec7" - ], - "markers": "python_version >= '3.6'", - "version": "==4.9.0" - }, - "python-socketio": { - "hashes": [ - "sha256:bbcbd758ed8c183775cb2853ba001361e2fa018babf5cbe11a5b77e91c2ec2a2", - "sha256:f1a0228b8b1fbdbd93fbbedd821ebce0ef54b2b5bf6e98fcf710deaa7c574259" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==5.11.1" - }, - "readme-renderer": { - "hashes": [ - "sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d", - "sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1" - ], - "markers": "python_version >= '3.8'", - "version": "==42.0" - }, - "requests": { - "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" - ], - "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==2.31.0" - }, - "requests-toolbelt": { - "hashes": [ - "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", - "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.0.0" - }, - "rfc3986": { - "hashes": [ - "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", - "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" - }, - "rich": { - "hashes": [ - "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa", - "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==13.7.0" - }, - "simple-websocket": { - "hashes": [ - "sha256:17d2c72f4a2bd85174a97e3e4c88b01c40c3f81b7b648b0cc3ce1305968928c8", - "sha256:1d5bf585e415eaa2083e2bcf02a3ecf91f9712e7b3e6b9fa0b461ad04e0837bc" - ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" - }, - "twine": { - "hashes": [ - "sha256:89b0cc7d370a4b66421cc6102f269aa910fe0f1861c124f573cf2ddedbc10cf4", - "sha256:a262933de0b484c53408f9edae2e7821c1c45a3314ff2df9bdd343aa7ab8edc0" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==5.0.0" - }, - "urllib3": { - "hashes": [ - "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", - "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" - ], - "markers": "python_version >= '3.8'", - "version": "==2.2.1" - }, - "wsproto": { - "hashes": [ - "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065", - "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==1.2.0" - }, - "zipp": { - "hashes": [ - "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", - "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" - ], - "markers": "python_version >= '3.8'", - "version": "==3.17.0" - } - }, - "develop": {} -} diff --git a/README.md b/README.md index 58bb514..be32e4b 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,53 @@ ## deployment on PyPi -Deploymebnt is largely automated using GitHub Actions. The following steps are required to deploy a new version of the package: +Deployment is automated using GitHub Actions. The following steps are required to deploy a new version of the package: https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ +To build the package manually: + +```shell +poetry build +``` + ## Development -Using pipenv for dependency management. To install the package in development mode, run the following command in the root directory of the project: +We are using Poetry for dependency management. To install the package in development mode, run the following command in the root directory of the project: -``` -pipenv run pip install -e . +```shell +poetry install ``` +This will create and activate a virtual environment with all the dependencies installed. + ## Testing +```shell +poetry run pytest +``` + +## Linting + +```shell +poetry run pytest +poetry run flake8 impresso tests +poetry run mypy impresso tests ``` -python -m unittest discover -s tests + +## OpenAPI client generation + +The OpenAPI client is generated using the OpenAPI Generator. Pydantic models from the OpenAPI spec are generated too. The following command generates both the client code and the pydantic models: + +```shell +poetry run generate-client +``` + +Whenever the OpenAPI spec changes, the client code and the pydantic models must be regenerated. + +### Protobuf + +Filters used in some endpoints are serialized as a protobuf message. The protobuf message is defined in the `impresso-jscommons` project. The python code is generated using the `protoc` compiler (must be installed). The following command generates the python code for it: + +```shell +poetry run generate-protobuf ``` diff --git a/examples/notebooks/basic.ipynb b/examples/notebooks/basic.ipynb new file mode 100644 index 0000000..7bb43b8 --- /dev/null +++ b/examples/notebooks/basic.ipynb @@ -0,0 +1,1092 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Initialize Impresso Client\n", + "\n", + "In this cell, we initialize the Impresso client to connect to the Impresso API. \n", + "The `impresso` variable is an instance of `impresso.client.ImpressoClient`, which allows us to interact with the API \n", + "and perform various operations such as searching for articles, retrieving article details, and fetching facets." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Click on the following link to access the login page: https://dev.impresso-project.ch/datalab/token\n", + " - 🔤 Enter your email/password on this page.\n", + " - 🔑 Once logged in, a secret token will be generated for you.\n", + " - 📋 Copy this token and paste it into the input field below 👇🏼.\n", + "\n", + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Search articles\n", + "\n", + "In this notebook, we will search for articles that contain the term \"European Union\" in the text. The results are ordered by date.\n", + "\n", + "Below the result container is rendered as an overview of what it contains.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 79 items of 79 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
luxwort-1948-11-25-a-i0033arEuropäischer Föderalistenkongreß in Rom7341[{'uid': 'luxwort-1948-11-25-a-p0006', 'num': ...TrueEuropäischer Föderalistenkongreß in Rom (Schlu...[article]Closed1948[{'uid': 'aida-0001-54-Rome', 'relevance': 1},...[]de[{'fragment': ' <em>European</em> <em>Union</e...[{'pageUid': 'luxwort-1948-11-25-a-p0006', 'co...[][]False1948-11-25T00:00:00+00:00LU[][]BNL[{'relevance': 0.128, 'topic': {'uid': 'tm-de-...[]luxwort-1948-11-25-a[issue]FalseNotDefined1948-11-25T00:00:00+00:001948luxwortluxwort[newspaper][de, fr, lb]TrueLuxemburger Wort19501848116033330355101320102[]luxwort-1848-03-23-a[issue]FalseClosed1848-03-23T00:00:00+00:001848luxwort-1950-12-30-a[issue]FalseClosed1950-12-30T00:00:00+00:001950True
FZG-1950-06-17-a-i0045arUm EJnropa herum Die Furcht vor Krieg un...13531[{'uid': 'FZG-1950-06-17-a-p0001', 'num': 1, '...FalseUm EJnropa herum Die Furcht vor Krieg und Vern...[article]OpenPrivate1950[{'uid': 'aida-0001-54-London', 'relevance': 5...[{'uid': 'aida-0001-50-Karl_Arnold', 'relevanc...de[{'fragment': ' außenpolitischen Erklärung der...[{'pageUid': 'FZG-1950-06-17-a-p0001', 'coords...[][]True1950-06-17T00:00:00+00:00CH[][]SNL[{'relevance': 0.029, 'topic': {'uid': 'tm-de-...[]FZG-1950-06-17-a[issue]FalseNotDefined1950-06-17T00:00:00+00:001950FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTrue
JDG-1954-11-03-a-i0032arWashington et les négociations avec Moscou7171[{'uid': 'JDG-1954-11-03-a-p0003', 'num': 3, '...TrueWashington et les négociations avec Moscou (De...[article]OpenPrivate1954[{'uid': 'aida-0001-54-Washington$2c$_D.C.', '...[{'uid': 'aida-0001-50-Pat_Robertson', 'releva...fr[{'fragment': ' (sans distinction de partis) s...[{'pageUid': 'JDG-1954-11-03-a-p0003', 'coords...[][]False1954-11-03T00:00:00+00:00CH[][]SNL[{'relevance': 0.118, 'topic': {'uid': 'tm-fr-...[]JDG-1954-11-03-a[issue]FalseNotDefined1954-11-03T00:00:00+00:001954JDGJDG[newspaper][]TrueJournal de Genève19981826406288449131494186172[]JDG-1826-01-01-a[issue]FalseClosed1826-01-01T00:00:00+00:001826JDG-1997-12-31-a[issue]FalseClosed1997-12-31T00:00:00+00:001997True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = impresso.search.find(\n", + " q=\"European Union\",\n", + " order_by=\"date\",\n", + ")\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below, we will search for a term \"European Union\" in the Impresso data.\n", + "Then we will use the `result` variable, to access and print the excerpts of the first three articles returned by the search query.\n", + "\n", + "The `pydantic` property is a [Pydantic](https://docs.pydantic.dev/latest/) model representing the response of the Impresso API. It provides a way to ensure that the data conforms to specified types and constraints, making it easier to work with structured data in a reliable and consistent manner.\n", + "We use the `data` property of the response to iterate over the page of the results and return excerpts of the articles that contain the search term." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Europäischer Föderalistenkongreß in Rom (Schluss) Interessant war auch die Resolution der Sous-co m mission Syndicale, wie überhaupt die rege Beteilig\n", + "Um EJnropa herum Die Furcht vor Krieg und Vernichtung hält | Sinn haben , dann heißt dies alles : 1 . Daß für « iie Lebewesen , die der Herrgott mit V\n", + "Washington et les négociations avec Moscou (De notre correspondant) II y a du neuf à Washington. Un silence presque digne a remplacé ce que M. Adlai S\n" + ] + } + ], + "source": [ + "result = impresso.search.find(\n", + " q=\"European Union\",\n", + " order_by=\"date\",\n", + ")\n", + "for article in result.pydantic.data[:3]:\n", + " print(article.excerpt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are several useful properties on the result object that let us know the total nubmer of results found, the current page and its size." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "79 results were found for this term. The current result object contains 79 items starting from the item number 0\n" + ] + } + ], + "source": [ + "print(\"%i results were found for this term. The current result object contains %i items starting from the item number %i\" % (result.total, result.size, result.offset))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pydantic\n", + "The full response from the Impresso API as a pydantic model." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "SearchResponseSchema(limit=100, offset=0, total=79, info={'responseTime': {'solr': 322}, 'facets': {}, 'queryComponents': [{'context': 'include', 'op': 'OR', 'type': 'string', 'q': 'European Union'}], 'filters': [{'context': 'include', 'op': 'OR', 'type': 'string', 'q': 'European Union'}]}, data=[Article(uid='luxwort-1948-11-25-a-i0033', type='ar', title='Europäischer Föderalistenkongreß in Rom', size=734, nbPages=1, pages=[Page(uid='luxwort-1948-11-25-a-p0006', num=6, issueUid='luxwort-1948-11-25-a', newspaperUid='luxwort', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Europäischer Föderalistenkongreß in Rom (Schluss) Interessant war auch die Resolution der Sous-co m mission Syndicale, wie überhaupt die rege Beteilig', locations=[Entity(uid='aida-0001-54-Rome', relevance=1), Entity(uid='aida-0001-54-SS_Deutschland_$28$1923$29$', relevance=1), Entity(uid='aida-0001-54-England', relevance=2)], persons=[], language='de', issue=NewspaperIssue(uid='luxwort-1948-11-25-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1948, 11, 25, 0, 0, tzinfo=TzInfo(UTC)), year='1948'), matches=[ArticleMatch(fragment=' European Union und mit den Parliamentary Federalist Groups vor, um den augenblicklichen Widerstand', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[116.0, 229.0, 2125.0, 122.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/116,229,2125,122/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[399.0, 375.0, 121.0, 34.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/399,375,121,34/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[111.0, 429.0, 688.0, 556.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/111,429,688,556/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[103.0, 1005.0, 693.0, 733.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/103,1005,693,733/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[101.0, 1795.0, 693.0, 519.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/101,1795,693,519/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[101.0, 2378.0, 692.0, 591.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/101,2378,692,591/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[101.0, 2989.0, 692.0, 383.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/101,2989,692,383/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[102.0, 3386.0, 692.0, 420.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/102,3386,692,420/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[111.0, 3829.0, 690.0, 140.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/111,3829,690,140/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[840.0, 380.0, 685.0, 492.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/840,380,685,492/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[840.0, 884.0, 686.0, 425.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/840,884,686,425/full/0/default.png', g=None), ArticleRegion(pageUid='luxwort-1948-11-25-a-p0006', coords=[1563.0, 379.0, 693.0, 934.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fhg7djq%2fpages%2f6/1563,379,693,934/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1948, 11, 25, 0, 0, tzinfo=TzInfo(UTC)), year=1948, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxwort', acronym='luxwort', labels=['newspaper'], languages=['de', 'fr', 'lb'], properties=[], included=True, name='Luxemburger Wort', endYear=1950, startYear=1848, firstIssue=NewspaperIssue(uid='luxwort-1848-03-23-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1848, 3, 23, 0, 0, tzinfo=TzInfo(UTC)), year='1848'), lastIssue=NewspaperIssue(uid='luxwort-1950-12-30-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1950, 12, 30, 0, 0, tzinfo=TzInfo(UTC)), year='1950'), countArticles=1160333, countIssues=30355, countPages=101320, fetched=True, deltaYear=102), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp14_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338280.0, excerpt=[TopicWord(w='kirche', p=0.09606, h=None), TopicWord(w='papst', p=0.02938, h=None), TopicWord(w='bischof', p=0.02341, h=None), TopicWord(w='pfarrer', p=0.02311, h=None), TopicWord(w='predigt', p=0.02298, h=None)], words=[TopicWord(w='kirche', p=0.09606, h=None), TopicWord(w='papst', p=0.02938, h=None), TopicWord(w='bischof', p=0.02341, h=None), TopicWord(w='pfarrer', p=0.02311, h=None), TopicWord(w='predigt', p=0.02298, h=None), TopicWord(w='messe', p=0.02065, h=None), TopicWord(w='sonntag', p=0.0135, h=None), TopicWord(w='gottesdienst', p=0.01349, h=None), TopicWord(w='rom', p=0.01341, h=None), TopicWord(w='priester', p=0.01298, h=None)], model='tm-de-all-v2.0'), relevance=0.128, topicUid='tm-de-all-v2.0_tp14_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp25_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=446736.0, excerpt=[TopicWord(w='wirtschaft', p=0.01665, h=None), TopicWord(w='entwicklung', p=0.01397, h=None), TopicWord(w='industrie', p=0.01075, h=None), TopicWord(w='arbeit', p=0.01009, h=None), TopicWord(w='frage', p=0.01008, h=None)], words=[TopicWord(w='wirtschaft', p=0.01665, h=None), TopicWord(w='entwicklung', p=0.01397, h=None), TopicWord(w='industrie', p=0.01075, h=None), TopicWord(w='arbeit', p=0.01009, h=None), TopicWord(w='frage', p=0.01008, h=None), TopicWord(w='bedeutung', p=0.00817, h=None), TopicWord(w='schweiz', p=0.00673, h=None), TopicWord(w='teil', p=0.00661, h=None), TopicWord(w='aufgabe', p=0.00635, h=None), TopicWord(w='zukunft', p=0.00631, h=None)], model='tm-de-all-v2.0'), relevance=0.223, topicUid='tm-de-all-v2.0_tp25_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp52_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=411914.0, excerpt=[TopicWord(w='regierung', p=0.02742, h=None), TopicWord(w='paris', p=0.02119, h=None), TopicWord(w='konferenz', p=0.02106, h=None), TopicWord(w='frankreich', p=0.02095, h=None), TopicWord(w='frage', p=0.01727, h=None)], words=[TopicWord(w='regierung', p=0.02742, h=None), TopicWord(w='paris', p=0.02119, h=None), TopicWord(w='konferenz', p=0.02106, h=None), TopicWord(w='frankreich', p=0.02095, h=None), TopicWord(w='frage', p=0.01727, h=None), TopicWord(w='deutschland', p=0.01409, h=None), TopicWord(w='völkerbund', p=0.01343, h=None), TopicWord(w='genf', p=0.01243, h=None), TopicWord(w='london', p=0.01048, h=None), TopicWord(w='vertrag', p=0.0098, h=None)], model='tm-de-all-v2.0'), relevance=0.28, topicUid='tm-de-all-v2.0_tp52_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp77_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=340315.0, excerpt=[TopicWord(w='regierung', p=0.02362, h=None), TopicWord(w='afp', p=0.01425, h=None), TopicWord(w='sowjetunion', p=0.01321, h=None), TopicWord(w='reuter', p=0.01311, h=None), TopicWord(w='moskau', p=0.01267, h=None)], words=[TopicWord(w='regierung', p=0.02362, h=None), TopicWord(w='afp', p=0.01425, h=None), TopicWord(w='sowjetunion', p=0.01321, h=None), TopicWord(w='reuter', p=0.01311, h=None), TopicWord(w='moskau', p=0.01267, h=None), TopicWord(w='washington', p=0.01109, h=None), TopicWord(w='präsident', p=0.00955, h=None), TopicWord(w='außenminister', p=0.00953, h=None), TopicWord(w='united', p=0.00952, h=None), TopicWord(w='london', p=0.00914, h=None)], model='tm-de-all-v2.0'), relevance=0.024, topicUid='tm-de-all-v2.0_tp77_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp86_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=397759.0, excerpt=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None)], words=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None), TopicWord(w='volk', p=0.00987, h=None), TopicWord(w='recht', p=0.00946, h=None), TopicWord(w='kampf', p=0.00811, h=None), TopicWord(w='macht', p=0.00723, h=None), TopicWord(w='sozialismus', p=0.00609, h=None)], model='tm-de-all-v2.0'), relevance=0.134, topicUid='tm-de-all-v2.0_tp86_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp95_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=405687.0, excerpt=[TopicWord(w='krieg', p=0.03035, h=None), TopicWord(w='deutschland', p=0.02857, h=None), TopicWord(w='frankreich', p=0.02034, h=None), TopicWord(w='welt', p=0.01734, h=None), TopicWord(w='friede', p=0.01707, h=None)], words=[TopicWord(w='krieg', p=0.03035, h=None), TopicWord(w='deutschland', p=0.02857, h=None), TopicWord(w='frankreich', p=0.02034, h=None), TopicWord(w='welt', p=0.01734, h=None), TopicWord(w='friede', p=0.01707, h=None), TopicWord(w='europa', p=0.01671, h=None), TopicWord(w='politik', p=0.01418, h=None), TopicWord(w='england', p=0.01352, h=None), TopicWord(w='volk', p=0.00954, h=None), TopicWord(w='frage', p=0.00767, h=None)], model='tm-de-all-v2.0'), relevance=0.096, topicUid='tm-de-all-v2.0_tp95_de')], content=None, mentions=[], v=None), Article(uid='FZG-1950-06-17-a-i0045', type='ar', title='Um EJnropa herum Die Furcht vor Krieg un...', size=1353, nbPages=1, pages=[Page(uid='FZG-1950-06-17-a-p0001', num=1, issueUid='FZG-1950-06-17-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Um EJnropa herum Die Furcht vor Krieg und Vernichtung hält | Sinn haben , dann heißt dies alles : 1 . Daß für « iie Lebewesen , die der Herrgott mit V', locations=[Entity(uid='aida-0001-54-London', relevance=5), Entity(uid='aida-0001-54-Paris', relevance=1), Entity(uid='aida-0001-54-Holland', relevance=1)], persons=[Entity(uid='aida-0001-50-Karl_Arnold', relevance=1), Entity(uid='aida-0001-50-Morgan_Phillips', relevance=1)], language='de', issue=NewspaperIssue(uid='FZG-1950-06-17-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1950, 6, 17, 0, 0, tzinfo=TzInfo(UTC)), year='1950'), matches=[ArticleMatch(fragment=' außenpolitischen Erklärung der Exekutive der Labourpartei , die den Titel « European Union » trägt . Vor 10 Jahren', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[75.0, 1129.0, 1752.0, 117.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/75,1129,1752,117/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[47.0, 1256.0, 871.0, 1396.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/47,1256,871,1396/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[52.0, 2662.0, 866.0, 1405.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/52,2662,866,1405/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[56.0, 4096.0, 885.0, 1415.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/56,4096,885,1415/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[951.0, 1251.0, 885.0, 1087.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/951,1251,885,1087/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[955.0, 2348.0, 886.0, 1120.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/955,2348,886,1120/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[960.0, 3491.0, 885.0, 1003.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/960,3491,885,1003/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1950-06-17-a-p0001', coords=[969.0, 4503.0, 881.0, 998.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1950-06-17-a-p0001/969,4503,881,998/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=True, date=datetime.datetime(1950, 6, 17, 0, 0, tzinfo=TzInfo(UTC)), year=1950, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp25_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=446736.0, excerpt=[TopicWord(w='wirtschaft', p=0.01665, h=None), TopicWord(w='entwicklung', p=0.01397, h=None), TopicWord(w='industrie', p=0.01075, h=None), TopicWord(w='arbeit', p=0.01009, h=None), TopicWord(w='frage', p=0.01008, h=None)], words=[TopicWord(w='wirtschaft', p=0.01665, h=None), TopicWord(w='entwicklung', p=0.01397, h=None), TopicWord(w='industrie', p=0.01075, h=None), TopicWord(w='arbeit', p=0.01009, h=None), TopicWord(w='frage', p=0.01008, h=None), TopicWord(w='bedeutung', p=0.00817, h=None), TopicWord(w='schweiz', p=0.00673, h=None), TopicWord(w='teil', p=0.00661, h=None), TopicWord(w='aufgabe', p=0.00635, h=None), TopicWord(w='zukunft', p=0.00631, h=None)], model='tm-de-all-v2.0'), relevance=0.029, topicUid='tm-de-all-v2.0_tp25_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp41_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=318469.0, excerpt=[TopicWord(w='london', p=0.07808, h=None), TopicWord(w='england', p=0.05434, h=None), TopicWord(w='sir', p=0.02891, h=None), TopicWord(w='lord', p=0.02667, h=None), TopicWord(w='regierung', p=0.02305, h=None)], words=[TopicWord(w='london', p=0.07808, h=None), TopicWord(w='england', p=0.05434, h=None), TopicWord(w='sir', p=0.02891, h=None), TopicWord(w='lord', p=0.02667, h=None), TopicWord(w='regierung', p=0.02305, h=None), TopicWord(w='pfund', p=0.01726, h=None), TopicWord(w='unterhaus', p=0.01654, h=None), TopicWord(w='churchill', p=0.01215, h=None), TopicWord(w='irland', p=0.01008, h=None), TopicWord(w='john', p=0.0099, h=None)], model='tm-de-all-v2.0'), relevance=0.106, topicUid='tm-de-all-v2.0_tp41_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp58_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=384076.0, excerpt=[TopicWord(w='regierung', p=0.05579, h=None), TopicWord(w='kammer', p=0.03555, h=None), TopicWord(w='frage', p=0.015, h=None), TopicWord(w='luxemburg', p=0.01418, h=None), TopicWord(w='sitzung', p=0.01383, h=None)], words=[TopicWord(w='regierung', p=0.05579, h=None), TopicWord(w='kammer', p=0.03555, h=None), TopicWord(w='frage', p=0.015, h=None), TopicWord(w='luxemburg', p=0.01418, h=None), TopicWord(w='sitzung', p=0.01383, h=None), TopicWord(w='herr', p=0.01147, h=None), TopicWord(w='belgien', p=0.01095, h=None), TopicWord(w='minister', p=0.01006, h=None), TopicWord(w='gesetz', p=0.0085, h=None), TopicWord(w='staat', p=0.00824, h=None)], model='tm-de-all-v2.0'), relevance=0.029, topicUid='tm-de-all-v2.0_tp58_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp77_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=340315.0, excerpt=[TopicWord(w='regierung', p=0.02362, h=None), TopicWord(w='afp', p=0.01425, h=None), TopicWord(w='sowjetunion', p=0.01321, h=None), TopicWord(w='reuter', p=0.01311, h=None), TopicWord(w='moskau', p=0.01267, h=None)], words=[TopicWord(w='regierung', p=0.02362, h=None), TopicWord(w='afp', p=0.01425, h=None), TopicWord(w='sowjetunion', p=0.01321, h=None), TopicWord(w='reuter', p=0.01311, h=None), TopicWord(w='moskau', p=0.01267, h=None), TopicWord(w='washington', p=0.01109, h=None), TopicWord(w='präsident', p=0.00955, h=None), TopicWord(w='außenminister', p=0.00953, h=None), TopicWord(w='united', p=0.00952, h=None), TopicWord(w='london', p=0.00914, h=None)], model='tm-de-all-v2.0'), relevance=0.13, topicUid='tm-de-all-v2.0_tp77_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp78_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=393006.0, excerpt=[TopicWord(w='landwirtschaft', p=0.02117, h=None), TopicWord(w='milch', p=0.01714, h=None), TopicWord(w='ernte', p=0.01013, h=None), TopicWord(w='fleisch', p=0.00722, h=None), TopicWord(w='bauer', p=0.00709, h=None)], words=[TopicWord(w='landwirtschaft', p=0.02117, h=None), TopicWord(w='milch', p=0.01714, h=None), TopicWord(w='ernte', p=0.01013, h=None), TopicWord(w='fleisch', p=0.00722, h=None), TopicWord(w='bauer', p=0.00709, h=None), TopicWord(w='preis', p=0.00703, h=None), TopicWord(w='hektar', p=0.00679, h=None), TopicWord(w='getreide', p=0.00669, h=None), TopicWord(w='qualität', p=0.00601, h=None), TopicWord(w='vieh', p=0.00598, h=None)], model='tm-de-all-v2.0'), relevance=0.021, topicUid='tm-de-all-v2.0_tp78_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp80_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=463958.0, excerpt=[TopicWord(w='wasser', p=0.01491, h=None), TopicWord(w='stadt', p=0.01012, h=None), TopicWord(w='erde', p=0.00863, h=None), TopicWord(w='meter', p=0.00819, h=None), TopicWord(w='see', p=0.00799, h=None)], words=[TopicWord(w='wasser', p=0.01491, h=None), TopicWord(w='stadt', p=0.01012, h=None), TopicWord(w='erde', p=0.00863, h=None), TopicWord(w='meter', p=0.00819, h=None), TopicWord(w='see', p=0.00799, h=None), TopicWord(w='natur', p=0.00738, h=None), TopicWord(w='wald', p=0.00679, h=None), TopicWord(w='land', p=0.00654, h=None), TopicWord(w='boden', p=0.00653, h=None), TopicWord(w='winter', p=0.00518, h=None)], model='tm-de-all-v2.0'), relevance=0.023, topicUid='tm-de-all-v2.0_tp80_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp86_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=397759.0, excerpt=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None)], words=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None), TopicWord(w='volk', p=0.00987, h=None), TopicWord(w='recht', p=0.00946, h=None), TopicWord(w='kampf', p=0.00811, h=None), TopicWord(w='macht', p=0.00723, h=None), TopicWord(w='sozialismus', p=0.00609, h=None)], model='tm-de-all-v2.0'), relevance=0.283, topicUid='tm-de-all-v2.0_tp86_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp95_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=405687.0, excerpt=[TopicWord(w='krieg', p=0.03035, h=None), TopicWord(w='deutschland', p=0.02857, h=None), TopicWord(w='frankreich', p=0.02034, h=None), TopicWord(w='welt', p=0.01734, h=None), TopicWord(w='friede', p=0.01707, h=None)], words=[TopicWord(w='krieg', p=0.03035, h=None), TopicWord(w='deutschland', p=0.02857, h=None), TopicWord(w='frankreich', p=0.02034, h=None), TopicWord(w='welt', p=0.01734, h=None), TopicWord(w='friede', p=0.01707, h=None), TopicWord(w='europa', p=0.01671, h=None), TopicWord(w='politik', p=0.01418, h=None), TopicWord(w='england', p=0.01352, h=None), TopicWord(w='volk', p=0.00954, h=None), TopicWord(w='frage', p=0.00767, h=None)], model='tm-de-all-v2.0'), relevance=0.254, topicUid='tm-de-all-v2.0_tp95_de')], content=None, mentions=[], v=None), Article(uid='JDG-1954-11-03-a-i0032', type='ar', title='Washington et les négociations avec Moscou', size=717, nbPages=1, pages=[Page(uid='JDG-1954-11-03-a-p0003', num=3, issueUid='JDG-1954-11-03-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-03-a-p0003', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-03-a-p0003/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Washington et les négociations avec Moscou (De notre correspondant) II y a du neuf à Washington. Un silence presque digne a remplacé ce que M. Adlai S', locations=[Entity(uid='aida-0001-54-Washington$2c$_D.C.', relevance=8), Entity(uid='aida-0001-54-Moscow', relevance=5), Entity(uid='aida-0001-54-Vietnam', relevance=1), Entity(uid='aida-0001-54-China', relevance=1), Entity(uid='aida-0001-54-France', relevance=1), Entity(uid='aida-0001-54-Marcel_Dallemagne', relevance=2), Entity(uid='aida-0001-54-Province_of_New_York', relevance=1)], persons=[Entity(uid='aida-0001-50-Pat_Robertson', relevance=1), Entity(uid='aida-0001-50-Pierre_Rode', relevance=1), Entity(uid='aida-0001-50-Anthony_Eden', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1954-11-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1954, 11, 3, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), matches=[ArticleMatch(fragment=' (sans distinction de partis) sont en place aux deux bouts du monde libre avec la WEU (Western European Union', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1954-11-03-a-p0003', coords=[224.0, 370.0, 1283.0, 180.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-03-a-p0003/224,370,1283,180/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1954-11-03-a-p0003', coords=[238.0, 568.0, 610.0, 986.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-03-a-p0003/238,568,610,986/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1954-11-03-a-p0003', coords=[884.0, 568.0, 610.0, 803.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-03-a-p0003/884,568,610,803/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1954-11-03-a-p0003', coords=[884.0, 1371.0, 610.0, 860.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-03-a-p0003/884,1371,610,860/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1954, 11, 3, 0, 0, tzinfo=TzInfo(UTC)), year=1954, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.118, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp29_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1342277.0, excerpt=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None)], words=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None), TopicWord(w='nation', p=0.01448, h=None), TopicWord(w='monde', p=0.01274, h=None), TopicWord(w='gouvernement', p=0.01088, h=None), TopicWord(w='situation', p=0.00931, h=None), TopicWord(w='discours', p=0.00769, h=None)], model='tm-fr-all-v2.0'), relevance=0.483, topicUid='tm-fr-all-v2.0_tp29_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.2, topicUid='tm-fr-all-v2.0_tp71_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1954-11-27-a-i0041', type='ar', title='AH, CES INITIALES !', size=783, nbPages=1, pages=[Page(uid='JDG-1954-11-27-a-p0004', num=4, issueUid='JDG-1954-11-27-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-27-a-p0004', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-27-a-p0004/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='AH, CES INITIALES ! Pour répondre à la demande de nombreux lecteurs, nous donnons ci-dessous la liste des principales organisations internationales gé', locations=[Entity(uid='aida-0001-54-International_Typographical_Union', relevance=1), Entity(uid='aida-0001-54-Palestine$2c$_Texas', relevance=2), Entity(uid='aida-0001-54-Atlantic$2c$_Iowa', relevance=2), Entity(uid='aida-0001-54-New_Zealand', relevance=1), Entity(uid='aida-0001-54-United_States', relevance=1), Entity(uid='aida-0001-54-Paris', relevance=1), Entity(uid='aida-0001-54-Prague$2c$_Nebraska', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='JDG-1954-11-27-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1954, 11, 27, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), matches=[ArticleMatch(fragment=\" Centre'OEEC : Organisation for European Economie Coopération. : WEU : Western European Union EPU : European\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1954-11-27-a-p0004', coords=[1490.0, 152.0, 1256.0, 90.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-27-a-p0004/1490,152,1256,90/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1954-11-27-a-p0004', coords=[1490.0, 242.0, 1256.0, 226.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-27-a-p0004/1490,242,1256,226/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1954-11-27-a-p0004', coords=[1481.0, 480.0, 1260.0, 2083.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1954-11-27-a-p0004/1481,480,1260,2083/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1954, 11, 27, 0, 0, tzinfo=TzInfo(UTC)), year=1954, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.093, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp16_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1481661.0, excerpt=[TopicWord(w='conseil', p=0.12679, h=None), TopicWord(w='commission', p=0.07916, h=None), TopicWord(w='projet', p=0.03972, h=None), TopicWord(w='loi', p=0.0295, h=None), TopicWord(w='rapport', p=0.02175, h=None)], words=[TopicWord(w='conseil', p=0.12679, h=None), TopicWord(w='commission', p=0.07916, h=None), TopicWord(w='projet', p=0.03972, h=None), TopicWord(w='loi', p=0.0295, h=None), TopicWord(w='rapport', p=0.02175, h=None), TopicWord(w='discussion', p=0.02165, h=None), TopicWord(w='séance', p=0.02021, h=None), TopicWord(w='proposition', p=0.02014, h=None), TopicWord(w='voix', p=0.02001, h=None), TopicWord(w='question', p=0.01655, h=None)], model='tm-fr-all-v2.0'), relevance=0.193, topicUid='tm-fr-all-v2.0_tp16_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp37_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1629711.0, excerpt=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None)], words=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None), TopicWord(w='question', p=0.01606, h=None), TopicWord(w='fait', p=0.01434, h=None), TopicWord(w='propos', p=0.01279, h=None), TopicWord(w='sujet', p=0.01251, h=None), TopicWord(w='cas', p=0.01111, h=None)], model='tm-fr-all-v2.0'), relevance=0.029, topicUid='tm-fr-all-v2.0_tp37_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp72_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1648261.0, excerpt=[TopicWord(w='pays', p=0.0647, h=None), TopicWord(w='industrie', p=0.03546, h=None), TopicWord(w='production', p=0.03028, h=None), TopicWord(w='commerce', p=0.02679, h=None), TopicWord(w='économie', p=0.02376, h=None)], words=[TopicWord(w='pays', p=0.0647, h=None), TopicWord(w='industrie', p=0.03546, h=None), TopicWord(w='production', p=0.03028, h=None), TopicWord(w='commerce', p=0.02679, h=None), TopicWord(w='économie', p=0.02376, h=None), TopicWord(w='marché', p=0.01515, h=None), TopicWord(w='développement', p=0.01418, h=None), TopicWord(w='situation', p=0.01212, h=None), TopicWord(w='suisse', p=0.01208, h=None), TopicWord(w='exportation', p=0.01141, h=None)], model='tm-fr-all-v2.0'), relevance=0.18, topicUid='tm-fr-all-v2.0_tp72_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.104, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp78_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1563517.0, excerpt=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None)], words=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None), TopicWord(w='point', p=0.01016, h=None), TopicWord(w='temps', p=0.00958, h=None), TopicWord(w='progrès', p=0.0087, h=None), TopicWord(w='intérêt', p=0.00867, h=None), TopicWord(w='vue', p=0.00799, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp78_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.084, topicUid='tm-fr-all-v2.0_tp92_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp99_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1676481.0, excerpt=[TopicWord(w='cours', p=0.06546, h=None), TopicWord(w='école', p=0.06053, h=None), TopicWord(w='enseignement', p=0.0415, h=None), TopicWord(w='professeur', p=0.03397, h=None), TopicWord(w='année', p=0.02844, h=None)], words=[TopicWord(w='cours', p=0.06546, h=None), TopicWord(w='école', p=0.06053, h=None), TopicWord(w='enseignement', p=0.0415, h=None), TopicWord(w='professeur', p=0.03397, h=None), TopicWord(w='année', p=0.02844, h=None), TopicWord(w='classe', p=0.024, h=None), TopicWord(w='formation', p=0.0217, h=None), TopicWord(w='instruction', p=0.01599, h=None), TopicWord(w='directeur', p=0.01328, h=None), TopicWord(w='examen', p=0.01254, h=None)], model='tm-fr-all-v2.0'), relevance=0.037, topicUid='tm-fr-all-v2.0_tp99_fr')], content=None, mentions=[], v=None), Article(uid='DTT-1962-04-30-a-i0121', type='ar', title='Fragen der Rüstung, und daneben besteht ...', size=863, nbPages=1, pages=[Page(uid='DTT-1962-04-30-a-p0010', num=10, issueUid='DTT-1962-04-30-a', newspaperUid='DTT', iiif='https://impresso-project.ch/api/proxy/iiif/DTT-1962-04-30-a-p0010', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/DTT-1962-04-30-a-p0010/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Fragen der Rüstung , und daneben besteht ein Amt ur Wegweiser der Integration ( 9 ) ^ Rüstungskontrolle , das aber seinerseits um mit der NATO zusamme', locations=[Entity(uid='aida-0001-54-London', relevance=2), Entity(uid='aida-0001-54-Germany', relevance=3), Entity(uid='aida-0001-54-Lage', relevance=1), Entity(uid='aida-0001-54-Rome', relevance=1), Entity(uid='aida-0001-54-Italy', relevance=1), Entity(uid='aida-0001-54-Auch', relevance=1)], persons=[], language='de', issue=NewspaperIssue(uid='DTT-1962-04-30-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1962, 4, 30, 0, 0, tzinfo=TzInfo(UTC)), year='1962'), matches=[ArticleMatch(fragment=' : Western European Union ) durch Beizug über die Integration zur EWG . Die WEU hat sich Italiens', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='DTT-1962-04-30-a-p0010', coords=[132.0, 212.0, 1698.0, 1350.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/DTT-1962-04-30-a-p0010/132,212,1698,1350/full/0/default.png', g=None), ArticleRegion(pageUid='DTT-1962-04-30-a-p0010', coords=[1861.0, 212.0, 1701.0, 1354.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/DTT-1962-04-30-a-p0010/1861,212,1701,1354/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1962, 4, 30, 0, 0, tzinfo=TzInfo(UTC)), year=1962, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='DTT', acronym='DTT', labels=['newspaper'], languages=[], properties=[], included=True, name='', endYear=-1, startYear=-1, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=None, deltaYear=0), dataProvider='Migros', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp11_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=437852.0, excerpt=[TopicWord(w='verlag', p=0.02531, h=None), TopicWord(w='buch', p=0.0244, h=None), TopicWord(w='band', p=0.0195, h=None), TopicWord(w='geschichte', p=0.01259, h=None), TopicWord(w='werk', p=0.01053, h=None)], words=[TopicWord(w='verlag', p=0.02531, h=None), TopicWord(w='buch', p=0.0244, h=None), TopicWord(w='band', p=0.0195, h=None), TopicWord(w='geschichte', p=0.01259, h=None), TopicWord(w='werk', p=0.01053, h=None), TopicWord(w='literatur', p=0.01004, h=None), TopicWord(w='dicht', p=0.0096, h=None), TopicWord(w='verfasser', p=0.00852, h=None), TopicWord(w='roman', p=0.00798, h=None), TopicWord(w='sprache', p=0.00703, h=None)], model='tm-de-all-v2.0'), relevance=0.041, topicUid='tm-de-all-v2.0_tp11_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp25_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=446736.0, excerpt=[TopicWord(w='wirtschaft', p=0.01665, h=None), TopicWord(w='entwicklung', p=0.01397, h=None), TopicWord(w='industrie', p=0.01075, h=None), TopicWord(w='arbeit', p=0.01009, h=None), TopicWord(w='frage', p=0.01008, h=None)], words=[TopicWord(w='wirtschaft', p=0.01665, h=None), TopicWord(w='entwicklung', p=0.01397, h=None), TopicWord(w='industrie', p=0.01075, h=None), TopicWord(w='arbeit', p=0.01009, h=None), TopicWord(w='frage', p=0.01008, h=None), TopicWord(w='bedeutung', p=0.00817, h=None), TopicWord(w='schweiz', p=0.00673, h=None), TopicWord(w='teil', p=0.00661, h=None), TopicWord(w='aufgabe', p=0.00635, h=None), TopicWord(w='zukunft', p=0.00631, h=None)], model='tm-de-all-v2.0'), relevance=0.049, topicUid='tm-de-all-v2.0_tp25_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp32_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=308129.0, excerpt=[TopicWord(w='regierung', p=0.01272, h=None), TopicWord(w='bonn', p=0.01271, h=None), TopicWord(w='bundesrepublik', p=0.00998, h=None), TopicWord(w='moskau', p=0.00972, h=None), TopicWord(w='präsident', p=0.0095, h=None)], words=[TopicWord(w='regierung', p=0.01272, h=None), TopicWord(w='bonn', p=0.01271, h=None), TopicWord(w='bundesrepublik', p=0.00998, h=None), TopicWord(w='moskau', p=0.00972, h=None), TopicWord(w='präsident', p=0.0095, h=None), TopicWord(w='sowjetunion', p=0.00853, h=None), TopicWord(w='seite', p=0.00839, h=None), TopicWord(w='usa', p=0.00808, h=None), TopicWord(w='dpa', p=0.00624, h=None), TopicWord(w='upi', p=0.00604, h=None)], model='tm-de-all-v2.0'), relevance=0.492, topicUid='tm-de-all-v2.0_tp32_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp52_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=411914.0, excerpt=[TopicWord(w='regierung', p=0.02742, h=None), TopicWord(w='paris', p=0.02119, h=None), TopicWord(w='konferenz', p=0.02106, h=None), TopicWord(w='frankreich', p=0.02095, h=None), TopicWord(w='frage', p=0.01727, h=None)], words=[TopicWord(w='regierung', p=0.02742, h=None), TopicWord(w='paris', p=0.02119, h=None), TopicWord(w='konferenz', p=0.02106, h=None), TopicWord(w='frankreich', p=0.02095, h=None), TopicWord(w='frage', p=0.01727, h=None), TopicWord(w='deutschland', p=0.01409, h=None), TopicWord(w='völkerbund', p=0.01343, h=None), TopicWord(w='genf', p=0.01243, h=None), TopicWord(w='london', p=0.01048, h=None), TopicWord(w='vertrag', p=0.0098, h=None)], model='tm-de-all-v2.0'), relevance=0.186, topicUid='tm-de-all-v2.0_tp52_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp70_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=353648.0, excerpt=[TopicWord(w='schweiz', p=0.12796, h=None), TopicWord(w='frankreich', p=0.06629, h=None), TopicWord(w='deutschland', p=0.05481, h=None), TopicWord(w='italien', p=0.04852, h=None), TopicWord(w='schwede', p=0.04619, h=None)], words=[TopicWord(w='schweiz', p=0.12796, h=None), TopicWord(w='frankreich', p=0.06629, h=None), TopicWord(w='deutschland', p=0.05481, h=None), TopicWord(w='italien', p=0.04852, h=None), TopicWord(w='schwede', p=0.04619, h=None), TopicWord(w='belgien', p=0.0388, h=None), TopicWord(w='holland', p=0.0342, h=None), TopicWord(w='england', p=0.02673, h=None), TopicWord(w='norwegen', p=0.02339, h=None), TopicWord(w='dänemark', p=0.02264, h=None)], model='tm-de-all-v2.0'), relevance=0.078, topicUid='tm-de-all-v2.0_tp70_de')], content=None, mentions=[], v=None), Article(uid='luxland-1984-12-21-a-i0018', type='ar', title='Notizblock', size=858, nbPages=1, pages=[Page(uid='luxland-1984-12-21-a-p0004', num=4, issueUid='luxland-1984-12-21-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Notizblock Ein Erinnerungsbuch Vv ie ein bunter Pflasterstein plumpst das schwergewichtige Jubiläumsbuch der luxemburgischen Jugendherbergszentrale in', locations=[Entity(uid='aida-0001-54-Jim_Landes', relevance=2), Entity(uid='aida-0001-54-Jon_Boden', relevance=1), Entity(uid='aida-0001-54-Auch', relevance=1), Entity(uid='aida-0001-54-Manosque', relevance=1), Entity(uid='aida-0001-54-Meno_Burg', relevance=1)], persons=[Entity(uid='aida-0001-50-Richard_Schirrmann', relevance=1), Entity(uid='aida-0001-50-Marc_Sangnier', relevance=1), Entity(uid='aida-0001-50-Jean_Giono', relevance=1)], language='de', issue=NewspaperIssue(uid='luxland-1984-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1984, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='1984'), matches=[ArticleMatch(fragment=' wir in Manosque in der linden Abendluft, mit dem Walking Tour der Jugend der West European Union ziehen wir durchs', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[892.0, 2377.0, 271.0, 38.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/892,2377,271,38/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[1533.0, 2364.0, 1257.0, 134.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/1533,2364,1257,134/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[888.0, 2500.0, 589.0, 517.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/888,2500,589,517/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[887.0, 3068.0, 589.0, 981.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/887,3068,589,981/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[890.0, 4099.0, 589.0, 760.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/890,4099,589,760/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[1534.0, 2532.0, 595.0, 848.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/1534,2532,595,848/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[1540.0, 3403.0, 589.0, 614.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/1540,3403,589,614/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[1537.0, 4053.0, 589.0, 803.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/1537,4053,589,803/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2186.0, 2527.0, 589.0, 800.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2186,2527,589,800/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2188.0, 3336.0, 589.0, 1426.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2188,3336,589,1426/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2188.0, 4778.0, 587.0, 81.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2188,4778,587,81/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2838.0, 2529.0, 589.0, 799.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2838,2529,589,799/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2844.0, 3361.0, 589.0, 350.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2844,3361,589,350/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2840.0, 3742.0, 589.0, 666.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2840,3742,589,666/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[2840.0, 4446.0, 587.0, 347.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/2840,4446,587,347/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1984-12-21-a-p0004', coords=[3174.0, 4817.0, 255.0, 28.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9jqm4j%2fpages%2f4/3174,4817,255,28/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1984, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year=1984, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp11_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=437852.0, excerpt=[TopicWord(w='verlag', p=0.02531, h=None), TopicWord(w='buch', p=0.0244, h=None), TopicWord(w='band', p=0.0195, h=None), TopicWord(w='geschichte', p=0.01259, h=None), TopicWord(w='werk', p=0.01053, h=None)], words=[TopicWord(w='verlag', p=0.02531, h=None), TopicWord(w='buch', p=0.0244, h=None), TopicWord(w='band', p=0.0195, h=None), TopicWord(w='geschichte', p=0.01259, h=None), TopicWord(w='werk', p=0.01053, h=None), TopicWord(w='literatur', p=0.01004, h=None), TopicWord(w='dicht', p=0.0096, h=None), TopicWord(w='verfasser', p=0.00852, h=None), TopicWord(w='roman', p=0.00798, h=None), TopicWord(w='sprache', p=0.00703, h=None)], model='tm-de-all-v2.0'), relevance=0.263, topicUid='tm-de-all-v2.0_tp11_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.099, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp80_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=463958.0, excerpt=[TopicWord(w='wasser', p=0.01491, h=None), TopicWord(w='stadt', p=0.01012, h=None), TopicWord(w='erde', p=0.00863, h=None), TopicWord(w='meter', p=0.00819, h=None), TopicWord(w='see', p=0.00799, h=None)], words=[TopicWord(w='wasser', p=0.01491, h=None), TopicWord(w='stadt', p=0.01012, h=None), TopicWord(w='erde', p=0.00863, h=None), TopicWord(w='meter', p=0.00819, h=None), TopicWord(w='see', p=0.00799, h=None), TopicWord(w='natur', p=0.00738, h=None), TopicWord(w='wald', p=0.00679, h=None), TopicWord(w='land', p=0.00654, h=None), TopicWord(w='boden', p=0.00653, h=None), TopicWord(w='winter', p=0.00518, h=None)], model='tm-de-all-v2.0'), relevance=0.069, topicUid='tm-de-all-v2.0_tp80_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp92_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=443629.0, excerpt=[TopicWord(w='arbeit', p=0.02313, h=None), TopicWord(w='jugend', p=0.01615, h=None), TopicWord(w='schweiz', p=0.0144, h=None), TopicWord(w='hilfe', p=0.01315, h=None), TopicWord(w='leben', p=0.00829, h=None)], words=[TopicWord(w='arbeit', p=0.02313, h=None), TopicWord(w='jugend', p=0.01615, h=None), TopicWord(w='schweiz', p=0.0144, h=None), TopicWord(w='hilfe', p=0.01315, h=None), TopicWord(w='leben', p=0.00829, h=None), TopicWord(w='familie', p=0.00824, h=None), TopicWord(w='aufgabe', p=0.00817, h=None), TopicWord(w='verfügung', p=0.00774, h=None), TopicWord(w='tätigkeit', p=0.00667, h=None), TopicWord(w='aktion', p=0.00649, h=None)], model='tm-de-all-v2.0'), relevance=0.394, topicUid='tm-de-all-v2.0_tp92_de')], content=None, mentions=[], v=None), Article(uid='JDG-1993-11-15-a-i0016', type='ar', title='UNION OU COMMUNAUTE Dilemme lexical', size=643, nbPages=1, pages=[Page(uid='JDG-1993-11-15-a-p0003', num=3, issueUid='JDG-1993-11-15-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='UNION OU COMMUNAUTE ? Dilemme lexical Le dilemme qui désormais coupe le petit monde des journalistes à Bruxelles est le suivant comment faut-il appele', locations=[Entity(uid='aida-0001-54-Brussels', relevance=3), Entity(uid='aida-0001-54-Gare_de_Cornavin', relevance=1), Entity(uid='aida-0001-54-Lausanne', relevance=1), Entity(uid='aida-0001-54-Royal_Navy', relevance=1), Entity(uid='aida-0001-54-Spain', relevance=1)], persons=[Entity(uid='aida-0001-50-Jacques_Delors', relevance=1), Entity(uid='aida-0001-50-Francesco_Verri', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1993-11-15-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1993, 11, 15, 0, 0, tzinfo=TzInfo(UTC)), year='1993'), matches=[ArticleMatch(fragment=\" l'exemple, en optant dès le premier jour pour « European Union ». Mais pour une fois le « FT » n'a pas fait\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1993-11-15-a-p0003', coords=[1960.0, 2998.0, 1138.0, 335.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/1960,2998,1138,335/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1993-11-15-a-p0003', coords=[1492.0, 3362.0, 650.0, 1762.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/1492,3362,650,1762/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1993-11-15-a-p0003', coords=[1490.0, 5158.0, 1360.0, 112.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/1490,5158,1360,112/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1993-11-15-a-p0003', coords=[2205.0, 3362.0, 645.0, 385.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/2205,3362,645,385/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1993-11-15-a-p0003', coords=[2208.0, 4522.0, 648.0, 608.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/2208,4522,648,608/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1993-11-15-a-p0003', coords=[2900.0, 3368.0, 668.0, 1150.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1993-11-15-a-p0003/2900,3368,668,1150/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1993, 11, 15, 0, 0, tzinfo=TzInfo(UTC)), year=1993, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[], content=None, mentions=[], v=None), Article(uid='GDL-1994-04-21-a-i0061', type='ad', title='. 9 TbeOpen University IN', size=204, nbPages=1, pages=[Page(uid='GDL-1994-04-21-a-p0009', num=9, issueUid='GDL-1994-04-21-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1994-04-21-a-p0009', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1994-04-21-a-p0009/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='. 9 TbeOpen University IN EUROPE The Open University offers a wide choice of 6-9 month individual courses, or a programme of courses leading to recogn', locations=[], persons=[Entity(uid='aida-0001-50-Ann_Williams_$28$historian$29$', relevance=1)], language='fr', issue=NewspaperIssue(uid='GDL-1994-04-21-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1994, 4, 21, 0, 0, tzinfo=TzInfo(UTC)), year='1994'), matches=[ArticleMatch(fragment=\" are over 18 and résident in the European Union you're eligible. AH courses are taught in English. No\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1994-04-21-a-p0009', coords=[2862.0, 342.0, 640.0, 2325.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1994-04-21-a-p0009/2862,342,640,2325/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1994, 4, 21, 0, 0, tzinfo=TzInfo(UTC)), year=1994, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp13_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1561699.0, excerpt=[TopicWord(w='pharmacie', p=0.02796, h=None), TopicWord(w='sang', p=0.01593, h=None), TopicWord(w='estomac', p=0.01568, h=None), TopicWord(w='peau', p=0.01486, h=None), TopicWord(w='pharmacien', p=0.01308, h=None)], words=[TopicWord(w='pharmacie', p=0.02796, h=None), TopicWord(w='sang', p=0.01593, h=None), TopicWord(w='estomac', p=0.01568, h=None), TopicWord(w='peau', p=0.01486, h=None), TopicWord(w='pharmacien', p=0.01308, h=None), TopicWord(w='remède', p=0.013, h=None), TopicWord(w='flacon', p=0.01127, h=None), TopicWord(w='santé', p=0.0104, h=None), TopicWord(w='cheveu', p=0.00994, h=None), TopicWord(w='foie', p=0.00943, h=None)], model='tm-fr-all-v2.0'), relevance=0.049, topicUid='tm-fr-all-v2.0_tp13_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp23_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1606303.0, excerpt=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None)], words=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None), TopicWord(w='maladie', p=0.02173, h=None), TopicWord(w='somme', p=0.0212, h=None), TopicWord(w='frais', p=0.01906, h=None), TopicWord(w='argent', p=0.01292, h=None), TopicWord(w='montant', p=0.01283, h=None)], model='tm-fr-all-v2.0'), relevance=0.038, topicUid='tm-fr-all-v2.0_tp23_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp28_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1319653.0, excerpt=[TopicWord(w='pape', p=0.02366, h=None), TopicWord(w='foi', p=0.02014, h=None), TopicWord(w='saint', p=0.02001, h=None), TopicWord(w='cardinal', p=0.0175, h=None), TopicWord(w='abbé', p=0.0168, h=None)], words=[TopicWord(w='pape', p=0.02366, h=None), TopicWord(w='foi', p=0.02014, h=None), TopicWord(w='saint', p=0.02001, h=None), TopicWord(w='cardinal', p=0.0175, h=None), TopicWord(w='abbé', p=0.0168, h=None), TopicWord(w='curé', p=0.01659, h=None), TopicWord(w='évêque', p=0.0142, h=None), TopicWord(w='religion', p=0.01318, h=None), TopicWord(w='église', p=0.0114, h=None), TopicWord(w='prêtre', p=0.01113, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp28_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp62_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1222830.0, excerpt=[TopicWord(w='match', p=0.03138, h=None), TopicWord(w='jeu', p=0.02741, h=None), TopicWord(w='but', p=0.02187, h=None), TopicWord(w='équipe', p=0.01958, h=None), TopicWord(w='minute', p=0.01875, h=None)], words=[TopicWord(w='match', p=0.03138, h=None), TopicWord(w='jeu', p=0.02741, h=None), TopicWord(w='but', p=0.02187, h=None), TopicWord(w='équipe', p=0.01958, h=None), TopicWord(w='minute', p=0.01875, h=None), TopicWord(w='partie', p=0.01395, h=None), TopicWord(w='foi', p=0.01367, h=None), TopicWord(w='défense', p=0.01245, h=None), TopicWord(w='coup', p=0.01226, h=None), TopicWord(w='victoire', p=0.0122, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp62_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp77_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1703125.0, excerpt=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None)], words=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None), TopicWord(w='émission', p=0.01199, h=None), TopicWord(w='appareil', p=0.01075, h=None), TopicWord(w='écran', p=0.01009, h=None), TopicWord(w='service', p=0.00915, h=None), TopicWord(w='information', p=0.00913, h=None)], model='tm-fr-all-v2.0'), relevance=0.061, topicUid='tm-fr-all-v2.0_tp77_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp80_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1610579.0, excerpt=[TopicWord(w='livre', p=0.07557, h=None), TopicWord(w='auteur', p=0.02772, h=None), TopicWord(w='ouvrage', p=0.02676, h=None), TopicWord(w='histoire', p=0.02248, h=None), TopicWord(w='vol', p=0.01747, h=None)], words=[TopicWord(w='livre', p=0.07557, h=None), TopicWord(w='auteur', p=0.02772, h=None), TopicWord(w='ouvrage', p=0.02676, h=None), TopicWord(w='histoire', p=0.02248, h=None), TopicWord(w='vol', p=0.01747, h=None), TopicWord(w='volume', p=0.01722, h=None), TopicWord(w='texte', p=0.01653, h=None), TopicWord(w='édition', p=0.01473, h=None), TopicWord(w='professeur', p=0.01256, h=None), TopicWord(w='siècle', p=0.01174, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp80_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.127, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1994-05-19-a-i0041', type='ad', title='9 TheOpen University IN EUROPE', size=206, nbPages=1, pages=[Page(uid='JDG-1994-05-19-a-p0006', num=6, issueUid='JDG-1994-05-19-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1994-05-19-a-p0006', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1994-05-19-a-p0006/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='9 TheOpen University IN EUROPE The Open University offers a wide choice of 6-9 month individual courses, or a programme of courses leading to recognis', locations=[], persons=[Entity(uid='aida-0001-50-Ann_Williams_$28$historian$29$', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1994-05-19-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1994, 5, 19, 0, 0, tzinfo=TzInfo(UTC)), year='1994'), matches=[ArticleMatch(fragment=\" are over 18 and résident in thé European Union you're eligible. Ail courses are taught in English. No\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1994-05-19-a-p0006', coords=[2167.0, 2167.0, 469.0, 1725.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1994-05-19-a-p0006/2167,2167,469,1725/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1994, 5, 19, 0, 0, tzinfo=TzInfo(UTC)), year=1994, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[], content=None, mentions=[], v=None), Article(uid='GDL-1994-05-19-a-i0037', type='ad', title='9 TheOpen University IN EUROPE', size=202, nbPages=1, pages=[Page(uid='GDL-1994-05-19-a-p0006', num=6, issueUid='GDL-1994-05-19-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1994-05-19-a-p0006', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1994-05-19-a-p0006/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='9 TheOpen University IN EUROPE The Open University offers a wide choice of 6-9 month individual courses, or a programme of courses leading to recognis', locations=[], persons=[Entity(uid='aida-0001-50-Ann_Williams_$28$historian$29$', relevance=1)], language='fr', issue=NewspaperIssue(uid='GDL-1994-05-19-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1994, 5, 19, 0, 0, tzinfo=TzInfo(UTC)), year='1994'), matches=[ArticleMatch(fragment=\" are over 18 and résident in the European Union you're eligible. Ail courses are taught in English. No\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1994-05-19-a-p0006', coords=[2983.0, 2894.0, 650.0, 2369.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1994-05-19-a-p0006/2983,2894,650,2369/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1994, 5, 19, 0, 0, tzinfo=TzInfo(UTC)), year=1994, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp01_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2308017.0, excerpt=[TopicWord(w='étage', p=0.08392, h=None), TopicWord(w='chambre', p=0.06676, h=None), TopicWord(w='cuisine', p=0.05488, h=None), TopicWord(w='suite', p=0.04608, h=None), TopicWord(w='bureau', p=0.03783, h=None)], words=[TopicWord(w='étage', p=0.08392, h=None), TopicWord(w='chambre', p=0.06676, h=None), TopicWord(w='cuisine', p=0.05488, h=None), TopicWord(w='suite', p=0.04608, h=None), TopicWord(w='bureau', p=0.03783, h=None), TopicWord(w='appartement', p=0.03348, h=None), TopicWord(w='logement', p=0.0324, h=None), TopicWord(w='soleil', p=0.03007, h=None), TopicWord(w='maison', p=0.02261, h=None), TopicWord(w='jardin', p=0.02008, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp01_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.038, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp31_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640853.0, excerpt=[TopicWord(w='construction', p=0.03015, h=None), TopicWord(w='route', p=0.02937, h=None), TopicWord(w='place', p=0.02313, h=None), TopicWord(w='projet', p=0.02165, h=None), TopicWord(w='ville', p=0.01895, h=None)], words=[TopicWord(w='construction', p=0.03015, h=None), TopicWord(w='route', p=0.02937, h=None), TopicWord(w='place', p=0.02313, h=None), TopicWord(w='projet', p=0.02165, h=None), TopicWord(w='ville', p=0.01895, h=None), TopicWord(w='plan', p=0.01628, h=None), TopicWord(w='circulation', p=0.01552, h=None), TopicWord(w='chantier', p=0.01536, h=None), TopicWord(w='zone', p=0.01286, h=None), TopicWord(w='trafic', p=0.01257, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp31_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp33_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1401413.0, excerpt=[TopicWord(w='gouvernement', p=0.03591, h=None), TopicWord(w='général', p=0.02096, h=None), TopicWord(w='ministre', p=0.01669, h=None), TopicWord(w='guerre', p=0.01627, h=None), TopicWord(w='ordre', p=0.00929, h=None)], words=[TopicWord(w='gouvernement', p=0.03591, h=None), TopicWord(w='général', p=0.02096, h=None), TopicWord(w='ministre', p=0.01669, h=None), TopicWord(w='guerre', p=0.01627, h=None), TopicWord(w='ordre', p=0.00929, h=None), TopicWord(w='dépêche', p=0.00928, h=None), TopicWord(w='ministère', p=0.00878, h=None), TopicWord(w='ville', p=0.00878, h=None), TopicWord(w='lord', p=0.0087, h=None), TopicWord(w='armée', p=0.00828, h=None)], model='tm-fr-all-v2.0'), relevance=0.038, topicUid='tm-fr-all-v2.0_tp33_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp64_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1683510.0, excerpt=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None)], words=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None), TopicWord(w='loi', p=0.01024, h=None), TopicWord(w='droit', p=0.00984, h=None), TopicWord(w='temps', p=0.00949, h=None), TopicWord(w='lieu', p=0.00876, h=None), TopicWord(w='moment', p=0.00798, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp64_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp78_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1563517.0, excerpt=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None)], words=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None), TopicWord(w='point', p=0.01016, h=None), TopicWord(w='temps', p=0.00958, h=None), TopicWord(w='progrès', p=0.0087, h=None), TopicWord(w='intérêt', p=0.00867, h=None), TopicWord(w='vue', p=0.00799, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp78_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp80_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1610579.0, excerpt=[TopicWord(w='livre', p=0.07557, h=None), TopicWord(w='auteur', p=0.02772, h=None), TopicWord(w='ouvrage', p=0.02676, h=None), TopicWord(w='histoire', p=0.02248, h=None), TopicWord(w='vol', p=0.01747, h=None)], words=[TopicWord(w='livre', p=0.07557, h=None), TopicWord(w='auteur', p=0.02772, h=None), TopicWord(w='ouvrage', p=0.02676, h=None), TopicWord(w='histoire', p=0.02248, h=None), TopicWord(w='vol', p=0.01747, h=None), TopicWord(w='volume', p=0.01722, h=None), TopicWord(w='texte', p=0.01653, h=None), TopicWord(w='édition', p=0.01473, h=None), TopicWord(w='professeur', p=0.01256, h=None), TopicWord(w='siècle', p=0.01174, h=None)], model='tm-fr-all-v2.0'), relevance=0.038, topicUid='tm-fr-all-v2.0_tp80_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp89_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1256154.0, excerpt=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None)], words=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None), TopicWord(w='dollar', p=0.01568, h=None), TopicWord(w='semaine', p=0.01509, h=None), TopicWord(w='mois', p=0.01249, h=None), TopicWord(w='indice', p=0.01047, h=None), TopicWord(w='intérêt', p=0.01027, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp89_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.116, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='luxland-1995-05-05-a-i0062', type='ar', title='Agenda', size=415, nbPages=1, pages=[Page(uid='luxland-1995-05-05-a-p0016', num=16, issueUid='luxland-1995-05-05-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Agenda Europa Grafica\" est une exposition qui visualise à travers une sélection d\\'affiches l\\'histoire de la construction européenne. Vous pouvez visit', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1), Entity(uid='aida-0001-54-Boden$2c$_Sweden', relevance=1), Entity(uid='aida-0001-54-Diego_Capel', relevance=1)], persons=[Entity(uid='aida-0001-50-Hubert_Clément', relevance=1), Entity(uid='aida-0001-50-Henri_Michaux', relevance=1), Entity(uid='aida-0001-50-Joe_Schneider', relevance=1), Entity(uid='aida-0001-50-Georges_Prêtre', relevance=1), Entity(uid='aida-0001-50-Felix_Mendelssohn', relevance=1), Entity(uid='aida-0001-50-Johannes_Brahms', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-1995-05-05-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 5, 5, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=\". Le Salon des critiques fermera ses portes le 4 juin. L 'European Union Youth Orchestra, sous la direction\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2718.0, 393.0, 281.0, 87.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2718,393,281,87/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2267.0, 603.0, 1172.0, 180.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2267,603,1172,180/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2267.0, 800.0, 1172.0, 183.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2267,800,1172,183/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2266.0, 999.0, 1174.0, 318.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2266,999,1174,318/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2268.0, 1333.0, 1174.0, 229.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2268,1333,1174,229/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2271.0, 1577.0, 1172.0, 181.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2271,1577,1172,181/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2270.0, 1776.0, 1176.0, 559.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2270,1776,1176,559/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2272.0, 2352.0, 1174.0, 213.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2272,2352,1174,213/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-05-05-a-p0016', coords=[2272.0, 2593.0, 1174.0, 265.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fz5mr3w%2fpages%2f16/2272,2593,1174,265/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1995, 5, 5, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp05_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1500624.0, excerpt=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None)], words=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None), TopicWord(w='sécurité', p=0.01062, h=None), TopicWord(w='gouvernement', p=0.01039, h=None), TopicWord(w='attentat', p=0.01015, h=None), TopicWord(w='chef', p=0.01009, h=None), TopicWord(w='ministre', p=0.00956, h=None)], model='tm-fr-all-v2.0'), relevance=0.326, topicUid='tm-fr-all-v2.0_tp05_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp14_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1321087.0, excerpt=[TopicWord(w='lieu', p=0.08174, h=None), TopicWord(w='part', p=0.07918, h=None), TopicWord(w='personne', p=0.03132, h=None), TopicWord(w='avis', p=0.03063, h=None), TopicWord(w='perte', p=0.03004, h=None)], words=[TopicWord(w='lieu', p=0.08174, h=None), TopicWord(w='part', p=0.07918, h=None), TopicWord(w='personne', p=0.03132, h=None), TopicWord(w='avis', p=0.03063, h=None), TopicWord(w='perte', p=0.03004, h=None), TopicWord(w='douleur', p=0.02651, h=None), TopicWord(w='lettre', p=0.02496, h=None), TopicWord(w='maladie', p=0.02348, h=None), TopicWord(w='enterrement', p=0.02174, h=None), TopicWord(w='âge', p=0.01983, h=None)], model='tm-fr-all-v2.0'), relevance=0.088, topicUid='tm-fr-all-v2.0_tp14_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp21_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1438992.0, excerpt=[TopicWord(w='famille', p=0.07889, h=None), TopicWord(w='part', p=0.07092, h=None), TopicWord(w='décès', p=0.05208, h=None), TopicWord(w='membre', p=0.05172, h=None), TopicWord(w='sympathie', p=0.03742, h=None)], words=[TopicWord(w='famille', p=0.07889, h=None), TopicWord(w='part', p=0.07092, h=None), TopicWord(w='décès', p=0.05208, h=None), TopicWord(w='membre', p=0.05172, h=None), TopicWord(w='sympathie', p=0.03742, h=None), TopicWord(w='deuil', p=0.0295, h=None), TopicWord(w='reconnaissance', p=0.0275, h=None), TopicWord(w='regret', p=0.02432, h=None), TopicWord(w='présence', p=0.02032, h=None), TopicWord(w='lieu', p=0.01773, h=None)], model='tm-fr-all-v2.0'), relevance=0.102, topicUid='tm-fr-all-v2.0_tp21_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.068, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp39_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1575967.0, excerpt=[TopicWord(w='emprunt', p=0.03244, h=None), TopicWord(w='conseil', p=0.02534, h=None), TopicWord(w='exercice', p=0.0235, h=None), TopicWord(w='administration', p=0.02093, h=None), TopicWord(w='capital', p=0.01927, h=None)], words=[TopicWord(w='emprunt', p=0.03244, h=None), TopicWord(w='conseil', p=0.02534, h=None), TopicWord(w='exercice', p=0.0235, h=None), TopicWord(w='administration', p=0.02093, h=None), TopicWord(w='capital', p=0.01927, h=None), TopicWord(w='suisse', p=0.01903, h=None), TopicWord(w='souscription', p=0.01886, h=None), TopicWord(w='dividende', p=0.01857, h=None), TopicWord(w='émission', p=0.01839, h=None), TopicWord(w='action', p=0.01816, h=None)], model='tm-fr-all-v2.0'), relevance=0.026, topicUid='tm-fr-all-v2.0_tp39_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp56_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1626587.0, excerpt=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None)], words=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None), TopicWord(w='commission', p=0.01335, h=None), TopicWord(w='projet', p=0.01329, h=None), TopicWord(w='séance', p=0.012, h=None), TopicWord(w='bâtiment', p=0.01082, h=None), TopicWord(w='terrain', p=0.0103, h=None)], model='tm-fr-all-v2.0'), relevance=0.05, topicUid='tm-fr-all-v2.0_tp56_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp59_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1584213.0, excerpt=[TopicWord(w='monde', p=0.02864, h=None), TopicWord(w='concours', p=0.02492, h=None), TopicWord(w='record', p=0.02188, h=None), TopicWord(w='sport', p=0.02012, h=None), TopicWord(w='suisse', p=0.01811, h=None)], words=[TopicWord(w='monde', p=0.02864, h=None), TopicWord(w='concours', p=0.02492, h=None), TopicWord(w='record', p=0.02188, h=None), TopicWord(w='sport', p=0.02012, h=None), TopicWord(w='suisse', p=0.01811, h=None), TopicWord(w='place', p=0.01681, h=None), TopicWord(w='min', p=0.01513, h=None), TopicWord(w='club', p=0.01491, h=None), TopicWord(w='course', p=0.01418, h=None), TopicWord(w='catégorie', p=0.0136, h=None)], model='tm-fr-all-v2.0'), relevance=0.029, topicUid='tm-fr-all-v2.0_tp59_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp85_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1662988.0, excerpt=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None)], words=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None), TopicWord(w='cœur', p=0.00964, h=None), TopicWord(w='âme', p=0.00906, h=None), TopicWord(w='amour', p=0.00874, h=None), TopicWord(w='temps', p=0.0084, h=None), TopicWord(w='force', p=0.00708, h=None)], model='tm-fr-all-v2.0'), relevance=0.07, topicUid='tm-fr-all-v2.0_tp85_fr')], content=None, mentions=[], v=None), Article(uid='GDL-1995-05-11-a-i0065', type='ad', title='• • * EAEME *', size=237, nbPages=1, pages=[Page(uid='GDL-1995-05-11-a-p0010', num=10, issueUid='GDL-1995-05-11-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='• • * EAEME * Européen Association for Environmental Managmenl Education eema Careers and Environment The Evolution of the Environmental Profession in', locations=[Entity(uid='aida-0001-54-Gare_de_Cornavin', relevance=4), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Lausanne', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Hines', relevance=1), Entity(uid='aida-0001-50-Rod_McLean', relevance=1)], language='fr', issue=NewspaperIssue(uid='GDL-1995-05-11-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 5, 11, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=' By the end of the décade, analysts estimate that 1 million jobs will be created within the European', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Union : But where will those jobs be ? What skills, expériences, and profiles will be Who Should Corne', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[421.0, 233.0, 1279.0, 188.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/421,233,1279,188/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[133.0, 517.0, 1883.0, 123.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/133,517,1883,123/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[192.0, 721.0, 1804.0, 421.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/192,721,1804,421/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[144.0, 1229.0, 1200.0, 604.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/144,1229,1200,604/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[1425.0, 1233.0, 600.0, 383.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/1425,1233,600,383/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[1454.0, 1660.0, 492.0, 110.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/1454,1660,492,110/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[171.0, 1842.0, 1825.0, 275.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/171,1842,1825,275/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[340.0, 2196.0, 1467.0, 192.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/340,2196,1467,192/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[167.0, 2475.0, 1808.0, 367.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/167,2475,1808,367/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[1300.0, 2890.0, 712.0, 75.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/1300,2890,712,75/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[144.0, 2900.0, 952.0, 71.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/144,2900,952,71/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1995-05-11-a-p0010', coords=[79.0, 188.0, 1996.0, 2831.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-05-11-a-p0010/79,188,1996,2831/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 5, 11, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.154, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp44_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1867218.0, excerpt=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None)], words=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None), TopicWord(w='vie', p=0.01484, h=None), TopicWord(w='travail', p=0.01312, h=None), TopicWord(w='moment', p=0.01181, h=None), TopicWord(w='monde', p=0.01174, h=None), TopicWord(w='besoin', p=0.0112, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp44_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp66_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1571023.0, excerpt=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None)], words=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None), TopicWord(w='fin', p=0.02265, h=None), TopicWord(w='période', p=0.01788, h=None), TopicWord(w='population', p=0.01769, h=None), TopicWord(w='chiffre', p=0.01678, h=None), TopicWord(w='cours', p=0.01543, h=None)], model='tm-fr-all-v2.0'), relevance=0.117, topicUid='tm-fr-all-v2.0_tp66_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1995-05-11-a-i0056', type='ad', title='DIVERS * EAEME * European', size=232, nbPages=1, pages=[Page(uid='JDG-1995-05-11-a-p0010', num=10, issueUid='JDG-1995-05-11-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1995-05-11-a-p0010', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1995-05-11-a-p0010/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='DIVERS * EAEME * European Association for Environmental Managment Education eema EUROPtAN tNVIRONMINTAl MANAGEMENT ASSOCIATION Careers and Environment', locations=[Entity(uid='aida-0001-54-Gare_de_Cornavin', relevance=4), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Lausanne', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Hines', relevance=1), Entity(uid='aida-0001-50-Don_McLean', relevance=1), Entity(uid='aida-0001-50-Ein_Kerem', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1995-05-11-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 5, 11, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=' 1 million jobs will be created within the European Union : But where will those jobs be ? What', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1995-05-11-a-p0010', coords=[62.0, 72.0, 1955.0, 2880.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1995-05-11-a-p0010/62,72,1955,2880/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 5, 11, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp06_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1198698.0, excerpt=[TopicWord(w='temps', p=0.06457, h=None), TopicWord(w='beau', p=0.0551, h=None), TopicWord(w='degré', p=0.03297, h=None), TopicWord(w='nord', p=0.02935, h=None), TopicWord(w='pluie', p=0.02832, h=None)], words=[TopicWord(w='temps', p=0.06457, h=None), TopicWord(w='beau', p=0.0551, h=None), TopicWord(w='degré', p=0.03297, h=None), TopicWord(w='nord', p=0.02935, h=None), TopicWord(w='pluie', p=0.02832, h=None), TopicWord(w='neige', p=0.02744, h=None), TopicWord(w='température', p=0.02679, h=None), TopicWord(w='ciel', p=0.02441, h=None), TopicWord(w='sud', p=0.02185, h=None), TopicWord(w='ouest', p=0.02127, h=None)], model='tm-fr-all-v2.0'), relevance=0.055, topicUid='tm-fr-all-v2.0_tp06_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.141, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp23_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1606303.0, excerpt=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None)], words=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None), TopicWord(w='maladie', p=0.02173, h=None), TopicWord(w='somme', p=0.0212, h=None), TopicWord(w='frais', p=0.01906, h=None), TopicWord(w='argent', p=0.01292, h=None), TopicWord(w='montant', p=0.01283, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp23_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp66_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1571023.0, excerpt=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None)], words=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None), TopicWord(w='fin', p=0.02265, h=None), TopicWord(w='période', p=0.01788, h=None), TopicWord(w='population', p=0.01769, h=None), TopicWord(w='chiffre', p=0.01678, h=None), TopicWord(w='cours', p=0.01543, h=None)], model='tm-fr-all-v2.0'), relevance=0.08, topicUid='tm-fr-all-v2.0_tp66_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1995-05-18-a-i0028', type='ad', title='• * * EAEME *', size=257, nbPages=1, pages=[Page(uid='JDG-1995-05-18-a-p0004', num=4, issueUid='JDG-1995-05-18-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1995-05-18-a-p0004', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1995-05-18-a-p0004/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='• * * EAEME * *• * European Association for Environmental M an ag ment Education eema EUROPIAN ENVIRONMENTAt MANAGEMENT ASSOCIATION Careers and Enviro', locations=[Entity(uid='aida-0001-54-Geneva', relevance=3), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Lausanne', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Hines', relevance=1), Entity(uid='aida-0001-50-Aaron_McLean', relevance=1), Entity(uid='aida-0001-50-Ein_Kerem', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1995-05-18-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 5, 18, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=' 1 million jobs will be created within the European Union : But where will those jobs be ? What', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1995-05-18-a-p0004', coords=[1370.0, 2330.0, 1920.0, 2728.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1995-05-18-a-p0004/1370,2330,1920,2728/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 5, 18, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.104, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp23_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1606303.0, excerpt=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None)], words=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None), TopicWord(w='maladie', p=0.02173, h=None), TopicWord(w='somme', p=0.0212, h=None), TopicWord(w='frais', p=0.01906, h=None), TopicWord(w='argent', p=0.01292, h=None), TopicWord(w='montant', p=0.01283, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp23_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp44_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1867218.0, excerpt=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None)], words=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None), TopicWord(w='vie', p=0.01484, h=None), TopicWord(w='travail', p=0.01312, h=None), TopicWord(w='moment', p=0.01181, h=None), TopicWord(w='monde', p=0.01174, h=None), TopicWord(w='besoin', p=0.0112, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp44_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp51_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2338465.0, excerpt=[TopicWord(w='service', p=0.04871, h=None), TopicWord(w='langue', p=0.02972, h=None), TopicWord(w='poste', p=0.02932, h=None), TopicWord(w='travail', p=0.02766, h=None), TopicWord(w='personnel', p=0.02702, h=None)], words=[TopicWord(w='service', p=0.04871, h=None), TopicWord(w='langue', p=0.02972, h=None), TopicWord(w='poste', p=0.02932, h=None), TopicWord(w='travail', p=0.02766, h=None), TopicWord(w='personnel', p=0.02702, h=None), TopicWord(w='allemand', p=0.02488, h=None), TopicWord(w='formation', p=0.01959, h=None), TopicWord(w='curriculum', p=0.01892, h=None), TopicWord(w='expérience', p=0.01562, h=None), TopicWord(w='anglais', p=0.01477, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp51_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp66_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1571023.0, excerpt=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None)], words=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None), TopicWord(w='fin', p=0.02265, h=None), TopicWord(w='période', p=0.01788, h=None), TopicWord(w='population', p=0.01769, h=None), TopicWord(w='chiffre', p=0.01678, h=None), TopicWord(w='cours', p=0.01543, h=None)], model='tm-fr-all-v2.0'), relevance=0.129, topicUid='tm-fr-all-v2.0_tp66_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp89_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1256154.0, excerpt=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None)], words=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None), TopicWord(w='dollar', p=0.01568, h=None), TopicWord(w='semaine', p=0.01509, h=None), TopicWord(w='mois', p=0.01249, h=None), TopicWord(w='indice', p=0.01047, h=None), TopicWord(w='intérêt', p=0.01027, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp89_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1995-06-02-a-i0094', type='ad', title='DIVERS * * EAEME *', size=251, nbPages=1, pages=[Page(uid='JDG-1995-06-02-a-p0018', num=18, issueUid='JDG-1995-06-02-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1995-06-02-a-p0018', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1995-06-02-a-p0018/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='DIVERS * * EAEME * Européen Association for Environmental Managment Education eema EUROPtAN fNVIRONMENTAL MANAGEMENT ASSOCIATION Careers and Environme', locations=[Entity(uid='aida-0001-54-Paddle_steamer_Genève', relevance=3), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Lausanne', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Hines', relevance=1), Entity(uid='aida-0001-50-Jan_McLean', relevance=1), Entity(uid='aida-0001-50-Ein_Kerem', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1995-06-02-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 6, 2, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=' 1 million jobs will be created within the European Union : But where will those jobs be ? What', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1995-06-02-a-p0018', coords=[165.0, 62.0, 1872.0, 3082.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1995-06-02-a-p0018/165,62,1872,3082/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 6, 2, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp06_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1198698.0, excerpt=[TopicWord(w='temps', p=0.06457, h=None), TopicWord(w='beau', p=0.0551, h=None), TopicWord(w='degré', p=0.03297, h=None), TopicWord(w='nord', p=0.02935, h=None), TopicWord(w='pluie', p=0.02832, h=None)], words=[TopicWord(w='temps', p=0.06457, h=None), TopicWord(w='beau', p=0.0551, h=None), TopicWord(w='degré', p=0.03297, h=None), TopicWord(w='nord', p=0.02935, h=None), TopicWord(w='pluie', p=0.02832, h=None), TopicWord(w='neige', p=0.02744, h=None), TopicWord(w='température', p=0.02679, h=None), TopicWord(w='ciel', p=0.02441, h=None), TopicWord(w='sud', p=0.02185, h=None), TopicWord(w='ouest', p=0.02127, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp06_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.129, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp44_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1867218.0, excerpt=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None)], words=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None), TopicWord(w='vie', p=0.01484, h=None), TopicWord(w='travail', p=0.01312, h=None), TopicWord(w='moment', p=0.01181, h=None), TopicWord(w='monde', p=0.01174, h=None), TopicWord(w='besoin', p=0.0112, h=None)], model='tm-fr-all-v2.0'), relevance=0.055, topicUid='tm-fr-all-v2.0_tp44_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp66_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1571023.0, excerpt=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None)], words=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None), TopicWord(w='fin', p=0.02265, h=None), TopicWord(w='période', p=0.01788, h=None), TopicWord(w='population', p=0.01769, h=None), TopicWord(w='chiffre', p=0.01678, h=None), TopicWord(w='cours', p=0.01543, h=None)], model='tm-fr-all-v2.0'), relevance=0.154, topicUid='tm-fr-all-v2.0_tp66_fr')], content=None, mentions=[], v=None), Article(uid='GDL-1995-06-02-a-i0134', type='ad', title='• • * EAEME *', size=267, nbPages=1, pages=[Page(uid='GDL-1995-06-02-a-p0018', num=18, issueUid='GDL-1995-06-02-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1995-06-02-a-p0018', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1995-06-02-a-p0018/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='• • * EAEME * Européen Association for Environmental Managmenl Education eema EUROPtAN ENVIRONMINTAL MANAGEMENT ASSOCIATION Careers and Environment Th', locations=[Entity(uid='aida-0001-54-Geneva', relevance=4), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Lausanne', relevance=1), Entity(uid='aida-0001-54-Massa', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Hines', relevance=1), Entity(uid='aida-0001-50-Rod_McLean', relevance=1), Entity(uid='aida-0001-50-Ein_Kerem', relevance=1)], language='fr', issue=NewspaperIssue(uid='GDL-1995-06-02-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 6, 2, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=' 1 million jobs will be created within the European Union : But where will those jobs be ? What', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1995-06-02-a-p0018', coords=[121.0, 233.0, 1985.0, 2823.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-06-02-a-p0018/121,233,1985,2823/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 6, 2, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.178, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp66_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1571023.0, excerpt=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None)], words=[TopicWord(w='année', p=0.07471, h=None), TopicWord(w='nombre', p=0.04433, h=None), TopicWord(w='mois', p=0.0405, h=None), TopicWord(w='rapport', p=0.0378, h=None), TopicWord(w='augmentation', p=0.02949, h=None), TopicWord(w='fin', p=0.02265, h=None), TopicWord(w='période', p=0.01788, h=None), TopicWord(w='population', p=0.01769, h=None), TopicWord(w='chiffre', p=0.01678, h=None), TopicWord(w='cours', p=0.01543, h=None)], model='tm-fr-all-v2.0'), relevance=0.154, topicUid='tm-fr-all-v2.0_tp66_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp89_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1256154.0, excerpt=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None)], words=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None), TopicWord(w='dollar', p=0.01568, h=None), TopicWord(w='semaine', p=0.01509, h=None), TopicWord(w='mois', p=0.01249, h=None), TopicWord(w='indice', p=0.01047, h=None), TopicWord(w='intérêt', p=0.01027, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp89_fr')], content=None, mentions=[], v=None), Article(uid='GDL-1995-06-07-a-i0039', type='ad', title='PUBLICITE The Open University offers', size=145, nbPages=1, pages=[Page(uid='GDL-1995-06-07-a-p0008', num=8, issueUid='GDL-1995-06-07-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1995-06-07-a-p0008', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1995-06-07-a-p0008/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='PUBLICITE The Open University offers a wide choice of 6-9 month individual courses, or a programme of courses leading to recognised qualifications-BA,', locations=[], persons=[Entity(uid='aida-0001-50-Geneva_Cubs', relevance=1), Entity(uid='aida-0001-50-Margaret_Johnson', relevance=1)], language='fr', issue=NewspaperIssue(uid='GDL-1995-06-07-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 6, 7, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=\" résident in the European Union you're eligible. Ail courses are taught in English. No previous\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1995-06-07-a-p0008', coords=[2165.0, 3906.0, 1329.0, 1273.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1995-06-07-a-p0008/2165,3906,1329,1273/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 6, 7, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.032, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp33_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1401413.0, excerpt=[TopicWord(w='gouvernement', p=0.03591, h=None), TopicWord(w='général', p=0.02096, h=None), TopicWord(w='ministre', p=0.01669, h=None), TopicWord(w='guerre', p=0.01627, h=None), TopicWord(w='ordre', p=0.00929, h=None)], words=[TopicWord(w='gouvernement', p=0.03591, h=None), TopicWord(w='général', p=0.02096, h=None), TopicWord(w='ministre', p=0.01669, h=None), TopicWord(w='guerre', p=0.01627, h=None), TopicWord(w='ordre', p=0.00929, h=None), TopicWord(w='dépêche', p=0.00928, h=None), TopicWord(w='ministère', p=0.00878, h=None), TopicWord(w='ville', p=0.00878, h=None), TopicWord(w='lord', p=0.0087, h=None), TopicWord(w='armée', p=0.00828, h=None)], model='tm-fr-all-v2.0'), relevance=0.032, topicUid='tm-fr-all-v2.0_tp33_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp58_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1235115.0, excerpt=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None)], words=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None), TopicWord(w='ben', p=0.02048, h=None), TopicWord(w='con', p=0.01486, h=None), TopicWord(w='ion', p=0.01387, h=None), TopicWord(w='aber', p=0.01239, h=None), TopicWord(w='welche', p=0.01154, h=None)], model='tm-fr-all-v2.0'), relevance=0.152, topicUid='tm-fr-all-v2.0_tp58_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.032, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp77_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1703125.0, excerpt=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None)], words=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None), TopicWord(w='émission', p=0.01199, h=None), TopicWord(w='appareil', p=0.01075, h=None), TopicWord(w='écran', p=0.01009, h=None), TopicWord(w='service', p=0.00915, h=None), TopicWord(w='information', p=0.00913, h=None)], model='tm-fr-all-v2.0'), relevance=0.18, topicUid='tm-fr-all-v2.0_tp77_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp81_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1605619.0, excerpt=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None)], words=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None), TopicWord(w='presse', p=0.03395, h=None), TopicWord(w='suisse', p=0.02137, h=None), TopicWord(w='temps', p=0.01813, h=None), TopicWord(w='semaine', p=0.01605, h=None), TopicWord(w='sport', p=0.01534, h=None)], model='tm-fr-all-v2.0'), relevance=0.032, topicUid='tm-fr-all-v2.0_tp81_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp87_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1457781.0, excerpt=[TopicWord(w='problème', p=0.01207, h=None), TopicWord(w='fait', p=0.01119, h=None), TopicWord(w='question', p=0.0103, h=None), TopicWord(w='exemple', p=0.01004, h=None), TopicWord(w='monde', p=0.00982, h=None)], words=[TopicWord(w='problème', p=0.01207, h=None), TopicWord(w='fait', p=0.01119, h=None), TopicWord(w='question', p=0.0103, h=None), TopicWord(w='exemple', p=0.01004, h=None), TopicWord(w='monde', p=0.00982, h=None), TopicWord(w='cas', p=0.00919, h=None), TopicWord(w='système', p=0.00893, h=None), TopicWord(w='politique', p=0.00787, h=None), TopicWord(w='temps', p=0.00767, h=None), TopicWord(w='société', p=0.00713, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp87_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp95_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1425409.0, excerpt=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None)], words=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None), TopicWord(w='recours', p=0.01317, h=None), TopicWord(w='art', p=0.01269, h=None), TopicWord(w='vigueur', p=0.01123, h=None), TopicWord(w='projet', p=0.0108, h=None), TopicWord(w='décision', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp95_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1995-06-07-a-i0039', type='ad', title='PUBLICITE TïïeOpen University IN EUROPE', size=149, nbPages=1, pages=[Page(uid='JDG-1995-06-07-a-p0008', num=8, issueUid='JDG-1995-06-07-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1995-06-07-a-p0008', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1995-06-07-a-p0008/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='PUBLICITE TïïeOpen University IN EUROPE The Open University offers a wide choice of 6-9 month individual courses, or a programme of courses leading to', locations=[], persons=[Entity(uid='aida-0001-50-Geneva_Cubs', relevance=1), Entity(uid='aida-0001-50-Margaret_Johnson', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1995-06-07-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 6, 7, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=\" MA. If you are over 18 and résident in the European Union you're eligible. AU courses are taught in\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1995-06-07-a-p0008', coords=[2088.0, 3780.0, 1258.0, 1215.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1995-06-07-a-p0008/2088,3780,1258,1215/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 6, 7, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.035, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp43_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1940529.0, excerpt=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None)], words=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None), TopicWord(w='viande', p=0.01298, h=None), TopicWord(w='sucre', p=0.0121, h=None), TopicWord(w='lait', p=0.01183, h=None), TopicWord(w='litre', p=0.0116, h=None), TopicWord(w='verre', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.045, topicUid='tm-fr-all-v2.0_tp43_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp58_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1235115.0, excerpt=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None)], words=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None), TopicWord(w='ben', p=0.02048, h=None), TopicWord(w='con', p=0.01486, h=None), TopicWord(w='ion', p=0.01387, h=None), TopicWord(w='aber', p=0.01239, h=None), TopicWord(w='welche', p=0.01154, h=None)], model='tm-fr-all-v2.0'), relevance=0.035, topicUid='tm-fr-all-v2.0_tp58_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp77_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1703125.0, excerpt=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None)], words=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None), TopicWord(w='émission', p=0.01199, h=None), TopicWord(w='appareil', p=0.01075, h=None), TopicWord(w='écran', p=0.01009, h=None), TopicWord(w='service', p=0.00915, h=None), TopicWord(w='information', p=0.00913, h=None)], model='tm-fr-all-v2.0'), relevance=0.338, topicUid='tm-fr-all-v2.0_tp77_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp93_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2363988.0, excerpt=[TopicWord(w='état', p=0.04465, h=None), TopicWord(w='lit', p=0.03999, h=None), TopicWord(w='bureau', p=0.03427, h=None), TopicWord(w='table', p=0.02974, h=None), TopicWord(w='bois', p=0.02027, h=None)], words=[TopicWord(w='état', p=0.04465, h=None), TopicWord(w='lit', p=0.03999, h=None), TopicWord(w='bureau', p=0.03427, h=None), TopicWord(w='table', p=0.02974, h=None), TopicWord(w='bois', p=0.02027, h=None), TopicWord(w='étage', p=0.01647, h=None), TopicWord(w='glace', p=0.01441, h=None), TopicWord(w='place', p=0.01416, h=None), TopicWord(w='occasion', p=0.01319, h=None), TopicWord(w='machine', p=0.01151, h=None)], model='tm-fr-all-v2.0'), relevance=0.025, topicUid='tm-fr-all-v2.0_tp93_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1995-10-17-a-i0244', type='ad', title='THE EFTA COURT FINANCIAL AND', size=254, nbPages=1, pages=[Page(uid='JDG-1995-10-17-a-p0039', num=39, issueUid='JDG-1995-10-17-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1995-10-17-a-p0039', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1995-10-17-a-p0039/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='THE EFTA COURT FINANCIAL AND ADMINISTRATIVE OFFICER The EFTA Couil is established under thé EEA Agreement between thé European Union and EFTA States w', locations=[Entity(uid='aida-0001-54-Iceland', relevance=1), Entity(uid='aida-0001-54-Norway', relevance=1), Entity(uid='aida-0001-54-Luxembourg', relevance=2), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Gare_de_Cornavin', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='JDG-1995-10-17-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 10, 17, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=' Agreement between thé European Union and EFTA States with Iceland. Liechtensteinand Norway as participating', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1995-10-17-a-p0039', coords=[588.0, 1423.0, 1043.0, 1025.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1995-10-17-a-p0039/588,1423,1043,1025/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1995, 10, 17, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.22, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp39_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1575967.0, excerpt=[TopicWord(w='emprunt', p=0.03244, h=None), TopicWord(w='conseil', p=0.02534, h=None), TopicWord(w='exercice', p=0.0235, h=None), TopicWord(w='administration', p=0.02093, h=None), TopicWord(w='capital', p=0.01927, h=None)], words=[TopicWord(w='emprunt', p=0.03244, h=None), TopicWord(w='conseil', p=0.02534, h=None), TopicWord(w='exercice', p=0.0235, h=None), TopicWord(w='administration', p=0.02093, h=None), TopicWord(w='capital', p=0.01927, h=None), TopicWord(w='suisse', p=0.01903, h=None), TopicWord(w='souscription', p=0.01886, h=None), TopicWord(w='dividende', p=0.01857, h=None), TopicWord(w='émission', p=0.01839, h=None), TopicWord(w='action', p=0.01816, h=None)], model='tm-fr-all-v2.0'), relevance=0.029, topicUid='tm-fr-all-v2.0_tp39_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp43_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1940529.0, excerpt=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None)], words=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None), TopicWord(w='viande', p=0.01298, h=None), TopicWord(w='sucre', p=0.0121, h=None), TopicWord(w='lait', p=0.01183, h=None), TopicWord(w='litre', p=0.0116, h=None), TopicWord(w='verre', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.202, topicUid='tm-fr-all-v2.0_tp43_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp51_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2338465.0, excerpt=[TopicWord(w='service', p=0.04871, h=None), TopicWord(w='langue', p=0.02972, h=None), TopicWord(w='poste', p=0.02932, h=None), TopicWord(w='travail', p=0.02766, h=None), TopicWord(w='personnel', p=0.02702, h=None)], words=[TopicWord(w='service', p=0.04871, h=None), TopicWord(w='langue', p=0.02972, h=None), TopicWord(w='poste', p=0.02932, h=None), TopicWord(w='travail', p=0.02766, h=None), TopicWord(w='personnel', p=0.02702, h=None), TopicWord(w='allemand', p=0.02488, h=None), TopicWord(w='formation', p=0.01959, h=None), TopicWord(w='curriculum', p=0.01892, h=None), TopicWord(w='expérience', p=0.01562, h=None), TopicWord(w='anglais', p=0.01477, h=None)], model='tm-fr-all-v2.0'), relevance=0.14, topicUid='tm-fr-all-v2.0_tp51_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp58_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1235115.0, excerpt=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None)], words=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None), TopicWord(w='ben', p=0.02048, h=None), TopicWord(w='con', p=0.01486, h=None), TopicWord(w='ion', p=0.01387, h=None), TopicWord(w='aber', p=0.01239, h=None), TopicWord(w='welche', p=0.01154, h=None)], model='tm-fr-all-v2.0'), relevance=0.024, topicUid='tm-fr-all-v2.0_tp58_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp73_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1357255.0, excerpt=[TopicWord(w='film', p=0.10021, h=None), TopicWord(w='cinéma', p=0.03117, h=None), TopicWord(w='semaine', p=0.02984, h=None), TopicWord(w='jean', p=0.02469, h=None), TopicWord(w='john', p=0.01933, h=None)], words=[TopicWord(w='film', p=0.10021, h=None), TopicWord(w='cinéma', p=0.03117, h=None), TopicWord(w='semaine', p=0.02984, h=None), TopicWord(w='jean', p=0.02469, h=None), TopicWord(w='john', p=0.01933, h=None), TopicWord(w='histoire', p=0.01377, h=None), TopicWord(w='vision', p=0.01005, h=None), TopicWord(w='vie', p=0.00992, h=None), TopicWord(w='séance', p=0.00988, h=None), TopicWord(w='monde', p=0.00951, h=None)], model='tm-fr-all-v2.0'), relevance=0.029, topicUid='tm-fr-all-v2.0_tp73_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp83_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1564738.0, excerpt=[TopicWord(w='conseil', p=0.1486, h=None), TopicWord(w='président', p=0.05418, h=None), TopicWord(w='conseiller', p=0.05092, h=None), TopicWord(w='directeur', p=0.0414, h=None), TopicWord(w='chef', p=0.03069, h=None)], words=[TopicWord(w='conseil', p=0.1486, h=None), TopicWord(w='président', p=0.05418, h=None), TopicWord(w='conseiller', p=0.05092, h=None), TopicWord(w='directeur', p=0.0414, h=None), TopicWord(w='chef', p=0.03069, h=None), TopicWord(w='membre', p=0.0299, h=None), TopicWord(w='administration', p=0.02516, h=None), TopicWord(w='député', p=0.01776, h=None), TopicWord(w='commission', p=0.0173, h=None), TopicWord(w='canton', p=0.01676, h=None)], model='tm-fr-all-v2.0'), relevance=0.024, topicUid='tm-fr-all-v2.0_tp83_fr')], content=None, mentions=[], v=None), Article(uid='luxland-1995-11-10-a-i0058', type='ar', title='Agenda', size=743, nbPages=1, pages=[Page(uid='luxland-1995-11-10-a-p0015', num=15, issueUid='luxland-1995-11-10-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f6d4bwc%2fpages%2f15/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f6d4bwc%2fpages%2f15/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Agenda Main Stations ( 11 novembre 1995 — 3 mars 1996) est la dernière exposition au Casino Luxembourg dans le cadre de cette année culturelle. Mais e', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=4), Entity(uid='aida-0001-54-Paris', relevance=1), Entity(uid='aida-0001-54-Auch', relevance=2), Entity(uid='aida-0001-54-Palermo', relevance=1), Entity(uid='aida-0001-54-Marseille', relevance=1), Entity(uid='aida-0001-54-Turin', relevance=1), Entity(uid='aida-0001-54-Ottawa', relevance=1), Entity(uid='aida-0001-54-Chypre', relevance=1)], persons=[Entity(uid='aida-0001-50-Marcel_Broodthaers', relevance=1), Entity(uid='aida-0001-50-Jasper_Wilson_Johns', relevance=1), Entity(uid='aida-0001-50-Yves_Klein', relevance=1), Entity(uid='aida-0001-50-Jannis_Kounellis', relevance=1), Entity(uid='aida-0001-50-Sol_LeWitt', relevance=1), Entity(uid='aida-0001-50-Bruce_Nauman', relevance=1), Entity(uid='aida-0001-50-Barnett_Newman', relevance=1), Entity(uid='aida-0001-50-Jackson_Pollock', relevance=1), Entity(uid='aida-0001-50-Robert_Ryman', relevance=1), Entity(uid='aida-0001-50-Frank_Stella', relevance=1), Entity(uid='aida-0001-50-Andy_Warhol_$28$song$29$', relevance=1), Entity(uid='aida-0001-50-Foissy', relevance=1), Entity(uid='aida-0001-50-Frédéric_Chopin', relevance=1), Entity(uid='aida-0001-50-Alexander_Scriabin', relevance=1), Entity(uid='aida-0001-50-Henry_Purcell', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-1995-11-10-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1995, 11, 10, 0, 0, tzinfo=TzInfo(UTC)), year='1995'), matches=[ArticleMatch(fragment=\". Le conservatoire de Luxembourg accueillera pour un concert l'European Union Baroque Orchestra, un ensemble\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1995-11-10-a-p0015', coords=[2541.0, 342.0, 282.0, 87.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f6d4bwc%2fpages%2f15/2541,342,282,87/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1995-11-10-a-p0015', coords=[2072.0, 536.0, 1220.0, 3500.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f6d4bwc%2fpages%2f15/2072,536,1220,3500/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1995, 11, 10, 0, 0, tzinfo=TzInfo(UTC)), year=1995, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp05_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1500624.0, excerpt=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None)], words=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None), TopicWord(w='sécurité', p=0.01062, h=None), TopicWord(w='gouvernement', p=0.01039, h=None), TopicWord(w='attentat', p=0.01015, h=None), TopicWord(w='chef', p=0.01009, h=None), TopicWord(w='ministre', p=0.00956, h=None)], model='tm-fr-all-v2.0'), relevance=0.333, topicUid='tm-fr-all-v2.0_tp05_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp14_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1321087.0, excerpt=[TopicWord(w='lieu', p=0.08174, h=None), TopicWord(w='part', p=0.07918, h=None), TopicWord(w='personne', p=0.03132, h=None), TopicWord(w='avis', p=0.03063, h=None), TopicWord(w='perte', p=0.03004, h=None)], words=[TopicWord(w='lieu', p=0.08174, h=None), TopicWord(w='part', p=0.07918, h=None), TopicWord(w='personne', p=0.03132, h=None), TopicWord(w='avis', p=0.03063, h=None), TopicWord(w='perte', p=0.03004, h=None), TopicWord(w='douleur', p=0.02651, h=None), TopicWord(w='lettre', p=0.02496, h=None), TopicWord(w='maladie', p=0.02348, h=None), TopicWord(w='enterrement', p=0.02174, h=None), TopicWord(w='âge', p=0.01983, h=None)], model='tm-fr-all-v2.0'), relevance=0.067, topicUid='tm-fr-all-v2.0_tp14_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp21_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1438992.0, excerpt=[TopicWord(w='famille', p=0.07889, h=None), TopicWord(w='part', p=0.07092, h=None), TopicWord(w='décès', p=0.05208, h=None), TopicWord(w='membre', p=0.05172, h=None), TopicWord(w='sympathie', p=0.03742, h=None)], words=[TopicWord(w='famille', p=0.07889, h=None), TopicWord(w='part', p=0.07092, h=None), TopicWord(w='décès', p=0.05208, h=None), TopicWord(w='membre', p=0.05172, h=None), TopicWord(w='sympathie', p=0.03742, h=None), TopicWord(w='deuil', p=0.0295, h=None), TopicWord(w='reconnaissance', p=0.0275, h=None), TopicWord(w='regret', p=0.02432, h=None), TopicWord(w='présence', p=0.02032, h=None), TopicWord(w='lieu', p=0.01773, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp21_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp56_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1626587.0, excerpt=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None)], words=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None), TopicWord(w='commission', p=0.01335, h=None), TopicWord(w='projet', p=0.01329, h=None), TopicWord(w='séance', p=0.012, h=None), TopicWord(w='bâtiment', p=0.01082, h=None), TopicWord(w='terrain', p=0.0103, h=None)], model='tm-fr-all-v2.0'), relevance=0.217, topicUid='tm-fr-all-v2.0_tp56_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp64_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1683510.0, excerpt=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None)], words=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None), TopicWord(w='loi', p=0.01024, h=None), TopicWord(w='droit', p=0.00984, h=None), TopicWord(w='temps', p=0.00949, h=None), TopicWord(w='lieu', p=0.00876, h=None), TopicWord(w='moment', p=0.00798, h=None)], model='tm-fr-all-v2.0'), relevance=0.262, topicUid='tm-fr-all-v2.0_tp64_fr')], content=None, mentions=[], v=None), Article(uid='LLE-1996-08-03-a-i0157', type='ar', title='ESPACE 2', size=177, nbPages=1, pages=[Page(uid='LLE-1996-08-03-a-p0023', num=23, issueUid='LLE-1996-08-03-a', newspaperUid='LLE', iiif='https://impresso-project.ch/api/proxy/iiif/LLE-1996-08-03-a-p0023', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/LLE-1996-08-03-a-p0023/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='ESPACE 2 6 . 10 Ballades . 9 . 10 Longtemps , je me suis levé de bonne heure . Tôt le matin , bruits et chuchotements . 12 . 30 Mémoire retrouvée . Ja', locations=[Entity(uid='aida-0001-54-Paris', relevance=1)], persons=[Entity(uid='aida-0001-50-Jane_Berbié', relevance=1), Entity(uid='aida-0001-50-K.F.C._Rhodienne-Verrewinkel', relevance=1), Entity(uid='aida-0001-50-Colin_Davis', relevance=1), Entity(uid='aida-0001-50-Don_Giovanni', relevance=1), Entity(uid='aida-0001-50-Charles_Burney', relevance=1)], language='fr', issue=NewspaperIssue(uid='LLE-1996-08-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year='1996'), matches=[ArticleMatch(fragment=' du Royal Albert Hall à Londres . European Union Youth Orchestra . Direction : Sir Colin Davis . Strauss', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='LLE-1996-08-03-a-p0023', coords=[117.0, 1477.0, 254.0, 60.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-1996-08-03-a-p0023/117,1477,254,60/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-1996-08-03-a-p0023', coords=[111.0, 1594.0, 506.0, 389.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-1996-08-03-a-p0023/111,1594,506,389/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-1996-08-03-a-p0023', coords=[109.0, 1991.0, 511.0, 274.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-1996-08-03-a-p0023/109,1991,511,274/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-1996-08-03-a-p0023', coords=[109.0, 2271.0, 511.0, 357.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-1996-08-03-a-p0023/109,2271,511,357/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year=1996, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='LLE', acronym='LLE', labels=['newspaper'], languages=['fr'], properties=[], included=True, name='La Liberté', endYear=2018, startYear=1871, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=147), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp24_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1922664.0, excerpt=[TopicWord(w='fête', p=0.03229, h=None), TopicWord(w='samedi', p=0.02619, h=None), TopicWord(w='année', p=0.02363, h=None), TopicWord(w='manifestation', p=0.02016, h=None), TopicWord(w='dimanche', p=0.01661, h=None)], words=[TopicWord(w='fête', p=0.03229, h=None), TopicWord(w='samedi', p=0.02619, h=None), TopicWord(w='année', p=0.02363, h=None), TopicWord(w='manifestation', p=0.02016, h=None), TopicWord(w='dimanche', p=0.01661, h=None), TopicWord(w='soirée', p=0.01555, h=None), TopicWord(w='place', p=0.01443, h=None), TopicWord(w='occasion', p=0.01438, h=None), TopicWord(w='lieu', p=0.01434, h=None), TopicWord(w='club', p=0.01347, h=None)], model='tm-fr-all-v2.0'), relevance=0.06, topicUid='tm-fr-all-v2.0_tp24_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.097, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp28_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1319653.0, excerpt=[TopicWord(w='pape', p=0.02366, h=None), TopicWord(w='foi', p=0.02014, h=None), TopicWord(w='saint', p=0.02001, h=None), TopicWord(w='cardinal', p=0.0175, h=None), TopicWord(w='abbé', p=0.0168, h=None)], words=[TopicWord(w='pape', p=0.02366, h=None), TopicWord(w='foi', p=0.02014, h=None), TopicWord(w='saint', p=0.02001, h=None), TopicWord(w='cardinal', p=0.0175, h=None), TopicWord(w='abbé', p=0.0168, h=None), TopicWord(w='curé', p=0.01659, h=None), TopicWord(w='évêque', p=0.0142, h=None), TopicWord(w='religion', p=0.01318, h=None), TopicWord(w='église', p=0.0114, h=None), TopicWord(w='prêtre', p=0.01113, h=None)], model='tm-fr-all-v2.0'), relevance=0.097, topicUid='tm-fr-all-v2.0_tp28_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.05, topicUid='tm-fr-all-v2.0_tp71_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp78_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1563517.0, excerpt=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None)], words=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None), TopicWord(w='point', p=0.01016, h=None), TopicWord(w='temps', p=0.00958, h=None), TopicWord(w='progrès', p=0.0087, h=None), TopicWord(w='intérêt', p=0.00867, h=None), TopicWord(w='vue', p=0.00799, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp78_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp81_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1605619.0, excerpt=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None)], words=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None), TopicWord(w='presse', p=0.03395, h=None), TopicWord(w='suisse', p=0.02137, h=None), TopicWord(w='temps', p=0.01813, h=None), TopicWord(w='semaine', p=0.01605, h=None), TopicWord(w='sport', p=0.01534, h=None)], model='tm-fr-all-v2.0'), relevance=0.134, topicUid='tm-fr-all-v2.0_tp81_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp88_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1178696.0, excerpt=[TopicWord(w='conseil', p=0.05508, h=None), TopicWord(w='initiative', p=0.04484, h=None), TopicWord(w='loi', p=0.03003, h=None), TopicWord(w='peuple', p=0.02706, h=None), TopicWord(w='projet', p=0.02699, h=None)], words=[TopicWord(w='conseil', p=0.05508, h=None), TopicWord(w='initiative', p=0.04484, h=None), TopicWord(w='loi', p=0.03003, h=None), TopicWord(w='peuple', p=0.02706, h=None), TopicWord(w='projet', p=0.02699, h=None), TopicWord(w='canton', p=0.0237, h=None), TopicWord(w='vote', p=0.02073, h=None), TopicWord(w='référendum', p=0.01542, h=None), TopicWord(w='droit', p=0.0154, h=None), TopicWord(w='oui', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp88_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp96_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1247267.0, excerpt=[TopicWord(w='musique', p=0.04948, h=None), TopicWord(w='concert', p=0.03657, h=None), TopicWord(w='piano', p=0.01844, h=None), TopicWord(w='orchestre', p=0.01786, h=None), TopicWord(w='programme', p=0.01492, h=None)], words=[TopicWord(w='musique', p=0.04948, h=None), TopicWord(w='concert', p=0.03657, h=None), TopicWord(w='piano', p=0.01844, h=None), TopicWord(w='orchestre', p=0.01786, h=None), TopicWord(w='programme', p=0.01492, h=None), TopicWord(w='public', p=0.01185, h=None), TopicWord(w='soir', p=0.01146, h=None), TopicWord(w='voix', p=0.01121, h=None), TopicWord(w='chœur', p=0.01042, h=None), TopicWord(w='chant', p=0.01009, h=None)], model='tm-fr-all-v2.0'), relevance=0.041, topicUid='tm-fr-all-v2.0_tp96_fr')], content=None, mentions=[], v=None), Article(uid='IMP-1996-08-03-a-i0188', type='ar', title='<^ _£ P La Première', size=265, nbPages=1, pages=[Page(uid='IMP-1996-08-03-a-p0019', num=19, issueUid='IMP-1996-08-03-a', newspaperUid='IMP', iiif='https://impresso-project.ch/api/proxy/iiif/IMP-1996-08-03-a-p0019', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/IMP-1996-08-03-a-p0019/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"<^ _£ P La Première 7.50 Journal des sports. 8.13 La presse romande. 8.19 Com' des bêtes. 8.24 Altitude. 8.41 La 5 e rangée. 8.45 Les scènes de l'été.\", locations=[Entity(uid='aida-0001-54-Suisse$2c$_Moselle', relevance=2)], persons=[Entity(uid='aida-0001-50-Rudy_Marconi', relevance=1), Entity(uid='aida-0001-50-Charles_Burney', relevance=1)], language='fr', issue=NewspaperIssue(uid='IMP-1996-08-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year='1996'), matches=[ArticleMatch(fragment='. En direct du Royal Albert Hall : European Union Youth Orchestra. Oeuvres de Strauss, Elgar, Sibelius. 22.30', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='IMP-1996-08-03-a-p0019', coords=[102.0, 4608.0, 623.0, 775.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-1996-08-03-a-p0019/102,4608,623,775/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-1996-08-03-a-p0019', coords=[725.0, 4608.0, 579.0, 775.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-1996-08-03-a-p0019/725,4608,579,775/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-1996-08-03-a-p0019', coords=[1304.0, 4608.0, 583.0, 775.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-1996-08-03-a-p0019/1304,4608,583,775/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year=1996, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='IMP', acronym='IMP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Impartial\", endYear=2018, startYear=1881, firstIssue=NewspaperIssue(uid='IMP-1881-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1881, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1881'), lastIssue=NewspaperIssue(uid='IMP-2018-01-22-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2018, 1, 22, 0, 0, tzinfo=TzInfo(UTC)), year='2018'), countArticles=7103161, countIssues=40228, countPages=756672, fetched=True, deltaYear=137), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.408, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp63_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1574104.0, excerpt=[TopicWord(w='groupe', p=0.06533, h=None), TopicWord(w='société', p=0.05334, h=None), TopicWord(w='entreprise', p=0.02533, h=None), TopicWord(w='chiffre', p=0.01945, h=None), TopicWord(w='marché', p=0.01576, h=None)], words=[TopicWord(w='groupe', p=0.06533, h=None), TopicWord(w='société', p=0.05334, h=None), TopicWord(w='entreprise', p=0.02533, h=None), TopicWord(w='chiffre', p=0.01945, h=None), TopicWord(w='marché', p=0.01576, h=None), TopicWord(w='bénéfice', p=0.01539, h=None), TopicWord(w='banque', p=0.014, h=None), TopicWord(w='année', p=0.01386, h=None), TopicWord(w='capital', p=0.01082, h=None), TopicWord(w='direction', p=0.0106, h=None)], model='tm-fr-all-v2.0'), relevance=0.036, topicUid='tm-fr-all-v2.0_tp63_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp65_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2003191.0, excerpt=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None)], words=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None), TopicWord(w='octobre', p=0.02288, h=None), TopicWord(w='lieu', p=0.0211, h=None), TopicWord(w='fin', p=0.0142, h=None), TopicWord(w='mai', p=0.01199, h=None), TopicWord(w='date', p=0.01139, h=None)], model='tm-fr-all-v2.0'), relevance=0.326, topicUid='tm-fr-all-v2.0_tp65_fr')], content=None, mentions=[], v=None), Article(uid='EXP-1996-08-03-a-i0211', type='ar', title='i _*** —rr ~~ _~', size=265, nbPages=1, pages=[Page(uid='EXP-1996-08-03-a-p0026', num=26, issueUid='EXP-1996-08-03-a', newspaperUid='EXP', iiif='https://impresso-project.ch/api/proxy/iiif/EXP-1996-08-03-a-p0026', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/EXP-1996-08-03-a-p0026/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"i _*** —rr ~~ _~ _A _ _& La Première 7.50 Journal des sports. 8.13 La presse romande. 8.19 Com' des bêtes. 8.24 Altitude. 8.41 La 5 e rangée. 8.45 Les\", locations=[Entity(uid='aida-0001-54-Suisse$2c$_Moselle', relevance=2)], persons=[Entity(uid='aida-0001-50-Rudy_Marconi', relevance=1), Entity(uid='aida-0001-50-Charles_Burney', relevance=1)], language='fr', issue=NewspaperIssue(uid='EXP-1996-08-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year='1996'), matches=[ArticleMatch(fragment=' Promenade, Londres .- En direct du Royal Albert Hall : European Union Youth Orchestra. Oeuvres de Strauss', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='EXP-1996-08-03-a-p0026', coords=[89.0, 4375.0, 1411.0, 81.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-1996-08-03-a-p0026/89,4375,1411,81/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-1996-08-03-a-p0026', coords=[89.0, 4446.0, 548.0, 767.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-1996-08-03-a-p0026/89,4446,548,767/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-1996-08-03-a-p0026', coords=[637.0, 4456.0, 570.0, 757.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-1996-08-03-a-p0026/637,4456,570,757/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-1996-08-03-a-p0026', coords=[1207.0, 4456.0, 568.0, 757.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-1996-08-03-a-p0026/1207,4456,568,757/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year=1996, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='EXP', acronym='EXP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Express\", endYear=2018, startYear=1738, firstIssue=NewspaperIssue(uid='EXP-1740-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1740, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1740'), lastIssue=NewspaperIssue(uid='EXP-2017-10-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2017, 10, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2017'), countArticles=8397287, countIssues=46204, countPages=701819, fetched=True, deltaYear=280), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp50_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1587393.0, excerpt=[TopicWord(w='match', p=0.05334, h=None), TopicWord(w='équipe', p=0.04143, h=None), TopicWord(w='ligue', p=0.02935, h=None), TopicWord(w='club', p=0.02618, h=None), TopicWord(w='saison', p=0.02484, h=None)], words=[TopicWord(w='match', p=0.05334, h=None), TopicWord(w='équipe', p=0.04143, h=None), TopicWord(w='ligue', p=0.02935, h=None), TopicWord(w='club', p=0.02618, h=None), TopicWord(w='saison', p=0.02484, h=None), TopicWord(w='championnat', p=0.02335, h=None), TopicWord(w='groupe', p=0.01593, h=None), TopicWord(w='football', p=0.01481, h=None), TopicWord(w='tour', p=0.01444, h=None), TopicWord(w='entraîneur', p=0.0125, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp50_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp58_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1235115.0, excerpt=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None)], words=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None), TopicWord(w='ben', p=0.02048, h=None), TopicWord(w='con', p=0.01486, h=None), TopicWord(w='ion', p=0.01387, h=None), TopicWord(w='aber', p=0.01239, h=None), TopicWord(w='welche', p=0.01154, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp58_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp81_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1605619.0, excerpt=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None)], words=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None), TopicWord(w='presse', p=0.03395, h=None), TopicWord(w='suisse', p=0.02137, h=None), TopicWord(w='temps', p=0.01813, h=None), TopicWord(w='semaine', p=0.01605, h=None), TopicWord(w='sport', p=0.01534, h=None)], model='tm-fr-all-v2.0'), relevance=0.611, topicUid='tm-fr-all-v2.0_tp81_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp94_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1164812.0, excerpt=[TopicWord(w='musique', p=0.05085, h=None), TopicWord(w='concert', p=0.03995, h=None), TopicWord(w='suisse', p=0.03109, h=None), TopicWord(w='monde', p=0.02999, h=None), TopicWord(w='danse', p=0.02337, h=None)], words=[TopicWord(w='musique', p=0.05085, h=None), TopicWord(w='concert', p=0.03995, h=None), TopicWord(w='suisse', p=0.03109, h=None), TopicWord(w='monde', p=0.02999, h=None), TopicWord(w='danse', p=0.02337, h=None), TopicWord(w='jazz', p=0.02329, h=None), TopicWord(w='orchestre', p=0.02317, h=None), TopicWord(w='vie', p=0.0229, h=None), TopicWord(w='temps', p=0.01979, h=None), TopicWord(w='piano', p=0.01769, h=None)], model='tm-fr-all-v2.0'), relevance=0.025, topicUid='tm-fr-all-v2.0_tp94_fr')], content=None, mentions=[], v=None), Article(uid='GDL-1996-08-03-a-i0216', type='ar', title='RADI O RSR LA PREMIÈRE', size=522, nbPages=1, pages=[Page(uid='GDL-1996-08-03-a-p0030', num=30, issueUid='GDL-1996-08-03-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1996-08-03-a-p0030', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1996-08-03-a-p0030/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"RADI O RSR LA PREMIÈRE 09.10 L'empire des sens. Invité : Dr René Rumley, médecin dentiste, et Monique Assal, physiothérapeute 11.05 Le kiosque à musiq\", locations=[Entity(uid='aida-0001-54-Brussels', relevance=1), Entity(uid='aida-0001-54-Paris', relevance=1), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Montpellier', relevance=1), Entity(uid='aida-0001-54-Toulouse', relevance=1), Entity(uid='aida-0001-54-Avignon', relevance=1)], persons=[Entity(uid='aida-0001-50-Don_Quichotte', relevance=1), Entity(uid='aida-0001-50-Rocco_Marconi', relevance=1), Entity(uid='aida-0001-50-Jane_Berbié', relevance=1), Entity(uid='aida-0001-50-Colin_Davis', relevance=1), Entity(uid='aida-0001-50-Richard_Strauss', relevance=1), Entity(uid='aida-0001-50-Don_Juan', relevance=1), Entity(uid='aida-0001-50-Violin_Concerto_$28$Sibelius$29$', relevance=1), Entity(uid='aida-0001-50-Charles_Burney', relevance=1), Entity(uid='aida-0001-50-Ricardo_Viñes', relevance=1), Entity(uid='aida-0001-50-Yehudi_Menuhin', relevance=2), Entity(uid='aida-0001-50-Michel_Plasson', relevance=1), Entity(uid='aida-0001-50-René_Descartes', relevance=1)], language='fr', issue=NewspaperIssue(uid='GDL-1996-08-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year='1996'), matches=[ArticleMatch(fragment='. Concerts Promenade, Londres. En direct du Royal Albert Hall : European Union Youth Orchestra, direction', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1996-08-03-a-p0030', coords=[2425.0, 463.0, 1235.0, 92.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1996-08-03-a-p0030/2425,463,1235,92/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1996-08-03-a-p0030', coords=[2425.0, 554.0, 588.0, 1863.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1996-08-03-a-p0030/2425,554,588,1863/full/0/default.png', g=None), ArticleRegion(pageUid='GDL-1996-08-03-a-p0030', coords=[3012.0, 554.0, 648.0, 1863.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1996-08-03-a-p0030/3012,554,648,1863/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1996, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year=1996, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp24_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1922664.0, excerpt=[TopicWord(w='fête', p=0.03229, h=None), TopicWord(w='samedi', p=0.02619, h=None), TopicWord(w='année', p=0.02363, h=None), TopicWord(w='manifestation', p=0.02016, h=None), TopicWord(w='dimanche', p=0.01661, h=None)], words=[TopicWord(w='fête', p=0.03229, h=None), TopicWord(w='samedi', p=0.02619, h=None), TopicWord(w='année', p=0.02363, h=None), TopicWord(w='manifestation', p=0.02016, h=None), TopicWord(w='dimanche', p=0.01661, h=None), TopicWord(w='soirée', p=0.01555, h=None), TopicWord(w='place', p=0.01443, h=None), TopicWord(w='occasion', p=0.01438, h=None), TopicWord(w='lieu', p=0.01434, h=None), TopicWord(w='club', p=0.01347, h=None)], model='tm-fr-all-v2.0'), relevance=0.028, topicUid='tm-fr-all-v2.0_tp24_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.158, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp28_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1319653.0, excerpt=[TopicWord(w='pape', p=0.02366, h=None), TopicWord(w='foi', p=0.02014, h=None), TopicWord(w='saint', p=0.02001, h=None), TopicWord(w='cardinal', p=0.0175, h=None), TopicWord(w='abbé', p=0.0168, h=None)], words=[TopicWord(w='pape', p=0.02366, h=None), TopicWord(w='foi', p=0.02014, h=None), TopicWord(w='saint', p=0.02001, h=None), TopicWord(w='cardinal', p=0.0175, h=None), TopicWord(w='abbé', p=0.0168, h=None), TopicWord(w='curé', p=0.01659, h=None), TopicWord(w='évêque', p=0.0142, h=None), TopicWord(w='religion', p=0.01318, h=None), TopicWord(w='église', p=0.0114, h=None), TopicWord(w='prêtre', p=0.01113, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp28_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp29_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1342277.0, excerpt=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None)], words=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None), TopicWord(w='nation', p=0.01448, h=None), TopicWord(w='monde', p=0.01274, h=None), TopicWord(w='gouvernement', p=0.01088, h=None), TopicWord(w='situation', p=0.00931, h=None), TopicWord(w='discours', p=0.00769, h=None)], model='tm-fr-all-v2.0'), relevance=0.025, topicUid='tm-fr-all-v2.0_tp29_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp36_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1691501.0, excerpt=[TopicWord(w='main', p=0.01644, h=None), TopicWord(w='tête', p=0.01052, h=None), TopicWord(w='temps', p=0.00959, h=None), TopicWord(w='coup', p=0.00952, h=None), TopicWord(w='air', p=0.0087, h=None)], words=[TopicWord(w='main', p=0.01644, h=None), TopicWord(w='tête', p=0.01052, h=None), TopicWord(w='temps', p=0.00959, h=None), TopicWord(w='coup', p=0.00952, h=None), TopicWord(w='air', p=0.0087, h=None), TopicWord(w='foi', p=0.00858, h=None), TopicWord(w='bras', p=0.00799, h=None), TopicWord(w='porte', p=0.00799, h=None), TopicWord(w='nuit', p=0.00796, h=None), TopicWord(w='voix', p=0.00676, h=None)], model='tm-fr-all-v2.0'), relevance=0.051, topicUid='tm-fr-all-v2.0_tp36_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp38_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1539847.0, excerpt=[TopicWord(w='service', p=0.05672, h=None), TopicWord(w='garde', p=0.03507, h=None), TopicWord(w='domicile', p=0.03436, h=None), TopicWord(w='cas', p=0.02568, h=None), TopicWord(w='mois', p=0.02232, h=None)], words=[TopicWord(w='service', p=0.05672, h=None), TopicWord(w='garde', p=0.03507, h=None), TopicWord(w='domicile', p=0.03436, h=None), TopicWord(w='cas', p=0.02568, h=None), TopicWord(w='mois', p=0.02232, h=None), TopicWord(w='urgence', p=0.02199, h=None), TopicWord(w='aide', p=0.02177, h=None), TopicWord(w='information', p=0.01737, h=None), TopicWord(w='accueil', p=0.01567, h=None), TopicWord(w='nuit', p=0.01475, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp38_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.034, topicUid='tm-fr-all-v2.0_tp71_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp73_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1357255.0, excerpt=[TopicWord(w='film', p=0.10021, h=None), TopicWord(w='cinéma', p=0.03117, h=None), TopicWord(w='semaine', p=0.02984, h=None), TopicWord(w='jean', p=0.02469, h=None), TopicWord(w='john', p=0.01933, h=None)], words=[TopicWord(w='film', p=0.10021, h=None), TopicWord(w='cinéma', p=0.03117, h=None), TopicWord(w='semaine', p=0.02984, h=None), TopicWord(w='jean', p=0.02469, h=None), TopicWord(w='john', p=0.01933, h=None), TopicWord(w='histoire', p=0.01377, h=None), TopicWord(w='vision', p=0.01005, h=None), TopicWord(w='vie', p=0.00992, h=None), TopicWord(w='séance', p=0.00988, h=None), TopicWord(w='monde', p=0.00951, h=None)], model='tm-fr-all-v2.0'), relevance=0.031, topicUid='tm-fr-all-v2.0_tp73_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp81_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1605619.0, excerpt=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None)], words=[TopicWord(w='soir', p=0.14771, h=None), TopicWord(w='matin', p=0.08762, h=None), TopicWord(w='midi', p=0.06192, h=None), TopicWord(w='nuit', p=0.05685, h=None), TopicWord(w='journal', p=0.04059, h=None), TopicWord(w='presse', p=0.03395, h=None), TopicWord(w='suisse', p=0.02137, h=None), TopicWord(w='temps', p=0.01813, h=None), TopicWord(w='semaine', p=0.01605, h=None), TopicWord(w='sport', p=0.01534, h=None)], model='tm-fr-all-v2.0'), relevance=0.169, topicUid='tm-fr-all-v2.0_tp81_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp94_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1164812.0, excerpt=[TopicWord(w='musique', p=0.05085, h=None), TopicWord(w='concert', p=0.03995, h=None), TopicWord(w='suisse', p=0.03109, h=None), TopicWord(w='monde', p=0.02999, h=None), TopicWord(w='danse', p=0.02337, h=None)], words=[TopicWord(w='musique', p=0.05085, h=None), TopicWord(w='concert', p=0.03995, h=None), TopicWord(w='suisse', p=0.03109, h=None), TopicWord(w='monde', p=0.02999, h=None), TopicWord(w='danse', p=0.02337, h=None), TopicWord(w='jazz', p=0.02329, h=None), TopicWord(w='orchestre', p=0.02317, h=None), TopicWord(w='vie', p=0.0229, h=None), TopicWord(w='temps', p=0.01979, h=None), TopicWord(w='piano', p=0.01769, h=None)], model='tm-fr-all-v2.0'), relevance=0.269, topicUid='tm-fr-all-v2.0_tp94_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1996-10-07-a-i0157', type='ar', title='RADIO', size=518, nbPages=1, pages=[Page(uid='JDG-1996-10-07-a-p0027', num=27, issueUid='JDG-1996-10-07-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1996-10-07-a-p0027', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1996-10-07-a-p0027/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='RADIO , RSR LA PREMIÈRE 09.10 Le petit déjeuner 10.05 Comédie. Invitée : Cécile B. Loupan 11.05 Les dicodeurs. Invité : Bernard Pichon 12.05 Salut les', locations=[], persons=[Entity(uid='aida-0001-50-Samson_François', relevance=1), Entity(uid='aida-0001-50-Jean_Vilar', relevance=1)], language='fr', issue=NewspaperIssue(uid='JDG-1996-10-07-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1996, 10, 7, 0, 0, tzinfo=TzInfo(UTC)), year='1996'), matches=[ArticleMatch(fragment=' des interprètes. Samson François. Œuvres de Chopin, Ravel 1530 Concert. European Union Baroque Orchestra. Œuvres', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1996-10-07-a-p0027', coords=[2232.0, 468.0, 1068.0, 98.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1996-10-07-a-p0027/2232,468,1068,98/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1996-10-07-a-p0027', coords=[2232.0, 565.0, 538.0, 1752.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1996-10-07-a-p0027/2232,565,538,1752/full/0/default.png', g=None), ArticleRegion(pageUid='JDG-1996-10-07-a-p0027', coords=[2770.0, 565.0, 530.0, 1752.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1996-10-07-a-p0027/2770,565,530,1752/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1996, 10, 7, 0, 0, tzinfo=TzInfo(UTC)), year=1996, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.716, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp73_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1357255.0, excerpt=[TopicWord(w='film', p=0.10021, h=None), TopicWord(w='cinéma', p=0.03117, h=None), TopicWord(w='semaine', p=0.02984, h=None), TopicWord(w='jean', p=0.02469, h=None), TopicWord(w='john', p=0.01933, h=None)], words=[TopicWord(w='film', p=0.10021, h=None), TopicWord(w='cinéma', p=0.03117, h=None), TopicWord(w='semaine', p=0.02984, h=None), TopicWord(w='jean', p=0.02469, h=None), TopicWord(w='john', p=0.01933, h=None), TopicWord(w='histoire', p=0.01377, h=None), TopicWord(w='vision', p=0.01005, h=None), TopicWord(w='vie', p=0.00992, h=None), TopicWord(w='séance', p=0.00988, h=None), TopicWord(w='monde', p=0.00951, h=None)], model='tm-fr-all-v2.0'), relevance=0.052, topicUid='tm-fr-all-v2.0_tp73_fr')], content=None, mentions=[], v=None), Article(uid='JDG-1997-01-21-a-i0263', type='ad', title='EUROPEANINVESTMENTBANK The EIB, the financial', size=177, nbPages=1, pages=[Page(uid='JDG-1997-01-21-a-p0042', num=42, issueUid='JDG-1997-01-21-a', newspaperUid='JDG', iiif='https://impresso-project.ch/api/proxy/iiif/JDG-1997-01-21-a-p0042', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/JDG-1997-01-21-a-p0042/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='EUROPEANINVESTMENTBANK The EIB, the financial institution of the European Union, created under the auspices of the Treaty of Rome to facilitate long-t', locations=[Entity(uid='aida-0001-54-Rome', relevance=1), Entity(uid='aida-0001-54-Luxembourg', relevance=2)], persons=[], language='fr', issue=NewspaperIssue(uid='JDG-1997-01-21-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1997, 1, 21, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), matches=[ArticleMatch(fragment='EUROPEANINVESTMENTBANK The EIB, the financial institution of the European Union, created under the', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' development of the European Union, is currently seeking for its headquarters in LUXEMBOURG : English Mother', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' languages of the European Union would be an advantage. The EIB offers attractive terms of employment and', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Country of the European Union, are invited to send their curriculum vitae in English or French, together', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='JDG-1997-01-21-a-p0042', coords=[1080.0, 88.0, 1560.0, 1848.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/JDG-1997-01-21-a-p0042/1080,88,1560,1848/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1997, 1, 21, 0, 0, tzinfo=TzInfo(UTC)), year=1997, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='JDG', acronym='JDG', labels=['newspaper'], languages=[], properties=[], included=True, name='Journal de Genève', endYear=1998, startYear=1826, firstIssue=NewspaperIssue(uid='JDG-1826-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1826, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1826'), lastIssue=NewspaperIssue(uid='JDG-1997-12-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1997, 12, 31, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), countArticles=4062884, countIssues=49131, countPages=494186, fetched=True, deltaYear=172), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp01_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2308017.0, excerpt=[TopicWord(w='étage', p=0.08392, h=None), TopicWord(w='chambre', p=0.06676, h=None), TopicWord(w='cuisine', p=0.05488, h=None), TopicWord(w='suite', p=0.04608, h=None), TopicWord(w='bureau', p=0.03783, h=None)], words=[TopicWord(w='étage', p=0.08392, h=None), TopicWord(w='chambre', p=0.06676, h=None), TopicWord(w='cuisine', p=0.05488, h=None), TopicWord(w='suite', p=0.04608, h=None), TopicWord(w='bureau', p=0.03783, h=None), TopicWord(w='appartement', p=0.03348, h=None), TopicWord(w='logement', p=0.0324, h=None), TopicWord(w='soleil', p=0.03007, h=None), TopicWord(w='maison', p=0.02261, h=None), TopicWord(w='jardin', p=0.02008, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp01_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp80_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1610579.0, excerpt=[TopicWord(w='livre', p=0.07557, h=None), TopicWord(w='auteur', p=0.02772, h=None), TopicWord(w='ouvrage', p=0.02676, h=None), TopicWord(w='histoire', p=0.02248, h=None), TopicWord(w='vol', p=0.01747, h=None)], words=[TopicWord(w='livre', p=0.07557, h=None), TopicWord(w='auteur', p=0.02772, h=None), TopicWord(w='ouvrage', p=0.02676, h=None), TopicWord(w='histoire', p=0.02248, h=None), TopicWord(w='vol', p=0.01747, h=None), TopicWord(w='volume', p=0.01722, h=None), TopicWord(w='texte', p=0.01653, h=None), TopicWord(w='édition', p=0.01473, h=None), TopicWord(w='professeur', p=0.01256, h=None), TopicWord(w='siècle', p=0.01174, h=None)], model='tm-fr-all-v2.0'), relevance=0.055, topicUid='tm-fr-all-v2.0_tp80_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp84_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1420720.0, excerpt=[TopicWord(w='jean', p=0.24427, h=None), TopicWord(w='fils', p=0.06563, h=None), TopicWord(w='fille', p=0.0654, h=None), TopicWord(w='née', p=0.04995, h=None), TopicWord(w='joseph', p=0.0422, h=None)], words=[TopicWord(w='jean', p=0.24427, h=None), TopicWord(w='fils', p=0.06563, h=None), TopicWord(w='fille', p=0.0654, h=None), TopicWord(w='née', p=0.04995, h=None), TopicWord(w='joseph', p=0.0422, h=None), TopicWord(w='bernois', p=0.02643, h=None), TopicWord(w='laurent', p=0.01994, h=None), TopicWord(w='veuve', p=0.01799, h=None), TopicWord(w='civil', p=0.01559, h=None), TopicWord(w='david', p=0.01485, h=None)], model='tm-fr-all-v2.0'), relevance=0.154, topicUid='tm-fr-all-v2.0_tp84_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp85_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1662988.0, excerpt=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None)], words=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None), TopicWord(w='cœur', p=0.00964, h=None), TopicWord(w='âme', p=0.00906, h=None), TopicWord(w='amour', p=0.00874, h=None), TopicWord(w='temps', p=0.0084, h=None), TopicWord(w='force', p=0.00708, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp85_fr')], content=None, mentions=[], v=None), Article(uid='GDL-1997-01-21-a-i0284', type='ad', title='EUROPEAN INVESTMENT BANK The EIB,', size=181, nbPages=1, pages=[Page(uid='GDL-1997-01-21-a-p0042', num=42, issueUid='GDL-1997-01-21-a', newspaperUid='GDL', iiif='https://impresso-project.ch/api/proxy/iiif/GDL-1997-01-21-a-p0042', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/GDL-1997-01-21-a-p0042/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='EUROPEAN INVESTMENT BANK The EIB, the financial institution of the European Union, created under the auspices of the Treaty of Rome to facilitate long', locations=[Entity(uid='aida-0001-54-Rome', relevance=1), Entity(uid='aida-0001-54-Luxembourg', relevance=2)], persons=[], language='fr', issue=NewspaperIssue(uid='GDL-1997-01-21-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1997, 1, 21, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), matches=[ArticleMatch(fragment='EUROPEAN INVESTMENT BANK The EIB, the financial institution of the European Union, created under', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' balanced development of the European Union, is currently seeking for its headquarters in LUXEMBOURG', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' languages of the European Union would be an advantage. The EIB offers attractive terms of employaient and', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Country of the European Union, are invited to send their curriculum vitae in English or French, together', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='GDL-1997-01-21-a-p0042', coords=[1106.0, 223.0, 1504.0, 1675.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/GDL-1997-01-21-a-p0042/1106,223,1504,1675/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1997, 1, 21, 0, 0, tzinfo=TzInfo(UTC)), year=1997, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='GDL', acronym='GDL', labels=['newspaper'], languages=[], properties=[], included=True, name='Gazette de Lausanne', endYear=1991, startYear=1804, firstIssue=NewspaperIssue(uid='GDL-1798-02-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1798, 2, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1798'), lastIssue=NewspaperIssue(uid='GDL-1998-02-28-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1998, 2, 28, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), countArticles=4200053, countIssues=51070, countPages=441517, fetched=True, deltaYear=187), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp06_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1198698.0, excerpt=[TopicWord(w='temps', p=0.06457, h=None), TopicWord(w='beau', p=0.0551, h=None), TopicWord(w='degré', p=0.03297, h=None), TopicWord(w='nord', p=0.02935, h=None), TopicWord(w='pluie', p=0.02832, h=None)], words=[TopicWord(w='temps', p=0.06457, h=None), TopicWord(w='beau', p=0.0551, h=None), TopicWord(w='degré', p=0.03297, h=None), TopicWord(w='nord', p=0.02935, h=None), TopicWord(w='pluie', p=0.02832, h=None), TopicWord(w='neige', p=0.02744, h=None), TopicWord(w='température', p=0.02679, h=None), TopicWord(w='ciel', p=0.02441, h=None), TopicWord(w='sud', p=0.02185, h=None), TopicWord(w='ouest', p=0.02127, h=None)], model='tm-fr-all-v2.0'), relevance=0.05, topicUid='tm-fr-all-v2.0_tp06_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.078, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp51_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2338465.0, excerpt=[TopicWord(w='service', p=0.04871, h=None), TopicWord(w='langue', p=0.02972, h=None), TopicWord(w='poste', p=0.02932, h=None), TopicWord(w='travail', p=0.02766, h=None), TopicWord(w='personnel', p=0.02702, h=None)], words=[TopicWord(w='service', p=0.04871, h=None), TopicWord(w='langue', p=0.02972, h=None), TopicWord(w='poste', p=0.02932, h=None), TopicWord(w='travail', p=0.02766, h=None), TopicWord(w='personnel', p=0.02702, h=None), TopicWord(w='allemand', p=0.02488, h=None), TopicWord(w='formation', p=0.01959, h=None), TopicWord(w='curriculum', p=0.01892, h=None), TopicWord(w='expérience', p=0.01562, h=None), TopicWord(w='anglais', p=0.01477, h=None)], model='tm-fr-all-v2.0'), relevance=0.032, topicUid='tm-fr-all-v2.0_tp51_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp68_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1758519.0, excerpt=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None)], words=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None), TopicWord(w='modèle', p=0.0126, h=None), TopicWord(w='essence', p=0.01248, h=None), TopicWord(w='pneu', p=0.01248, h=None), TopicWord(w='vitesse', p=0.01078, h=None), TopicWord(w='confort', p=0.01042, h=None)], model='tm-fr-all-v2.0'), relevance=0.032, topicUid='tm-fr-all-v2.0_tp68_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp99_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1676481.0, excerpt=[TopicWord(w='cours', p=0.06546, h=None), TopicWord(w='école', p=0.06053, h=None), TopicWord(w='enseignement', p=0.0415, h=None), TopicWord(w='professeur', p=0.03397, h=None), TopicWord(w='année', p=0.02844, h=None)], words=[TopicWord(w='cours', p=0.06546, h=None), TopicWord(w='école', p=0.06053, h=None), TopicWord(w='enseignement', p=0.0415, h=None), TopicWord(w='professeur', p=0.03397, h=None), TopicWord(w='année', p=0.02844, h=None), TopicWord(w='classe', p=0.024, h=None), TopicWord(w='formation', p=0.0217, h=None), TopicWord(w='instruction', p=0.01599, h=None), TopicWord(w='directeur', p=0.01328, h=None), TopicWord(w='examen', p=0.01254, h=None)], model='tm-fr-all-v2.0'), relevance=0.356, topicUid='tm-fr-all-v2.0_tp99_fr')], content=None, mentions=[], v=None), Article(uid='FZG-1997-02-10-a-i0102', type='ar', title='DRS1 DRS 2', size=231, nbPages=1, pages=[Page(uid='FZG-1997-02-10-a-p0006', num=6, issueUid='FZG-1997-02-10-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-1997-02-10-a-p0006', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-1997-02-10-a-p0006/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='DRS 1 DRS 2 8 . 15 Espresso . Tips , Trends und Hintergründe zu Konsum , Nahrung und Umwelt 9 . 00 Memo 10 . 00 Etcetera 12 . 30 Rendezvous / Mittagsi', locations=[], persons=[Entity(uid='aida-0001-50-Aurèle_Nicolet', relevance=1)], language='de', issue=NewspaperIssue(uid='FZG-1997-02-10-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1997, 2, 10, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), matches=[ArticleMatch(fragment=' Concerto . European Union Youth Orchestra 15 . 00 Parlando . Der Flötist Aurele Nicolet 17 . 00 Apero 17', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-1997-02-10-a-p0006', coords=[89.0, 2782.0, 571.0, 38.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1997-02-10-a-p0006/89,2782,571,38/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1997-02-10-a-p0006', coords=[89.0, 2852.0, 403.0, 755.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1997-02-10-a-p0006/89,2852,403,755/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1997-02-10-a-p0006', coords=[510.0, 2852.0, 408.0, 745.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1997-02-10-a-p0006/510,2852,408,745/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1997, 2, 10, 0, 0, tzinfo=TzInfo(UTC)), year=1997, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp09_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=230824.0, excerpt=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None)], words=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None), TopicWord(w='brown', p=0.01322, h=None), TopicWord(w='serie', p=0.013, h=None), TopicWord(w='inhaber', p=0.01295, h=None), TopicWord(w='general', p=0.01284, h=None), TopicWord(w='bank', p=0.01273, h=None)], model='tm-de-all-v2.0'), relevance=0.022, topicUid='tm-de-all-v2.0_tp09_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp67_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=280393.0, excerpt=[TopicWord(w='tagesschau', p=0.0394, h=None), TopicWord(w='sport', p=0.02282, h=None), TopicWord(w='bild', p=0.01544, h=None), TopicWord(w='les', p=0.01494, h=None), TopicWord(w='deutschland', p=0.01474, h=None)], words=[TopicWord(w='tagesschau', p=0.0394, h=None), TopicWord(w='sport', p=0.02282, h=None), TopicWord(w='bild', p=0.01544, h=None), TopicWord(w='les', p=0.01494, h=None), TopicWord(w='deutschland', p=0.01474, h=None), TopicWord(w='journal', p=0.01444, h=None), TopicWord(w='drs', p=0.01216, h=None), TopicWord(w='spielfilm', p=0.01187, h=None), TopicWord(w='serie', p=0.01182, h=None), TopicWord(w='musik', p=0.01154, h=None)], model='tm-de-all-v2.0'), relevance=0.781, topicUid='tm-de-all-v2.0_tp67_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp70_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=353648.0, excerpt=[TopicWord(w='schweiz', p=0.12796, h=None), TopicWord(w='frankreich', p=0.06629, h=None), TopicWord(w='deutschland', p=0.05481, h=None), TopicWord(w='italien', p=0.04852, h=None), TopicWord(w='schwede', p=0.04619, h=None)], words=[TopicWord(w='schweiz', p=0.12796, h=None), TopicWord(w='frankreich', p=0.06629, h=None), TopicWord(w='deutschland', p=0.05481, h=None), TopicWord(w='italien', p=0.04852, h=None), TopicWord(w='schwede', p=0.04619, h=None), TopicWord(w='belgien', p=0.0388, h=None), TopicWord(w='holland', p=0.0342, h=None), TopicWord(w='england', p=0.02673, h=None), TopicWord(w='norwegen', p=0.02339, h=None), TopicWord(w='dänemark', p=0.02264, h=None)], model='tm-de-all-v2.0'), relevance=0.061, topicUid='tm-de-all-v2.0_tp70_de')], content=None, mentions=[], v=None), Article(uid='luxland-1997-06-13-a-i0076', type='ar', title='The primary objective of the IML shall be to maintain price stability', size=606, nbPages=2, pages=[Page(uid='luxland-1997-06-13-a-p0041', num=41, issueUid='luxland-1997-06-13-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f41/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f41/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None), Page(uid='luxland-1997-06-13-a-p0042', num=42, issueUid='luxland-1997-06-13-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f42/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f42/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='The primary objective of the IML shall be to maintain price stability The draft bill redefines, reorders and supplements the missions of the IML. Thus', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=2)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-1997-06-13-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1997, 6, 13, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), matches=[ArticleMatch(fragment=' on European Union and Article 7 of the ESCB/ECB Statute, will thus be ensured. Other forms of independence', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1997-06-13-a-p0041', coords=[2775.0, 1204.0, 577.0, 275.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f41/2775,1204,577,275/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-06-13-a-p0041', coords=[2761.0, 1585.0, 615.0, 1272.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f41/2761,1585,615,1272/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-06-13-a-p0041', coords=[2760.0, 2907.0, 615.0, 837.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f41/2760,2907,615,837/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-06-13-a-p0041', coords=[2761.0, 3801.0, 617.0, 1054.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f41/2761,3801,617,1054/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-06-13-a-p0042', coords=[2214.0, 2722.0, 614.0, 1136.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffk6nbv%2fpages%2f42/2214,2722,614,1136/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1997, 6, 13, 0, 0, tzinfo=TzInfo(UTC)), year=1997, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-1997-08-22-a-i0038', type='ar', title='En avant les musiques', size=240, nbPages=1, pages=[Page(uid='luxland-1997-08-22-a-p0009', num=9, issueUid='luxland-1997-08-22-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw1wrx0%2fpages%2f9/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw1wrx0%2fpages%2f9/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"En avant les musiques Deux soirées qui s'annoncent excellentes viennent — enfin — interrompre la dèche culturelle estivale. Les fans des rythmes binai\", locations=[], persons=[Entity(uid='aida-0001-50-Mike_Bordin', relevance=1), Entity(uid='aida-0001-50-Roddy_Bottum', relevance=1), Entity(uid='aida-0001-50-Billy_Gould', relevance=1), Entity(uid='aida-0001-50-John_T._Hudson', relevance=1), Entity(uid='aida-0001-50-Mike_Patton', relevance=1), Entity(uid='aida-0001-50-Bernard_Haitink', relevance=1), Entity(uid='aida-0001-50-Caroline_Maes', relevance=1), Entity(uid='aida-0001-50-Marc_Meyer', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-1997-08-22-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1997, 8, 22, 0, 0, tzinfo=TzInfo(UTC)), year='1997'), matches=[ArticleMatch(fragment=', ce week-end, la résidence du déjà prestigieux European Union Youth Orchestra (EUYO), avec un concert', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1997-08-22-a-p0009', coords=[2805.0, 2950.0, 583.0, 47.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw1wrx0%2fpages%2f9/2805,2950,583,47/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-08-22-a-p0009', coords=[2769.0, 3034.0, 622.0, 1974.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw1wrx0%2fpages%2f9/2769,3034,622,1974/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-08-22-a-p0009', coords=[2775.0, 2834.0, 455.0, 44.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw1wrx0%2fpages%2f9/2775,2834,455,44/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1997-08-22-a-p0009', coords=[2773.0, 2391.0, 618.0, 396.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw1wrx0%2fpages%2f9/2773,2391,618,396/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1997, 8, 22, 0, 0, tzinfo=TzInfo(UTC)), year=1997, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.02, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp44_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1867218.0, excerpt=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None)], words=[TopicWord(w='temps', p=0.02877, h=None), TopicWord(w='argent', p=0.0225, h=None), TopicWord(w='gens', p=0.01945, h=None), TopicWord(w='foi', p=0.01682, h=None), TopicWord(w='chose', p=0.0163, h=None), TopicWord(w='vie', p=0.01484, h=None), TopicWord(w='travail', p=0.01312, h=None), TopicWord(w='moment', p=0.01181, h=None), TopicWord(w='monde', p=0.01174, h=None), TopicWord(w='besoin', p=0.0112, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp44_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp61_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1976298.0, excerpt=[TopicWord(w='dimanche', p=0.13556, h=None), TopicWord(w='samedi', p=0.13163, h=None), TopicWord(w='lundi', p=0.10761, h=None), TopicWord(w='vendredi', p=0.10224, h=None), TopicWord(w='soir', p=0.07855, h=None)], words=[TopicWord(w='dimanche', p=0.13556, h=None), TopicWord(w='samedi', p=0.13163, h=None), TopicWord(w='lundi', p=0.10761, h=None), TopicWord(w='vendredi', p=0.10224, h=None), TopicWord(w='soir', p=0.07855, h=None), TopicWord(w='mardi', p=0.06463, h=None), TopicWord(w='jeudi', p=0.0607, h=None), TopicWord(w='mercredi', p=0.05549, h=None), TopicWord(w='matin', p=0.03702, h=None), TopicWord(w='midi', p=0.01968, h=None)], model='tm-fr-all-v2.0'), relevance=0.081, topicUid='tm-fr-all-v2.0_tp61_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp65_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2003191.0, excerpt=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None)], words=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None), TopicWord(w='octobre', p=0.02288, h=None), TopicWord(w='lieu', p=0.0211, h=None), TopicWord(w='fin', p=0.0142, h=None), TopicWord(w='mai', p=0.01199, h=None), TopicWord(w='date', p=0.01139, h=None)], model='tm-fr-all-v2.0'), relevance=0.02, topicUid='tm-fr-all-v2.0_tp65_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp96_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1247267.0, excerpt=[TopicWord(w='musique', p=0.04948, h=None), TopicWord(w='concert', p=0.03657, h=None), TopicWord(w='piano', p=0.01844, h=None), TopicWord(w='orchestre', p=0.01786, h=None), TopicWord(w='programme', p=0.01492, h=None)], words=[TopicWord(w='musique', p=0.04948, h=None), TopicWord(w='concert', p=0.03657, h=None), TopicWord(w='piano', p=0.01844, h=None), TopicWord(w='orchestre', p=0.01786, h=None), TopicWord(w='programme', p=0.01492, h=None), TopicWord(w='public', p=0.01185, h=None), TopicWord(w='soir', p=0.01146, h=None), TopicWord(w='voix', p=0.01121, h=None), TopicWord(w='chœur', p=0.01042, h=None), TopicWord(w='chant', p=0.01009, h=None)], model='tm-fr-all-v2.0'), relevance=0.636, topicUid='tm-fr-all-v2.0_tp96_fr')], content=None, mentions=[], v=None), Article(uid='FZG-1998-02-07-a-i0054', type='ar', title='Wilde Waldfrau', size=844, nbPages=1, pages=[Page(uid='FZG-1998-02-07-a-p0009', num=9, issueUid='FZG-1998-02-07-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Wilde Waldfrau Jerome holt sich Rat bei einer Psychologin ( Natasha Richardson ) , die sofort Feuer und Flamme ist : Mit diesem spektakulären Fall erh', locations=[Entity(uid='aida-0001-54-United_States', relevance=3), Entity(uid='aida-0001-54-Jodie_Foster', relevance=1), Entity(uid='aida-0001-54-Hollywood', relevance=1), Entity(uid='aida-0001-54-Elizabeth_Taylor', relevance=1)], persons=[Entity(uid='aida-0001-50-Natasha_Richardson', relevance=1), Entity(uid='aida-0001-50-Liam_Neeson', relevance=1), Entity(uid='aida-0001-50-Jodie_Foster', relevance=3), Entity(uid='aida-0001-50-Kaspar_Hauser', relevance=1), Entity(uid='aida-0001-50-Meryl_Streep', relevance=1), Entity(uid='aida-0001-50-Goldie_Hawn', relevance=1), Entity(uid='aida-0001-50-Bruce_Willis', relevance=1), Entity(uid='aida-0001-50-Robert_Zemeckis', relevance=1), Entity(uid='aida-0001-50-Michael_Apted', relevance=1), Entity(uid='aida-0001-50-Mark_Handley', relevance=1), Entity(uid='aida-0001-50-James_Spader', relevance=1), Entity(uid='aida-0001-50-Kurt_Russell', relevance=1), Entity(uid='aida-0001-50-Roland_Emmerich', relevance=1), Entity(uid='aida-0001-50-Audrey_Hepburn', relevance=1), Entity(uid='aida-0001-50-Terence_Young_$28$director$29$', relevance=1), Entity(uid='aida-0001-50-Sidney_Sheldon', relevance=1), Entity(uid='aida-0001-50-James_Mason', relevance=1), Entity(uid='aida-0001-50-Ben_Gazzara', relevance=1), Entity(uid='aida-0001-50-Omar_Sharif', relevance=1), Entity(uid='aida-0001-50-Romy_Schneider', relevance=1), Entity(uid='aida-0001-50-Gert_Fröbe', relevance=1), Entity(uid='aida-0001-50-Abdullah_Ibrahim', relevance=3), Entity(uid='aida-0001-50-George_Gray_$28$TV_host$29$', relevance=1)], language='de', issue=NewspaperIssue(uid='FZG-1998-02-07-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1998, 2, 7, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), matches=[ArticleMatch(fragment=' wurde Ibrahims Komposition vom Schweizer Daniel Schnyder : Mitglieder des European Union Youth Orchestra', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[94.0, 3752.0, 515.0, 66.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/94,3752,515,66/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[665.0, 3869.0, 525.0, 417.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/665,3869,525,417/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[94.0, 3874.0, 525.0, 483.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/94,3874,525,483/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[665.0, 4291.0, 103.0, 24.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/665,4291,103,24/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[431.0, 4366.0, 80.0, 28.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/431,4366,80,28/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[94.0, 5195.0, 632.0, 38.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/94,5195,632,38/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[1242.0, 3752.0, 412.0, 43.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/1242,3752,412,43/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[956.0, 3776.0, 234.0, 37.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/956,3776,234,37/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[1237.0, 3823.0, 529.0, 576.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/1237,3823,529,576/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[801.0, 4286.0, 389.0, 146.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/801,4286,389,146/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[768.0, 4432.0, 998.0, 829.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/768,4432,998,829/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[1813.0, 3757.0, 525.0, 642.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/1813,3757,525,642/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[1813.0, 4432.0, 1664.0, 79.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/1813,4432,1664,79/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[1813.0, 4502.0, 525.0, 225.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/1813,4502,525,225/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[2380.0, 4549.0, 525.0, 150.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/2380,4549,525,150/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[1813.0, 4736.0, 525.0, 525.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/1813,4736,525,525/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[2385.0, 4736.0, 525.0, 525.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/2385,4736,525,525/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[3247.0, 3752.0, 225.0, 389.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/3247,3752,225,389/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[2952.0, 4549.0, 529.0, 712.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/2952,4549,529,712/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[94.0, 4211.0, 857.0, 975.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/94,4211,857,975/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1998-02-07-a-p0009', coords=[2380.0, 3752.0, 834.0, 637.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1998-02-07-a-p0009/2380,3752,834,637/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1998, 2, 7, 0, 0, tzinfo=TzInfo(UTC)), year=1998, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp15_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338797.0, excerpt=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None)], words=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None), TopicWord(w='publikum', p=0.00896, h=None), TopicWord(w='werk', p=0.00837, h=None), TopicWord(w='leitung', p=0.00833, h=None), TopicWord(w='chor', p=0.00785, h=None), TopicWord(w='aufführung', p=0.00679, h=None)], model='tm-de-all-v2.0'), relevance=0.103, topicUid='tm-de-all-v2.0_tp15_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp42_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=314533.0, excerpt=[TopicWord(w='regierung', p=0.01706, h=None), TopicWord(w='israel', p=0.01663, h=None), TopicWord(w='kairo', p=0.00886, h=None), TopicWord(w='präsident', p=0.00782, h=None), TopicWord(w='jerusalem', p=0.00727, h=None)], words=[TopicWord(w='regierung', p=0.01706, h=None), TopicWord(w='israel', p=0.01663, h=None), TopicWord(w='kairo', p=0.00886, h=None), TopicWord(w='präsident', p=0.00782, h=None), TopicWord(w='jerusalem', p=0.00727, h=None), TopicWord(w='irak', p=0.00676, h=None), TopicWord(w='seite', p=0.00665, h=None), TopicWord(w='montag', p=0.00656, h=None), TopicWord(w='usa', p=0.00625, h=None), TopicWord(w='reuter', p=0.00611, h=None)], model='tm-de-all-v2.0'), relevance=0.109, topicUid='tm-de-all-v2.0_tp42_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp45_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=263810.0, excerpt=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None)], words=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None), TopicWord(w='news', p=0.0072, h=None), TopicWord(w='journal', p=0.00654, h=None), TopicWord(w='bild', p=0.00634, h=None), TopicWord(w='leben', p=0.00628, h=None), TopicWord(w='familie', p=0.00585, h=None)], model='tm-de-all-v2.0'), relevance=0.23, topicUid='tm-de-all-v2.0_tp45_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp46_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=446560.0, excerpt=[TopicWord(w='welt', p=0.01445, h=None), TopicWord(w='leben', p=0.01256, h=None), TopicWord(w='mensch', p=0.01051, h=None), TopicWord(w='wort', p=0.00671, h=None), TopicWord(w='art', p=0.00623, h=None)], words=[TopicWord(w='welt', p=0.01445, h=None), TopicWord(w='leben', p=0.01256, h=None), TopicWord(w='mensch', p=0.01051, h=None), TopicWord(w='wort', p=0.00671, h=None), TopicWord(w='art', p=0.00623, h=None), TopicWord(w='frage', p=0.0059, h=None), TopicWord(w='geschichte', p=0.00564, h=None), TopicWord(w='sinn', p=0.00564, h=None), TopicWord(w='natur', p=0.00558, h=None), TopicWord(w='sprache', p=0.0052, h=None)], model='tm-de-all-v2.0'), relevance=0.097, topicUid='tm-de-all-v2.0_tp46_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp87_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=464530.0, excerpt=[TopicWord(w='film', p=0.04823, h=None), TopicWord(w='woche', p=0.02664, h=None), TopicWord(w='regie', p=0.00941, h=None), TopicWord(w='kino', p=0.00623, h=None), TopicWord(w='john', p=0.0062, h=None)], words=[TopicWord(w='film', p=0.04823, h=None), TopicWord(w='woche', p=0.02664, h=None), TopicWord(w='regie', p=0.00941, h=None), TopicWord(w='kino', p=0.00623, h=None), TopicWord(w='john', p=0.0062, h=None), TopicWord(w='rex', p=0.00519, h=None), TopicWord(w='titel', p=0.00504, h=None), TopicWord(w='paul', p=0.00496, h=None), TopicWord(w='erstaufführung', p=0.00445, h=None), TopicWord(w='james', p=0.00432, h=None)], model='tm-de-all-v2.0'), relevance=0.336, topicUid='tm-de-all-v2.0_tp87_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp97_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=493012.0, excerpt=[TopicWord(w='polizei', p=0.02417, h=None), TopicWord(w='brand', p=0.0142, h=None), TopicWord(w='feuer', p=0.01373, h=None), TopicWord(w='nacht', p=0.0127, h=None), TopicWord(w='mann', p=0.01234, h=None)], words=[TopicWord(w='polizei', p=0.02417, h=None), TopicWord(w='brand', p=0.0142, h=None), TopicWord(w='feuer', p=0.01373, h=None), TopicWord(w='nacht', p=0.0127, h=None), TopicWord(w='mann', p=0.01234, h=None), TopicWord(w='schaden', p=0.00973, h=None), TopicWord(w='opfer', p=0.00918, h=None), TopicWord(w='nähe', p=0.0086, h=None), TopicWord(w='spital', p=0.00809, h=None), TopicWord(w='explosion', p=0.00698, h=None)], model='tm-de-all-v2.0'), relevance=0.026, topicUid='tm-de-all-v2.0_tp97_de')], content=None, mentions=[], v=None), Article(uid='luxland-1998-05-29-a-i0174', type='ad', title='Publicité 7 Page 32', size=83, nbPages=1, pages=[Page(uid='luxland-1998-05-29-a-p0032', num=32, issueUid='luxland-1998-05-29-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f8x73kz%2fpages%2f32/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f8x73kz%2fpages%2f32/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"EUROPEAN UNION DES AVOCATS LAWYERS' UNION EUROPÉENS 3 rd European Forum on 3ème Forum Européen sur the Law of Télécommunications, le droit des télécom\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=2)], persons=[Entity(uid='aida-0001-50-Henri_Tudor', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-1998-05-29-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1998, 5, 29, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), matches=[ArticleMatch(fragment=\"EUROPEAN UNION DES AVOCATS LAWYERS' UNION EUROPÉENS 3 rd European Forum on 3ème Forum Européen\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1998-05-29-a-p0032', coords=[427.0, 328.0, 3100.0, 4540.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f8x73kz%2fpages%2f32/427,328,3100,4540/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1998, 5, 29, 0, 0, tzinfo=TzInfo(UTC)), year=1998, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-1998-11-13-a-i0062', type='ar', title='Ministère de la Culture', size=122, nbPages=1, pages=[Page(uid='luxland-1998-11-13-a-p0016', num=16, issueUid='luxland-1998-11-13-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fmx8mtc%2fpages%2f16/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fmx8mtc%2fpages%2f16/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Ministère de la Culture Orchestre des Jeunes de l'Union européenne European Union Youth Orchestra EUYO Orchestre symphonique Les musiciennes et musici\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Davis', relevance=1), Entity(uid='aida-0001-50-Bernard_Haitink', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-1998-11-13-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1998, 11, 13, 0, 0, tzinfo=TzInfo(UTC)), year='1998'), matches=[ArticleMatch(fragment=\"Ministère de la Culture Orchestre des Jeunes de l'Union européenne European Union Youth Orchestra\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1998-11-13-a-p0016', coords=[2845.0, 1299.0, 413.0, 21.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fmx8mtc%2fpages%2f16/2845,1299,413,21/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1998-11-13-a-p0016', coords=[2786.0, 1360.0, 527.0, 100.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fmx8mtc%2fpages%2f16/2786,1360,527,100/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1998-11-13-a-p0016', coords=[2754.0, 1488.0, 595.0, 68.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fmx8mtc%2fpages%2f16/2754,1488,595,68/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1998-11-13-a-p0016', coords=[2742.0, 1594.0, 614.0, 768.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fmx8mtc%2fpages%2f16/2742,1594,614,768/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1998, 11, 13, 0, 0, tzinfo=TzInfo(UTC)), year=1998, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='FZG-1999-08-13-a-i0008', type='ar', title='Mythische Musik-Erlebnisse Neuer Intenda...', size=585, nbPages=1, pages=[Page(uid='FZG-1999-08-13-a-p0007', num=7, issueUid='FZG-1999-08-13-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Mythische Musik-Erlebnisse Neuer Intendant für Internationale Musikfestwochen Luzern Das renommierteste Musikfestival der Schweiz , die Internationale', locations=[Entity(uid='aida-0001-54-FC_Luzern', relevance=2), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Berlin_Philharmonic', relevance=1), Entity(uid='aida-0001-54-Dazu_County', relevance=2), Entity(uid='aida-0001-54-Bergen', relevance=1), Entity(uid='aida-0001-54-Rustavi', relevance=1)], persons=[Entity(uid='aida-0001-50-Gustav_Mahler', relevance=1), Entity(uid='aida-0001-50-Bernard_Haitink', relevance=1), Entity(uid='aida-0001-50-Claudio_Abbado', relevance=1), Entity(uid='aida-0001-50-Simon_Rattle', relevance=1), Entity(uid='aida-0001-50-Evelyn_Glennie', relevance=2), Entity(uid='aida-0001-50-Matthias_Bamert', relevance=1), Entity(uid='aida-0001-50-Robert_B._Wilson', relevance=1), Entity(uid='aida-0001-50-Lars_Vogt', relevance=1), Entity(uid='aida-0001-50-Klaus_Maria_Brandauer', relevance=1), Entity(uid='aida-0001-50-Nike_Wagner', relevance=1)], language='de', issue=NewspaperIssue(uid='FZG-1999-08-13-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1999, 8, 13, 0, 0, tzinfo=TzInfo(UTC)), year='1999'), matches=[ArticleMatch(fragment=' , will aber das Festival weiter öffnen . Mit Gustav Mahlers Siebenter Sinfonie , gespielt vom European Union Youth', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[847.0, 3546.0, 1868.0, 211.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/847,3546,1868,211/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[777.0, 3790.0, 637.0, 763.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/777,3790,637,763/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[777.0, 4553.0, 637.0, 707.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/777,4553,637,707/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[1470.0, 3794.0, 632.0, 750.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/1470,3794,632,750/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[1465.0, 4595.0, 637.0, 675.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/1465,4595,637,675/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[2154.0, 3794.0, 636.0, 445.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/2154,3794,636,445/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-1999-08-13-a-p0007', coords=[2154.0, 4277.0, 636.0, 997.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-1999-08-13-a-p0007/2154,4277,636,997/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(1999, 8, 13, 0, 0, tzinfo=TzInfo(UTC)), year=1999, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp15_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338797.0, excerpt=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None)], words=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None), TopicWord(w='publikum', p=0.00896, h=None), TopicWord(w='werk', p=0.00837, h=None), TopicWord(w='leitung', p=0.00833, h=None), TopicWord(w='chor', p=0.00785, h=None), TopicWord(w='aufführung', p=0.00679, h=None)], model='tm-de-all-v2.0'), relevance=0.542, topicUid='tm-de-all-v2.0_tp15_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.107, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp45_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=263810.0, excerpt=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None)], words=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None), TopicWord(w='news', p=0.0072, h=None), TopicWord(w='journal', p=0.00654, h=None), TopicWord(w='bild', p=0.00634, h=None), TopicWord(w='leben', p=0.00628, h=None), TopicWord(w='familie', p=0.00585, h=None)], model='tm-de-all-v2.0'), relevance=0.121, topicUid='tm-de-all-v2.0_tp45_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp46_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=446560.0, excerpt=[TopicWord(w='welt', p=0.01445, h=None), TopicWord(w='leben', p=0.01256, h=None), TopicWord(w='mensch', p=0.01051, h=None), TopicWord(w='wort', p=0.00671, h=None), TopicWord(w='art', p=0.00623, h=None)], words=[TopicWord(w='welt', p=0.01445, h=None), TopicWord(w='leben', p=0.01256, h=None), TopicWord(w='mensch', p=0.01051, h=None), TopicWord(w='wort', p=0.00671, h=None), TopicWord(w='art', p=0.00623, h=None), TopicWord(w='frage', p=0.0059, h=None), TopicWord(w='geschichte', p=0.00564, h=None), TopicWord(w='sinn', p=0.00564, h=None), TopicWord(w='natur', p=0.00558, h=None), TopicWord(w='sprache', p=0.0052, h=None)], model='tm-de-all-v2.0'), relevance=0.049, topicUid='tm-de-all-v2.0_tp46_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp64_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=482702.0, excerpt=[TopicWord(w='juli', p=0.30177, h=None), TopicWord(w='juni', p=0.29846, h=None), TopicWord(w='august', p=0.13813, h=None), TopicWord(w='mai', p=0.02336, h=None), TopicWord(w='samstag', p=0.0194, h=None)], words=[TopicWord(w='juli', p=0.30177, h=None), TopicWord(w='juni', p=0.29846, h=None), TopicWord(w='august', p=0.13813, h=None), TopicWord(w='mai', p=0.02336, h=None), TopicWord(w='samstag', p=0.0194, h=None), TopicWord(w='sonntag', p=0.01703, h=None), TopicWord(w='montag', p=0.01649, h=None), TopicWord(w='freitag', p=0.01544, h=None), TopicWord(w='mittwoch', p=0.01491, h=None), TopicWord(w='donnerstag', p=0.01342, h=None)], model='tm-de-all-v2.0'), relevance=0.037, topicUid='tm-de-all-v2.0_tp64_de')], content=None, mentions=[], v=None), Article(uid='luxland-1999-11-05-a-i0028', type='ar', title='Ministère de la Culture', size=90, nbPages=1, pages=[Page(uid='luxland-1999-11-05-a-p0014', num=14, issueUid='luxland-1999-11-05-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f3ps198%2fpages%2f14/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f3ps198%2fpages%2f14/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Ministère de la Culture Avis European Union Youth Orchestra (EUYO) Orchestre symphonique Les musiciennes et musiciens, nés entre le 1\" janvier 1976 et', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='luxland-1999-11-05-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(1999, 11, 5, 0, 0, tzinfo=TzInfo(UTC)), year='1999'), matches=[ArticleMatch(fragment='Ministère de la Culture Avis European Union Youth Orchestra (EUYO) Orchestre symphonique', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-1999-11-05-a-p0014', coords=[1588.0, 3693.0, 405.0, 30.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f3ps198%2fpages%2f14/1588,3693,405,30/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1999-11-05-a-p0014', coords=[1588.0, 3751.0, 119.0, 44.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f3ps198%2fpages%2f14/1588,3751,119,44/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-1999-11-05-a-p0014', coords=[1588.0, 3824.0, 618.0, 748.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f3ps198%2fpages%2f14/1588,3824,618,748/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(1999, 11, 5, 0, 0, tzinfo=TzInfo(UTC)), year=1999, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2000-11-24-a-i0030', type='ar', title=\"Ministère de la Culture, de l'Enseignement supérieur et de la Recherch[...]\", size=104, nbPages=1, pages=[Page(uid='luxland-2000-11-24-a-p0016', num=16, issueUid='luxland-2000-11-24-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f71s9vh%2fpages%2f16/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f71s9vh%2fpages%2f16/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Ministère de la Culture, de l'Enseignement supérieur et de la Recherche European Union Youth Orchestra — EUYO Orchestre symphonique Les musiciennes et\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='luxland-2000-11-24-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2000, 11, 24, 0, 0, tzinfo=TzInfo(UTC)), year='2000'), matches=[ArticleMatch(fragment=\"Ministère de la Culture, de l'Enseignement supérieur et de la Recherche European Union Youth\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2000-11-24-a-p0016', coords=[1593.0, 2534.0, 509.0, 120.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f71s9vh%2fpages%2f16/1593,2534,509,120/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2000-11-24-a-p0016', coords=[1594.0, 2682.0, 550.0, 177.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f71s9vh%2fpages%2f16/1594,2682,550,177/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2000-11-24-a-p0016', coords=[1588.0, 2879.0, 628.0, 660.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f71s9vh%2fpages%2f16/1588,2879,628,660/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2000, 11, 24, 0, 0, tzinfo=TzInfo(UTC)), year=2000, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='LLE-2001-04-23-a-i0253', type='ar', title='Lfl LIBERTE 31 LUNDI 23 AVRIL 2001', size=1958, nbPages=1, pages=[Page(uid='LLE-2001-04-23-a-p0031', num=31, issueUid='LLE-2001-04-23-a', newspaperUid='LLE', iiif='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Lfl LIBERTE 31 LUNDI 23 AVRIL 2001 « Dès 2002 , on pourra payer en euros aux caisses de Migros et Coop » Date-butoir INTERVIEW • L euro sintroduira da', locations=[Entity(uid='aida-0001-54-Suisse$2c$_Moselle', relevance=5), Entity(uid='aida-0001-54-Zürich', relevance=1), Entity(uid='aida-0001-54-Gare_de_Cornavin', relevance=1), Entity(uid='aida-0001-54-Rorschach$2c$_St._Gallen', relevance=1), Entity(uid='aida-0001-54-Italy', relevance=1), Entity(uid='aida-0001-54-Claude_Dallemagne', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='LLE-2001-04-23-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2001, 4, 23, 0, 0, tzinfo=TzInfo(UTC)), year='2001'), matches=[ArticleMatch(fragment=' Anrinpr .. * i LDD / HO EUROPEAN UNION coeur joie . Il pourra comparer dabord limpression que la vie', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2795.0, 131.0, 646.0, 129.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2795,131,646,129/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 677.0, 3398.0, 446.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,677,3398,446/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[63.0, 4357.0, 448.0, 77.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/63,4357,448,77/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 1143.0, 3158.0, 151.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,1143,3158,151/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[54.0, 2894.0, 1102.0, 483.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/54,2894,1102,483/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 3386.0, 1099.0, 366.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,3386,1099,366/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 3752.0, 1099.0, 251.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,3752,1099,251/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 4003.0, 1105.0, 246.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,4003,1105,246/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 4489.0, 1096.0, 208.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,4489,1096,208/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[63.0, 4697.0, 1062.0, 283.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/63,4697,1062,283/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[63.0, 5023.0, 1062.0, 246.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/63,5023,1062,246/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[1202.0, 3020.0, 1105.0, 403.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/1202,3020,1105,403/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[1208.0, 3426.0, 1102.0, 408.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/1208,3426,1102,408/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[1208.0, 3834.0, 1102.0, 280.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/1208,3834,1102,280/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[1208.0, 4123.0, 1102.0, 317.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/1208,4123,1102,317/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[1208.0, 4452.0, 1102.0, 405.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/1208,4452,1102,405/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[1211.0, 4857.0, 1099.0, 409.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/1211,4857,1099,409/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2356.0, 2897.0, 1104.0, 363.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2356,2897,1104,363/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2356.0, 3260.0, 1104.0, 280.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2356,3260,1104,280/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2356.0, 3549.0, 1067.0, 365.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2356,3549,1067,365/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2356.0, 3914.0, 1076.0, 372.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2356,3914,1076,372/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2356.0, 4280.0, 1076.0, 372.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2356,4280,1076,372/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2356.0, 4649.0, 1070.0, 291.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2356,4649,1070,291/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[2361.0, 4934.0, 1057.0, 326.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/2361,4934,1057,326/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2001-04-23-a-p0031', coords=[57.0, 1323.0, 3406.0, 1563.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2001-04-23-a-p0031/57,1323,3406,1563/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2001, 4, 23, 0, 0, tzinfo=TzInfo(UTC)), year=2001, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='LLE', acronym='LLE', labels=['newspaper'], languages=['fr'], properties=[], included=True, name='La Liberté', endYear=2018, startYear=1871, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=147), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp16_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1481661.0, excerpt=[TopicWord(w='conseil', p=0.12679, h=None), TopicWord(w='commission', p=0.07916, h=None), TopicWord(w='projet', p=0.03972, h=None), TopicWord(w='loi', p=0.0295, h=None), TopicWord(w='rapport', p=0.02175, h=None)], words=[TopicWord(w='conseil', p=0.12679, h=None), TopicWord(w='commission', p=0.07916, h=None), TopicWord(w='projet', p=0.03972, h=None), TopicWord(w='loi', p=0.0295, h=None), TopicWord(w='rapport', p=0.02175, h=None), TopicWord(w='discussion', p=0.02165, h=None), TopicWord(w='séance', p=0.02021, h=None), TopicWord(w='proposition', p=0.02014, h=None), TopicWord(w='voix', p=0.02001, h=None), TopicWord(w='question', p=0.01655, h=None)], model='tm-fr-all-v2.0'), relevance=0.083, topicUid='tm-fr-all-v2.0_tp16_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp18_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1537456.0, excerpt=[TopicWord(w='fille', p=0.01542, h=None), TopicWord(w='main', p=0.01512, h=None), TopicWord(w='voix', p=0.01033, h=None), TopicWord(w='foi', p=0.00988, h=None), TopicWord(w='temps', p=0.00854, h=None)], words=[TopicWord(w='fille', p=0.01542, h=None), TopicWord(w='main', p=0.01512, h=None), TopicWord(w='voix', p=0.01033, h=None), TopicWord(w='foi', p=0.00988, h=None), TopicWord(w='temps', p=0.00854, h=None), TopicWord(w='père', p=0.00842, h=None), TopicWord(w='moment', p=0.00815, h=None), TopicWord(w='chose', p=0.00804, h=None), TopicWord(w='mère', p=0.00749, h=None), TopicWord(w='tête', p=0.00741, h=None)], model='tm-fr-all-v2.0'), relevance=0.052, topicUid='tm-fr-all-v2.0_tp18_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp20_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1223370.0, excerpt=[TopicWord(w='armée', p=0.05311, h=None), TopicWord(w='colonel', p=0.04556, h=None), TopicWord(w='service', p=0.03314, h=None), TopicWord(w='major', p=0.03161, h=None), TopicWord(w='chef', p=0.0308, h=None)], words=[TopicWord(w='armée', p=0.05311, h=None), TopicWord(w='colonel', p=0.04556, h=None), TopicWord(w='service', p=0.03314, h=None), TopicWord(w='major', p=0.03161, h=None), TopicWord(w='chef', p=0.0308, h=None), TopicWord(w='général', p=0.02955, h=None), TopicWord(w='commandant', p=0.02487, h=None), TopicWord(w='corps', p=0.02394, h=None), TopicWord(w='capitaine', p=0.02096, h=None), TopicWord(w='bataillon', p=0.01929, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp20_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp26_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1277841.0, excerpt=[TopicWord(w='cas', p=0.03093, h=None), TopicWord(w='santé', p=0.03048, h=None), TopicWord(w='médecin', p=0.0286, h=None), TopicWord(w='maladie', p=0.02417, h=None), TopicWord(w='docteur', p=0.01896, h=None)], words=[TopicWord(w='cas', p=0.03093, h=None), TopicWord(w='santé', p=0.03048, h=None), TopicWord(w='médecin', p=0.0286, h=None), TopicWord(w='maladie', p=0.02417, h=None), TopicWord(w='docteur', p=0.01896, h=None), TopicWord(w='médecine', p=0.01797, h=None), TopicWord(w='hôpital', p=0.01625, h=None), TopicWord(w='traitement', p=0.01295, h=None), TopicWord(w='professeur', p=0.01184, h=None), TopicWord(w='état', p=0.00996, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp26_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp30_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1337751.0, excerpt=[TopicWord(w='forêt', p=0.02919, h=None), TopicWord(w='bois', p=0.01989, h=None), TopicWord(w='chasse', p=0.01955, h=None), TopicWord(w='nature', p=0.0136, h=None), TopicWord(w='chien', p=0.01324, h=None)], words=[TopicWord(w='forêt', p=0.02919, h=None), TopicWord(w='bois', p=0.01989, h=None), TopicWord(w='chasse', p=0.01955, h=None), TopicWord(w='nature', p=0.0136, h=None), TopicWord(w='chien', p=0.01324, h=None), TopicWord(w='chasseur', p=0.01133, h=None), TopicWord(w='animal', p=0.01106, h=None), TopicWord(w='eau', p=0.0088, h=None), TopicWord(w='terre', p=0.00786, h=None), TopicWord(w='arbre', p=0.00743, h=None)], model='tm-fr-all-v2.0'), relevance=0.143, topicUid='tm-fr-all-v2.0_tp30_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp48_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1594246.0, excerpt=[TopicWord(w='feu', p=0.04375, h=None), TopicWord(w='incendie', p=0.03551, h=None), TopicWord(w='maison', p=0.02917, h=None), TopicWord(w='secours', p=0.01752, h=None), TopicWord(w='matin', p=0.01494, h=None)], words=[TopicWord(w='feu', p=0.04375, h=None), TopicWord(w='incendie', p=0.03551, h=None), TopicWord(w='maison', p=0.02917, h=None), TopicWord(w='secours', p=0.01752, h=None), TopicWord(w='matin', p=0.01494, h=None), TopicWord(w='nuit', p=0.01329, h=None), TopicWord(w='explosion', p=0.01304, h=None), TopicWord(w='soir', p=0.01229, h=None), TopicWord(w='eau', p=0.01224, h=None), TopicWord(w='flamme', p=0.01215, h=None)], model='tm-fr-all-v2.0'), relevance=0.088, topicUid='tm-fr-all-v2.0_tp48_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp64_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1683510.0, excerpt=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None)], words=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None), TopicWord(w='loi', p=0.01024, h=None), TopicWord(w='droit', p=0.00984, h=None), TopicWord(w='temps', p=0.00949, h=None), TopicWord(w='lieu', p=0.00876, h=None), TopicWord(w='moment', p=0.00798, h=None)], model='tm-fr-all-v2.0'), relevance=0.089, topicUid='tm-fr-all-v2.0_tp64_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp68_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1758519.0, excerpt=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None)], words=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None), TopicWord(w='modèle', p=0.0126, h=None), TopicWord(w='essence', p=0.01248, h=None), TopicWord(w='pneu', p=0.01248, h=None), TopicWord(w='vitesse', p=0.01078, h=None), TopicWord(w='confort', p=0.01042, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp68_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.099, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp76_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1282459.0, excerpt=[TopicWord(w='avion', p=0.04868, h=None), TopicWord(w='vol', p=0.02812, h=None), TopicWord(w='appareil', p=0.0277, h=None), TopicWord(w='aviation', p=0.0203, h=None), TopicWord(w='pilote', p=0.01793, h=None)], words=[TopicWord(w='avion', p=0.04868, h=None), TopicWord(w='vol', p=0.02812, h=None), TopicWord(w='appareil', p=0.0277, h=None), TopicWord(w='aviation', p=0.0203, h=None), TopicWord(w='pilote', p=0.01793, h=None), TopicWord(w='bord', p=0.01618, h=None), TopicWord(w='air', p=0.01499, h=None), TopicWord(w='aéroport', p=0.01211, h=None), TopicWord(w='sol', p=0.01023, h=None), TopicWord(w='vitesse', p=0.00934, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp76_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp79_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1221404.0, excerpt=[TopicWord(w='tir', p=0.07371, h=None), TopicWord(w='gauche', p=0.05973, h=None), TopicWord(w='droite', p=0.05536, h=None), TopicWord(w='page', p=0.02455, h=None), TopicWord(w='main', p=0.01981, h=None)], words=[TopicWord(w='tir', p=0.07371, h=None), TopicWord(w='gauche', p=0.05973, h=None), TopicWord(w='droite', p=0.05536, h=None), TopicWord(w='page', p=0.02455, h=None), TopicWord(w='main', p=0.01981, h=None), TopicWord(w='coup', p=0.01833, h=None), TopicWord(w='foi', p=0.01738, h=None), TopicWord(w='partie', p=0.01396, h=None), TopicWord(w='mot', p=0.01362, h=None), TopicWord(w='stand', p=0.01322, h=None)], model='tm-fr-all-v2.0'), relevance=0.037, topicUid='tm-fr-all-v2.0_tp79_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp85_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1662988.0, excerpt=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None)], words=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None), TopicWord(w='cœur', p=0.00964, h=None), TopicWord(w='âme', p=0.00906, h=None), TopicWord(w='amour', p=0.00874, h=None), TopicWord(w='temps', p=0.0084, h=None), TopicWord(w='force', p=0.00708, h=None)], model='tm-fr-all-v2.0'), relevance=0.024, topicUid='tm-fr-all-v2.0_tp85_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp95_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1425409.0, excerpt=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None)], words=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None), TopicWord(w='recours', p=0.01317, h=None), TopicWord(w='art', p=0.01269, h=None), TopicWord(w='vigueur', p=0.01123, h=None), TopicWord(w='projet', p=0.0108, h=None), TopicWord(w='décision', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.088, topicUid='tm-fr-all-v2.0_tp95_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp97_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1596368.0, excerpt=[TopicWord(w='police', p=0.0589, h=None), TopicWord(w='coup', p=0.01245, h=None), TopicWord(w='nuit', p=0.01169, h=None), TopicWord(w='enquête', p=0.01124, h=None), TopicWord(w='matin', p=0.01005, h=None)], words=[TopicWord(w='police', p=0.0589, h=None), TopicWord(w='coup', p=0.01245, h=None), TopicWord(w='nuit', p=0.01169, h=None), TopicWord(w='enquête', p=0.01124, h=None), TopicWord(w='matin', p=0.01005, h=None), TopicWord(w='soir', p=0.00929, h=None), TopicWord(w='crime', p=0.00882, h=None), TopicWord(w='affaire', p=0.00864, h=None), TopicWord(w='vol', p=0.00855, h=None), TopicWord(w='main', p=0.00783, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp97_fr')], content=None, mentions=[], v=None), Article(uid='FZG-2001-08-04-a-i0012', type='ar', title='SF2 HÜ MTV 3 1«H HORF 1 ORF 2', size=1806, nbPages=1, pages=[Page(uid='FZG-2001-08-04-a-p0009', num=9, issueUid='FZG-2001-08-04-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='SF 2 HÜ MTV 3 1 « H HORF 1 ORF 2 Initiiert von der Redaktion « Musik und Tanz » des Schweizer Fernsehens ergingen vier Aufträge für Kompositionen an d', locations=[Entity(uid='aida-0001-54-ETH_Zurich', relevance=3), Entity(uid='aida-0001-54-Lausanne', relevance=1), Entity(uid='aida-0001-54-Lugano', relevance=1), Entity(uid='aida-0001-54-Switzerland', relevance=2), Entity(uid='aida-0001-54-Lage', relevance=1), Entity(uid='aida-0001-54-Edmonton', relevance=1), Entity(uid='aida-0001-54-Timon_$28$character_of_Rome$29$', relevance=1), Entity(uid='aida-0001-54-United_States', relevance=11), Entity(uid='aida-0001-54-Roswell_$28$TV_series$29$', relevance=1), Entity(uid='aida-0001-54-Casper$2c$_Wyoming', relevance=1), Entity(uid='aida-0001-54-Klagenfurt', relevance=1), Entity(uid='aida-0001-54-George_Best', relevance=6), Entity(uid='aida-0001-54-Alice_Cooper', relevance=1)], persons=[Entity(uid='aida-0001-50-Pierre_Favre_$28$musician$29$', relevance=1), Entity(uid='aida-0001-50-Mathias_Rüegg', relevance=1), Entity(uid='aida-0001-50-Sylvie_Courvoisier', relevance=1), Entity(uid='aida-0001-50-Franco_Ambrosetti', relevance=1), Entity(uid='aida-0001-50-Ocean_Girl', relevance=1), Entity(uid='aida-0001-50-Battle_of_Mogadishu_$28$1993$29$', relevance=1), Entity(uid='aida-0001-50-Alice_Schwarzer', relevance=1), Entity(uid='aida-0001-50-Michael_Egan_$28$author$29$', relevance=1), Entity(uid='aida-0001-50-Alan_Alda', relevance=1), Entity(uid='aida-0001-50-Mike_Binder', relevance=1), Entity(uid='aida-0001-50-Johnny_Bravo', relevance=1), Entity(uid='aida-0001-50-Don_King_$28$boxing_promoter$29$', relevance=1), Entity(uid='aida-0001-50-Kevin_Bacon', relevance=1), Entity(uid='aida-0001-50-David_Keith', relevance=1), Entity(uid='aida-0001-50-Pirmin_Meier', relevance=1), Entity(uid='aida-0001-50-Colin_Davis', relevance=1), Entity(uid='aida-0001-50-Dominique_Longo', relevance=1)], language='de', issue=NewspaperIssue(uid='FZG-2001-08-04-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2001, 8, 4, 0, 0, tzinfo=TzInfo(UTC)), year='2001'), matches=[ArticleMatch(fragment=' BBC Proms . Werke von Tschaikowsky , Elgar ( European Union Youth Orchestra , Leitung : Colin Davis', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[623.0, 2503.0, 1574.0, 70.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/623,2503,1574,70/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[361.0, 2718.0, 206.0, 422.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/361,2718,206,422/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[23.0, 3154.0, 544.0, 431.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/23,3154,544,431/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[42.0, 3782.0, 534.0, 426.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/42,3782,534,426/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[609.0, 2592.0, 440.0, 998.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/609,2592,440,998/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[614.0, 3782.0, 440.0, 431.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/614,3782,440,431/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[1082.0, 2592.0, 440.0, 998.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/1082,2592,440,998/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[1082.0, 3655.0, 440.0, 563.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/1082,3655,440,563/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[1555.0, 2592.0, 441.0, 557.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/1555,2592,441,557/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[1555.0, 3154.0, 881.0, 436.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/1555,3154,881,436/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[1555.0, 3782.0, 441.0, 436.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/1555,3782,441,436/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[2024.0, 2596.0, 440.0, 553.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/2024,2596,440,553/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[2028.0, 3782.0, 441.0, 436.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/2028,3782,441,436/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[2520.0, 3117.0, 857.0, 567.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/2520,3117,857,567/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[2492.0, 3782.0, 445.0, 558.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/2492,3782,445,558/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[2960.0, 3735.0, 445.0, 642.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/2960,3735,445,642/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[2511.0, 2517.0, 866.0, 581.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/2511,2517,866,581/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2001-08-04-a-p0009', coords=[19.0, 2728.0, 328.0, 412.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-08-04-a-p0009/19,2728,328,412/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2001, 8, 4, 0, 0, tzinfo=TzInfo(UTC)), year=2001, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp45_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=263810.0, excerpt=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None)], words=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None), TopicWord(w='news', p=0.0072, h=None), TopicWord(w='journal', p=0.00654, h=None), TopicWord(w='bild', p=0.00634, h=None), TopicWord(w='leben', p=0.00628, h=None), TopicWord(w='familie', p=0.00585, h=None)], model='tm-de-all-v2.0'), relevance=0.797, topicUid='tm-de-all-v2.0_tp45_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp62_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=254552.0, excerpt=[TopicWord(w='musik', p=0.0465, h=None), TopicWord(w='konzert', p=0.03432, h=None), TopicWord(w='radio', p=0.01937, h=None), TopicWord(w='beromünster', p=0.01188, h=None), TopicWord(w='programm', p=0.01026, h=None)], words=[TopicWord(w='musik', p=0.0465, h=None), TopicWord(w='konzert', p=0.03432, h=None), TopicWord(w='radio', p=0.01937, h=None), TopicWord(w='beromünster', p=0.01188, h=None), TopicWord(w='programm', p=0.01026, h=None), TopicWord(w='tanzmusik', p=0.01004, h=None), TopicWord(w='tanz', p=0.00967, h=None), TopicWord(w='orchester', p=0.00915, h=None), TopicWord(w='schweiz', p=0.00892, h=None), TopicWord(w='khz', p=0.00816, h=None)], model='tm-de-all-v2.0'), relevance=0.07, topicUid='tm-de-all-v2.0_tp62_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp67_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=280393.0, excerpt=[TopicWord(w='tagesschau', p=0.0394, h=None), TopicWord(w='sport', p=0.02282, h=None), TopicWord(w='bild', p=0.01544, h=None), TopicWord(w='les', p=0.01494, h=None), TopicWord(w='deutschland', p=0.01474, h=None)], words=[TopicWord(w='tagesschau', p=0.0394, h=None), TopicWord(w='sport', p=0.02282, h=None), TopicWord(w='bild', p=0.01544, h=None), TopicWord(w='les', p=0.01494, h=None), TopicWord(w='deutschland', p=0.01474, h=None), TopicWord(w='journal', p=0.01444, h=None), TopicWord(w='drs', p=0.01216, h=None), TopicWord(w='spielfilm', p=0.01187, h=None), TopicWord(w='serie', p=0.01182, h=None), TopicWord(w='musik', p=0.01154, h=None)], model='tm-de-all-v2.0'), relevance=0.029, topicUid='tm-de-all-v2.0_tp67_de')], content=None, mentions=[], v=None), Article(uid='FZG-2001-10-04-a-i0220', type='ar', title='6.00 Mattmata 9.00 Kontext 9.35 Musik ä ...', size=120, nbPages=1, pages=[Page(uid='FZG-2001-10-04-a-p0029', num=29, issueUid='FZG-2001-10-04-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-2001-10-04-a-p0029', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-2001-10-04-a-p0029/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='6 . 00 Mattmata 9 . 00 Kontext 9 . 35 Musik ä la carte 11 . 00 Reflexe . Berliner Wanderungen 11 . 35 Musik ä la carte 12 . 15 Aktuell 12 . 30 Rendez-', locations=[Entity(uid='aida-0001-54-Berlin_Philharmonic', relevance=1)], persons=[Entity(uid='aida-0001-50-Lars_Vogt', relevance=1)], language='de', issue=NewspaperIssue(uid='FZG-2001-10-04-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2001, 10, 4, 0, 0, tzinfo=TzInfo(UTC)), year='2001'), matches=[ArticleMatch(fragment=' Im Konzertsaal . Werke von Prokofieff . Grieg , Strawinsky ( Lars Vogt , Klavier ; European Union Youth Orche- ', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-2001-10-04-a-p0029', coords=[2542.0, 4794.0, 445.0, 440.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2001-10-04-a-p0029/2542,4794,445,440/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2001, 10, 4, 0, 0, tzinfo=TzInfo(UTC)), year=2001, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp00_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=265405.0, excerpt=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None)], words=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None), TopicWord(w='jan', p=0.01266, h=None), TopicWord(w='prozent', p=0.01098, h=None), TopicWord(w='berlin', p=0.01095, h=None), TopicWord(w='dez', p=0.0102, h=None), TopicWord(w='union', p=0.01004, h=None)], model='tm-de-all-v2.0'), relevance=0.033, topicUid='tm-de-all-v2.0_tp00_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp09_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=230824.0, excerpt=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None)], words=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None), TopicWord(w='brown', p=0.01322, h=None), TopicWord(w='serie', p=0.013, h=None), TopicWord(w='inhaber', p=0.01295, h=None), TopicWord(w='general', p=0.01284, h=None), TopicWord(w='bank', p=0.01273, h=None)], model='tm-de-all-v2.0'), relevance=0.053, topicUid='tm-de-all-v2.0_tp09_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp15_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338797.0, excerpt=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None)], words=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None), TopicWord(w='publikum', p=0.00896, h=None), TopicWord(w='werk', p=0.00837, h=None), TopicWord(w='leitung', p=0.00833, h=None), TopicWord(w='chor', p=0.00785, h=None), TopicWord(w='aufführung', p=0.00679, h=None)], model='tm-de-all-v2.0'), relevance=0.058, topicUid='tm-de-all-v2.0_tp15_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp45_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=263810.0, excerpt=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None)], words=[TopicWord(w='usa', p=0.02921, h=None), TopicWord(w='tagesschau', p=0.01708, h=None), TopicWord(w='regie', p=0.01152, h=None), TopicWord(w='vps', p=0.01108, h=None), TopicWord(w='sport', p=0.00968, h=None), TopicWord(w='news', p=0.0072, h=None), TopicWord(w='journal', p=0.00654, h=None), TopicWord(w='bild', p=0.00634, h=None), TopicWord(w='leben', p=0.00628, h=None), TopicWord(w='familie', p=0.00585, h=None)], model='tm-de-all-v2.0'), relevance=0.113, topicUid='tm-de-all-v2.0_tp45_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp62_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=254552.0, excerpt=[TopicWord(w='musik', p=0.0465, h=None), TopicWord(w='konzert', p=0.03432, h=None), TopicWord(w='radio', p=0.01937, h=None), TopicWord(w='beromünster', p=0.01188, h=None), TopicWord(w='programm', p=0.01026, h=None)], words=[TopicWord(w='musik', p=0.0465, h=None), TopicWord(w='konzert', p=0.03432, h=None), TopicWord(w='radio', p=0.01937, h=None), TopicWord(w='beromünster', p=0.01188, h=None), TopicWord(w='programm', p=0.01026, h=None), TopicWord(w='tanzmusik', p=0.01004, h=None), TopicWord(w='tanz', p=0.00967, h=None), TopicWord(w='orchester', p=0.00915, h=None), TopicWord(w='schweiz', p=0.00892, h=None), TopicWord(w='khz', p=0.00816, h=None)], model='tm-de-all-v2.0'), relevance=0.3, topicUid='tm-de-all-v2.0_tp62_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp67_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=280393.0, excerpt=[TopicWord(w='tagesschau', p=0.0394, h=None), TopicWord(w='sport', p=0.02282, h=None), TopicWord(w='bild', p=0.01544, h=None), TopicWord(w='les', p=0.01494, h=None), TopicWord(w='deutschland', p=0.01474, h=None)], words=[TopicWord(w='tagesschau', p=0.0394, h=None), TopicWord(w='sport', p=0.02282, h=None), TopicWord(w='bild', p=0.01544, h=None), TopicWord(w='les', p=0.01494, h=None), TopicWord(w='deutschland', p=0.01474, h=None), TopicWord(w='journal', p=0.01444, h=None), TopicWord(w='drs', p=0.01216, h=None), TopicWord(w='spielfilm', p=0.01187, h=None), TopicWord(w='serie', p=0.01182, h=None), TopicWord(w='musik', p=0.01154, h=None)], model='tm-de-all-v2.0'), relevance=0.174, topicUid='tm-de-all-v2.0_tp67_de')], content=None, mentions=[], v=None), Article(uid='luxland-2001-11-16-a-i0066', type='ar', title=\"Ministère de la Culture, de l'Enseignement supérieur et de la Recherch[...]\", size=113, nbPages=1, pages=[Page(uid='luxland-2001-11-16-a-p0016', num=16, issueUid='luxland-2001-11-16-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f16/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f16/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Ministère de la Culture, de l'Enseignement supérieur et de la Recherche European Union Youth Orchestra Orchestre symphonique L'Orchestre des Jeunes de\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-Vladimir_Ashkenazy', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-2001-11-16-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2001, 11, 16, 0, 0, tzinfo=TzInfo(UTC)), year='2001'), matches=[ArticleMatch(fragment=\"Ministère de la Culture, de l'Enseignement supérieur et de la Recherche European Union Youth\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2001-11-16-a-p0016', coords=[901.0, 2888.0, 461.0, 108.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f16/901,2888,461,108/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2001-11-16-a-p0016', coords=[901.0, 3024.0, 448.0, 102.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f16/901,3024,448,102/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2001-11-16-a-p0016', coords=[899.0, 3173.0, 612.0, 1002.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f16/899,3173,612,1002/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2001, 11, 16, 0, 0, tzinfo=TzInfo(UTC)), year=2001, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.043, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp18_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1537456.0, excerpt=[TopicWord(w='fille', p=0.01542, h=None), TopicWord(w='main', p=0.01512, h=None), TopicWord(w='voix', p=0.01033, h=None), TopicWord(w='foi', p=0.00988, h=None), TopicWord(w='temps', p=0.00854, h=None)], words=[TopicWord(w='fille', p=0.01542, h=None), TopicWord(w='main', p=0.01512, h=None), TopicWord(w='voix', p=0.01033, h=None), TopicWord(w='foi', p=0.00988, h=None), TopicWord(w='temps', p=0.00854, h=None), TopicWord(w='père', p=0.00842, h=None), TopicWord(w='moment', p=0.00815, h=None), TopicWord(w='chose', p=0.00804, h=None), TopicWord(w='mère', p=0.00749, h=None), TopicWord(w='tête', p=0.00741, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp18_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp37_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1629711.0, excerpt=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None)], words=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None), TopicWord(w='question', p=0.01606, h=None), TopicWord(w='fait', p=0.01434, h=None), TopicWord(w='propos', p=0.01279, h=None), TopicWord(w='sujet', p=0.01251, h=None), TopicWord(w='cas', p=0.01111, h=None)], model='tm-fr-all-v2.0'), relevance=0.073, topicUid='tm-fr-all-v2.0_tp37_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp43_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1940529.0, excerpt=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None)], words=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None), TopicWord(w='viande', p=0.01298, h=None), TopicWord(w='sucre', p=0.0121, h=None), TopicWord(w='lait', p=0.01183, h=None), TopicWord(w='litre', p=0.0116, h=None), TopicWord(w='verre', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp43_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp56_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1626587.0, excerpt=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None)], words=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None), TopicWord(w='commission', p=0.01335, h=None), TopicWord(w='projet', p=0.01329, h=None), TopicWord(w='séance', p=0.012, h=None), TopicWord(w='bâtiment', p=0.01082, h=None), TopicWord(w='terrain', p=0.0103, h=None)], model='tm-fr-all-v2.0'), relevance=0.199, topicUid='tm-fr-all-v2.0_tp56_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp64_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1683510.0, excerpt=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None)], words=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None), TopicWord(w='loi', p=0.01024, h=None), TopicWord(w='droit', p=0.00984, h=None), TopicWord(w='temps', p=0.00949, h=None), TopicWord(w='lieu', p=0.00876, h=None), TopicWord(w='moment', p=0.00798, h=None)], model='tm-fr-all-v2.0'), relevance=0.169, topicUid='tm-fr-all-v2.0_tp64_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp68_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1758519.0, excerpt=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None)], words=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None), TopicWord(w='modèle', p=0.0126, h=None), TopicWord(w='essence', p=0.01248, h=None), TopicWord(w='pneu', p=0.01248, h=None), TopicWord(w='vitesse', p=0.01078, h=None), TopicWord(w='confort', p=0.01042, h=None)], model='tm-fr-all-v2.0'), relevance=0.038, topicUid='tm-fr-all-v2.0_tp68_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp76_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1282459.0, excerpt=[TopicWord(w='avion', p=0.04868, h=None), TopicWord(w='vol', p=0.02812, h=None), TopicWord(w='appareil', p=0.0277, h=None), TopicWord(w='aviation', p=0.0203, h=None), TopicWord(w='pilote', p=0.01793, h=None)], words=[TopicWord(w='avion', p=0.04868, h=None), TopicWord(w='vol', p=0.02812, h=None), TopicWord(w='appareil', p=0.0277, h=None), TopicWord(w='aviation', p=0.0203, h=None), TopicWord(w='pilote', p=0.01793, h=None), TopicWord(w='bord', p=0.01618, h=None), TopicWord(w='air', p=0.01499, h=None), TopicWord(w='aéroport', p=0.01211, h=None), TopicWord(w='sol', p=0.01023, h=None), TopicWord(w='vitesse', p=0.00934, h=None)], model='tm-fr-all-v2.0'), relevance=0.033, topicUid='tm-fr-all-v2.0_tp76_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2001-11-16-a-i0018', type='ar', title='European Planning Observation Network', size=355, nbPages=1, pages=[Page(uid='luxland-2001-11-16-a-p0010', num=10, issueUid='luxland-2001-11-16-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f10/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f10/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='European Planning Observation Network This year the European Planning Observation Network (ESPON) 2006 Programme of the European Union is starting. Th', locations=[Entity(uid='aida-0001-54-Luxembourg_railway_station', relevance=2), Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2001-11-16-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2001, 11, 16, 0, 0, tzinfo=TzInfo(UTC)), year='2001'), matches=[ArticleMatch(fragment=') 2006 Programme of the European Union is starting. The ESPON was launched in the framework', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2001-11-16-a-p0010', coords=[251.0, 222.0, 609.0, 109.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f10/251,222,609,109/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2001-11-16-a-p0010', coords=[251.0, 355.0, 618.0, 660.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f10/251,355,618,660/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2001-11-16-a-p0010', coords=[251.0, 1033.0, 620.0, 2854.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkth7x0%2fpages%2f10/251,1033,620,2854/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2001, 11, 16, 0, 0, tzinfo=TzInfo(UTC)), year=2001, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2002-01-11-a-i0009', type='ar', title='Protection des données', size=1795, nbPages=2, pages=[Page(uid='luxland-2002-01-11-a-p0008', num=8, issueUid='luxland-2002-01-11-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None), Page(uid='luxland-2002-01-11-a-p0009', num=9, issueUid='luxland-2002-01-11-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Protection des données Gare au gorille ! anne heniqui Il est loin de faire l'unanimité, le projet de loi relatif à la protection des personnes à l'éga\", locations=[Entity(uid='aida-0001-54-Brussels', relevance=1), Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-François_Biltgen', relevance=2), Entity(uid='aida-0001-50-George_Orwell', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-2002-01-11-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2002, 1, 11, 0, 0, tzinfo=TzInfo(UTC)), year='2002'), matches=[ArticleMatch(fragment=\" European Union so that the destruction of critical evidence is not mandated. >■ L'organisation\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[949.0, 2474.0, 714.0, 111.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/949,2474,714,111/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[975.0, 2617.0, 1097.0, 142.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/975,2617,1097,142/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[848.0, 3140.0, 206.0, 31.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/848,3140,206,31/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[849.0, 3213.0, 627.0, 1724.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/849,3213,627,1724/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[1516.0, 3213.0, 631.0, 1726.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/1516,3213,631,1726/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[2188.0, 3629.0, 631.0, 1303.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/2188,3629,631,1303/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[2860.0, 3213.0, 628.0, 1729.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/2860,3213,628,1729/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[2198.0, 3054.0, 609.0, 523.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/2198,3054,609,523/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[1835.0, 610.0, 977.0, 1490.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/1835,610,977,1490/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0008', coords=[2859.0, 589.0, 708.0, 1749.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f8/2859,589,708,1749/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[140.0, 3190.0, 622.0, 1725.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/140,3190,622,1725/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[806.0, 3190.0, 624.0, 1726.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/806,3190,624,1726/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[1474.0, 3594.0, 624.0, 1303.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/1474,3594,624,1303/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[2141.0, 3190.0, 630.0, 1704.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/2141,3190,630,1704/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[2812.0, 3198.0, 640.0, 1687.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/2812,3198,640,1687/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[1494.0, 3050.0, 565.0, 478.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/1494,3050,565,478/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[140.0, 2353.0, 1683.0, 94.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/140,2353,1683,94/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-01-11-a-p0009', coords=[25.0, 595.0, 1805.0, 1736.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0547cb%2fpages%2f9/25,595,1805,1736/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2002, 1, 11, 0, 0, tzinfo=TzInfo(UTC)), year=2002, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp16_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1481661.0, excerpt=[TopicWord(w='conseil', p=0.12679, h=None), TopicWord(w='commission', p=0.07916, h=None), TopicWord(w='projet', p=0.03972, h=None), TopicWord(w='loi', p=0.0295, h=None), TopicWord(w='rapport', p=0.02175, h=None)], words=[TopicWord(w='conseil', p=0.12679, h=None), TopicWord(w='commission', p=0.07916, h=None), TopicWord(w='projet', p=0.03972, h=None), TopicWord(w='loi', p=0.0295, h=None), TopicWord(w='rapport', p=0.02175, h=None), TopicWord(w='discussion', p=0.02165, h=None), TopicWord(w='séance', p=0.02021, h=None), TopicWord(w='proposition', p=0.02014, h=None), TopicWord(w='voix', p=0.02001, h=None), TopicWord(w='question', p=0.01655, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp16_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp32_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1504222.0, excerpt=[TopicWord(w='travail', p=0.12078, h=None), TopicWord(w='grève', p=0.0275, h=None), TopicWord(w='personnel', p=0.02613, h=None), TopicWord(w='chômage', p=0.02585, h=None), TopicWord(w='syndicat', p=0.01578, h=None)], words=[TopicWord(w='travail', p=0.12078, h=None), TopicWord(w='grève', p=0.0275, h=None), TopicWord(w='personnel', p=0.02613, h=None), TopicWord(w='chômage', p=0.02585, h=None), TopicWord(w='syndicat', p=0.01578, h=None), TopicWord(w='temps', p=0.01383, h=None), TopicWord(w='situation', p=0.01297, h=None), TopicWord(w='industrie', p=0.01275, h=None), TopicWord(w='emploi', p=0.01265, h=None), TopicWord(w='semaine', p=0.01261, h=None)], model='tm-fr-all-v2.0'), relevance=0.046, topicUid='tm-fr-all-v2.0_tp32_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.095, topicUid='tm-fr-all-v2.0_tp71_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp77_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1703125.0, excerpt=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None)], words=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None), TopicWord(w='émission', p=0.01199, h=None), TopicWord(w='appareil', p=0.01075, h=None), TopicWord(w='écran', p=0.01009, h=None), TopicWord(w='service', p=0.00915, h=None), TopicWord(w='information', p=0.00913, h=None)], model='tm-fr-all-v2.0'), relevance=0.031, topicUid='tm-fr-all-v2.0_tp77_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp85_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1662988.0, excerpt=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None)], words=[TopicWord(w='vie', p=0.02054, h=None), TopicWord(w='monde', p=0.01448, h=None), TopicWord(w='mort', p=0.01395, h=None), TopicWord(w='foi', p=0.01333, h=None), TopicWord(w='peuple', p=0.01096, h=None), TopicWord(w='cœur', p=0.00964, h=None), TopicWord(w='âme', p=0.00906, h=None), TopicWord(w='amour', p=0.00874, h=None), TopicWord(w='temps', p=0.0084, h=None), TopicWord(w='force', p=0.00708, h=None)], model='tm-fr-all-v2.0'), relevance=0.054, topicUid='tm-fr-all-v2.0_tp85_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp87_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1457781.0, excerpt=[TopicWord(w='problème', p=0.01207, h=None), TopicWord(w='fait', p=0.01119, h=None), TopicWord(w='question', p=0.0103, h=None), TopicWord(w='exemple', p=0.01004, h=None), TopicWord(w='monde', p=0.00982, h=None)], words=[TopicWord(w='problème', p=0.01207, h=None), TopicWord(w='fait', p=0.01119, h=None), TopicWord(w='question', p=0.0103, h=None), TopicWord(w='exemple', p=0.01004, h=None), TopicWord(w='monde', p=0.00982, h=None), TopicWord(w='cas', p=0.00919, h=None), TopicWord(w='système', p=0.00893, h=None), TopicWord(w='politique', p=0.00787, h=None), TopicWord(w='temps', p=0.00767, h=None), TopicWord(w='société', p=0.00713, h=None)], model='tm-fr-all-v2.0'), relevance=0.218, topicUid='tm-fr-all-v2.0_tp87_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp95_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1425409.0, excerpt=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None)], words=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None), TopicWord(w='recours', p=0.01317, h=None), TopicWord(w='art', p=0.01269, h=None), TopicWord(w='vigueur', p=0.01123, h=None), TopicWord(w='projet', p=0.0108, h=None), TopicWord(w='décision', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.422, topicUid='tm-fr-all-v2.0_tp95_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2002-04-12-a-i0031', type='ar', title='Petition to the European Union', size=847, nbPages=1, pages=[Page(uid='luxland-2002-04-12-a-p0016', num=16, issueUid='luxland-2002-04-12-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Petition to the European Union As EU citizens living and working in Israel and the Occupied Palestinian Territories, and experiencing the current huma', locations=[Entity(uid='aida-0001-54-Israel', relevance=8), Entity(uid='aida-0001-54-Israeli-occupied_territories', relevance=2), Entity(uid='aida-0001-54-Brussels', relevance=2), Entity(uid='aida-0001-54-Ramallah', relevance=1), Entity(uid='aida-0001-54-Bethlehem', relevance=2)], persons=[Entity(uid='aida-0001-50-Romano_Prodi', relevance=1), Entity(uid='aida-0001-50-Javier_Solana', relevance=1), Entity(uid='aida-0001-50-Geneva_Conventions', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2002-04-12-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2002, 4, 12, 0, 0, tzinfo=TzInfo(UTC)), year='2002'), matches=[ArticleMatch(fragment='Petition to the European Union As EU citizens living and working in Israel and the Occupied', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' the following petition to the European Union. For the past two weeks the Israeli army has been occupying', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Organisations As a citizen of the European Union, I am deeply concerned by the ongoing violations of the most', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1606.0, 2566.0, 1280.0, 87.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1606,2566,1280,87/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 1860.0, 1938.0, 663.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,1860,1938,663/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 2688.0, 938.0, 367.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,2688,938,367/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 3099.0, 938.0, 240.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,3099,938,240/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 3387.0, 938.0, 242.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,3387,938,242/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 3676.0, 938.0, 284.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,3676,938,284/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 4007.0, 938.0, 119.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,4007,938,119/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 4172.0, 938.0, 119.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,4172,938,119/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1600.0, 4338.0, 938.0, 79.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1600,4338,938,79/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 4443.0, 938.0, 118.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,4443,938,118/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 4579.0, 940.0, 132.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,4579,940,132/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1601.0, 4726.0, 938.0, 76.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1601,4726,938,76/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[2613.0, 3582.0, 941.0, 1312.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/2613,3582,941,1312/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[1600.0, 4821.0, 941.0, 77.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/1600,4821,941,77/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[2613.0, 3337.0, 940.0, 92.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/2613,3337,940,92/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2002-04-12-a-p0016', coords=[2612.0, 2684.0, 941.0, 634.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fsnxbd3%2fpages%2f16/2612,2684,941,634/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2002, 4, 12, 0, 0, tzinfo=TzInfo(UTC)), year=2002, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='EXP-2002-06-11-a-i0229', type='ar', title=\"L'homme au centre des espaces\", size=605, nbPages=1, pages=[Page(uid='EXP-2002-06-11-a-p0023', num=23, issueUid='EXP-2002-06-11-a', newspaperUid='EXP', iiif='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"L'homme au centre des espaces J _^ r \\\\ 1 C \\\\ \\\\ r *_ WMZ 3 x F > IS f m jL il T M f I r _^ * _^ \\\\ mmmfimm \\\\ mlmmmmm Z I _Ai ___ L I <~~ I j _™ f r— X —\", locations=[Entity(uid='aida-0001-54-Lausanne', relevance=4), Entity(uid='aida-0001-54-Berlin', relevance=4), Entity(uid='aida-0001-54-Paris', relevance=1), Entity(uid='aida-0001-54-Bordeaux', relevance=1)], persons=[Entity(uid='aida-0001-50-Sauerbruch_Hutton', relevance=6)], language='fr', issue=NewspaperIssue(uid='EXP-2002-06-11-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2002, 6, 11, 0, 0, tzinfo=TzInfo(UTC)), year='2002'), matches=[ArticleMatch(fragment=\" de l'European Union Prize for Contempo rary Architecture, le bâtiment du GSW a largement contribué\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[86.0, 371.0, 3494.0, 293.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/86,371,3494,293/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[86.0, 15.0, 3494.0, 357.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/86,15,3494,357/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[86.0, 664.0, 3494.0, 152.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/86,664,3494,152/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[89.0, 883.0, 531.0, 875.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/89,883,531,875/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[91.0, 1761.0, 529.0, 772.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/91,1761,529,772/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[666.0, 1758.0, 2267.0, 61.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/666,1758,2267,61/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[666.0, 1820.0, 534.0, 720.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/666,1820,534,720/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[1247.0, 1854.0, 529.0, 684.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/1247,1854,529,684/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[1820.0, 1854.0, 534.0, 686.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/1820,1854,534,686/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[2393.0, 1820.0, 541.0, 720.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/2393,1820,541,720/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[2975.0, 883.0, 534.0, 733.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/2975,883,534,733/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[2975.0, 1620.0, 534.0, 733.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/2975,1620,534,733/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2002-06-11-a-p0023', coords=[2975.0, 2407.0, 536.0, 133.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2002-06-11-a-p0023/2975,2407,536,133/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2002, 6, 11, 0, 0, tzinfo=TzInfo(UTC)), year=2002, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='EXP', acronym='EXP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Express\", endYear=2018, startYear=1738, firstIssue=NewspaperIssue(uid='EXP-1740-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1740, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1740'), lastIssue=NewspaperIssue(uid='EXP-2017-10-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2017, 10, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2017'), countArticles=8397287, countIssues=46204, countPages=701819, fetched=True, deltaYear=280), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp05_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1500624.0, excerpt=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None)], words=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None), TopicWord(w='sécurité', p=0.01062, h=None), TopicWord(w='gouvernement', p=0.01039, h=None), TopicWord(w='attentat', p=0.01015, h=None), TopicWord(w='chef', p=0.01009, h=None), TopicWord(w='ministre', p=0.00956, h=None)], model='tm-fr-all-v2.0'), relevance=0.031, topicUid='tm-fr-all-v2.0_tp05_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp07_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1570564.0, excerpt=[TopicWord(w='exposition', p=0.06811, h=None), TopicWord(w='art', p=0.05445, h=None), TopicWord(w='artiste', p=0.03544, h=None), TopicWord(w='peintre', p=0.03066, h=None), TopicWord(w='histoire', p=0.02405, h=None)], words=[TopicWord(w='exposition', p=0.06811, h=None), TopicWord(w='art', p=0.05445, h=None), TopicWord(w='artiste', p=0.03544, h=None), TopicWord(w='peintre', p=0.03066, h=None), TopicWord(w='histoire', p=0.02405, h=None), TopicWord(w='peinture', p=0.02112, h=None), TopicWord(w='musée', p=0.01877, h=None), TopicWord(w='siècle', p=0.01664, h=None), TopicWord(w='jean', p=0.01415, h=None), TopicWord(w='collection', p=0.01307, h=None)], model='tm-fr-all-v2.0'), relevance=0.277, topicUid='tm-fr-all-v2.0_tp07_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp31_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640853.0, excerpt=[TopicWord(w='construction', p=0.03015, h=None), TopicWord(w='route', p=0.02937, h=None), TopicWord(w='place', p=0.02313, h=None), TopicWord(w='projet', p=0.02165, h=None), TopicWord(w='ville', p=0.01895, h=None)], words=[TopicWord(w='construction', p=0.03015, h=None), TopicWord(w='route', p=0.02937, h=None), TopicWord(w='place', p=0.02313, h=None), TopicWord(w='projet', p=0.02165, h=None), TopicWord(w='ville', p=0.01895, h=None), TopicWord(w='plan', p=0.01628, h=None), TopicWord(w='circulation', p=0.01552, h=None), TopicWord(w='chantier', p=0.01536, h=None), TopicWord(w='zone', p=0.01286, h=None), TopicWord(w='trafic', p=0.01257, h=None)], model='tm-fr-all-v2.0'), relevance=0.089, topicUid='tm-fr-all-v2.0_tp31_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp49_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1463344.0, excerpt=[TopicWord(w='scène', p=0.0466, h=None), TopicWord(w='théâtre', p=0.04411, h=None), TopicWord(w='spectacle', p=0.03562, h=None), TopicWord(w='pièce', p=0.0256, h=None), TopicWord(w='public', p=0.0244, h=None)], words=[TopicWord(w='scène', p=0.0466, h=None), TopicWord(w='théâtre', p=0.04411, h=None), TopicWord(w='spectacle', p=0.03562, h=None), TopicWord(w='pièce', p=0.0256, h=None), TopicWord(w='public', p=0.0244, h=None), TopicWord(w='salle', p=0.0182, h=None), TopicWord(w='soir', p=0.0176, h=None), TopicWord(w='soirée', p=0.01417, h=None), TopicWord(w='représentation', p=0.01371, h=None), TopicWord(w='succès', p=0.01361, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp49_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.026, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp77_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1703125.0, excerpt=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None)], words=[TopicWord(w='télévision', p=0.03162, h=None), TopicWord(w='radio', p=0.02261, h=None), TopicWord(w='chaîne', p=0.01648, h=None), TopicWord(w='système', p=0.01439, h=None), TopicWord(w='publicité', p=0.01315, h=None), TopicWord(w='émission', p=0.01199, h=None), TopicWord(w='appareil', p=0.01075, h=None), TopicWord(w='écran', p=0.01009, h=None), TopicWord(w='service', p=0.00915, h=None), TopicWord(w='information', p=0.00913, h=None)], model='tm-fr-all-v2.0'), relevance=0.037, topicUid='tm-fr-all-v2.0_tp77_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp78_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1563517.0, excerpt=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None)], words=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None), TopicWord(w='point', p=0.01016, h=None), TopicWord(w='temps', p=0.00958, h=None), TopicWord(w='progrès', p=0.0087, h=None), TopicWord(w='intérêt', p=0.00867, h=None), TopicWord(w='vue', p=0.00799, h=None)], model='tm-fr-all-v2.0'), relevance=0.229, topicUid='tm-fr-all-v2.0_tp78_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.14, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='IMP-2002-06-11-a-i0198', type='ar', title=\"L'homme au centre des espaces\", size=532, nbPages=1, pages=[Page(uid='IMP-2002-06-11-a-p0023', num=23, issueUid='IMP-2002-06-11-a', newspaperUid='IMP', iiif='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"L'homme au centre des espaces ''_^ r paraît chaque mardi et jeudi Architecture B Le Forum architectures Lausanne présente les travaux de Matthias Saue\", locations=[Entity(uid='aida-0001-54-Lausanne', relevance=4), Entity(uid='aida-0001-54-Berlin', relevance=4), Entity(uid='aida-0001-54-Paris', relevance=1), Entity(uid='aida-0001-54-Bordeaux', relevance=1)], persons=[Entity(uid='aida-0001-50-Sauerbruch_Hutton', relevance=7)], language='fr', issue=NewspaperIssue(uid='IMP-2002-06-11-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2002, 6, 11, 0, 0, tzinfo=TzInfo(UTC)), year='2002'), matches=[ArticleMatch(fragment=\" ou celles des bureaux de la tour GSW. Finaliste de l'European Union Prize for Contemporary Architecture\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[367.0, 475.0, 2986.0, 205.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/367,475,2986,205/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[152.0, 58.0, 3413.0, 362.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/152,58,3413,362/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[367.0, 681.0, 2986.0, 192.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/367,681,2986,192/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[150.0, 921.0, 528.0, 450.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/150,921,528,450/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[150.0, 1392.0, 528.0, 1179.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/150,1392,528,1179/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[725.0, 1800.0, 2264.0, 72.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/725,1800,2264,72/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[725.0, 1858.0, 528.0, 727.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/725,1858,528,727/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[1299.0, 1892.0, 533.0, 678.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/1299,1892,533,678/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[1878.0, 1892.0, 531.0, 692.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/1878,1892,531,692/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[2451.0, 1872.0, 538.0, 524.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/2451,1872,538,524/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[2458.0, 2405.0, 552.0, 180.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/2458,2405,552,180/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2002-06-11-a-p0023', coords=[3009.0, 921.0, 558.0, 1664.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2002-06-11-a-p0023/3009,921,558,1664/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2002, 6, 11, 0, 0, tzinfo=TzInfo(UTC)), year=2002, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='IMP', acronym='IMP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Impartial\", endYear=2018, startYear=1881, firstIssue=NewspaperIssue(uid='IMP-1881-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1881, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1881'), lastIssue=NewspaperIssue(uid='IMP-2018-01-22-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2018, 1, 22, 0, 0, tzinfo=TzInfo(UTC)), year='2018'), countArticles=7103161, countIssues=40228, countPages=756672, fetched=True, deltaYear=137), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp05_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1500624.0, excerpt=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None)], words=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None), TopicWord(w='sécurité', p=0.01062, h=None), TopicWord(w='gouvernement', p=0.01039, h=None), TopicWord(w='attentat', p=0.01015, h=None), TopicWord(w='chef', p=0.01009, h=None), TopicWord(w='ministre', p=0.00956, h=None)], model='tm-fr-all-v2.0'), relevance=0.067, topicUid='tm-fr-all-v2.0_tp05_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp07_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1570564.0, excerpt=[TopicWord(w='exposition', p=0.06811, h=None), TopicWord(w='art', p=0.05445, h=None), TopicWord(w='artiste', p=0.03544, h=None), TopicWord(w='peintre', p=0.03066, h=None), TopicWord(w='histoire', p=0.02405, h=None)], words=[TopicWord(w='exposition', p=0.06811, h=None), TopicWord(w='art', p=0.05445, h=None), TopicWord(w='artiste', p=0.03544, h=None), TopicWord(w='peintre', p=0.03066, h=None), TopicWord(w='histoire', p=0.02405, h=None), TopicWord(w='peinture', p=0.02112, h=None), TopicWord(w='musée', p=0.01877, h=None), TopicWord(w='siècle', p=0.01664, h=None), TopicWord(w='jean', p=0.01415, h=None), TopicWord(w='collection', p=0.01307, h=None)], model='tm-fr-all-v2.0'), relevance=0.288, topicUid='tm-fr-all-v2.0_tp07_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp31_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640853.0, excerpt=[TopicWord(w='construction', p=0.03015, h=None), TopicWord(w='route', p=0.02937, h=None), TopicWord(w='place', p=0.02313, h=None), TopicWord(w='projet', p=0.02165, h=None), TopicWord(w='ville', p=0.01895, h=None)], words=[TopicWord(w='construction', p=0.03015, h=None), TopicWord(w='route', p=0.02937, h=None), TopicWord(w='place', p=0.02313, h=None), TopicWord(w='projet', p=0.02165, h=None), TopicWord(w='ville', p=0.01895, h=None), TopicWord(w='plan', p=0.01628, h=None), TopicWord(w='circulation', p=0.01552, h=None), TopicWord(w='chantier', p=0.01536, h=None), TopicWord(w='zone', p=0.01286, h=None), TopicWord(w='trafic', p=0.01257, h=None)], model='tm-fr-all-v2.0'), relevance=0.082, topicUid='tm-fr-all-v2.0_tp31_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp78_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1563517.0, excerpt=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None)], words=[TopicWord(w='vie', p=0.01865, h=None), TopicWord(w='esprit', p=0.01474, h=None), TopicWord(w='pays', p=0.0144, h=None), TopicWord(w='travail', p=0.01423, h=None), TopicWord(w='effort', p=0.01203, h=None), TopicWord(w='point', p=0.01016, h=None), TopicWord(w='temps', p=0.00958, h=None), TopicWord(w='progrès', p=0.0087, h=None), TopicWord(w='intérêt', p=0.00867, h=None), TopicWord(w='vue', p=0.00799, h=None)], model='tm-fr-all-v2.0'), relevance=0.196, topicUid='tm-fr-all-v2.0_tp78_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp87_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1457781.0, excerpt=[TopicWord(w='problème', p=0.01207, h=None), TopicWord(w='fait', p=0.01119, h=None), TopicWord(w='question', p=0.0103, h=None), TopicWord(w='exemple', p=0.01004, h=None), TopicWord(w='monde', p=0.00982, h=None)], words=[TopicWord(w='problème', p=0.01207, h=None), TopicWord(w='fait', p=0.01119, h=None), TopicWord(w='question', p=0.0103, h=None), TopicWord(w='exemple', p=0.01004, h=None), TopicWord(w='monde', p=0.00982, h=None), TopicWord(w='cas', p=0.00919, h=None), TopicWord(w='système', p=0.00893, h=None), TopicWord(w='politique', p=0.00787, h=None), TopicWord(w='temps', p=0.00767, h=None), TopicWord(w='société', p=0.00713, h=None)], model='tm-fr-all-v2.0'), relevance=0.041, topicUid='tm-fr-all-v2.0_tp87_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.107, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2003-07-04-a-i0007', type='ar', title='Hochzeithalten mit Europa', size=1771, nbPages=2, pages=[Page(uid='luxland-2003-07-04-a-p0006', num=6, issueUid='luxland-2003-07-04-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None), Page(uid='luxland-2003-07-04-a-p0007', num=7, issueUid='luxland-2003-07-04-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Nach dem positiven Votum der Bevölkerung zum EU-Beitritt beginnt in Polen die Auseinandersetzung mit dem Klerus Hochzeithalten mit Europa Peter Feist ', locations=[Entity(uid='aida-0001-54-Auch', relevance=1), Entity(uid='aida-0001-54-Mission$2c$_Texas', relevance=1), Entity(uid='aida-0001-54-Landes_$28$department$29$', relevance=1)], persons=[Entity(uid='aida-0001-50-Johannes_Pauli', relevance=1), Entity(uid='aida-0001-50-Danuta_Hübner', relevance=1), Entity(uid='aida-0001-50-Genowefa_Grabowska', relevance=1)], language='de', issue=NewspaperIssue(uid='luxland-2003-07-04-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2003, 7, 4, 0, 0, tzinfo=TzInfo(UTC)), year='2003'), matches=[ArticleMatch(fragment=' zum Beitrittsvertrag einfügen ließ: „Nothing in the provisions of the Treaty on European Union (...) prevents the', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[191.0, 1901.0, 1283.0, 279.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/191,1901,1283,279/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[310.0, 2408.0, 1828.0, 134.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/310,2408,1828,134/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[188.0, 2779.0, 158.0, 40.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/188,2779,158,40/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[185.0, 2872.0, 621.0, 725.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/185,2872,621,725/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[185.0, 3608.0, 612.0, 113.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/185,3608,612,113/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[184.0, 3794.0, 618.0, 288.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/184,3794,618,288/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[178.0, 4099.0, 623.0, 775.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/178,4099,623,775/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[849.0, 2868.0, 625.0, 2016.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/849,2868,625,2016/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[1520.0, 3233.0, 623.0, 1647.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/1520,3233,623,1647/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[2190.0, 2870.0, 620.0, 2010.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/2190,2870,620,2010/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[2860.0, 2870.0, 621.0, 2010.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/2860,2870,621,2010/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[1572.0, 2769.0, 477.0, 285.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/1572,2769,477,285/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[1209.0, 419.0, 33.0, 283.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/1209,419,33,283/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[1260.0, 420.0, 888.0, 1325.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/1260,420,888,1325/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0006', coords=[2195.0, 413.0, 1335.0, 1332.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f6/2195,413,1335,1332/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[102.0, 2910.0, 618.0, 1283.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/102,2910,618,1283/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[759.0, 2926.0, 627.0, 1264.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/759,2926,627,1264/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[1423.0, 3330.0, 641.0, 874.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/1423,3330,641,874/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[2102.0, 2925.0, 627.0, 1266.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/2102,2925,627,1266/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[2767.0, 2925.0, 622.0, 1266.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/2767,2925,622,1266/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[1490.0, 2825.0, 484.0, 333.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/1490,2825,484,333/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[2775.0, 1260.0, 393.0, 543.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/2775,1260,393,543/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[35.0, 471.0, 693.0, 1329.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/35,471,693,1329/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-07-04-a-p0007', coords=[762.0, 453.0, 1966.0, 1353.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzgvz77%2fpages%2f7/762,453,1966,1353/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2003, 7, 4, 0, 0, tzinfo=TzInfo(UTC)), year=2003, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp14_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338280.0, excerpt=[TopicWord(w='kirche', p=0.09606, h=None), TopicWord(w='papst', p=0.02938, h=None), TopicWord(w='bischof', p=0.02341, h=None), TopicWord(w='pfarrer', p=0.02311, h=None), TopicWord(w='predigt', p=0.02298, h=None)], words=[TopicWord(w='kirche', p=0.09606, h=None), TopicWord(w='papst', p=0.02938, h=None), TopicWord(w='bischof', p=0.02341, h=None), TopicWord(w='pfarrer', p=0.02311, h=None), TopicWord(w='predigt', p=0.02298, h=None), TopicWord(w='messe', p=0.02065, h=None), TopicWord(w='sonntag', p=0.0135, h=None), TopicWord(w='gottesdienst', p=0.01349, h=None), TopicWord(w='rom', p=0.01341, h=None), TopicWord(w='priester', p=0.01298, h=None)], model='tm-de-all-v2.0'), relevance=0.078, topicUid='tm-de-all-v2.0_tp14_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.237, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp21_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=287403.0, excerpt=[TopicWord(w='arbeitnehmer', p=0.02313, h=None), TopicWord(w='arbeitgeber', p=0.01602, h=None), TopicWord(w='lohn', p=0.01368, h=None), TopicWord(w='gewerkschaft', p=0.01099, h=None), TopicWord(w='arbeit', p=0.01084, h=None)], words=[TopicWord(w='arbeitnehmer', p=0.02313, h=None), TopicWord(w='arbeitgeber', p=0.01602, h=None), TopicWord(w='lohn', p=0.01368, h=None), TopicWord(w='gewerkschaft', p=0.01099, h=None), TopicWord(w='arbeit', p=0.01084, h=None), TopicWord(w='gewerkschaftsbund', p=0.00909, h=None), TopicWord(w='prozent', p=0.0089, h=None), TopicWord(w='arbeitszeit', p=0.0088, h=None), TopicWord(w='versicherung', p=0.00743, h=None), TopicWord(w='gesamtarbeitsvertrag', p=0.00682, h=None)], model='tm-de-all-v2.0'), relevance=0.05, topicUid='tm-de-all-v2.0_tp21_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp24_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=367703.0, excerpt=[TopicWord(w='könig', p=0.04759, h=None), TopicWord(w='kaiser', p=0.023, h=None), TopicWord(w='königin', p=0.01754, h=None), TopicWord(w='prinz', p=0.01596, h=None), TopicWord(w='prinzessin', p=0.01072, h=None)], words=[TopicWord(w='könig', p=0.04759, h=None), TopicWord(w='kaiser', p=0.023, h=None), TopicWord(w='königin', p=0.01754, h=None), TopicWord(w='prinz', p=0.01596, h=None), TopicWord(w='prinzessin', p=0.01072, h=None), TopicWord(w='stadt', p=0.01023, h=None), TopicWord(w='herzog', p=0.01015, h=None), TopicWord(w='wilhelm', p=0.00856, h=None), TopicWord(w='von', p=0.00822, h=None), TopicWord(w='graf', p=0.00798, h=None)], model='tm-de-all-v2.0'), relevance=0.022, topicUid='tm-de-all-v2.0_tp24_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp29_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=327204.0, excerpt=[TopicWord(w='prozent', p=0.1771, h=None), TopicWord(w='zahl', p=0.02992, h=None), TopicWord(w='franke', p=0.01873, h=None), TopicWord(w='ende', p=0.01631, h=None), TopicWord(w='zunahme', p=0.01371, h=None)], words=[TopicWord(w='prozent', p=0.1771, h=None), TopicWord(w='zahl', p=0.02992, h=None), TopicWord(w='franke', p=0.01873, h=None), TopicWord(w='ende', p=0.01631, h=None), TopicWord(w='zunahme', p=0.01371, h=None), TopicWord(w='vorjahr', p=0.01341, h=None), TopicWord(w='schweiz', p=0.01256, h=None), TopicWord(w='anteil', p=0.00963, h=None), TopicWord(w='entwicklung', p=0.00954, h=None), TopicWord(w='rückgang', p=0.00933, h=None)], model='tm-de-all-v2.0'), relevance=0.092, topicUid='tm-de-all-v2.0_tp29_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp32_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=308129.0, excerpt=[TopicWord(w='regierung', p=0.01272, h=None), TopicWord(w='bonn', p=0.01271, h=None), TopicWord(w='bundesrepublik', p=0.00998, h=None), TopicWord(w='moskau', p=0.00972, h=None), TopicWord(w='präsident', p=0.0095, h=None)], words=[TopicWord(w='regierung', p=0.01272, h=None), TopicWord(w='bonn', p=0.01271, h=None), TopicWord(w='bundesrepublik', p=0.00998, h=None), TopicWord(w='moskau', p=0.00972, h=None), TopicWord(w='präsident', p=0.0095, h=None), TopicWord(w='sowjetunion', p=0.00853, h=None), TopicWord(w='seite', p=0.00839, h=None), TopicWord(w='usa', p=0.00808, h=None), TopicWord(w='dpa', p=0.00624, h=None), TopicWord(w='upi', p=0.00604, h=None)], model='tm-de-all-v2.0'), relevance=0.022, topicUid='tm-de-all-v2.0_tp32_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp56_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=385840.0, excerpt=[TopicWord(w='ausstellung', p=0.04868, h=None), TopicWord(w='kunst', p=0.02836, h=None), TopicWord(w='künstler', p=0.0185, h=None), TopicWord(w='galerie', p=0.01688, h=None), TopicWord(w='museum', p=0.01451, h=None)], words=[TopicWord(w='ausstellung', p=0.04868, h=None), TopicWord(w='kunst', p=0.02836, h=None), TopicWord(w='künstler', p=0.0185, h=None), TopicWord(w='galerie', p=0.01688, h=None), TopicWord(w='museum', p=0.01451, h=None), TopicWord(w='bild', p=0.01308, h=None), TopicWord(w='maler', p=0.01307, h=None), TopicWord(w='arbeit', p=0.00976, h=None), TopicWord(w='sammlung', p=0.0097, h=None), TopicWord(w='malerei', p=0.00925, h=None)], model='tm-de-all-v2.0'), relevance=0.038, topicUid='tm-de-all-v2.0_tp56_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp61_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=379567.0, excerpt=[TopicWord(w='regierung', p=0.02144, h=None), TopicWord(w='berlin', p=0.01812, h=None), TopicWord(w='pol', p=0.01774, h=None), TopicWord(w='partei', p=0.01207, h=None), TopicWord(w='wien', p=0.01051, h=None)], words=[TopicWord(w='regierung', p=0.02144, h=None), TopicWord(w='berlin', p=0.01812, h=None), TopicWord(w='pol', p=0.01774, h=None), TopicWord(w='partei', p=0.01207, h=None), TopicWord(w='wien', p=0.01051, h=None), TopicWord(w='deutschland', p=0.0103, h=None), TopicWord(w='ungarn', p=0.01026, h=None), TopicWord(w='hitler', p=0.00865, h=None), TopicWord(w='führer', p=0.00838, h=None), TopicWord(w='minister', p=0.00784, h=None)], model='tm-de-all-v2.0'), relevance=0.161, topicUid='tm-de-all-v2.0_tp61_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp85_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=400054.0, excerpt=[TopicWord(w='art', p=0.07423, h=None), TopicWord(w='recht', p=0.02524, h=None), TopicWord(w='gesetz', p=0.01939, h=None), TopicWord(w='fall', p=0.01621, h=None), TopicWord(w='artikel', p=0.0147, h=None)], words=[TopicWord(w='art', p=0.07423, h=None), TopicWord(w='recht', p=0.02524, h=None), TopicWord(w='gesetz', p=0.01939, h=None), TopicWord(w='fall', p=0.01621, h=None), TopicWord(w='artikel', p=0.0147, h=None), TopicWord(w='bundesgericht', p=0.01147, h=None), TopicWord(w='frage', p=0.00822, h=None), TopicWord(w='grund', p=0.00811, h=None), TopicWord(w='bestimmung', p=0.00776, h=None), TopicWord(w='verordnung', p=0.00761, h=None)], model='tm-de-all-v2.0'), relevance=0.028, topicUid='tm-de-all-v2.0_tp85_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp86_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=397759.0, excerpt=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None)], words=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None), TopicWord(w='volk', p=0.00987, h=None), TopicWord(w='recht', p=0.00946, h=None), TopicWord(w='kampf', p=0.00811, h=None), TopicWord(w='macht', p=0.00723, h=None), TopicWord(w='sozialismus', p=0.00609, h=None)], model='tm-de-all-v2.0'), relevance=0.086, topicUid='tm-de-all-v2.0_tp86_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp93_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=344837.0, excerpt=[TopicWord(w='schiff', p=0.04213, h=None), TopicWord(w='flugzeug', p=0.01973, h=None), TopicWord(w='bord', p=0.01662, h=None), TopicWord(w='dampfer', p=0.01186, h=None), TopicWord(w='hafen', p=0.01121, h=None)], words=[TopicWord(w='schiff', p=0.04213, h=None), TopicWord(w='flugzeug', p=0.01973, h=None), TopicWord(w='bord', p=0.01662, h=None), TopicWord(w='dampfer', p=0.01186, h=None), TopicWord(w='hafen', p=0.01121, h=None), TopicWord(w='see', p=0.01014, h=None), TopicWord(w='kapitän', p=0.01002, h=None), TopicWord(w='meter', p=0.00961, h=None), TopicWord(w='flug', p=0.0094, h=None), TopicWord(w='fahrt', p=0.00901, h=None)], model='tm-de-all-v2.0'), relevance=0.022, topicUid='tm-de-all-v2.0_tp93_de')], content=None, mentions=[], v=None), Article(uid='luxland-2003-10-31-a-i0029', type='ar', title='European Union Youth Orchestra-Euyo', size=123, nbPages=1, pages=[Page(uid='luxland-2003-10-31-a-p0012', num=12, issueUid='luxland-2003-10-31-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f1gcp90%2fpages%2f12/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f1gcp90%2fpages%2f12/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"European Union Youth Orchestra-Euyo Orchestre symphonique L'Orchestre des Jeunes de l'Union européenne recrute, par voie d'audition, de jeunes musicie\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-Pascal_Lee', relevance=1), Entity(uid='aida-0001-50-Vladimir_Ashkenazy', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-2003-10-31-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2003, 10, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2003'), matches=[ArticleMatch(fragment=\"European Union Youth Orchestra-Euyo Orchestre symphonique L'Orchestre des Jeunes de l'Union\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2003-10-31-a-p0012', coords=[2265.0, 201.0, 615.0, 116.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f1gcp90%2fpages%2f12/2265,201,615,116/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2003-10-31-a-p0012', coords=[2265.0, 335.0, 624.0, 1037.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f1gcp90%2fpages%2f12/2265,335,624,1037/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2003, 10, 31, 0, 0, tzinfo=TzInfo(UTC)), year=2003, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.039, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp12_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1251072.0, excerpt=[TopicWord(w='bateau', p=0.04614, h=None), TopicWord(w='mer', p=0.04476, h=None), TopicWord(w='lac', p=0.03402, h=None), TopicWord(w='bord', p=0.03391, h=None), TopicWord(w='port', p=0.02761, h=None)], words=[TopicWord(w='bateau', p=0.04614, h=None), TopicWord(w='mer', p=0.04476, h=None), TopicWord(w='lac', p=0.03402, h=None), TopicWord(w='bord', p=0.03391, h=None), TopicWord(w='port', p=0.02761, h=None), TopicWord(w='île', p=0.0247, h=None), TopicWord(w='eau', p=0.02154, h=None), TopicWord(w='navire', p=0.01869, h=None), TopicWord(w='côte', p=0.01376, h=None), TopicWord(w='vapeur', p=0.01317, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp12_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp29_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1342277.0, excerpt=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None)], words=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None), TopicWord(w='nation', p=0.01448, h=None), TopicWord(w='monde', p=0.01274, h=None), TopicWord(w='gouvernement', p=0.01088, h=None), TopicWord(w='situation', p=0.00931, h=None), TopicWord(w='discours', p=0.00769, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp29_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp37_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1629711.0, excerpt=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None)], words=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None), TopicWord(w='question', p=0.01606, h=None), TopicWord(w='fait', p=0.01434, h=None), TopicWord(w='propos', p=0.01279, h=None), TopicWord(w='sujet', p=0.01251, h=None), TopicWord(w='cas', p=0.01111, h=None)], model='tm-fr-all-v2.0'), relevance=0.025, topicUid='tm-fr-all-v2.0_tp37_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp43_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1940529.0, excerpt=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None)], words=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None), TopicWord(w='viande', p=0.01298, h=None), TopicWord(w='sucre', p=0.0121, h=None), TopicWord(w='lait', p=0.01183, h=None), TopicWord(w='litre', p=0.0116, h=None), TopicWord(w='verre', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.044, topicUid='tm-fr-all-v2.0_tp43_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp56_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1626587.0, excerpt=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None)], words=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None), TopicWord(w='commission', p=0.01335, h=None), TopicWord(w='projet', p=0.01329, h=None), TopicWord(w='séance', p=0.012, h=None), TopicWord(w='bâtiment', p=0.01082, h=None), TopicWord(w='terrain', p=0.0103, h=None)], model='tm-fr-all-v2.0'), relevance=0.335, topicUid='tm-fr-all-v2.0_tp56_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp64_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1683510.0, excerpt=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None)], words=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None), TopicWord(w='loi', p=0.01024, h=None), TopicWord(w='droit', p=0.00984, h=None), TopicWord(w='temps', p=0.00949, h=None), TopicWord(w='lieu', p=0.00876, h=None), TopicWord(w='moment', p=0.00798, h=None)], model='tm-fr-all-v2.0'), relevance=0.081, topicUid='tm-fr-all-v2.0_tp64_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp68_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1758519.0, excerpt=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None)], words=[TopicWord(w='moteur', p=0.04244, h=None), TopicWord(w='voiture', p=0.03008, h=None), TopicWord(w='sécurité', p=0.01486, h=None), TopicWord(w='arrière', p=0.0132, h=None), TopicWord(w='place', p=0.01284, h=None), TopicWord(w='modèle', p=0.0126, h=None), TopicWord(w='essence', p=0.01248, h=None), TopicWord(w='pneu', p=0.01248, h=None), TopicWord(w='vitesse', p=0.01078, h=None), TopicWord(w='confort', p=0.01042, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp68_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp79_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1221404.0, excerpt=[TopicWord(w='tir', p=0.07371, h=None), TopicWord(w='gauche', p=0.05973, h=None), TopicWord(w='droite', p=0.05536, h=None), TopicWord(w='page', p=0.02455, h=None), TopicWord(w='main', p=0.01981, h=None)], words=[TopicWord(w='tir', p=0.07371, h=None), TopicWord(w='gauche', p=0.05973, h=None), TopicWord(w='droite', p=0.05536, h=None), TopicWord(w='page', p=0.02455, h=None), TopicWord(w='main', p=0.01981, h=None), TopicWord(w='coup', p=0.01833, h=None), TopicWord(w='foi', p=0.01738, h=None), TopicWord(w='partie', p=0.01396, h=None), TopicWord(w='mot', p=0.01362, h=None), TopicWord(w='stand', p=0.01322, h=None)], model='tm-fr-all-v2.0'), relevance=0.025, topicUid='tm-fr-all-v2.0_tp79_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp89_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1256154.0, excerpt=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None)], words=[TopicWord(w='marché', p=0.0378, h=None), TopicWord(w='taux', p=0.03275, h=None), TopicWord(w='cours', p=0.02892, h=None), TopicWord(w='hausse', p=0.02781, h=None), TopicWord(w='baisse', p=0.02336, h=None), TopicWord(w='dollar', p=0.01568, h=None), TopicWord(w='semaine', p=0.01509, h=None), TopicWord(w='mois', p=0.01249, h=None), TopicWord(w='indice', p=0.01047, h=None), TopicWord(w='intérêt', p=0.01027, h=None)], model='tm-fr-all-v2.0'), relevance=0.021, topicUid='tm-fr-all-v2.0_tp89_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2004-01-30-a-i0049', type='ar', title='Project and Events Officer (contract until end 2006) In charge of:', size=434, nbPages=1, pages=[Page(uid='luxland-2004-01-30-a-p0020', num=20, issueUid='luxland-2004-01-30-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Project and Events Officer (contract until end 2006) In charge of: Task A : assisting INTERREG IIIC project developers, candidates and applicants on p', locations=[Entity(uid='aida-0001-54-Lead_vocalist', relevance=1), Entity(uid='aida-0001-54-Lille', relevance=1), Entity(uid='aida-0001-54-France', relevance=1)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2004-01-30-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 1, 30, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' into consideration to score eligible candidates and grant seniority in the salary scale) - Knowledge of European', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Union institutions and policies, Cohesion policy in particular, preferably through practical experience', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-01-30-a-p0020', coords=[936.0, 3416.0, 519.0, 106.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/936,3416,519,106/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-01-30-a-p0020', coords=[936.0, 3552.0, 434.0, 35.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/936,3552,434,35/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-01-30-a-p0020', coords=[936.0, 3615.0, 209.0, 35.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/936,3615,209,35/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-01-30-a-p0020', coords=[935.0, 3679.0, 617.0, 1146.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/935,3679,617,1146/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-01-30-a-p0020', coords=[1601.0, 185.0, 618.0, 3757.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fjk62t1%2fpages%2f20/1601,185,618,3757/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 1, 30, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-04-30-a-i0096', type='ar', title='A Lithuanian Perspective', size=958, nbPages=1, pages=[Page(uid='luxland-2004-04-30-a-p0033', num=33, issueUid='luxland-2004-04-30-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='A Lithuanian Perspective In a few days we will be Europeans... Virginija Poskute Lithuania, as well as nine either eastern and central European states', locations=[Entity(uid='aida-0001-54-Lithuania', relevance=7), Entity(uid='aida-0001-54-Prague', relevance=1), Entity(uid='aida-0001-54-Latvia', relevance=1), Entity(uid='aida-0001-54-Estonia', relevance=1), Entity(uid='aida-0001-54-Spain', relevance=1)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2004-04-30-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 4, 30, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' as nine either eastern and central European states, will become members of the European Union tomorrow', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' 200 000 people emigrated from Spain to other European Union states in 1970, but only 2-3 000 per ve-ar', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[1511.0, 1768.0, 672.0, 41.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/1511,1768,672,41/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[1514.0, 1844.0, 1657.0, 297.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/1514,1844,1657,297/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[1417.0, 2240.0, 268.0, 41.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/1417,2240,268,41/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[1416.0, 2317.0, 612.0, 2565.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/1416,2317,612,2565/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[2078.0, 2903.0, 612.0, 1169.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/2078,2903,612,1169/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[2078.0, 4155.0, 612.0, 725.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/2078,4155,612,725/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[2741.0, 2311.0, 614.0, 2299.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/2741,2311,614,2299/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[2740.0, 4714.0, 618.0, 165.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/2740,4714,618,165/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[2123.0, 2220.0, 493.0, 509.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/2123,2220,493,509/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[1722.0, 485.0, 1632.0, 1103.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/1722,485,1632,1103/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 4, 30, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-04-30-a-i0093', type='ar', title='The New Europe', size=2567, nbPages=2, pages=[Page(uid='luxland-2004-04-30-a-p0032', num=32, issueUid='luxland-2004-04-30-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None), Page(uid='luxland-2004-04-30-a-p0033', num=33, issueUid='luxland-2004-04-30-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='The New Europe Who is gaining, what are the risks? Alfred Steinherr 1 May is the date, long-awaited in Central Europe and carefully prepared by the Eu', locations=[Entity(uid=\"aida-0001-54-Much_the_Miller's_Son\", relevance=2), Entity(uid='aida-0001-54-Ireland', relevance=4), Entity(uid='aida-0001-54-Spain', relevance=1), Entity(uid='aida-0001-54-Germany', relevance=5), Entity(uid='aida-0001-54-Austria', relevance=2), Entity(uid='aida-0001-54-France', relevance=3), Entity(uid='aida-0001-54-Italy', relevance=3), Entity(uid='aida-0001-54-Estonia', relevance=7), Entity(uid='aida-0001-54-Slovakia', relevance=7), Entity(uid='aida-0001-54-Czech_Republic', relevance=2), Entity(uid='aida-0001-54-Munich', relevance=1), Entity(uid='aida-0001-54-Rome', relevance=1), Entity(uid='aida-0001-54-Portugal', relevance=1), Entity(uid='aida-0001-54-Luxembourg', relevance=2), Entity(uid='aida-0001-54-Finland', relevance=1), Entity(uid='aida-0001-54-Sweden', relevance=1), Entity(uid='aida-0001-54-Cambridge', relevance=2)], persons=[Entity(uid='aida-0001-50-Daniel_Gros', relevance=2), Entity(uid='aida-0001-50-Federal_Ministry_for_Matters_of_the_Marshall_Plan_$28$Germany$29$', relevance=2), Entity(uid='aida-0001-50-Daniel_Gross', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2004-04-30-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 4, 30, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' 15 years. In terms of GNP per capita Ireland is now the second richest country of the European Union', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment='. Much of the gains derive from the membership in the European Union that provides a uniform legal space', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' economic structures and standing are gaining most from joining a rich club, such as the European Union', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' projects and reserve these funds for economically sound uses. Membership in the European Union does', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=\" the economic situation in the European Union of the earlv 1990's the new members exhibit much less divergence\", coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' of the central European countries is already now closer to the structure of the European Union than those', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' of the European Union as all new members are poor, face similar problems and could easily act as a decision', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' the European Union is increasing disproportionately. The problem is to a large extent a problem of the European', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=', it is imperative tei aeloptassoon as possible the Fairopean Constitution. The expanded European Union', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Union. Many reforms should have been carried out to make the Union ready for expansion. Instead on has', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[296.0, 493.0, 452.0, 56.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/296,493,452,56/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[415.0, 648.0, 2835.0, 164.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/415,648,2835,164/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[296.0, 1159.0, 250.0, 28.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/296,1159,250,28/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[291.0, 1314.0, 623.0, 2481.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/291,1314,623,2481/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[961.0, 1240.0, 616.0, 252.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/961,1240,616,252/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[955.0, 1525.0, 622.0, 1172.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/955,1525,622,1172/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[957.0, 2742.0, 620.0, 768.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/957,2742,620,768/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[956.0, 3544.0, 620.0, 252.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/956,3544,620,252/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1627.0, 1642.0, 615.0, 414.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1627,1642,615,414/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1627.0, 2103.0, 615.0, 246.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1627,2103,615,246/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1625.0, 2363.0, 620.0, 628.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1625,2363,620,628/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1614.0, 3037.0, 625.0, 933.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1614,3037,625,933/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1619.0, 4016.0, 620.0, 553.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1619,4016,620,553/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1619.0, 4576.0, 614.0, 80.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1619,4576,614,80/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1619.0, 4692.0, 615.0, 167.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1619,4692,615,167/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[2287.0, 2343.0, 617.0, 975.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/2287,2343,617,975/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[2284.0, 3401.0, 618.0, 1458.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/2284,3401,618,1458/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[2952.0, 2345.0, 618.0, 725.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/2952,2345,618,725/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[2949.0, 3109.0, 620.0, 1416.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/2949,3109,620,1416/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[2948.0, 4564.0, 616.0, 295.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/2948,4564,616,295/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0032', coords=[1674.0, 1143.0, 464.0, 334.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f32/1674,1143,464,334/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[88.0, 1791.0, 612.0, 1230.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/88,1791,612,1230/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[90.0, 3040.0, 610.0, 845.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/90,3040,610,845/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[89.0, 3903.0, 611.0, 979.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/89,3903,611,979/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[751.0, 1266.0, 615.0, 2532.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/751,1266,615,2532/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[753.0, 3942.0, 610.0, 957.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/753,3942,610,957/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-04-30-a-p0033', coords=[129.0, 1165.0, 479.0, 446.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp09s3v%2fpages%2f33/129,1165,479,446/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 4, 30, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-05-07-a-i0028', type='ar', title='The betrayal of the „elites\"', size=560, nbPages=1, pages=[Page(uid='luxland-2004-05-07-a-p0014', num=14, issueUid='luxland-2004-05-07-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='The betrayal of the „elites\" It seems however that they were rather haunted by this perspective of freedom, that they are longing for a firm hand, a c', locations=[Entity(uid='aida-0001-54-United_Kingdom', relevance=1), Entity(uid='aida-0001-54-Spain', relevance=1), Entity(uid='aida-0001-54-Italy', relevance=1), Entity(uid='aida-0001-54-Poland', relevance=1)], persons=[Entity(uid='aida-0001-50-Václav_Havel', relevance=1), Entity(uid='aida-0001-50-Adam_Michnik', relevance=1), Entity(uid='aida-0001-50-György_Konrád', relevance=1), Entity(uid='aida-0001-50-André_Glucksmann', relevance=1), Entity(uid='aida-0001-50-Bernard-Henri_Lévy', relevance=1), Entity(uid='aida-0001-50-Jacques_Derrida', relevance=1), Entity(uid='aida-0001-50-Ramsey_Clark', relevance=1), Entity(uid='aida-0001-50-Scott_Ritter', relevance=1), Entity(uid='aida-0001-50-Hans_von_Sponeck', relevance=1), Entity(uid='aida-0001-50-Immanuel_Wallerstein', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2004-05-07-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 5, 7, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' intellectual and moral disarray, the political softening, the growing strategic irrelevance. The European Union', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[255.0, 1881.0, 537.0, 44.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/255,1881,537,44/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[248.0, 1959.0, 630.0, 2848.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/248,1959,630,2848/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[928.0, 629.0, 622.0, 575.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/928,629,622,575/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[1588.0, 629.0, 618.0, 575.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/1588,629,618,575/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[2255.0, 1046.0, 620.0, 172.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/2255,1046,620,172/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[2920.0, 627.0, 623.0, 344.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/2920,627,623,344/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[2920.0, 1053.0, 618.0, 159.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/2920,1053,618,159/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 5, 7, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-05-07-a-i0027', type='ar', title='A Europe whole, divided and helpless', size=511, nbPages=2, pages=[Page(uid='luxland-2004-05-07-a-p0013', num=13, issueUid='luxland-2004-05-07-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f13/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f13/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None), Page(uid='luxland-2004-05-07-a-p0014', num=14, issueUid='luxland-2004-05-07-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='A Europe whole, divided and helpless Europe has nothing meaningful to oppose to the US design, not an enlightened, liberal, progressive agenda and not', locations=[Entity(uid='aida-0001-54-Great_Britain', relevance=1), Entity(uid='aida-0001-54-France', relevance=1), Entity(uid='aida-0001-54-Iraq', relevance=1)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2004-05-07-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 5, 7, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' a strong will, harmless and gutless, worn out by centuries of civil strife. The European Union is seen', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-05-07-a-p0013', coords=[2090.0, 3672.0, 612.0, 80.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f13/2090,3672,612,80/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0013', coords=[2090.0, 3793.0, 614.0, 587.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f13/2090,3793,614,587/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0013', coords=[2090.0, 4430.0, 612.0, 372.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f13/2090,4430,612,372/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0013', coords=[2753.0, 2711.0, 615.0, 1964.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f13/2753,2711,615,1964/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-07-a-p0014', coords=[251.0, 622.0, 625.0, 1225.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f9756nd%2fpages%2f14/251,622,625,1225/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 5, 7, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-05-21-a-i0025', type='ar', title='Economic Effects of EU Enlargement', size=594, nbPages=1, pages=[Page(uid='luxland-2004-05-21-a-p0016', num=16, issueUid='luxland-2004-05-21-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Economic Effects of EU Enlargement An Interview with Professor Marek Dabrowski,former Polish Deputy Finance Minister and head of Casa, Warsaw Intervie', locations=[Entity(uid='aida-0001-54-Warsaw', relevance=1), Entity(uid='aida-0001-54-Slovenia', relevance=1), Entity(uid='aida-0001-54-Portugal', relevance=1), Entity(uid='aida-0001-54-Greece', relevance=1)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2004-05-21-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 5, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' the new member states should be careful. Cinter: Why did the European Union impose to the new member', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' states the implementation of the whole \"acquis communautaire\" before entering in the European Union', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment='. For the European Union this strategy means that the risks of the enlargement of the hard core of values, regulation', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[1671.0, 1333.0, 1235.0, 233.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/1671,1333,1235,233/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[1570.0, 973.0, 1129.0, 270.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/1570,973,1129,270/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[1572.0, 1671.0, 147.0, 27.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/1572,1671,147,27/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[1735.0, 1671.0, 253.0, 27.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/1735,1671,253,27/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[1570.0, 1744.0, 614.0, 124.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/1570,1744,614,124/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[1561.0, 1901.0, 625.0, 2919.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/1561,1901,625,2919/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[2228.0, 1744.0, 621.0, 762.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/2228,1744,621,762/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[2898.0, 1744.0, 614.0, 112.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/2898,1744,614,112/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-05-21-a-p0016', coords=[2892.0, 1968.0, 620.0, 549.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fkgp9xk%2fpages%2f16/2892,1968,620,549/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 5, 21, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='FZG-2004-05-28-a-i0093', type='ar', title='Die Schweiz stellt 20 Mann für Bosnien A...', size=178, nbPages=1, pages=[Page(uid='FZG-2004-05-28-a-p0017', num=17, issueUid='FZG-2004-05-28-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-2004-05-28-a-p0017', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-2004-05-28-a-p0017/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Die Schweiz stellt 20 Mann für Bosnien Ab Ende 2004 soll die von der EU geführte European Union Force ( Eufor ) die Nato-Friedenstruppe Sfor mit einer', locations=[Entity(uid='aida-0001-54-Switzerland', relevance=4)], persons=[], language='de', issue=NewspaperIssue(uid='FZG-2004-05-28-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 5, 28, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment='Die Schweiz stellt 20 Mann für Bosnien Ab Ende 2004 soll die von der EU geführte European Union', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-2004-05-28-a-p0017', coords=[2118.0, 1532.0, 581.0, 820.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2004-05-28-a-p0017/2118,1532,581,820/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2004-05-28-a-p0017', coords=[2118.0, 2357.0, 581.0, 754.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2004-05-28-a-p0017/2118,2357,581,754/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 5, 28, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp06_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=284106.0, excerpt=[TopicWord(w='armee', p=0.04539, h=None), TopicWord(w='oberst', p=0.02517, h=None), TopicWord(w='mann', p=0.02178, h=None), TopicWord(w='major', p=0.01526, h=None), TopicWord(w='hauptmann', p=0.0145, h=None)], words=[TopicWord(w='armee', p=0.04539, h=None), TopicWord(w='oberst', p=0.02517, h=None), TopicWord(w='mann', p=0.02178, h=None), TopicWord(w='major', p=0.01526, h=None), TopicWord(w='hauptmann', p=0.0145, h=None), TopicWord(w='dienst', p=0.01336, h=None), TopicWord(w='general', p=0.01328, h=None), TopicWord(w='division', p=0.01291, h=None), TopicWord(w='kommandant', p=0.01239, h=None), TopicWord(w='bataillon', p=0.01116, h=None)], model='tm-de-all-v2.0'), relevance=0.311, topicUid='tm-de-all-v2.0_tp06_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp09_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=230824.0, excerpt=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None)], words=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None), TopicWord(w='brown', p=0.01322, h=None), TopicWord(w='serie', p=0.013, h=None), TopicWord(w='inhaber', p=0.01295, h=None), TopicWord(w='general', p=0.01284, h=None), TopicWord(w='bank', p=0.01273, h=None)], model='tm-de-all-v2.0'), relevance=0.047, topicUid='tm-de-all-v2.0_tp09_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.29, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp48_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=385232.0, excerpt=[TopicWord(w='bundesrat', p=0.08307, h=None), TopicWord(w='schweiz', p=0.02738, h=None), TopicWord(w='nationalrat', p=0.02574, h=None), TopicWord(w='bern', p=0.02109, h=None), TopicWord(w='ständerat', p=0.01437, h=None)], words=[TopicWord(w='bundesrat', p=0.08307, h=None), TopicWord(w='schweiz', p=0.02738, h=None), TopicWord(w='nationalrat', p=0.02574, h=None), TopicWord(w='bern', p=0.02109, h=None), TopicWord(w='ständerat', p=0.01437, h=None), TopicWord(w='kommission', p=0.01202, h=None), TopicWord(w='bund', p=0.01186, h=None), TopicWord(w='vorlage', p=0.01037, h=None), TopicWord(w='initiative', p=0.00914, h=None), TopicWord(w='frage', p=0.00774, h=None)], model='tm-de-all-v2.0'), relevance=0.036, topicUid='tm-de-all-v2.0_tp48_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp82_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=325654.0, excerpt=[TopicWord(w='italien', p=0.06496, h=None), TopicWord(w='rom', p=0.04835, h=None), TopicWord(w='türkei', p=0.02261, h=None), TopicWord(w='mailand', p=0.0209, h=None), TopicWord(w='griechenland', p=0.01906, h=None)], words=[TopicWord(w='italien', p=0.06496, h=None), TopicWord(w='rom', p=0.04835, h=None), TopicWord(w='türkei', p=0.02261, h=None), TopicWord(w='mailand', p=0.0209, h=None), TopicWord(w='griechenland', p=0.01906, h=None), TopicWord(w='athen', p=0.01616, h=None), TopicWord(w='regierung', p=0.01256, h=None), TopicWord(w='bulgarien', p=0.01232, h=None), TopicWord(w='konstantinopel', p=0.01106, h=None), TopicWord(w='italiener', p=0.01089, h=None)], model='tm-de-all-v2.0'), relevance=0.092, topicUid='tm-de-all-v2.0_tp82_de')], content=None, mentions=[], v=None), Article(uid='LLE-2004-05-28-a-i0100', type='ar', title=\"SUISSE /£\\\\ L'armée veut s'acheter deux a...\", size=1048, nbPages=1, pages=[Page(uid='LLE-2004-05-28-a-p0009', num=9, issueUid='LLE-2004-05-28-a', newspaperUid='LLE', iiif='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='SUISSE / £ \\\\ L armée veut s acheter deux avions de transport pour mieux coopérer La Suisse s engagera en Bosnie ARMEMENT • En prêtant ces deux petits ', locations=[Entity(uid='aida-0001-54-Suisse$2c$_Moselle', relevance=5), Entity(uid='aida-0001-54-Eindhoven', relevance=1), Entity(uid='aida-0001-54-Belgium', relevance=1), Entity(uid='aida-0001-54-France', relevance=1), Entity(uid='aida-0001-54-Claude_Dallemagne', relevance=1), Entity(uid='aida-0001-54-Italy', relevance=1), Entity(uid='aida-0001-54-Netherlands', relevance=1)], persons=[Entity(uid='aida-0001-50-Samuel_Schmid', relevance=4)], language='fr', issue=NewspaperIssue(uid='LLE-2004-05-28-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 5, 28, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' militaires nécessaire . L armée suisse avait déjà effectué des suisses à lEUFOR ( European Union Force', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[97.0, 200.0, 2545.0, 611.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/97,200,2545,611/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[1254.0, 3280.0, 1208.0, 94.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/1254,3280,1208,94/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[91.0, 843.0, 2833.0, 148.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/91,843,2833,148/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[91.0, 1043.0, 529.0, 440.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/91,1043,529,440/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[91.0, 1483.0, 529.0, 246.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/91,1483,529,246/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[91.0, 1729.0, 529.0, 280.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/91,1729,529,280/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[91.0, 2026.0, 529.0, 145.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/91,2026,529,145/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[97.0, 2220.0, 523.0, 369.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/97,2220,523,369/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[97.0, 2591.0, 528.0, 366.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/97,2591,528,366/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[97.0, 2957.0, 528.0, 369.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/97,2957,528,369/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[97.0, 3329.0, 528.0, 245.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/97,3329,528,245/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[97.0, 3574.0, 528.0, 280.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/97,3574,528,280/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[680.0, 1043.0, 1248.0, 57.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/680,1043,1248,57/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[680.0, 1100.0, 157.0, 57.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/680,1100,157,57/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[857.0, 1100.0, 1845.0, 226.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/857,1100,1845,226/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[857.0, 1326.0, 1071.0, 174.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/857,1326,1071,174/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[951.0, 1497.0, 206.0, 112.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/951,1497,206,112/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[951.0, 1609.0, 206.0, 117.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/951,1609,206,117/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[2019.0, 1366.0, 545.0, 325.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/2019,1366,545,325/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[2599.0, 1371.0, 125.0, 129.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/2599,1371,125,129/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[2050.0, 1780.0, 500.0, 129.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/2050,1780,500,129/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[671.0, 2426.0, 2256.0, 74.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/671,2426,2256,74/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[671.0, 2591.0, 528.0, 80.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/671,2591,528,80/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[671.0, 2711.0, 528.0, 326.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/671,2711,528,326/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[671.0, 3043.0, 528.0, 366.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/671,3043,528,366/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[671.0, 3411.0, 528.0, 446.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/671,3411,528,446/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[1245.0, 2591.0, 528.0, 283.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/1245,2591,528,283/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[1251.0, 2880.0, 522.0, 283.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/1251,2880,522,283/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[1825.0, 2597.0, 1102.0, 277.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/1825,2597,1102,277/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[1825.0, 2880.0, 1102.0, 283.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/1825,2880,1102,283/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[1251.0, 3409.0, 1668.0, 448.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/1251,3409,1668,448/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-05-28-a-p0009', coords=[740.0, 1043.0, 2002.0, 988.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-05-28-a-p0009/740,1043,2002,988/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 5, 28, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='LLE', acronym='LLE', labels=['newspaper'], languages=['fr'], properties=[], included=True, name='La Liberté', endYear=2018, startYear=1871, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=147), dataProvider='SNL', topics=[], content=None, mentions=[], v=None), Article(uid='LLE-2004-08-03-a-i0245', type='ar', title='La ville, ce champ de déplacements', size=503, nbPages=1, pages=[Page(uid='LLE-2004-08-03-a-p0031', num=31, issueUid='LLE-2004-08-03-a', newspaperUid='LLE', iiif='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='La ville , ce champ de déplacements ARCHITECTURE • Zaha Hadid lauréate du Mies Van der Rohe 2003 à Strasbourg . Question de transports JACQUES STERCHI', locations=[Entity(uid='aida-0001-54-Strasbourg', relevance=3)], persons=[Entity(uid='aida-0001-50-Zaha_Hadid', relevance=6), Entity(uid='aida-0001-50-European_Union_Prize_for_Contemporary_Architecture', relevance=2)], language='fr', issue=NewspaperIssue(uid='LLE-2004-08-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' à Strasbourg . Question de transports JACQUES STERCHI Le European Union Prize for contemporary Architecture', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[100.0, 4156.0, 1988.0, 146.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/100,4156,1988,146/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[91.0, 4322.0, 2280.0, 65.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/91,4322,2280,65/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[91.0, 4416.0, 526.0, 400.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/91,4416,526,400/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[91.0, 4824.0, 526.0, 243.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/91,4824,526,243/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[91.0, 5067.0, 526.0, 246.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/91,5067,526,246/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[663.0, 4413.0, 534.0, 454.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/663,4413,534,454/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[663.0, 4867.0, 534.0, 449.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/663,4867,534,449/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[1243.0, 4416.0, 528.0, 368.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/1243,4416,528,368/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[1243.0, 4787.0, 531.0, 400.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/1243,4787,531,400/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[1243.0, 5201.0, 528.0, 112.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/1243,5201,528,112/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[1820.0, 4416.0, 531.0, 368.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/1820,4416,531,368/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[1820.0, 4787.0, 531.0, 409.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/1820,4787,531,409/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[1820.0, 5213.0, 534.0, 108.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/1820,5213,534,108/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[2400.0, 5278.0, 517.0, 43.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/2400,5278,517,43/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[3154.0, 5287.0, 357.0, 26.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/3154,5287,357,26/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2004-08-03-a-p0031', coords=[2400.0, 4156.0, 1114.0, 1117.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2004-08-03-a-p0031/2400,4156,1114,1117/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 8, 3, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='LLE', acronym='LLE', labels=['newspaper'], languages=['fr'], properties=[], included=True, name='La Liberté', endYear=2018, startYear=1871, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=147), dataProvider='SNL', topics=[], content=None, mentions=[], v=None), Article(uid='FZG-2004-09-03-a-i0049', type='ar', title='Ja zum Botsrhaftssrhiitz', size=191, nbPages=1, pages=[Page(uid='FZG-2004-09-03-a-p0014', num=14, issueUid='FZG-2004-09-03-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-2004-09-03-a-p0014', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-2004-09-03-a-p0014/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='Ja zum Botsrhaftssrhiitz Die Armee-Einsätze zur Unterstüt- als drei Wochen dauern . Das Gleiche zung ziviler Behörden sollen bis En- gilt für die neu ', locations=[Entity(uid='aida-0001-54-Switzerland', relevance=2), Entity(uid='aida-0001-54-Auch', relevance=1)], persons=[], language='de', issue=NewspaperIssue(uid='FZG-2004-09-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 9, 3, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' werden . Oppositi- der Schweiz an der EU-geführten onslos stimmt die Sicherheitspoliti- European Union Force ( Eufor', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-2004-09-03-a-p0014', coords=[913.0, 2516.0, 1012.0, 79.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2004-09-03-a-p0014/913,2516,1012,79/full/0/default.png', g=None), ArticleRegion(pageUid='FZG-2004-09-03-a-p0014', coords=[777.0, 2647.0, 1274.0, 721.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2004-09-03-a-p0014/777,2647,1274,721/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 9, 3, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp00_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=265405.0, excerpt=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None)], words=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None), TopicWord(w='jan', p=0.01266, h=None), TopicWord(w='prozent', p=0.01098, h=None), TopicWord(w='berlin', p=0.01095, h=None), TopicWord(w='dez', p=0.0102, h=None), TopicWord(w='union', p=0.01004, h=None)], model='tm-de-all-v2.0'), relevance=0.035, topicUid='tm-de-all-v2.0_tp00_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp06_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=284106.0, excerpt=[TopicWord(w='armee', p=0.04539, h=None), TopicWord(w='oberst', p=0.02517, h=None), TopicWord(w='mann', p=0.02178, h=None), TopicWord(w='major', p=0.01526, h=None), TopicWord(w='hauptmann', p=0.0145, h=None)], words=[TopicWord(w='armee', p=0.04539, h=None), TopicWord(w='oberst', p=0.02517, h=None), TopicWord(w='mann', p=0.02178, h=None), TopicWord(w='major', p=0.01526, h=None), TopicWord(w='hauptmann', p=0.0145, h=None), TopicWord(w='dienst', p=0.01336, h=None), TopicWord(w='general', p=0.01328, h=None), TopicWord(w='division', p=0.01291, h=None), TopicWord(w='kommandant', p=0.01239, h=None), TopicWord(w='bataillon', p=0.01116, h=None)], model='tm-de-all-v2.0'), relevance=0.212, topicUid='tm-de-all-v2.0_tp06_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp08_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=325655.0, excerpt=[TopicWord(w='partei', p=0.07804, h=None), TopicWord(w='wahl', p=0.03224, h=None), TopicWord(w='mehrheit', p=0.01791, h=None), TopicWord(w='liste', p=0.01532, h=None), TopicWord(w='wähler', p=0.01297, h=None)], words=[TopicWord(w='partei', p=0.07804, h=None), TopicWord(w='wahl', p=0.03224, h=None), TopicWord(w='mehrheit', p=0.01791, h=None), TopicWord(w='liste', p=0.01532, h=None), TopicWord(w='wähler', p=0.01297, h=None), TopicWord(w='volkspartei', p=0.00967, h=None), TopicWord(w='wahlgang', p=0.00853, h=None), TopicWord(w='wahlkreis', p=0.00824, h=None), TopicWord(w='kandidat', p=0.00821, h=None), TopicWord(w='kandidatur', p=0.00817, h=None)], model='tm-de-all-v2.0'), relevance=0.064, topicUid='tm-de-all-v2.0_tp08_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp09_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=230824.0, excerpt=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None)], words=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None), TopicWord(w='brown', p=0.01322, h=None), TopicWord(w='serie', p=0.013, h=None), TopicWord(w='inhaber', p=0.01295, h=None), TopicWord(w='general', p=0.01284, h=None), TopicWord(w='bank', p=0.01273, h=None)], model='tm-de-all-v2.0'), relevance=0.027, topicUid='tm-de-all-v2.0_tp09_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.084, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp42_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=314533.0, excerpt=[TopicWord(w='regierung', p=0.01706, h=None), TopicWord(w='israel', p=0.01663, h=None), TopicWord(w='kairo', p=0.00886, h=None), TopicWord(w='präsident', p=0.00782, h=None), TopicWord(w='jerusalem', p=0.00727, h=None)], words=[TopicWord(w='regierung', p=0.01706, h=None), TopicWord(w='israel', p=0.01663, h=None), TopicWord(w='kairo', p=0.00886, h=None), TopicWord(w='präsident', p=0.00782, h=None), TopicWord(w='jerusalem', p=0.00727, h=None), TopicWord(w='irak', p=0.00676, h=None), TopicWord(w='seite', p=0.00665, h=None), TopicWord(w='montag', p=0.00656, h=None), TopicWord(w='usa', p=0.00625, h=None), TopicWord(w='reuter', p=0.00611, h=None)], model='tm-de-all-v2.0'), relevance=0.043, topicUid='tm-de-all-v2.0_tp42_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp48_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=385232.0, excerpt=[TopicWord(w='bundesrat', p=0.08307, h=None), TopicWord(w='schweiz', p=0.02738, h=None), TopicWord(w='nationalrat', p=0.02574, h=None), TopicWord(w='bern', p=0.02109, h=None), TopicWord(w='ständerat', p=0.01437, h=None)], words=[TopicWord(w='bundesrat', p=0.08307, h=None), TopicWord(w='schweiz', p=0.02738, h=None), TopicWord(w='nationalrat', p=0.02574, h=None), TopicWord(w='bern', p=0.02109, h=None), TopicWord(w='ständerat', p=0.01437, h=None), TopicWord(w='kommission', p=0.01202, h=None), TopicWord(w='bund', p=0.01186, h=None), TopicWord(w='vorlage', p=0.01037, h=None), TopicWord(w='initiative', p=0.00914, h=None), TopicWord(w='frage', p=0.00774, h=None)], model='tm-de-all-v2.0'), relevance=0.253, topicUid='tm-de-all-v2.0_tp48_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp52_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=411914.0, excerpt=[TopicWord(w='regierung', p=0.02742, h=None), TopicWord(w='paris', p=0.02119, h=None), TopicWord(w='konferenz', p=0.02106, h=None), TopicWord(w='frankreich', p=0.02095, h=None), TopicWord(w='frage', p=0.01727, h=None)], words=[TopicWord(w='regierung', p=0.02742, h=None), TopicWord(w='paris', p=0.02119, h=None), TopicWord(w='konferenz', p=0.02106, h=None), TopicWord(w='frankreich', p=0.02095, h=None), TopicWord(w='frage', p=0.01727, h=None), TopicWord(w='deutschland', p=0.01409, h=None), TopicWord(w='völkerbund', p=0.01343, h=None), TopicWord(w='genf', p=0.01243, h=None), TopicWord(w='london', p=0.01048, h=None), TopicWord(w='vertrag', p=0.0098, h=None)], model='tm-de-all-v2.0'), relevance=0.031, topicUid='tm-de-all-v2.0_tp52_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp77_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=340315.0, excerpt=[TopicWord(w='regierung', p=0.02362, h=None), TopicWord(w='afp', p=0.01425, h=None), TopicWord(w='sowjetunion', p=0.01321, h=None), TopicWord(w='reuter', p=0.01311, h=None), TopicWord(w='moskau', p=0.01267, h=None)], words=[TopicWord(w='regierung', p=0.02362, h=None), TopicWord(w='afp', p=0.01425, h=None), TopicWord(w='sowjetunion', p=0.01321, h=None), TopicWord(w='reuter', p=0.01311, h=None), TopicWord(w='moskau', p=0.01267, h=None), TopicWord(w='washington', p=0.01109, h=None), TopicWord(w='präsident', p=0.00955, h=None), TopicWord(w='außenminister', p=0.00953, h=None), TopicWord(w='united', p=0.00952, h=None), TopicWord(w='london', p=0.00914, h=None)], model='tm-de-all-v2.0'), relevance=0.022, topicUid='tm-de-all-v2.0_tp77_de')], content=None, mentions=[], v=None), Article(uid='EXP-2004-09-30-a-i0226', type='ar', title='Un accord sur la gestion des crises', size=467, nbPages=1, pages=[Page(uid='EXP-2004-09-30-a-p0025', num=25, issueUid='EXP-2004-09-30-a', newspaperUid='EXP', iiif='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Un accord sur la gestion des crises Sécurité i Berne et l'Union européenne signeront lundi un texte qui fixera les modalités de participation aux opér\", locations=[Entity(uid='aida-0001-54-Brussels', relevance=1), Entity(uid='aida-0001-54-Switzerland', relevance=4), Entity(uid='aida-0001-54-Mission_$28$LDS_Church$29$', relevance=2), Entity(uid='aida-0001-54-Macedonia_$28$food$29$', relevance=1), Entity(uid='aida-0001-54-FK_Sarajevo', relevance=1), Entity(uid='aida-0001-54-Portugal', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='EXP-2004-09-30-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 9, 30, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=\". Berne a dépêché quatre policiers en Bosnie, dans le cadre de l'opération EUPM (European Union Police\", coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=\" quatre policiers en Bosnie dans le cadre de l'opération « European Union Police Mission » (EUPM\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[93.0, 3069.0, 2860.0, 204.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/93,3069,2860,204/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[93.0, 3273.0, 2860.0, 219.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/93,3273,2860,219/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[91.0, 3507.0, 529.0, 1099.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/91,3507,529,1099/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[96.0, 4640.0, 524.0, 671.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/96,4640,524,671/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[671.0, 4795.0, 1694.0, 157.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/671,4795,1694,157/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[671.0, 4952.0, 541.0, 359.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/671,4952,541,359/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[1212.0, 4952.0, 595.0, 359.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/1212,4952,595,359/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[1807.0, 4952.0, 558.0, 359.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/1807,4952,558,359/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[2412.0, 3502.0, 534.0, 369.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/2412,3502,534,369/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2004-09-30-a-p0025', coords=[2412.0, 3902.0, 534.0, 1409.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2004-09-30-a-p0025/2412,3902,534,1409/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 9, 30, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='EXP', acronym='EXP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Express\", endYear=2018, startYear=1738, firstIssue=NewspaperIssue(uid='EXP-1740-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1740, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1740'), lastIssue=NewspaperIssue(uid='EXP-2017-10-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2017, 10, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2017'), countArticles=8397287, countIssues=46204, countPages=701819, fetched=True, deltaYear=280), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.138, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.025, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp20_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1223370.0, excerpt=[TopicWord(w='armée', p=0.05311, h=None), TopicWord(w='colonel', p=0.04556, h=None), TopicWord(w='service', p=0.03314, h=None), TopicWord(w='major', p=0.03161, h=None), TopicWord(w='chef', p=0.0308, h=None)], words=[TopicWord(w='armée', p=0.05311, h=None), TopicWord(w='colonel', p=0.04556, h=None), TopicWord(w='service', p=0.03314, h=None), TopicWord(w='major', p=0.03161, h=None), TopicWord(w='chef', p=0.0308, h=None), TopicWord(w='général', p=0.02955, h=None), TopicWord(w='commandant', p=0.02487, h=None), TopicWord(w='corps', p=0.02394, h=None), TopicWord(w='capitaine', p=0.02096, h=None), TopicWord(w='bataillon', p=0.01929, h=None)], model='tm-fr-all-v2.0'), relevance=0.02, topicUid='tm-fr-all-v2.0_tp20_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp23_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1606303.0, excerpt=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None)], words=[TopicWord(w='assurance', p=0.05705, h=None), TopicWord(w='fonds', p=0.0296, h=None), TopicWord(w='prime', p=0.02813, h=None), TopicWord(w='caisse', p=0.02607, h=None), TopicWord(w='cas', p=0.02548, h=None), TopicWord(w='maladie', p=0.02173, h=None), TopicWord(w='somme', p=0.0212, h=None), TopicWord(w='frais', p=0.01906, h=None), TopicWord(w='argent', p=0.01292, h=None), TopicWord(w='montant', p=0.01283, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp23_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp46_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1842321.0, excerpt=[TopicWord(w='suisse', p=0.55947, h=None), TopicWord(w='pays', p=0.09134, h=None), TopicWord(w='asile', p=0.01526, h=None), TopicWord(w='étranger', p=0.01004, h=None), TopicWord(w='canton', p=0.00978, h=None)], words=[TopicWord(w='suisse', p=0.55947, h=None), TopicWord(w='pays', p=0.09134, h=None), TopicWord(w='asile', p=0.01526, h=None), TopicWord(w='étranger', p=0.01004, h=None), TopicWord(w='canton', p=0.00978, h=None), TopicWord(w='fin', p=0.00806, h=None), TopicWord(w='italien', p=0.0068, h=None), TopicWord(w='séjour', p=0.0066, h=None), TopicWord(w='monde', p=0.00655, h=None), TopicWord(w='allemand', p=0.00646, h=None)], model='tm-fr-all-v2.0'), relevance=0.071, topicUid='tm-fr-all-v2.0_tp46_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp52_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1227788.0, excerpt=[TopicWord(w='front', p=0.02305, h=None), TopicWord(w='armée', p=0.02116, h=None), TopicWord(w='guerre', p=0.01898, h=None), TopicWord(w='ennemi', p=0.01845, h=None), TopicWord(w='nord', p=0.01778, h=None)], words=[TopicWord(w='front', p=0.02305, h=None), TopicWord(w='armée', p=0.02116, h=None), TopicWord(w='guerre', p=0.01898, h=None), TopicWord(w='ennemi', p=0.01845, h=None), TopicWord(w='nord', p=0.01778, h=None), TopicWord(w='région', p=0.01743, h=None), TopicWord(w='sud', p=0.01716, h=None), TopicWord(w='général', p=0.01712, h=None), TopicWord(w='allemand', p=0.01697, h=None), TopicWord(w='attaque', p=0.01489, h=None)], model='tm-fr-all-v2.0'), relevance=0.048, topicUid='tm-fr-all-v2.0_tp52_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.425, topicUid='tm-fr-all-v2.0_tp71_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.053, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='IMP-2004-09-30-a-i0199', type='ar', title='Un accord sur la gestion des crises', size=468, nbPages=1, pages=[Page(uid='IMP-2004-09-30-a-p0023', num=23, issueUid='IMP-2004-09-30-a', newspaperUid='IMP', iiif='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Un accord sur la gestion des crises Sécurité M Berne et l'Union européenne signeront lundi un texte qui fixera les modalités de participation aux opér\", locations=[Entity(uid='aida-0001-54-Brussels', relevance=1), Entity(uid='aida-0001-54-Suisse$2c$_Moselle', relevance=4), Entity(uid='aida-0001-54-Mission_$28$LDS_Church$29$', relevance=2), Entity(uid='aida-0001-54-Macedonia_$28$food$29$', relevance=1), Entity(uid='aida-0001-54-Sarajevo', relevance=1), Entity(uid='aida-0001-54-Portugal', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='IMP-2004-09-30-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 9, 30, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=\". Berne a dépêché quatre policiers en Bosnie, dans le cadre de l'opération EUPM (European Union Police\", coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=\" quatre policiers en Bosnie dans le cadre de l'opération « European Union Police Mission » (EUPM\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[78.0, 1332.0, 1134.0, 84.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/78,1332,1134,84/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[49.0, 1416.0, 1196.0, 98.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/49,1416,1196,98/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[25.0, 1520.0, 233.0, 475.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/25,1520,233,475/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[27.0, 2009.0, 231.0, 264.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/27,2009,231,264/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[280.0, 2074.0, 731.0, 56.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/280,2074,731,56/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[280.0, 2154.0, 229.0, 117.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/280,2154,229,117/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[531.0, 2154.0, 227.0, 117.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/531,2154,227,117/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[780.0, 2154.0, 229.0, 114.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/780,2154,229,114/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[1033.0, 1516.0, 227.0, 158.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/1033,1516,227,158/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2004-09-30-a-p0023', coords=[1031.0, 1690.0, 229.0, 579.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2004-09-30-a-p0023/1031,1690,229,579/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 9, 30, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='IMP', acronym='IMP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Impartial\", endYear=2018, startYear=1881, firstIssue=NewspaperIssue(uid='IMP-1881-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1881, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1881'), lastIssue=NewspaperIssue(uid='IMP-2018-01-22-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2018, 1, 22, 0, 0, tzinfo=TzInfo(UTC)), year='2018'), countArticles=7103161, countIssues=40228, countPages=756672, fetched=True, deltaYear=137), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.157, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp20_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1223370.0, excerpt=[TopicWord(w='armée', p=0.05311, h=None), TopicWord(w='colonel', p=0.04556, h=None), TopicWord(w='service', p=0.03314, h=None), TopicWord(w='major', p=0.03161, h=None), TopicWord(w='chef', p=0.0308, h=None)], words=[TopicWord(w='armée', p=0.05311, h=None), TopicWord(w='colonel', p=0.04556, h=None), TopicWord(w='service', p=0.03314, h=None), TopicWord(w='major', p=0.03161, h=None), TopicWord(w='chef', p=0.0308, h=None), TopicWord(w='général', p=0.02955, h=None), TopicWord(w='commandant', p=0.02487, h=None), TopicWord(w='corps', p=0.02394, h=None), TopicWord(w='capitaine', p=0.02096, h=None), TopicWord(w='bataillon', p=0.01929, h=None)], model='tm-fr-all-v2.0'), relevance=0.041, topicUid='tm-fr-all-v2.0_tp20_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp46_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1842321.0, excerpt=[TopicWord(w='suisse', p=0.55947, h=None), TopicWord(w='pays', p=0.09134, h=None), TopicWord(w='asile', p=0.01526, h=None), TopicWord(w='étranger', p=0.01004, h=None), TopicWord(w='canton', p=0.00978, h=None)], words=[TopicWord(w='suisse', p=0.55947, h=None), TopicWord(w='pays', p=0.09134, h=None), TopicWord(w='asile', p=0.01526, h=None), TopicWord(w='étranger', p=0.01004, h=None), TopicWord(w='canton', p=0.00978, h=None), TopicWord(w='fin', p=0.00806, h=None), TopicWord(w='italien', p=0.0068, h=None), TopicWord(w='séjour', p=0.0066, h=None), TopicWord(w='monde', p=0.00655, h=None), TopicWord(w='allemand', p=0.00646, h=None)], model='tm-fr-all-v2.0'), relevance=0.061, topicUid='tm-fr-all-v2.0_tp46_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp52_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1227788.0, excerpt=[TopicWord(w='front', p=0.02305, h=None), TopicWord(w='armée', p=0.02116, h=None), TopicWord(w='guerre', p=0.01898, h=None), TopicWord(w='ennemi', p=0.01845, h=None), TopicWord(w='nord', p=0.01778, h=None)], words=[TopicWord(w='front', p=0.02305, h=None), TopicWord(w='armée', p=0.02116, h=None), TopicWord(w='guerre', p=0.01898, h=None), TopicWord(w='ennemi', p=0.01845, h=None), TopicWord(w='nord', p=0.01778, h=None), TopicWord(w='région', p=0.01743, h=None), TopicWord(w='sud', p=0.01716, h=None), TopicWord(w='général', p=0.01712, h=None), TopicWord(w='allemand', p=0.01697, h=None), TopicWord(w='attaque', p=0.01489, h=None)], model='tm-fr-all-v2.0'), relevance=0.042, topicUid='tm-fr-all-v2.0_tp52_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp63_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1574104.0, excerpt=[TopicWord(w='groupe', p=0.06533, h=None), TopicWord(w='société', p=0.05334, h=None), TopicWord(w='entreprise', p=0.02533, h=None), TopicWord(w='chiffre', p=0.01945, h=None), TopicWord(w='marché', p=0.01576, h=None)], words=[TopicWord(w='groupe', p=0.06533, h=None), TopicWord(w='société', p=0.05334, h=None), TopicWord(w='entreprise', p=0.02533, h=None), TopicWord(w='chiffre', p=0.01945, h=None), TopicWord(w='marché', p=0.01576, h=None), TopicWord(w='bénéfice', p=0.01539, h=None), TopicWord(w='banque', p=0.014, h=None), TopicWord(w='année', p=0.01386, h=None), TopicWord(w='capital', p=0.01082, h=None), TopicWord(w='direction', p=0.0106, h=None)], model='tm-fr-all-v2.0'), relevance=0.024, topicUid='tm-fr-all-v2.0_tp63_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.344, topicUid='tm-fr-all-v2.0_tp71_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.166, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2004-11-05-a-i0037', type='ar', title=\"Postes vacants Orchestre des Jeunes de l'Union Européenne\", size=147, nbPages=1, pages=[Page(uid='luxland-2004-11-05-a-p0018', num=18, issueUid='luxland-2004-11-05-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw4d7fc%2fpages%2f18/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw4d7fc%2fpages%2f18/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Postes vacants Orchestre des Jeunes de l'Union Européenne European Union Youth Orchestra - EUYO L'Orchestre des Jeunes de l'Union Européenne (orchestr\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-Bernard_Haitink', relevance=1), Entity(uid='aida-0001-50-John_Eliot_Gardiner', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-2004-11-05-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 11, 5, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=\"Postes vacants Orchestre des Jeunes de l'Union Européenne European Union Youth Orchestra - EUYO\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-11-05-a-p0018', coords=[948.0, 2807.0, 407.0, 37.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw4d7fc%2fpages%2f18/948,2807,407,37/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-11-05-a-p0018', coords=[992.0, 2900.0, 564.0, 82.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw4d7fc%2fpages%2f18/992,2900,564,82/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-11-05-a-p0018', coords=[948.0, 3018.0, 620.0, 1416.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fw4d7fc%2fpages%2f18/948,3018,620,1416/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 11, 5, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp01_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2308017.0, excerpt=[TopicWord(w='étage', p=0.08392, h=None), TopicWord(w='chambre', p=0.06676, h=None), TopicWord(w='cuisine', p=0.05488, h=None), TopicWord(w='suite', p=0.04608, h=None), TopicWord(w='bureau', p=0.03783, h=None)], words=[TopicWord(w='étage', p=0.08392, h=None), TopicWord(w='chambre', p=0.06676, h=None), TopicWord(w='cuisine', p=0.05488, h=None), TopicWord(w='suite', p=0.04608, h=None), TopicWord(w='bureau', p=0.03783, h=None), TopicWord(w='appartement', p=0.03348, h=None), TopicWord(w='logement', p=0.0324, h=None), TopicWord(w='soleil', p=0.03007, h=None), TopicWord(w='maison', p=0.02261, h=None), TopicWord(w='jardin', p=0.02008, h=None)], model='tm-fr-all-v2.0'), relevance=0.079, topicUid='tm-fr-all-v2.0_tp01_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp03_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1390445.0, excerpt=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None)], words=[TopicWord(w='gouvernement', p=0.04781, h=None), TopicWord(w='conférence', p=0.0339, h=None), TopicWord(w='accord', p=0.02596, h=None), TopicWord(w='question', p=0.02494, h=None), TopicWord(w='traité', p=0.01894, h=None), TopicWord(w='sujet', p=0.01296, h=None), TopicWord(w='commission', p=0.01274, h=None), TopicWord(w='conseil', p=0.01218, h=None), TopicWord(w='vue', p=0.01129, h=None), TopicWord(w='convention', p=0.01072, h=None)], model='tm-fr-all-v2.0'), relevance=0.113, topicUid='tm-fr-all-v2.0_tp03_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.1, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp12_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1251072.0, excerpt=[TopicWord(w='bateau', p=0.04614, h=None), TopicWord(w='mer', p=0.04476, h=None), TopicWord(w='lac', p=0.03402, h=None), TopicWord(w='bord', p=0.03391, h=None), TopicWord(w='port', p=0.02761, h=None)], words=[TopicWord(w='bateau', p=0.04614, h=None), TopicWord(w='mer', p=0.04476, h=None), TopicWord(w='lac', p=0.03402, h=None), TopicWord(w='bord', p=0.03391, h=None), TopicWord(w='port', p=0.02761, h=None), TopicWord(w='île', p=0.0247, h=None), TopicWord(w='eau', p=0.02154, h=None), TopicWord(w='navire', p=0.01869, h=None), TopicWord(w='côte', p=0.01376, h=None), TopicWord(w='vapeur', p=0.01317, h=None)], model='tm-fr-all-v2.0'), relevance=0.066, topicUid='tm-fr-all-v2.0_tp12_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp43_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1940529.0, excerpt=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None)], words=[TopicWord(w='café', p=0.0219, h=None), TopicWord(w='vin', p=0.02164, h=None), TopicWord(w='beurre', p=0.01562, h=None), TopicWord(w='pain', p=0.01485, h=None), TopicWord(w='eau', p=0.0136, h=None), TopicWord(w='viande', p=0.01298, h=None), TopicWord(w='sucre', p=0.0121, h=None), TopicWord(w='lait', p=0.01183, h=None), TopicWord(w='litre', p=0.0116, h=None), TopicWord(w='verre', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.04, topicUid='tm-fr-all-v2.0_tp43_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp56_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1626587.0, excerpt=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None)], words=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None), TopicWord(w='commission', p=0.01335, h=None), TopicWord(w='projet', p=0.01329, h=None), TopicWord(w='séance', p=0.012, h=None), TopicWord(w='bâtiment', p=0.01082, h=None), TopicWord(w='terrain', p=0.0103, h=None)], model='tm-fr-all-v2.0'), relevance=0.028, topicUid='tm-fr-all-v2.0_tp56_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp64_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1683510.0, excerpt=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None)], words=[TopicWord(w='question', p=0.01595, h=None), TopicWord(w='point', p=0.01204, h=None), TopicWord(w='pays', p=0.01183, h=None), TopicWord(w='conseil', p=0.01124, h=None), TopicWord(w='gouvernement', p=0.01031, h=None), TopicWord(w='loi', p=0.01024, h=None), TopicWord(w='droit', p=0.00984, h=None), TopicWord(w='temps', p=0.00949, h=None), TopicWord(w='lieu', p=0.00876, h=None), TopicWord(w='moment', p=0.00798, h=None)], model='tm-fr-all-v2.0'), relevance=0.147, topicUid='tm-fr-all-v2.0_tp64_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp72_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1648261.0, excerpt=[TopicWord(w='pays', p=0.0647, h=None), TopicWord(w='industrie', p=0.03546, h=None), TopicWord(w='production', p=0.03028, h=None), TopicWord(w='commerce', p=0.02679, h=None), TopicWord(w='économie', p=0.02376, h=None)], words=[TopicWord(w='pays', p=0.0647, h=None), TopicWord(w='industrie', p=0.03546, h=None), TopicWord(w='production', p=0.03028, h=None), TopicWord(w='commerce', p=0.02679, h=None), TopicWord(w='économie', p=0.02376, h=None), TopicWord(w='marché', p=0.01515, h=None), TopicWord(w='développement', p=0.01418, h=None), TopicWord(w='situation', p=0.01212, h=None), TopicWord(w='suisse', p=0.01208, h=None), TopicWord(w='exportation', p=0.01141, h=None)], model='tm-fr-all-v2.0'), relevance=0.045, topicUid='tm-fr-all-v2.0_tp72_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2004-12-03-a-i0060', type='ar', title='Design industry', size=1032, nbPages=1, pages=[Page(uid='luxland-2004-12-03-a-p0032', num=32, issueUid='luxland-2004-12-03-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Design industry Europe's challenge Stephen Hitchins The value of design to the economy of Europe has for too long been ignored. Yet it is design that \", locations=[Entity(uid='aida-0001-54-Fortuna_Düsseldorf', relevance=1), Entity(uid='aida-0001-54-Vic_Marks', relevance=1), Entity(uid='aida-0001-54-Alicante', relevance=1)], persons=[Entity(uid='aida-0001-50-O_Communications', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2004-12-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 12, 3, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=', historical and educational background to lead the world in design. The European Union needs to recognise', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' and very defined focus - the European Union. It began in 1969 as a representative body for professional', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=\" designers' associations within the European Union. As the number of member states within the Union has grown\", coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=\" with the OHIM - the European Union's Office for Harmonisation in the Internal Market (Trade Marks and Designs\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1171.0, 282.0, 460.0, 63.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1171,282,460,63/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1086.0, 380.0, 1443.0, 164.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1086,380,1443,164/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1170.0, 1081.0, 281.0, 36.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1170,1081,281,36/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1087.0, 1181.0, 724.0, 641.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1087,1181,724,641/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1090.0, 1886.0, 724.0, 387.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1090,1886,724,387/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1092.0, 2336.0, 724.0, 638.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1092,2336,724,638/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1094.0, 3037.0, 724.0, 439.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1094,3037,724,439/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1873.0, 1181.0, 722.0, 381.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1873,1181,722,381/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1874.0, 1632.0, 727.0, 1140.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1874,1632,727,1140/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1879.0, 2835.0, 725.0, 431.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1879,2835,725,431/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[1882.0, 3335.0, 722.0, 139.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/1882,3335,722,139/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[2657.0, 1177.0, 726.0, 734.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/2657,1177,726,734/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[2663.0, 1981.0, 725.0, 1040.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/2663,1981,725,1040/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[2666.0, 3082.0, 726.0, 742.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/2666,3082,726,742/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[2670.0, 3885.0, 728.0, 788.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/2670,3885,728,788/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0032', coords=[2677.0, 4844.0, 673.0, 29.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f32/2677,4844,673,29/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 12, 3, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-12-03-a-i0052', type='ar', title='Massenvernichtungswaffen', size=125, nbPages=1, pages=[Page(uid='luxland-2004-12-03-a-p0024', num=24, issueUid='luxland-2004-12-03-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f24/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f24/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Massenvernichtungswaffen Der satirische Borowitz Report berichtete am Montag über iranische Massenvernichstungspläne: „Latest Snag in European Nuke Ta', locations=[Entity(uid='aida-0001-54-Iran', relevance=3), Entity(uid='aida-0001-54-Luxembourg', relevance=3), Entity(uid='aida-0001-54-Malta', relevance=1)], persons=[Entity(uid='aida-0001-50-Jean-Claude_Juncker', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2004-12-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 12, 3, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' its nuclear program today, asking the European Union for permission to manufacture what it called', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=': „ The proposal drew strong objections from the teensy-weensy nations in the European Union, such as Luxembourg', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-12-03-a-p0024', coords=[2520.0, 1418.0, 594.0, 44.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f24/2520,1418,594,44/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-03-a-p0024', coords=[2516.0, 1491.0, 1008.0, 649.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ffj6mq3%2fpages%2f24/2516,1491,1008,649/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 12, 3, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2004-12-10-a-i0032', type='ar', title='Still under construction', size=522, nbPages=1, pages=[Page(uid='luxland-2004-12-10-a-p0014', num=14, issueUid='luxland-2004-12-10-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Still under construction Luxembourg has aligned itself tei the objective to turn Europe into I Inmost dynamic and competitive kneiwledge economy in th', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=11), Entity(uid='aida-0001-54-Strasbourg', relevance=1), Entity(uid='aida-0001-54-Oxford', relevance=1), Entity(uid='aida-0001-54-Thousand_Oaks$2c$_California', relevance=1)], persons=[Entity(uid='aida-0001-50-Louis_Pasteur', relevance=1), Entity(uid='aida-0001-50-Basil_Blackwell', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2004-12-10-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 12, 10, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment=' that goal today was assessed in a report published m November this year: \"[...) the European Union and its', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2004-12-10-a-p0014', coords=[2287.0, 3253.0, 458.0, 36.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/2287,3253,458,36/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-10-a-p0014', coords=[2287.0, 3329.0, 622.0, 947.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/2287,3329,622,947/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-10-a-p0014', coords=[3012.0, 2519.0, 465.0, 511.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/3012,2519,465,511/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-10-a-p0014', coords=[2288.0, 4300.0, 622.0, 607.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/2288,4300,622,607/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2004-12-10-a-p0014', coords=[2951.0, 3184.0, 623.0, 1726.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f0k5xng%2fpages%2f14/2951,3184,623,1726/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2004, 12, 10, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='FZG-2004-12-17-a-i0121', type='ar', title='20 Schweizer im Einsatz Der Nationalrat ...', size=122, nbPages=1, pages=[Page(uid='FZG-2004-12-17-a-p0021', num=21, issueUid='FZG-2004-12-17-a', newspaperUid='FZG', iiif='https://impresso-project.ch/api/proxy/iiif/FZG-2004-12-17-a-p0021', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/FZG-2004-12-17-a-p0021/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='20 Schweizer im Einsatz Der Nationalrat stimmt der Beteiligung der Schweiz an der European Union Force ( Eufor ) in Bosnien-Herzegowina zu . Maximal 2', locations=[Entity(uid='aida-0001-54-Switzerland', relevance=1)], persons=[], language='de', issue=NewspaperIssue(uid='FZG-2004-12-17-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2004, 12, 17, 0, 0, tzinfo=TzInfo(UTC)), year='2004'), matches=[ArticleMatch(fragment='20 Schweizer im Einsatz Der Nationalrat stimmt der Beteiligung der Schweiz an der European Union', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='FZG-2004-12-17-a-p0021', coords=[1444.0, 4066.0, 576.0, 1128.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/FZG-2004-12-17-a-p0021/1444,4066,576,1128/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2004, 12, 17, 0, 0, tzinfo=TzInfo(UTC)), year=2004, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='FZG', acronym='FZG', labels=['newspaper'], languages=['de'], properties=[], included=True, name='Freiburger Nachrichten', endYear=2018, startYear=1865, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=153), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp00_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=265405.0, excerpt=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None)], words=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None), TopicWord(w='jan', p=0.01266, h=None), TopicWord(w='prozent', p=0.01098, h=None), TopicWord(w='berlin', p=0.01095, h=None), TopicWord(w='dez', p=0.0102, h=None), TopicWord(w='union', p=0.01004, h=None)], model='tm-de-all-v2.0'), relevance=0.048, topicUid='tm-de-all-v2.0_tp00_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp06_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=284106.0, excerpt=[TopicWord(w='armee', p=0.04539, h=None), TopicWord(w='oberst', p=0.02517, h=None), TopicWord(w='mann', p=0.02178, h=None), TopicWord(w='major', p=0.01526, h=None), TopicWord(w='hauptmann', p=0.0145, h=None)], words=[TopicWord(w='armee', p=0.04539, h=None), TopicWord(w='oberst', p=0.02517, h=None), TopicWord(w='mann', p=0.02178, h=None), TopicWord(w='major', p=0.01526, h=None), TopicWord(w='hauptmann', p=0.0145, h=None), TopicWord(w='dienst', p=0.01336, h=None), TopicWord(w='general', p=0.01328, h=None), TopicWord(w='division', p=0.01291, h=None), TopicWord(w='kommandant', p=0.01239, h=None), TopicWord(w='bataillon', p=0.01116, h=None)], model='tm-de-all-v2.0'), relevance=0.396, topicUid='tm-de-all-v2.0_tp06_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.023, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp48_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=385232.0, excerpt=[TopicWord(w='bundesrat', p=0.08307, h=None), TopicWord(w='schweiz', p=0.02738, h=None), TopicWord(w='nationalrat', p=0.02574, h=None), TopicWord(w='bern', p=0.02109, h=None), TopicWord(w='ständerat', p=0.01437, h=None)], words=[TopicWord(w='bundesrat', p=0.08307, h=None), TopicWord(w='schweiz', p=0.02738, h=None), TopicWord(w='nationalrat', p=0.02574, h=None), TopicWord(w='bern', p=0.02109, h=None), TopicWord(w='ständerat', p=0.01437, h=None), TopicWord(w='kommission', p=0.01202, h=None), TopicWord(w='bund', p=0.01186, h=None), TopicWord(w='vorlage', p=0.01037, h=None), TopicWord(w='initiative', p=0.00914, h=None), TopicWord(w='frage', p=0.00774, h=None)], model='tm-de-all-v2.0'), relevance=0.227, topicUid='tm-de-all-v2.0_tp48_de')], content=None, mentions=[], v=None), Article(uid='luxland-2005-01-21-a-i0027', type='ar', title='National preference versus European objectives', size=476, nbPages=1, pages=[Page(uid='luxland-2005-01-21-a-p0015', num=15, issueUid='luxland-2005-01-21-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='National preference versus European objectives We don\\'t need another „national hero\" Pier re Mangers w hat has Tina Turner\\'s song tide in 5° lr| nion ', locations=[], persons=[Entity(uid='aida-0001-50-Tina_Turner', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2005-01-21-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 1, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment=\" Mangers w hat has Tina Turner's song tide in 5° lr| nion with the European Union? o find out, we only have\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[186.0, 522.0, 1295.0, 60.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/186,522,1295,60/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[187.0, 603.0, 1270.0, 214.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/187,603,1270,214/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[89.0, 914.0, 236.0, 57.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/89,914,236,57/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[88.0, 988.0, 622.0, 1463.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/88,988,622,1463/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[751.0, 1589.0, 621.0, 864.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/751,1589,621,864/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[1417.0, 2040.0, 625.0, 414.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/1417,2040,625,414/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[2077.0, 2040.0, 631.0, 411.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/2077,2040,631,411/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[2743.0, 2040.0, 627.0, 413.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/2743,2040,627,413/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[797.0, 908.0, 483.0, 514.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/797,908,483,514/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[1807.0, 1807.0, 1528.0, 79.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/1807,1807,1528,79/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-01-21-a-p0015', coords=[1803.0, 825.0, 1557.0, 928.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fcvf36z%2fpages%2f15/1803,825,1557,928/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 1, 21, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2005-02-25-a-i0067', type='ar', title='Armand Clesse', size=99, nbPages=1, pages=[Page(uid='luxland-2005-02-25-a-p0004', num=4, issueUid='luxland-2005-02-25-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Armand Clesse Der Leiter des Luxemburger Institut d'études européennes et internationales hat, zusammen mit Seyfi Tashan, Direktor des an der Bilkent \", locations=[], persons=[], language='de', issue=NewspaperIssue(uid='luxland-2005-02-25-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 2, 25, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment=' in Luxemburg über die Beitrittsperspektive der Türkei zur EU beruht. Obwohl der Band (Turkey and the European', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Union: 2004 and Beyond, Dutch University Press, ISBN 90-3619-162-9, 32,50 Euro) vor dem Beschluss, ab', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-02-25-a-p0004', coords=[285.0, 3909.0, 317.0, 36.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/285,3909,317,36/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-02-25-a-p0004', coords=[284.0, 3986.0, 574.0, 612.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/284,3986,574,612/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-02-25-a-p0004', coords=[287.0, 4607.0, 568.0, 158.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/287,4607,568,158/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-02-25-a-p0004', coords=[287.0, 4770.0, 576.0, 80.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/287,4770,576,80/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-02-25-a-p0004', coords=[287.0, 4851.0, 285.0, 41.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/287,4851,285,41/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-02-25-a-p0004', coords=[583.0, 4851.0, 60.0, 36.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp5x5v1%2fpages%2f4/583,4851,60,36/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 2, 25, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp09_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=230824.0, excerpt=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None)], words=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None), TopicWord(w='brown', p=0.01322, h=None), TopicWord(w='serie', p=0.013, h=None), TopicWord(w='inhaber', p=0.01295, h=None), TopicWord(w='general', p=0.01284, h=None), TopicWord(w='bank', p=0.01273, h=None)], model='tm-de-all-v2.0'), relevance=0.044, topicUid='tm-de-all-v2.0_tp09_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp11_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=437852.0, excerpt=[TopicWord(w='verlag', p=0.02531, h=None), TopicWord(w='buch', p=0.0244, h=None), TopicWord(w='band', p=0.0195, h=None), TopicWord(w='geschichte', p=0.01259, h=None), TopicWord(w='werk', p=0.01053, h=None)], words=[TopicWord(w='verlag', p=0.02531, h=None), TopicWord(w='buch', p=0.0244, h=None), TopicWord(w='band', p=0.0195, h=None), TopicWord(w='geschichte', p=0.01259, h=None), TopicWord(w='werk', p=0.01053, h=None), TopicWord(w='literatur', p=0.01004, h=None), TopicWord(w='dicht', p=0.0096, h=None), TopicWord(w='verfasser', p=0.00852, h=None), TopicWord(w='roman', p=0.00798, h=None), TopicWord(w='sprache', p=0.00703, h=None)], model='tm-de-all-v2.0'), relevance=0.17, topicUid='tm-de-all-v2.0_tp11_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp18_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=445203.0, excerpt=[TopicWord(w='luxemburg', p=0.03721, h=None), TopicWord(w='peter', p=0.03536, h=None), TopicWord(w='johann', p=0.03426, h=None), TopicWord(w='maria', p=0.02553, h=None), TopicWord(w='anna', p=0.01781, h=None)], words=[TopicWord(w='luxemburg', p=0.03721, h=None), TopicWord(w='peter', p=0.03536, h=None), TopicWord(w='johann', p=0.03426, h=None), TopicWord(w='maria', p=0.02553, h=None), TopicWord(w='anna', p=0.01781, h=None), TopicWord(w='sohn', p=0.01728, h=None), TopicWord(w='michel', p=0.01527, h=None), TopicWord(w='joseph', p=0.01382, h=None), TopicWord(w='tochter', p=0.01365, h=None), TopicWord(w='witwe', p=0.01337, h=None)], model='tm-de-all-v2.0'), relevance=0.029, topicUid='tm-de-all-v2.0_tp18_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.258, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp32_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=308129.0, excerpt=[TopicWord(w='regierung', p=0.01272, h=None), TopicWord(w='bonn', p=0.01271, h=None), TopicWord(w='bundesrepublik', p=0.00998, h=None), TopicWord(w='moskau', p=0.00972, h=None), TopicWord(w='präsident', p=0.0095, h=None)], words=[TopicWord(w='regierung', p=0.01272, h=None), TopicWord(w='bonn', p=0.01271, h=None), TopicWord(w='bundesrepublik', p=0.00998, h=None), TopicWord(w='moskau', p=0.00972, h=None), TopicWord(w='präsident', p=0.0095, h=None), TopicWord(w='sowjetunion', p=0.00853, h=None), TopicWord(w='seite', p=0.00839, h=None), TopicWord(w='usa', p=0.00808, h=None), TopicWord(w='dpa', p=0.00624, h=None), TopicWord(w='upi', p=0.00604, h=None)], model='tm-de-all-v2.0'), relevance=0.021, topicUid='tm-de-all-v2.0_tp32_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp39_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=573221.0, excerpt=[TopicWord(w='oktober', p=0.10901, h=None), TopicWord(w='september', p=0.09998, h=None), TopicWord(w='august', p=0.02407, h=None), TopicWord(w='samstag', p=0.01966, h=None), TopicWord(w='montag', p=0.01691, h=None)], words=[TopicWord(w='oktober', p=0.10901, h=None), TopicWord(w='september', p=0.09998, h=None), TopicWord(w='august', p=0.02407, h=None), TopicWord(w='samstag', p=0.01966, h=None), TopicWord(w='montag', p=0.01691, h=None), TopicWord(w='freitag', p=0.01499, h=None), TopicWord(w='kurs', p=0.01479, h=None), TopicWord(w='sonntag', p=0.01452, h=None), TopicWord(w='mittwoch', p=0.01323, h=None), TopicWord(w='donnerstag', p=0.01304, h=None)], model='tm-de-all-v2.0'), relevance=0.098, topicUid='tm-de-all-v2.0_tp39_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp59_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=488328.0, excerpt=[TopicWord(w='luxemburg', p=0.028, h=None), TopicWord(w='herr', p=0.01965, h=None), TopicWord(w='franke', p=0.0116, h=None), TopicWord(w='sonntag', p=0.00895, h=None), TopicWord(w='arbeiter', p=0.00745, h=None)], words=[TopicWord(w='luxemburg', p=0.028, h=None), TopicWord(w='herr', p=0.01965, h=None), TopicWord(w='franke', p=0.0116, h=None), TopicWord(w='sonntag', p=0.00895, h=None), TopicWord(w='arbeiter', p=0.00745, h=None), TopicWord(w='esch', p=0.00718, h=None), TopicWord(w='trier', p=0.00645, h=None), TopicWord(w='bürgermeister', p=0.0064, h=None), TopicWord(w='gemeinde', p=0.00618, h=None), TopicWord(w='stadt', p=0.00542, h=None)], model='tm-de-all-v2.0'), relevance=0.021, topicUid='tm-de-all-v2.0_tp59_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp82_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=325654.0, excerpt=[TopicWord(w='italien', p=0.06496, h=None), TopicWord(w='rom', p=0.04835, h=None), TopicWord(w='türkei', p=0.02261, h=None), TopicWord(w='mailand', p=0.0209, h=None), TopicWord(w='griechenland', p=0.01906, h=None)], words=[TopicWord(w='italien', p=0.06496, h=None), TopicWord(w='rom', p=0.04835, h=None), TopicWord(w='türkei', p=0.02261, h=None), TopicWord(w='mailand', p=0.0209, h=None), TopicWord(w='griechenland', p=0.01906, h=None), TopicWord(w='athen', p=0.01616, h=None), TopicWord(w='regierung', p=0.01256, h=None), TopicWord(w='bulgarien', p=0.01232, h=None), TopicWord(w='konstantinopel', p=0.01106, h=None), TopicWord(w='italiener', p=0.01089, h=None)], model='tm-de-all-v2.0'), relevance=0.067, topicUid='tm-de-all-v2.0_tp82_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp90_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=375288.0, excerpt=[TopicWord(w='schule', p=0.04397, h=None), TopicWord(w='lehrer', p=0.03666, h=None), TopicWord(w='schüler', p=0.03232, h=None), TopicWord(w='universität', p=0.03121, h=None), TopicWord(w='unterricht', p=0.01923, h=None)], words=[TopicWord(w='schule', p=0.04397, h=None), TopicWord(w='lehrer', p=0.03666, h=None), TopicWord(w='schüler', p=0.03232, h=None), TopicWord(w='universität', p=0.03121, h=None), TopicWord(w='unterricht', p=0.01923, h=None), TopicWord(w='professor', p=0.01677, h=None), TopicWord(w='klasse', p=0.01237, h=None), TopicWord(w='ausbildung', p=0.01224, h=None), TopicWord(w='eltern', p=0.01162, h=None), TopicWord(w='institut', p=0.01142, h=None)], model='tm-de-all-v2.0'), relevance=0.075, topicUid='tm-de-all-v2.0_tp90_de')], content=None, mentions=[], v=None), Article(uid='luxland-2005-03-25-a-i0031', type='ar', title='Implementing Kyoto in Europe', size=1518, nbPages=1, pages=[Page(uid='luxland-2005-03-25-a-p0012', num=12, issueUid='luxland-2005-03-25-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Implementing Kyoto in Europe Bane or Boon - and what to do? Pierre Mangers Collective CONSCIENCE is calmed since the apparent main culprit of the worl', locations=[Entity(uid='aida-0001-54-Kyoto', relevance=6)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2005-03-25-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 3, 25, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment=' in the European Union. This new regulation system translates the worldwide burden sharing. The EU has committed', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[322.0, 1204.0, 839.0, 54.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/322,1204,839,54/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[327.0, 1281.0, 1776.0, 89.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/327,1281,1776,89/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[222.0, 1518.0, 237.0, 34.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/222,1518,237,34/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[217.0, 1592.0, 625.0, 1071.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/217,1592,625,1071/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[211.0, 2709.0, 625.0, 1234.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/211,2709,625,1234/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[205.0, 3990.0, 629.0, 896.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/205,3990,629,896/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[884.0, 1588.0, 624.0, 1525.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/884,1588,624,1525/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[879.0, 3160.0, 629.0, 1259.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/879,3160,629,1259/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[878.0, 4453.0, 624.0, 433.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/878,4453,624,433/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[1557.0, 1588.0, 618.0, 601.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/1557,1588,618,601/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[1555.0, 2227.0, 623.0, 1285.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/1555,2227,623,1285/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[1553.0, 3549.0, 622.0, 1081.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/1553,3549,622,1081/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[1551.0, 4666.0, 621.0, 214.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/1551,4666,621,214/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[2220.0, 3612.0, 623.0, 1261.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/2220,3612,623,1261/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[2886.0, 2840.0, 618.0, 448.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/2886,2840,618,448/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[2892.0, 3342.0, 611.0, 602.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/2892,3342,611,602/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[2892.0, 3976.0, 612.0, 551.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/2892,3976,612,551/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[2892.0, 4585.0, 608.0, 300.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/2892,4585,608,300/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-03-25-a-p0012', coords=[2272.0, 2740.0, 487.0, 687.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fm609bg%2fpages%2f12/2272,2740,487,687/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 3, 25, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2005-04-22-a-i0032', type='ar', title='How crucial is visibility for the assimilation of immigrant offspring [...]', size=927, nbPages=2, pages=[Page(uid='luxland-2005-04-22-a-p0012', num=12, issueUid='luxland-2005-04-22-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f12/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f12/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None), Page(uid='luxland-2005-04-22-a-p0013', num=13, issueUid='luxland-2005-04-22-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='How crucial is visibility for the assimilation of immigrant off spring in Luxembourg? Luxembourg tends to be depicted as the \"immigration country\" par', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=12), Entity(uid='aida-0001-54-London', relevance=1)], persons=[], language='en', issue=NewspaperIssue(uid='luxland-2005-04-22-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 4, 22, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment=', Minorities and Education: Documenting discrimination and integration in 15 Member States of the European', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=\" Union', comparative study published by the European Monitoring Centre on Racism and Xenophobia Pong, S\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-04-22-a-p0012', coords=[2911.0, 3696.0, 616.0, 124.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f12/2911,3696,616,124/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0012', coords=[2910.0, 3858.0, 617.0, 1026.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f12/2910,3858,617,1026/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[67.0, 922.0, 612.0, 1238.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/67,922,612,1238/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[68.0, 2207.0, 611.0, 128.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/68,2207,611,128/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[728.0, 928.0, 617.0, 1409.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/728,928,617,1409/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[1392.0, 929.0, 618.0, 797.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/1392,929,618,797/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[1396.0, 1781.0, 615.0, 553.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/1396,1781,615,553/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[2059.0, 1337.0, 617.0, 675.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/2059,1337,617,675/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[2035.0, 2070.0, 640.0, 263.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/2035,2070,640,263/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-04-22-a-p0013', coords=[2724.0, 929.0, 660.0, 1401.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fp1q6s1%2fpages%2f13/2724,929,660,1401/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 4, 22, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2005-07-01-a-i0035', type='ar', title='European Union', size=704, nbPages=1, pages=[Page(uid='luxland-2005-07-01-a-p0018', num=18, issueUid='luxland-2005-07-01-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='European Union From Minimal to Maximal George Voskopoulos The European Union is facing one of the most serious crises in its history. The double rejec', locations=[Entity(uid='aida-0001-54-France', relevance=1), Entity(uid='aida-0001-54-Netherlands', relevance=1), Entity(uid='aida-0001-54-Republic_of_Macedonia', relevance=1), Entity(uid='aida-0001-54-Greece', relevance=1), Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-John_Locke', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2005-07-01-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 7, 1, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment='European Union From Minimal to Maximal George Voskopoulos The European Union is facing one', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[367.0, 449.0, 440.0, 57.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/367,449,440,57/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[368.0, 531.0, 1749.0, 107.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/368,531,1749,107/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[255.0, 784.0, 334.0, 40.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/255,784,334,40/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[245.0, 864.0, 624.0, 2161.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/245,864,624,2161/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[243.0, 3068.0, 627.0, 1777.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/243,3068,627,1777/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[912.0, 864.0, 625.0, 429.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/912,864,625,429/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[1577.0, 864.0, 623.0, 429.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/1577,864,623,429/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[2242.0, 1209.0, 620.0, 85.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/2242,1209,620,85/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[2905.0, 864.0, 616.0, 426.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/2905,864,616,426/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-07-01-a-p0018', coords=[2266.0, 747.0, 575.0, 288.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2f4gw8h3%2fpages%2f18/2266,747,575,288/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 7, 1, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2005-09-09-a-i0019', type='ar', title=\"Conflicting views about Europe's future\", size=1084, nbPages=1, pages=[Page(uid='luxland-2005-09-09-a-p0011', num=11, issueUid='luxland-2005-09-09-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Conflicting views about Europe's future Is the UK to blame? John West 'Blair rejected the various different compromises put to him by Jean- Qaude Junc\", locations=[Entity(uid='aida-0001-54-Netherlands', relevance=3), Entity(uid='aida-0001-54-Ted_Schroeder', relevance=5), Entity(uid='aida-0001-54-Luxembourg', relevance=3), Entity(uid='aida-0001-54-United_Kingdom', relevance=2), Entity(uid='aida-0001-54-Sweden', relevance=1), Entity(uid='aida-0001-54-Spain', relevance=1), Entity(uid='aida-0001-54-Italy', relevance=1), Entity(uid='aida-0001-54-Rome', relevance=1), Entity(uid='aida-0001-54-Iran–Iraq_War', relevance=1), Entity(uid='aida-0001-54-Iraq', relevance=1), Entity(uid='aida-0001-54-Cambridge$2c$_Massachusetts', relevance=1)], persons=[Entity(uid='aida-0001-50-John_West_$28$governor$29$', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2005-09-09-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 9, 9, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment=\" to the 'totally unaccepting attitude of the UK and Netherlands'. The failure to set the European Union budget\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[201.0, 451.0, 1074.0, 55.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/201,451,1074,55/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[204.0, 529.0, 1064.0, 89.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/204,529,1064,89/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[99.0, 729.0, 161.0, 35.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/99,729,161,35/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[92.0, 805.0, 618.0, 511.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/92,805,618,511/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[95.0, 1349.0, 617.0, 608.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/95,1349,617,608/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[94.0, 1980.0, 618.0, 478.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/94,1980,618,478/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[759.0, 816.0, 616.0, 211.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/759,816,616,211/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[759.0, 1064.0, 615.0, 771.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/759,1064,615,771/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[757.0, 1872.0, 621.0, 373.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/757,1872,621,373/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[757.0, 2292.0, 615.0, 166.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/757,2292,615,166/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[1418.0, 1229.0, 621.0, 986.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/1418,1229,621,986/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[1423.0, 2250.0, 615.0, 209.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/1423,2250,615,209/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2089.0, 818.0, 618.0, 416.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2089,818,618,416/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2088.0, 1275.0, 616.0, 555.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2088,1275,616,555/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2087.0, 1863.0, 617.0, 596.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2087,1863,617,596/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2755.0, 820.0, 612.0, 124.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2755,820,612,124/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2751.0, 1002.0, 620.0, 641.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2751,1002,620,641/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2751.0, 1703.0, 620.0, 640.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2751,1703,620,640/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[2749.0, 2396.0, 615.0, 59.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/2749,2396,615,59/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2005-09-09-a-p0011', coords=[1472.0, 726.0, 434.0, 321.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzsjqjv%2fpages%2f11/1472,726,434,321/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 9, 9, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2005-11-25-a-i0168', type='ad', title='Publicité 2 Page 35', size=228, nbPages=1, pages=[Page(uid='luxland-2005-11-25-a-p0035', num=35, issueUid='luxland-2005-11-25-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fn4j64m%2fpages%2f35/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fn4j64m%2fpages%2f35/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='1 Initiator PROFIL The Luxembourg Financial Industry - I Federation Luxembourg Financial Forum 2 Decemtber 2005 Luxembourg European Hémicycle Panels •', locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=10), Entity(uid='aida-0001-54-France', relevance=1), Entity(uid='aida-0001-54-European_Union', relevance=1), Entity(uid='aida-0001-54-Munich', relevance=1), Entity(uid='aida-0001-54-Boston', relevance=2), Entity(uid='aida-0001-54-New_York_City', relevance=1)], persons=[Entity(uid='aida-0001-50-Thierry_Breton', relevance=1), Entity(uid='aida-0001-50-New_York_Herald_Tribune', relevance=1), Entity(uid='aida-0001-50-Jean-Claude_Juncker', relevance=1), Entity(uid='aida-0001-50-JPMorgan_Chase', relevance=1), Entity(uid='aida-0001-50-Michel_Maquil', relevance=1), Entity(uid='aida-0001-50-Yves_Mersch', relevance=1), Entity(uid='aida-0001-50-Jean-Claude_Trichet', relevance=1)], language='en', issue=NewspaperIssue(uid='luxland-2005-11-25-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2005, 11, 25, 0, 0, tzinfo=TzInfo(UTC)), year='2005'), matches=[ArticleMatch(fragment=', Finance and Industry, France (to be confirmed) Graham Bowley Brussels Bureau Chief and European Union', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2005-11-25-a-p0035', coords=[1401.0, 235.0, 1968.0, 4683.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fn4j64m%2fpages%2f35/1401,235,1968,4683/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2005, 11, 25, 0, 0, tzinfo=TzInfo(UTC)), year=2005, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[], content=None, mentions=[], v=None), Article(uid='luxland-2006-10-20-a-i0072', type='ar', title='European Union Youth Orchestra – EUYO www.euyo.org.uk', size=166, nbPages=1, pages=[Page(uid='luxland-2006-10-20-a-p0026', num=26, issueUid='luxland-2006-10-20-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2frdwg8s%2fpages%2f26/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2frdwg8s%2fpages%2f26/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"European Union Youth Orchestra - EUYO www. euyo. org. uk L'Orchestre des Jeunes de l'Union européenne (orchestre symphonique) recrute par voie d'audit\", locations=[Entity(uid='aida-0001-54-Luxembourg', relevance=1)], persons=[Entity(uid='aida-0001-50-Colin_Davis', relevance=1), Entity(uid='aida-0001-50-Herbert_Blomstedt', relevance=1), Entity(uid='aida-0001-50-Vladimir_Ashkenazy', relevance=1)], language='fr', issue=NewspaperIssue(uid='luxland-2006-10-20-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2006, 10, 20, 0, 0, tzinfo=TzInfo(UTC)), year='2006'), matches=[ArticleMatch(fragment=\"European Union Youth Orchestra - EUYO www. euyo. org. uk L'Orchestre des Jeunes de l'Union\", coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2006-10-20-a-p0026', coords=[2813.0, 2722.0, 610.0, 114.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2frdwg8s%2fpages%2f26/2813,2722,610,114/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2006-10-20-a-p0026', coords=[2814.0, 2853.0, 503.0, 61.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2frdwg8s%2fpages%2f26/2814,2853,503,61/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2006-10-20-a-p0026', coords=[2806.0, 2957.0, 621.0, 1851.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2frdwg8s%2fpages%2f26/2806,2957,621,1851/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2006, 10, 20, 0, 0, tzinfo=TzInfo(UTC)), year=2006, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.055, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp35_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2132714.0, excerpt=[TopicWord(w='janvier', p=0.15109, h=None), TopicWord(w='novembre', p=0.15061, h=None), TopicWord(w='décembre', p=0.14807, h=None), TopicWord(w='octobre', p=0.13451, h=None), TopicWord(w='février', p=0.10112, h=None)], words=[TopicWord(w='janvier', p=0.15109, h=None), TopicWord(w='novembre', p=0.15061, h=None), TopicWord(w='décembre', p=0.14807, h=None), TopicWord(w='octobre', p=0.13451, h=None), TopicWord(w='février', p=0.10112, h=None), TopicWord(w='lieu', p=0.02423, h=None), TopicWord(w='mois', p=0.02038, h=None), TopicWord(w='mercredi', p=0.01545, h=None), TopicWord(w='jeudi', p=0.01516, h=None), TopicWord(w='mardi', p=0.01473, h=None)], model='tm-fr-all-v2.0'), relevance=0.181, topicUid='tm-fr-all-v2.0_tp35_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp40_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2261935.0, excerpt=[TopicWord(w='maison', p=0.05313, h=None), TopicWord(w='vente', p=0.03772, h=None), TopicWord(w='immeuble', p=0.03052, h=None), TopicWord(w='jardin', p=0.02673, h=None), TopicWord(w='notaire', p=0.0218, h=None)], words=[TopicWord(w='maison', p=0.05313, h=None), TopicWord(w='vente', p=0.03772, h=None), TopicWord(w='immeuble', p=0.03052, h=None), TopicWord(w='jardin', p=0.02673, h=None), TopicWord(w='notaire', p=0.0218, h=None), TopicWord(w='propriété', p=0.01799, h=None), TopicWord(w='bois', p=0.01506, h=None), TopicWord(w='place', p=0.01427, h=None), TopicWord(w='lieu', p=0.01268, h=None), TopicWord(w='bâtiment', p=0.01197, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp40_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.027, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp94_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1164812.0, excerpt=[TopicWord(w='musique', p=0.05085, h=None), TopicWord(w='concert', p=0.03995, h=None), TopicWord(w='suisse', p=0.03109, h=None), TopicWord(w='monde', p=0.02999, h=None), TopicWord(w='danse', p=0.02337, h=None)], words=[TopicWord(w='musique', p=0.05085, h=None), TopicWord(w='concert', p=0.03995, h=None), TopicWord(w='suisse', p=0.03109, h=None), TopicWord(w='monde', p=0.02999, h=None), TopicWord(w='danse', p=0.02337, h=None), TopicWord(w='jazz', p=0.02329, h=None), TopicWord(w='orchestre', p=0.02317, h=None), TopicWord(w='vie', p=0.0229, h=None), TopicWord(w='temps', p=0.01979, h=None), TopicWord(w='piano', p=0.01769, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp94_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp96_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1247267.0, excerpt=[TopicWord(w='musique', p=0.04948, h=None), TopicWord(w='concert', p=0.03657, h=None), TopicWord(w='piano', p=0.01844, h=None), TopicWord(w='orchestre', p=0.01786, h=None), TopicWord(w='programme', p=0.01492, h=None)], words=[TopicWord(w='musique', p=0.04948, h=None), TopicWord(w='concert', p=0.03657, h=None), TopicWord(w='piano', p=0.01844, h=None), TopicWord(w='orchestre', p=0.01786, h=None), TopicWord(w='programme', p=0.01492, h=None), TopicWord(w='public', p=0.01185, h=None), TopicWord(w='soir', p=0.01146, h=None), TopicWord(w='voix', p=0.01121, h=None), TopicWord(w='chœur', p=0.01042, h=None), TopicWord(w='chant', p=0.01009, h=None)], model='tm-fr-all-v2.0'), relevance=0.27, topicUid='tm-fr-all-v2.0_tp96_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp99_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1676481.0, excerpt=[TopicWord(w='cours', p=0.06546, h=None), TopicWord(w='école', p=0.06053, h=None), TopicWord(w='enseignement', p=0.0415, h=None), TopicWord(w='professeur', p=0.03397, h=None), TopicWord(w='année', p=0.02844, h=None)], words=[TopicWord(w='cours', p=0.06546, h=None), TopicWord(w='école', p=0.06053, h=None), TopicWord(w='enseignement', p=0.0415, h=None), TopicWord(w='professeur', p=0.03397, h=None), TopicWord(w='année', p=0.02844, h=None), TopicWord(w='classe', p=0.024, h=None), TopicWord(w='formation', p=0.0217, h=None), TopicWord(w='instruction', p=0.01599, h=None), TopicWord(w='directeur', p=0.01328, h=None), TopicWord(w='examen', p=0.01254, h=None)], model='tm-fr-all-v2.0'), relevance=0.116, topicUid='tm-fr-all-v2.0_tp99_fr')], content=None, mentions=[], v=None), Article(uid='luxland-2006-12-22-a-i0009', type='ar', title='Recht freundlich', size=90, nbPages=1, pages=[Page(uid='luxland-2006-12-22-a-p0004', num=4, issueUid='luxland-2006-12-22-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ftwpwzj%2fpages%2f4/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ftwpwzj%2fpages%2f4/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Recht freundlich Luxemburg kommt gut weg im Bericht Muslims in the European Union des European Monitoring Centre on Racism and Xenophobia (EUMC): Eine', locations=[], persons=[], language='de', issue=NewspaperIssue(uid='luxland-2006-12-22-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2006, 12, 22, 0, 0, tzinfo=TzInfo(UTC)), year='2006'), matches=[ArticleMatch(fragment='Recht freundlich Luxemburg kommt gut weg im Bericht Muslims in the European Union des European', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2006-12-22-a-p0004', coords=[2177.0, 2486.0, 368.0, 43.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ftwpwzj%2fpages%2f4/2177,2486,368,43/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2006-12-22-a-p0004', coords=[2174.0, 2573.0, 614.0, 740.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ftwpwzj%2fpages%2f4/2174,2573,614,740/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2006-12-22-a-p0004', coords=[2174.0, 3325.0, 526.0, 42.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ftwpwzj%2fpages%2f4/2174,3325,526,42/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2006-12-22-a-p0004', coords=[2716.0, 3325.0, 44.0, 34.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2ftwpwzj%2fpages%2f4/2716,3325,44,34/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2006, 12, 22, 0, 0, tzinfo=TzInfo(UTC)), year=2006, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp09_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=230824.0, excerpt=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None)], words=[TopicWord(w='schweiz', p=0.0411, h=None), TopicWord(w='anleihe', p=0.0214, h=None), TopicWord(w='stadt', p=0.0181, h=None), TopicWord(w='prior', p=0.01533, h=None), TopicWord(w='stamm', p=0.01358, h=None), TopicWord(w='brown', p=0.01322, h=None), TopicWord(w='serie', p=0.013, h=None), TopicWord(w='inhaber', p=0.01295, h=None), TopicWord(w='general', p=0.01284, h=None), TopicWord(w='bank', p=0.01273, h=None)], model='tm-de-all-v2.0'), relevance=0.178, topicUid='tm-de-all-v2.0_tp09_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.172, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp33_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=428633.0, excerpt=[TopicWord(w='notar', p=0.03447, h=None), TopicWord(w='versteigerung', p=0.02156, h=None), TopicWord(w='luxemburg', p=0.019, h=None), TopicWord(w='zimmer', p=0.01838, h=None), TopicWord(w='wohnhaus', p=0.0177, h=None)], words=[TopicWord(w='notar', p=0.03447, h=None), TopicWord(w='versteigerung', p=0.02156, h=None), TopicWord(w='luxemburg', p=0.019, h=None), TopicWord(w='zimmer', p=0.01838, h=None), TopicWord(w='wohnhaus', p=0.0177, h=None), TopicWord(w='garten', p=0.01757, h=None), TopicWord(w='keller', p=0.01583, h=None), TopicWord(w='ort', p=0.01581, h=None), TopicWord(w='herr', p=0.01579, h=None), TopicWord(w='café', p=0.01428, h=None)], model='tm-de-all-v2.0'), relevance=0.02, topicUid='tm-de-all-v2.0_tp33_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp58_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=384076.0, excerpt=[TopicWord(w='regierung', p=0.05579, h=None), TopicWord(w='kammer', p=0.03555, h=None), TopicWord(w='frage', p=0.015, h=None), TopicWord(w='luxemburg', p=0.01418, h=None), TopicWord(w='sitzung', p=0.01383, h=None)], words=[TopicWord(w='regierung', p=0.05579, h=None), TopicWord(w='kammer', p=0.03555, h=None), TopicWord(w='frage', p=0.015, h=None), TopicWord(w='luxemburg', p=0.01418, h=None), TopicWord(w='sitzung', p=0.01383, h=None), TopicWord(w='herr', p=0.01147, h=None), TopicWord(w='belgien', p=0.01095, h=None), TopicWord(w='minister', p=0.01006, h=None), TopicWord(w='gesetz', p=0.0085, h=None), TopicWord(w='staat', p=0.00824, h=None)], model='tm-de-all-v2.0'), relevance=0.038, topicUid='tm-de-all-v2.0_tp58_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp90_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=375288.0, excerpt=[TopicWord(w='schule', p=0.04397, h=None), TopicWord(w='lehrer', p=0.03666, h=None), TopicWord(w='schüler', p=0.03232, h=None), TopicWord(w='universität', p=0.03121, h=None), TopicWord(w='unterricht', p=0.01923, h=None)], words=[TopicWord(w='schule', p=0.04397, h=None), TopicWord(w='lehrer', p=0.03666, h=None), TopicWord(w='schüler', p=0.03232, h=None), TopicWord(w='universität', p=0.03121, h=None), TopicWord(w='unterricht', p=0.01923, h=None), TopicWord(w='professor', p=0.01677, h=None), TopicWord(w='klasse', p=0.01237, h=None), TopicWord(w='ausbildung', p=0.01224, h=None), TopicWord(w='eltern', p=0.01162, h=None), TopicWord(w='institut', p=0.01142, h=None)], model='tm-de-all-v2.0'), relevance=0.12, topicUid='tm-de-all-v2.0_tp90_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp92_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=443629.0, excerpt=[TopicWord(w='arbeit', p=0.02313, h=None), TopicWord(w='jugend', p=0.01615, h=None), TopicWord(w='schweiz', p=0.0144, h=None), TopicWord(w='hilfe', p=0.01315, h=None), TopicWord(w='leben', p=0.00829, h=None)], words=[TopicWord(w='arbeit', p=0.02313, h=None), TopicWord(w='jugend', p=0.01615, h=None), TopicWord(w='schweiz', p=0.0144, h=None), TopicWord(w='hilfe', p=0.01315, h=None), TopicWord(w='leben', p=0.00829, h=None), TopicWord(w='familie', p=0.00824, h=None), TopicWord(w='aufgabe', p=0.00817, h=None), TopicWord(w='verfügung', p=0.00774, h=None), TopicWord(w='tätigkeit', p=0.00667, h=None), TopicWord(w='aktion', p=0.00649, h=None)], model='tm-de-all-v2.0'), relevance=0.02, topicUid='tm-de-all-v2.0_tp92_de')], content=None, mentions=[], v=None), Article(uid='luxland-2007-05-11-a-i0041', type='ar', title='Echternacher Festival', size=638, nbPages=1, pages=[Page(uid='luxland-2007-05-11-a-p0018', num=18, issueUid='luxland-2007-05-11-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='Echternacher Festival Von Corell bis Cobain Marc Fiedler Mit einem vielseitigen, multikulturellen und Sparten übergreifenden Spielplan geht das Echter', locations=[Entity(uid='aida-0001-54-Munich', relevance=1), Entity(uid='aida-0001-54-Manchester', relevance=1), Entity(uid='aida-0001-54-Santiago_de_Compostela', relevance=1), Entity(uid='aida-0001-54-Sura_$28$city$29$', relevance=1)], persons=[Entity(uid='aida-0001-50-Johann_Sebastian_Bach', relevance=1), Entity(uid='aida-0001-50-John_Williams', relevance=1), Entity(uid='aida-0001-50-Bobby_McFerrin', relevance=1), Entity(uid='aida-0001-50-Alexander_Melnikov', relevance=1), Entity(uid='aida-0001-50-Cyprien_Katsaris', relevance=1), Entity(uid='aida-0001-50-Jordi_Savall', relevance=1), Entity(uid='aida-0001-50-Florestan_Trio', relevance=2), Entity(uid='aida-0001-50-Pierre_Cao', relevance=1), Entity(uid='aida-0001-50-Kurt_Cobain', relevance=1), Entity(uid='aida-0001-50-Allison_Anders', relevance=1), Entity(uid='aida-0001-50-Martin_Scorsese', relevance=1)], language='de', issue=NewspaperIssue(uid='luxland-2007-05-11-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2007, 5, 11, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), matches=[ArticleMatch(fragment=', das European Union Baroque Orchestra, Jordi Savalls Hespèrion XXI und das Ensemble La Fenice von Jean Tubéry', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[259.0, 304.0, 557.0, 41.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/259,304,557,41/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[253.0, 394.0, 1439.0, 111.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/253,394,1439,111/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[207.0, 605.0, 193.0, 27.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/207,605,193,27/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[203.0, 701.0, 616.0, 1638.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/203,701,616,1638/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[868.0, 1649.0, 615.0, 698.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/868,1649,615,698/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[1533.0, 1648.0, 614.0, 548.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/1533,1648,614,548/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[1533.0, 2219.0, 615.0, 128.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/1533,2219,615,128/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2198.0, 701.0, 615.0, 1218.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2198,701,615,1218/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2199.0, 1979.0, 611.0, 217.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2199,1979,611,217/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2198.0, 2218.0, 614.0, 128.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2198,2218,614,128/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2864.0, 701.0, 611.0, 127.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2864,701,611,127/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2861.0, 844.0, 614.0, 688.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2861,844,614,688/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2862.0, 1555.0, 612.0, 222.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2862,1555,612,222/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2861.0, 1790.0, 615.0, 405.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2861,1790,615,405/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[2862.0, 2247.0, 615.0, 90.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/2862,2247,615,90/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[859.0, 668.0, 636.0, 732.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/859,668,636,732/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[1535.0, 1554.0, 240.0, 27.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/1535,1554,240,27/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-05-11-a-p0018', coords=[1533.0, 703.0, 615.0, 829.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fzfvjt4%2fpages%2f18/1533,703,615,829/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2007, 5, 11, 0, 0, tzinfo=TzInfo(UTC)), year=2007, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp00_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=265405.0, excerpt=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None)], words=[TopicWord(w='london', p=0.02403, h=None), TopicWord(w='new', p=0.01812, h=None), TopicWord(w='york', p=0.01433, h=None), TopicWord(w='paris', p=0.01329, h=None), TopicWord(w='juli', p=0.01271, h=None), TopicWord(w='jan', p=0.01266, h=None), TopicWord(w='prozent', p=0.01098, h=None), TopicWord(w='berlin', p=0.01095, h=None), TopicWord(w='dez', p=0.0102, h=None), TopicWord(w='union', p=0.01004, h=None)], model='tm-de-all-v2.0'), relevance=0.035, topicUid='tm-de-all-v2.0_tp00_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp15_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338797.0, excerpt=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None)], words=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None), TopicWord(w='publikum', p=0.00896, h=None), TopicWord(w='werk', p=0.00837, h=None), TopicWord(w='leitung', p=0.00833, h=None), TopicWord(w='chor', p=0.00785, h=None), TopicWord(w='aufführung', p=0.00679, h=None)], model='tm-de-all-v2.0'), relevance=0.589, topicUid='tm-de-all-v2.0_tp15_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp18_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=445203.0, excerpt=[TopicWord(w='luxemburg', p=0.03721, h=None), TopicWord(w='peter', p=0.03536, h=None), TopicWord(w='johann', p=0.03426, h=None), TopicWord(w='maria', p=0.02553, h=None), TopicWord(w='anna', p=0.01781, h=None)], words=[TopicWord(w='luxemburg', p=0.03721, h=None), TopicWord(w='peter', p=0.03536, h=None), TopicWord(w='johann', p=0.03426, h=None), TopicWord(w='maria', p=0.02553, h=None), TopicWord(w='anna', p=0.01781, h=None), TopicWord(w='sohn', p=0.01728, h=None), TopicWord(w='michel', p=0.01527, h=None), TopicWord(w='joseph', p=0.01382, h=None), TopicWord(w='tochter', p=0.01365, h=None), TopicWord(w='witwe', p=0.01337, h=None)], model='tm-de-all-v2.0'), relevance=0.02, topicUid='tm-de-all-v2.0_tp18_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp36_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=283708.0, excerpt=[TopicWord(w='usa', p=0.01967, h=None), TopicWord(w='platz', p=0.01206, h=None), TopicWord(w='final', p=0.00982, h=None), TopicWord(w='brd', p=0.00922, h=None), TopicWord(w='rang', p=0.00849, h=None)], words=[TopicWord(w='usa', p=0.01967, h=None), TopicWord(w='platz', p=0.01206, h=None), TopicWord(w='final', p=0.00982, h=None), TopicWord(w='brd', p=0.00922, h=None), TopicWord(w='rang', p=0.00849, h=None), TopicWord(w='schweizer', p=0.00754, h=None), TopicWord(w='lauf', p=0.00681, h=None), TopicWord(w='peter', p=0.00661, h=None), TopicWord(w='rennen', p=0.00599, h=None), TopicWord(w='sieg', p=0.00596, h=None)], model='tm-de-all-v2.0'), relevance=0.033, topicUid='tm-de-all-v2.0_tp36_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp86_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=397759.0, excerpt=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None)], words=[TopicWord(w='partei', p=0.01651, h=None), TopicWord(w='politik', p=0.01284, h=None), TopicWord(w='staat', p=0.01244, h=None), TopicWord(w='demokratie', p=0.01216, h=None), TopicWord(w='freiheit', p=0.01214, h=None), TopicWord(w='volk', p=0.00987, h=None), TopicWord(w='recht', p=0.00946, h=None), TopicWord(w='kampf', p=0.00811, h=None), TopicWord(w='macht', p=0.00723, h=None), TopicWord(w='sozialismus', p=0.00609, h=None)], model='tm-de-all-v2.0'), relevance=0.022, topicUid='tm-de-all-v2.0_tp86_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp87_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=464530.0, excerpt=[TopicWord(w='film', p=0.04823, h=None), TopicWord(w='woche', p=0.02664, h=None), TopicWord(w='regie', p=0.00941, h=None), TopicWord(w='kino', p=0.00623, h=None), TopicWord(w='john', p=0.0062, h=None)], words=[TopicWord(w='film', p=0.04823, h=None), TopicWord(w='woche', p=0.02664, h=None), TopicWord(w='regie', p=0.00941, h=None), TopicWord(w='kino', p=0.00623, h=None), TopicWord(w='john', p=0.0062, h=None), TopicWord(w='rex', p=0.00519, h=None), TopicWord(w='titel', p=0.00504, h=None), TopicWord(w='paul', p=0.00496, h=None), TopicWord(w='erstaufführung', p=0.00445, h=None), TopicWord(w='james', p=0.00432, h=None)], model='tm-de-all-v2.0'), relevance=0.12, topicUid='tm-de-all-v2.0_tp87_de')], content=None, mentions=[], v=None), Article(uid='luxland-2007-08-10-a-i0040', type='ar', title='Klassik', size=514, nbPages=1, pages=[Page(uid='luxland-2007-08-10-a-p0017', num=17, issueUid='luxland-2007-08-10-a', newspaperUid='luxland', iiif='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/info.json', iiifThumbnail='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt=\"Klassik Naturmystik und ein Höllenspaß Marc Fiedler Das Es-Dur der Klangmagie und Natursprache von Jean Sibelius' Fünfter Sinfonieha\\\\ etwas wild Roman\", locations=[Entity(uid='aida-0001-54-Rostock', relevance=1), Entity(uid='aida-0001-54-London', relevance=1), Entity(uid='aida-0001-54-Bolzano', relevance=1), Entity(uid='aida-0001-54-Berlin', relevance=2), Entity(uid='aida-0001-54-Joe_Horn', relevance=1), Entity(uid='aida-0001-54-Auch', relevance=1)], persons=[Entity(uid='aida-0001-50-Jean_Sibelius', relevance=1), Entity(uid='aida-0001-50-Colin_Davis', relevance=6), Entity(uid='aida-0001-50-Johannes_Brahms', relevance=1), Entity(uid='aida-0001-50-Leonidas_Kavakos', relevance=1), Entity(uid='aida-0001-50-Hanns_Eisler', relevance=1), Entity(uid='aida-0001-50-Claudio_Abbado', relevance=1), Entity(uid='aida-0001-50-Bernard_Haitink', relevance=1), Entity(uid='aida-0001-50-Vladimir_Ashkenazy', relevance=1), Entity(uid='aida-0001-50-Daniel_Barenboim', relevance=1), Entity(uid='aida-0001-50-Herbert_Blomstedt', relevance=1), Entity(uid='aida-0001-50-David_Strange', relevance=1)], language='de', issue=NewspaperIssue(uid='luxland-2007-08-10-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2007, 8, 10, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), matches=[ArticleMatch(fragment=' Union, hochbegabte Musikstudenten zwischen 14 und 24Jahren. en. Die rund 140 Musiker des European Union', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Colin Davis im Musikkonservatorium den Auftakt der Sommer-Tournee des European Union Youth Orchestra', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[180.0, 2397.0, 242.0, 75.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/180,2397,242,75/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[198.0, 2500.0, 2161.0, 139.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/198,2500,2161,139/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[129.0, 2695.0, 223.0, 57.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/129,2695,223,57/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[139.0, 2807.0, 609.0, 2014.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/139,2807,609,2014/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[800.0, 4038.0, 610.0, 791.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/800,4038,610,791/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[1462.0, 4037.0, 610.0, 780.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/1462,4037,610,780/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[2122.0, 4035.0, 611.0, 786.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/2122,4035,611,786/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[2783.0, 4035.0, 610.0, 778.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/2783,4035,610,778/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[2829.0, 2775.0, 584.0, 624.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/2829,2775,584,624/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[1068.0, 2783.0, 33.0, 96.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/1068,2783,33,96/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[1109.0, 3894.0, 520.0, 25.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/1109,3894,520,25/full/0/default.png', g=None), ArticleRegion(pageUid='luxland-2007-08-10-a-p0017', coords=[1106.0, 2808.0, 1628.0, 1058.0], isEmpty=True, iiifFragment='https://iiif.eluxemburgensia.lu/image/iiif/2/ark:70795%2fd6knkf%2fpages%2f17/1106,2808,1628,1058/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='Closed', isFront=False, date=datetime.datetime(2007, 8, 10, 0, 0, tzinfo=TzInfo(UTC)), year=2007, country='LU', tags=[], collections=[], newspaper=Newspaper(uid='luxland', acronym='luxland', labels=['newspaper'], languages=['de', 'fr', 'en', 'lb'], properties=[], included=True, name=\"d'Letzeburger Land\", endYear=2007, startYear=1954, firstIssue=NewspaperIssue(uid='luxland-1954-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1954, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1954'), lastIssue=NewspaperIssue(uid='luxland-2007-12-21-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2007, 12, 21, 0, 0, tzinfo=TzInfo(UTC)), year='2007'), countArticles=267292, countIssues=2772, countPages=49062, fetched=True, deltaYear=53), dataProvider='BNL', topics=[ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp15_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=338797.0, excerpt=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None)], words=[TopicWord(w='musik', p=0.01947, h=None), TopicWord(w='konzert', p=0.01551, h=None), TopicWord(w='orchester', p=0.01146, h=None), TopicWord(w='abend', p=0.00994, h=None), TopicWord(w='programm', p=0.00991, h=None), TopicWord(w='publikum', p=0.00896, h=None), TopicWord(w='werk', p=0.00837, h=None), TopicWord(w='leitung', p=0.00833, h=None), TopicWord(w='chor', p=0.00785, h=None), TopicWord(w='aufführung', p=0.00679, h=None)], model='tm-de-all-v2.0'), relevance=0.478, topicUid='tm-de-all-v2.0_tp15_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp20_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=524542.0, excerpt=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None)], words=[TopicWord(w='schweiz', p=0.02513, h=None), TopicWord(w='franke', p=0.00961, h=None), TopicWord(w='bern', p=0.00804, h=None), TopicWord(w='bereich', p=0.00749, h=None), TopicWord(w='zukunft', p=0.00677, h=None), TopicWord(w='unternehmen', p=0.00574, h=None), TopicWord(w='foto', p=0.00567, h=None), TopicWord(w='zusammenarbeit', p=0.00552, h=None), TopicWord(w='thema', p=0.0053, h=None), TopicWord(w='rahmen', p=0.00508, h=None)], model='tm-de-all-v2.0'), relevance=0.11, topicUid='tm-de-all-v2.0_tp20_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp41_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=318469.0, excerpt=[TopicWord(w='london', p=0.07808, h=None), TopicWord(w='england', p=0.05434, h=None), TopicWord(w='sir', p=0.02891, h=None), TopicWord(w='lord', p=0.02667, h=None), TopicWord(w='regierung', p=0.02305, h=None)], words=[TopicWord(w='london', p=0.07808, h=None), TopicWord(w='england', p=0.05434, h=None), TopicWord(w='sir', p=0.02891, h=None), TopicWord(w='lord', p=0.02667, h=None), TopicWord(w='regierung', p=0.02305, h=None), TopicWord(w='pfund', p=0.01726, h=None), TopicWord(w='unterhaus', p=0.01654, h=None), TopicWord(w='churchill', p=0.01215, h=None), TopicWord(w='irland', p=0.01008, h=None), TopicWord(w='john', p=0.0099, h=None)], model='tm-de-all-v2.0'), relevance=0.098, topicUid='tm-de-all-v2.0_tp41_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp83_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=384254.0, excerpt=[TopicWord(w='berlin', p=0.04931, h=None), TopicWord(w='münchen', p=0.03825, h=None), TopicWord(w='wien', p=0.03251, h=None), TopicWord(w='mark', p=0.03032, h=None), TopicWord(w='frankfurt', p=0.02667, h=None)], words=[TopicWord(w='berlin', p=0.04931, h=None), TopicWord(w='münchen', p=0.03825, h=None), TopicWord(w='wien', p=0.03251, h=None), TopicWord(w='mark', p=0.03032, h=None), TopicWord(w='frankfurt', p=0.02667, h=None), TopicWord(w='deutschland', p=0.02332, h=None), TopicWord(w='köln', p=0.02281, h=None), TopicWord(w='hamburg', p=0.01874, h=None), TopicWord(w='paris', p=0.01866, h=None), TopicWord(w='bayer', p=0.01813, h=None)], model='tm-de-all-v2.0'), relevance=0.038, topicUid='tm-de-all-v2.0_tp83_de'), ArticleTopic(topic=Topic(uid='tm-de-all-v2.0_tp87_de', language='de', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=464530.0, excerpt=[TopicWord(w='film', p=0.04823, h=None), TopicWord(w='woche', p=0.02664, h=None), TopicWord(w='regie', p=0.00941, h=None), TopicWord(w='kino', p=0.00623, h=None), TopicWord(w='john', p=0.0062, h=None)], words=[TopicWord(w='film', p=0.04823, h=None), TopicWord(w='woche', p=0.02664, h=None), TopicWord(w='regie', p=0.00941, h=None), TopicWord(w='kino', p=0.00623, h=None), TopicWord(w='john', p=0.0062, h=None), TopicWord(w='rex', p=0.00519, h=None), TopicWord(w='titel', p=0.00504, h=None), TopicWord(w='paul', p=0.00496, h=None), TopicWord(w='erstaufführung', p=0.00445, h=None), TopicWord(w='james', p=0.00432, h=None)], model='tm-de-all-v2.0'), relevance=0.12, topicUid='tm-de-all-v2.0_tp87_de')], content=None, mentions=[], v=None), Article(uid='LLE-2008-10-02-a-i0112', type='ar', title='GÉORGIE Première mission de', size=368, nbPages=1, pages=[Page(uid='LLE-2008-10-02-a-p0004', num=4, issueUid='LLE-2008-10-02-a', newspaperUid='LLE', iiif='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='GÉORGIE Première mission de LORRAINE MILLOT , MOSCOU En bérets bleus étoiles , brassards et gilets assortis , les 200 observateurs - issus de 22 pays ', locations=[Entity(uid='aida-0001-54-Moscow', relevance=4), Entity(uid='aida-0001-54-Russia', relevance=2), Entity(uid='aida-0001-54-Mission_$28$LDS_Church$29$', relevance=1)], persons=[], language='fr', issue=NewspaperIssue(uid='LLE-2008-10-02-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2008, 10, 2, 0, 0, tzinfo=TzInfo(UTC)), year='2008'), matches=[ArticleMatch(fragment=' sécession de la Géorgie avec lappui de la Russie . Rassemblée en un temps record , cette EUMM ( European', coords=None, pageUid=None, iiif=None), ArticleMatch(fragment=' Union Monitoring Mission ) découle du plan « Medvedev-Sarkozy » conclu le 8 septembre à Moscou', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[89.0, 3351.0, 1108.0, 300.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/89,3351,1108,300/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[89.0, 3711.0, 528.0, 208.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/89,3711,528,208/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[89.0, 3937.0, 528.0, 257.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/89,3937,528,257/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[89.0, 4239.0, 528.0, 303.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/89,4239,528,303/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[89.0, 4548.0, 531.0, 346.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/89,4548,531,346/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[89.0, 4896.0, 528.0, 346.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/89,4896,528,346/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[663.0, 3714.0, 534.0, 260.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/663,3714,534,260/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[663.0, 3977.0, 534.0, 251.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/663,3977,534,251/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[663.0, 4239.0, 534.0, 303.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/663,4239,534,303/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[665.0, 4548.0, 532.0, 346.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/665,4548,532,346/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2008-10-02-a-p0004', coords=[665.0, 4939.0, 532.0, 303.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2008-10-02-a-p0004/665,4939,532,303/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2008, 10, 2, 0, 0, tzinfo=TzInfo(UTC)), year=2008, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='LLE', acronym='LLE', labels=['newspaper'], languages=['fr'], properties=[], included=True, name='La Liberté', endYear=2018, startYear=1871, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=147), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp08_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2092699.0, excerpt=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None)], words=[TopicWord(w='entreprise', p=0.02931, h=None), TopicWord(w='formation', p=0.02876, h=None), TopicWord(w='travail', p=0.02655, h=None), TopicWord(w='expérience', p=0.02488, h=None), TopicWord(w='équipe', p=0.01805, h=None), TopicWord(w='service', p=0.0173, h=None), TopicWord(w='domaine', p=0.01536, h=None), TopicWord(w='poste', p=0.01445, h=None), TopicWord(w='personnel', p=0.0135, h=None), TopicWord(w='gestion', p=0.01247, h=None)], model='tm-fr-all-v2.0'), relevance=0.023, topicUid='tm-fr-all-v2.0_tp08_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp29_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1342277.0, excerpt=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None)], words=[TopicWord(w='guerre', p=0.06224, h=None), TopicWord(w='paix', p=0.03208, h=None), TopicWord(w='pays', p=0.0225, h=None), TopicWord(w='peuple', p=0.01924, h=None), TopicWord(w='politique', p=0.01695, h=None), TopicWord(w='nation', p=0.01448, h=None), TopicWord(w='monde', p=0.01274, h=None), TopicWord(w='gouvernement', p=0.01088, h=None), TopicWord(w='situation', p=0.00931, h=None), TopicWord(w='discours', p=0.00769, h=None)], model='tm-fr-all-v2.0'), relevance=0.08, topicUid='tm-fr-all-v2.0_tp29_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp47_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1517013.0, excerpt=[TopicWord(w='ville', p=0.03486, h=None), TopicWord(w='siècle', p=0.02264, h=None), TopicWord(w='maison', p=0.01493, h=None), TopicWord(w='pays', p=0.01087, h=None), TopicWord(w='château', p=0.00944, h=None)], words=[TopicWord(w='ville', p=0.03486, h=None), TopicWord(w='siècle', p=0.02264, h=None), TopicWord(w='maison', p=0.01493, h=None), TopicWord(w='pays', p=0.01087, h=None), TopicWord(w='château', p=0.00944, h=None), TopicWord(w='pierre', p=0.0089, h=None), TopicWord(w='époque', p=0.00867, h=None), TopicWord(w='temps', p=0.00866, h=None), TopicWord(w='nom', p=0.00835, h=None), TopicWord(w='place', p=0.00754, h=None)], model='tm-fr-all-v2.0'), relevance=0.034, topicUid='tm-fr-all-v2.0_tp47_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp52_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1227788.0, excerpt=[TopicWord(w='front', p=0.02305, h=None), TopicWord(w='armée', p=0.02116, h=None), TopicWord(w='guerre', p=0.01898, h=None), TopicWord(w='ennemi', p=0.01845, h=None), TopicWord(w='nord', p=0.01778, h=None)], words=[TopicWord(w='front', p=0.02305, h=None), TopicWord(w='armée', p=0.02116, h=None), TopicWord(w='guerre', p=0.01898, h=None), TopicWord(w='ennemi', p=0.01845, h=None), TopicWord(w='nord', p=0.01778, h=None), TopicWord(w='région', p=0.01743, h=None), TopicWord(w='sud', p=0.01716, h=None), TopicWord(w='général', p=0.01712, h=None), TopicWord(w='allemand', p=0.01697, h=None), TopicWord(w='attaque', p=0.01489, h=None)], model='tm-fr-all-v2.0'), relevance=0.03, topicUid='tm-fr-all-v2.0_tp52_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp65_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2003191.0, excerpt=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None)], words=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None), TopicWord(w='octobre', p=0.02288, h=None), TopicWord(w='lieu', p=0.0211, h=None), TopicWord(w='fin', p=0.0142, h=None), TopicWord(w='mai', p=0.01199, h=None), TopicWord(w='date', p=0.01139, h=None)], model='tm-fr-all-v2.0'), relevance=0.098, topicUid='tm-fr-all-v2.0_tp65_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp71_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1363708.0, excerpt=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None)], words=[TopicWord(w='pays', p=0.04381, h=None), TopicWord(w='président', p=0.02988, h=None), TopicWord(w='accord', p=0.02501, h=None), TopicWord(w='o.n.u', p=0.01614, h=None), TopicWord(w='ministre', p=0.01545, h=None), TopicWord(w='paix', p=0.01383, h=None), TopicWord(w='sécurité', p=0.01362, h=None), TopicWord(w='conférence', p=0.01261, h=None), TopicWord(w='secrétaire', p=0.01045, h=None), TopicWord(w='plan', p=0.0097, h=None)], model='tm-fr-all-v2.0'), relevance=0.457, topicUid='tm-fr-all-v2.0_tp71_fr')], content=None, mentions=[], v=None), Article(uid='IMP-2010-03-31-a-i0127', type='ar', title='En bref', size=187, nbPages=1, pages=[Page(uid='IMP-2010-03-31-a-p0014', num=14, issueUid='IMP-2010-03-31-a', newspaperUid='IMP', iiif='https://impresso-project.ch/api/proxy/iiif/IMP-2010-03-31-a-p0014', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/IMP-2010-03-31-a-p0014/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='En bref BÂLE Cinquante millions pour le Kunstmuseum La moitié de la somme nécessaire à l’agrandissement du Kunstmuseum de Bâle a été trouvée. La Fonda', locations=[Entity(uid='aida-0001-54-Basel', relevance=3), Entity(uid='aida-0001-54-Lugano', relevance=2)], persons=[Entity(uid='aida-0001-50-Charlie_Hebdo', relevance=1), Entity(uid='aida-0001-50-Sol_Gabetta', relevance=2), Entity(uid='aida-0001-50-Alain_Lombard', relevance=2), Entity(uid='aida-0001-50-Vladimir_Ashkenazy', relevance=1), Entity(uid='aida-0001-50-Heinz_Holliger', relevance=1)], language='fr', issue=NewspaperIssue(uid='IMP-2010-03-31-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2010, 3, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2010'), matches=[ArticleMatch(fragment=' à Lugano Dirigé par Vladimir Ashkenazy, l’European Union Youth Orchestra amorcera le Festival de Lugano', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='IMP-2010-03-31-a-p0014', coords=[1444.0, 1595.0, 164.0, 47.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2010-03-31-a-p0014/1444,1595,164,47/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2010-03-31-a-p0014', coords=[1446.0, 1661.0, 255.0, 647.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2010-03-31-a-p0014/1446,1661,255,647/full/0/default.png', g=None), ArticleRegion(pageUid='IMP-2010-03-31-a-p0014', coords=[1446.0, 2308.0, 252.0, 203.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/IMP-2010-03-31-a-p0014/1446,2308,252,203/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2010, 3, 31, 0, 0, tzinfo=TzInfo(UTC)), year=2010, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='IMP', acronym='IMP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Impartial\", endYear=2018, startYear=1881, firstIssue=NewspaperIssue(uid='IMP-1881-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1881, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1881'), lastIssue=NewspaperIssue(uid='IMP-2018-01-22-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2018, 1, 22, 0, 0, tzinfo=TzInfo(UTC)), year='2018'), countArticles=7103161, countIssues=40228, countPages=756672, fetched=True, deltaYear=137), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp05_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1500624.0, excerpt=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None)], words=[TopicWord(w='police', p=0.039, h=None), TopicWord(w='ville', p=0.0152, h=None), TopicWord(w='capitale', p=0.01179, h=None), TopicWord(w='armée', p=0.01073, h=None), TopicWord(w='pays', p=0.01068, h=None), TopicWord(w='sécurité', p=0.01062, h=None), TopicWord(w='gouvernement', p=0.01039, h=None), TopicWord(w='attentat', p=0.01015, h=None), TopicWord(w='chef', p=0.01009, h=None), TopicWord(w='ministre', p=0.00956, h=None)], model='tm-fr-all-v2.0'), relevance=0.148, topicUid='tm-fr-all-v2.0_tp05_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp15_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2819261.0, excerpt=[TopicWord(w='cuisine', p=0.04559, h=None), TopicWord(w='salle', p=0.04365, h=None), TopicWord(w='appartement', p=0.03069, h=None), TopicWord(w='confort', p=0.0289, h=None), TopicWord(w='parc', p=0.02455, h=None)], words=[TopicWord(w='cuisine', p=0.04559, h=None), TopicWord(w='salle', p=0.04365, h=None), TopicWord(w='appartement', p=0.03069, h=None), TopicWord(w='confort', p=0.0289, h=None), TopicWord(w='parc', p=0.02455, h=None), TopicWord(w='suite', p=0.02419, h=None), TopicWord(w='vue', p=0.0229, h=None), TopicWord(w='garage', p=0.02245, h=None), TopicWord(w='place', p=0.02181, h=None), TopicWord(w='balcon', p=0.02081, h=None)], model='tm-fr-all-v2.0'), relevance=0.066, topicUid='tm-fr-all-v2.0_tp15_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp25_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1482539.0, excerpt=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None)], words=[TopicWord(w='journal', p=0.0304, h=None), TopicWord(w='monde', p=0.02807, h=None), TopicWord(w='vie', p=0.02221, h=None), TopicWord(w='direct', p=0.02097, h=None), TopicWord(w='série', p=0.01957, h=None), TopicWord(w='amour', p=0.01432, h=None), TopicWord(w='sport', p=0.01369, h=None), TopicWord(w='nuit', p=0.01345, h=None), TopicWord(w='jean', p=0.01245, h=None), TopicWord(w='club', p=0.01099, h=None)], model='tm-fr-all-v2.0'), relevance=0.031, topicUid='tm-fr-all-v2.0_tp25_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp37_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1629711.0, excerpt=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None)], words=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None), TopicWord(w='question', p=0.01606, h=None), TopicWord(w='fait', p=0.01434, h=None), TopicWord(w='propos', p=0.01279, h=None), TopicWord(w='sujet', p=0.01251, h=None), TopicWord(w='cas', p=0.01111, h=None)], model='tm-fr-all-v2.0'), relevance=0.063, topicUid='tm-fr-all-v2.0_tp37_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp41_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1386358.0, excerpt=[TopicWord(w='part', p=0.07334, h=None), TopicWord(w='lieu', p=0.06867, h=None), TopicWord(w='famille', p=0.04427, h=None), TopicWord(w='décès', p=0.03765, h=None), TopicWord(w='avis', p=0.03386, h=None)], words=[TopicWord(w='part', p=0.07334, h=None), TopicWord(w='lieu', p=0.06867, h=None), TopicWord(w='famille', p=0.04427, h=None), TopicWord(w='décès', p=0.03765, h=None), TopicWord(w='avis', p=0.03386, h=None), TopicWord(w='année', p=0.0282, h=None), TopicWord(w='lettre', p=0.02718, h=None), TopicWord(w='jean', p=0.02349, h=None), TopicWord(w='chagrin', p=0.01756, h=None), TopicWord(w='affection', p=0.01695, h=None)], model='tm-fr-all-v2.0'), relevance=0.028, topicUid='tm-fr-all-v2.0_tp41_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp58_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1235115.0, excerpt=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None)], words=[TopicWord(w='der', p=0.1617, h=None), TopicWord(w='man', p=0.03079, h=None), TopicWord(w='dan', p=0.02852, h=None), TopicWord(w='pou', p=0.02667, h=None), TopicWord(w='dos', p=0.02301, h=None), TopicWord(w='ben', p=0.02048, h=None), TopicWord(w='con', p=0.01486, h=None), TopicWord(w='ion', p=0.01387, h=None), TopicWord(w='aber', p=0.01239, h=None), TopicWord(w='welche', p=0.01154, h=None)], model='tm-fr-all-v2.0'), relevance=0.089, topicUid='tm-fr-all-v2.0_tp58_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp59_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1584213.0, excerpt=[TopicWord(w='monde', p=0.02864, h=None), TopicWord(w='concours', p=0.02492, h=None), TopicWord(w='record', p=0.02188, h=None), TopicWord(w='sport', p=0.02012, h=None), TopicWord(w='suisse', p=0.01811, h=None)], words=[TopicWord(w='monde', p=0.02864, h=None), TopicWord(w='concours', p=0.02492, h=None), TopicWord(w='record', p=0.02188, h=None), TopicWord(w='sport', p=0.02012, h=None), TopicWord(w='suisse', p=0.01811, h=None), TopicWord(w='place', p=0.01681, h=None), TopicWord(w='min', p=0.01513, h=None), TopicWord(w='club', p=0.01491, h=None), TopicWord(w='course', p=0.01418, h=None), TopicWord(w='catégorie', p=0.0136, h=None)], model='tm-fr-all-v2.0'), relevance=0.054, topicUid='tm-fr-all-v2.0_tp59_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp95_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1425409.0, excerpt=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None)], words=[TopicWord(w='loi', p=0.07082, h=None), TopicWord(w='droit', p=0.05264, h=None), TopicWord(w='conseil', p=0.03093, h=None), TopicWord(w='cas', p=0.02686, h=None), TopicWord(w='article', p=0.02222, h=None), TopicWord(w='recours', p=0.01317, h=None), TopicWord(w='art', p=0.01269, h=None), TopicWord(w='vigueur', p=0.01123, h=None), TopicWord(w='projet', p=0.0108, h=None), TopicWord(w='décision', p=0.01019, h=None)], model='tm-fr-all-v2.0'), relevance=0.127, topicUid='tm-fr-all-v2.0_tp95_fr')], content=None, mentions=[], v=None), Article(uid='EXP-2010-03-31-a-i0128', type='ar', title='En bref', size=187, nbPages=1, pages=[Page(uid='EXP-2010-03-31-a-p0014', num=14, issueUid='EXP-2010-03-31-a', newspaperUid='EXP', iiif='https://impresso-project.ch/api/proxy/iiif/EXP-2010-03-31-a-p0014', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/EXP-2010-03-31-a-p0014/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=True, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=True, excerpt='En bref BÂLE Cinquante millions pour le Kunstmuseum La moitié de la somme nécessaire à l’agrandissement du Kunstmuseum de Bâle a été trouvée. La Fonda', locations=[Entity(uid='aida-0001-54-Basel', relevance=3), Entity(uid='aida-0001-54-Lugano', relevance=2)], persons=[Entity(uid='aida-0001-50-Charlie_Hebdo', relevance=1), Entity(uid='aida-0001-50-Sol_Gabetta', relevance=2), Entity(uid='aida-0001-50-Alain_Lombard', relevance=2), Entity(uid='aida-0001-50-Vladimir_Ashkenazy', relevance=1), Entity(uid='aida-0001-50-Heinz_Holliger', relevance=1)], language='fr', issue=NewspaperIssue(uid='EXP-2010-03-31-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2010, 3, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2010'), matches=[ArticleMatch(fragment=' à Lugano Dirigé par Vladimir Ashkenazy, l’European Union Youth Orchestra amorcera le Festival de Lugano', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='EXP-2010-03-31-a-p0014', coords=[1446.0, 1597.0, 160.0, 43.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2010-03-31-a-p0014/1446,1597,160,43/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2010-03-31-a-p0014', coords=[1446.0, 1652.0, 255.0, 590.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2010-03-31-a-p0014/1446,1652,255,590/full/0/default.png', g=None), ArticleRegion(pageUid='EXP-2010-03-31-a-p0014', coords=[1446.0, 2239.0, 252.0, 272.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/EXP-2010-03-31-a-p0014/1446,2239,252,272/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2010, 3, 31, 0, 0, tzinfo=TzInfo(UTC)), year=2010, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='EXP', acronym='EXP', labels=['newspaper'], languages=['fr'], properties=[], included=True, name=\"L'Express\", endYear=2018, startYear=1738, firstIssue=NewspaperIssue(uid='EXP-1740-01-01-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(1740, 1, 1, 0, 0, tzinfo=TzInfo(UTC)), year='1740'), lastIssue=NewspaperIssue(uid='EXP-2017-10-31-a', cover='', labels=['issue'], fresh=False, accessRights='Closed', date=datetime.datetime(2017, 10, 31, 0, 0, tzinfo=TzInfo(UTC)), year='2017'), countArticles=8397287, countIssues=46204, countPages=701819, fetched=True, deltaYear=280), dataProvider='SNL', topics=[ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp07_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1570564.0, excerpt=[TopicWord(w='exposition', p=0.06811, h=None), TopicWord(w='art', p=0.05445, h=None), TopicWord(w='artiste', p=0.03544, h=None), TopicWord(w='peintre', p=0.03066, h=None), TopicWord(w='histoire', p=0.02405, h=None)], words=[TopicWord(w='exposition', p=0.06811, h=None), TopicWord(w='art', p=0.05445, h=None), TopicWord(w='artiste', p=0.03544, h=None), TopicWord(w='peintre', p=0.03066, h=None), TopicWord(w='histoire', p=0.02405, h=None), TopicWord(w='peinture', p=0.02112, h=None), TopicWord(w='musée', p=0.01877, h=None), TopicWord(w='siècle', p=0.01664, h=None), TopicWord(w='jean', p=0.01415, h=None), TopicWord(w='collection', p=0.01307, h=None)], model='tm-fr-all-v2.0'), relevance=0.171, topicUid='tm-fr-all-v2.0_tp07_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp24_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1922664.0, excerpt=[TopicWord(w='fête', p=0.03229, h=None), TopicWord(w='samedi', p=0.02619, h=None), TopicWord(w='année', p=0.02363, h=None), TopicWord(w='manifestation', p=0.02016, h=None), TopicWord(w='dimanche', p=0.01661, h=None)], words=[TopicWord(w='fête', p=0.03229, h=None), TopicWord(w='samedi', p=0.02619, h=None), TopicWord(w='année', p=0.02363, h=None), TopicWord(w='manifestation', p=0.02016, h=None), TopicWord(w='dimanche', p=0.01661, h=None), TopicWord(w='soirée', p=0.01555, h=None), TopicWord(w='place', p=0.01443, h=None), TopicWord(w='occasion', p=0.01438, h=None), TopicWord(w='lieu', p=0.01434, h=None), TopicWord(w='club', p=0.01347, h=None)], model='tm-fr-all-v2.0'), relevance=0.033, topicUid='tm-fr-all-v2.0_tp24_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp27_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1314790.0, excerpt=[TopicWord(w='suisse', p=0.07283, h=None), TopicWord(w='nom', p=0.05789, h=None), TopicWord(w='bond', p=0.04402, h=None), TopicWord(w='port', p=0.03823, h=None), TopicWord(w='mois', p=0.02632, h=None)], words=[TopicWord(w='suisse', p=0.07283, h=None), TopicWord(w='nom', p=0.05789, h=None), TopicWord(w='bond', p=0.04402, h=None), TopicWord(w='port', p=0.03823, h=None), TopicWord(w='mois', p=0.02632, h=None), TopicWord(w='argent', p=0.02494, h=None), TopicWord(w='fischer', p=0.01868, h=None), TopicWord(w='fin', p=0.0165, h=None), TopicWord(w='cours', p=0.01575, h=None), TopicWord(w='lombard', p=0.01475, h=None)], model='tm-fr-all-v2.0'), relevance=0.11, topicUid='tm-fr-all-v2.0_tp27_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp37_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1629711.0, excerpt=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None)], words=[TopicWord(w='presse', p=0.03126, h=None), TopicWord(w='journal', p=0.02853, h=None), TopicWord(w='lettre', p=0.02086, h=None), TopicWord(w='affaire', p=0.02034, h=None), TopicWord(w='article', p=0.01838, h=None), TopicWord(w='question', p=0.01606, h=None), TopicWord(w='fait', p=0.01434, h=None), TopicWord(w='propos', p=0.01279, h=None), TopicWord(w='sujet', p=0.01251, h=None), TopicWord(w='cas', p=0.01111, h=None)], model='tm-fr-all-v2.0'), relevance=0.071, topicUid='tm-fr-all-v2.0_tp37_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp53_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1314966.0, excerpt=[TopicWord(w='budget', p=0.0446, h=None), TopicWord(w='impôt', p=0.0376, h=None), TopicWord(w='conseil', p=0.02422, h=None), TopicWord(w='déficit', p=0.01899, h=None), TopicWord(w='taxe', p=0.01808, h=None)], words=[TopicWord(w='budget', p=0.0446, h=None), TopicWord(w='impôt', p=0.0376, h=None), TopicWord(w='conseil', p=0.02422, h=None), TopicWord(w='déficit', p=0.01899, h=None), TopicWord(w='taxe', p=0.01808, h=None), TopicWord(w='augmentation', p=0.01774, h=None), TopicWord(w='année', p=0.01724, h=None), TopicWord(w='dette', p=0.01623, h=None), TopicWord(w='compte', p=0.01528, h=None), TopicWord(w='somme', p=0.0141, h=None)], model='tm-fr-all-v2.0'), relevance=0.063, topicUid='tm-fr-all-v2.0_tp53_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp56_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1626587.0, excerpt=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None)], words=[TopicWord(w='conseil', p=0.07441, h=None), TopicWord(w='commune', p=0.04146, h=None), TopicWord(w='construction', p=0.02389, h=None), TopicWord(w='crédit', p=0.02198, h=None), TopicWord(w='ville', p=0.01986, h=None), TopicWord(w='commission', p=0.01335, h=None), TopicWord(w='projet', p=0.01329, h=None), TopicWord(w='séance', p=0.012, h=None), TopicWord(w='bâtiment', p=0.01082, h=None), TopicWord(w='terrain', p=0.0103, h=None)], model='tm-fr-all-v2.0'), relevance=0.095, topicUid='tm-fr-all-v2.0_tp56_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp59_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1584213.0, excerpt=[TopicWord(w='monde', p=0.02864, h=None), TopicWord(w='concours', p=0.02492, h=None), TopicWord(w='record', p=0.02188, h=None), TopicWord(w='sport', p=0.02012, h=None), TopicWord(w='suisse', p=0.01811, h=None)], words=[TopicWord(w='monde', p=0.02864, h=None), TopicWord(w='concours', p=0.02492, h=None), TopicWord(w='record', p=0.02188, h=None), TopicWord(w='sport', p=0.02012, h=None), TopicWord(w='suisse', p=0.01811, h=None), TopicWord(w='place', p=0.01681, h=None), TopicWord(w='min', p=0.01513, h=None), TopicWord(w='club', p=0.01491, h=None), TopicWord(w='course', p=0.01418, h=None), TopicWord(w='catégorie', p=0.0136, h=None)], model='tm-fr-all-v2.0'), relevance=0.028, topicUid='tm-fr-all-v2.0_tp59_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp60_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1802341.0, excerpt=[TopicWord(w='avril', p=0.23987, h=None), TopicWord(w='mai', p=0.22872, h=None), TopicWord(w='mars', p=0.21863, h=None), TopicWord(w='lieu', p=0.02617, h=None), TopicWord(w='juin', p=0.0253, h=None)], words=[TopicWord(w='avril', p=0.23987, h=None), TopicWord(w='mai', p=0.22872, h=None), TopicWord(w='mars', p=0.21863, h=None), TopicWord(w='lieu', p=0.02617, h=None), TopicWord(w='juin', p=0.0253, h=None), TopicWord(w='mois', p=0.02507, h=None), TopicWord(w='février', p=0.02289, h=None), TopicWord(w='mercredi', p=0.01705, h=None), TopicWord(w='lundi', p=0.01638, h=None), TopicWord(w='jeudi', p=0.01557, h=None)], model='tm-fr-all-v2.0'), relevance=0.054, topicUid='tm-fr-all-v2.0_tp60_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp65_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=2003191.0, excerpt=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None)], words=[TopicWord(w='août', p=0.19465, h=None), TopicWord(w='juillet', p=0.19068, h=None), TopicWord(w='septembre', p=0.17573, h=None), TopicWord(w='juin', p=0.16535, h=None), TopicWord(w='mois', p=0.03507, h=None), TopicWord(w='octobre', p=0.02288, h=None), TopicWord(w='lieu', p=0.0211, h=None), TopicWord(w='fin', p=0.0142, h=None), TopicWord(w='mai', p=0.01199, h=None), TopicWord(w='date', p=0.01139, h=None)], model='tm-fr-all-v2.0'), relevance=0.06, topicUid='tm-fr-all-v2.0_tp65_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp74_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1530139.0, excerpt=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None)], words=[TopicWord(w='président', p=0.07339, h=None), TopicWord(w='ministre', p=0.06456, h=None), TopicWord(w='gouvernement', p=0.03298, h=None), TopicWord(w='général', p=0.0291, h=None), TopicWord(w='chef', p=0.0287, h=None), TopicWord(w='visite', p=0.02084, h=None), TopicWord(w='ambassadeur', p=0.01888, h=None), TopicWord(w='presse', p=0.01663, h=None), TopicWord(w='secrétaire', p=0.0161, h=None), TopicWord(w='conseil', p=0.01461, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp74_fr'), ArticleTopic(topic=Topic(uid='tm-fr-all-v2.0_tp92_fr', language='fr', community='', pagerank=0.0, degree=0.0, x=0.0, y=0.0, relatedTopics=[], countItems=1640049.0, excerpt=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None)], words=[TopicWord(w='canton', p=0.02852, h=None), TopicWord(w='projet', p=0.01806, h=None), TopicWord(w='développement', p=0.01565, h=None), TopicWord(w='recherche', p=0.013, h=None), TopicWord(w='région', p=0.0122, h=None), TopicWord(w='formation', p=0.01139, h=None), TopicWord(w='centre', p=0.01072, h=None), TopicWord(w='suisse', p=0.0107, h=None), TopicWord(w='travail', p=0.01037, h=None), TopicWord(w='directeur', p=0.00986, h=None)], model='tm-fr-all-v2.0'), relevance=0.022, topicUid='tm-fr-all-v2.0_tp92_fr')], content=None, mentions=[], v=None), Article(uid='LLE-2012-05-03-a-i0180', type='ar', title='Estavayer joue sa survie ce soir', size=365, nbPages=1, pages=[Page(uid='LLE-2012-05-03-a-p0020', num=20, issueUid='LLE-2012-05-03-a', newspaperUid='LLE', iiif='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020', iiifThumbnail='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/full/150,/0/default.png', accessRights='nd', labels=['page'], hasCoords=False, hasErrors=False, regions=[], obfuscated=None, iiifFragment=None)], isCC=False, excerpt='> CONFÉRENCE de la Société fri bourgeoise des sciences naturelles . « Lénergie éolienne dans le canton de Fribourg et en Suisse » par Laurent Scacchi ', locations=[Entity(uid='aida-0001-54-Fribourg', relevance=3), Entity(uid='aida-0001-54-Switzerland', relevance=1), Entity(uid='aida-0001-54-Oxford', relevance=1), Entity(uid='aida-0001-54-Romont', relevance=1)], persons=[Entity(uid='aida-0001-50-Georges_Schwizgebel', relevance=1), Entity(uid='aida-0001-50-Brigitte_Wolf', relevance=1)], language='fr', issue=NewspaperIssue(uid='LLE-2012-05-03-a', cover='', labels=['issue'], fresh=False, accessRights='NotDefined', date=datetime.datetime(2012, 5, 3, 0, 0, tzinfo=TzInfo(UTC)), year='2012'), matches=[ArticleMatch(fragment=' 30 . > CONFÉRENCE « Politics and policies of promoting multilingua lism in the European Union', coords=None, pageUid=None, iiif=None)], regions=[ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[100.0, 2877.0, 534.0, 154.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/100,2877,534,154/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[100.0, 3042.0, 520.0, 355.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/100,3042,520,355/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[103.0, 3405.0, 514.0, 392.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/103,3405,514,392/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[103.0, 3805.0, 514.0, 426.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/103,3805,514,426/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[103.0, 4236.0, 525.0, 432.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/103,4236,525,432/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[109.0, 4676.0, 517.0, 303.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/109,4676,517,303/full/0/default.png', g=None), ArticleRegion(pageUid='LLE-2012-05-03-a-p0020', coords=[109.0, 4988.0, 519.0, 345.0], isEmpty=True, iiifFragment='https://impresso-project.ch/api/proxy/iiif/LLE-2012-05-03-a-p0020/109,4988,519,345/full/0/default.png', g=None)], regionBreaks=[], contentLineBreaks=[], labels=['article'], accessRight='OpenPrivate', isFront=False, date=datetime.datetime(2012, 5, 3, 0, 0, tzinfo=TzInfo(UTC)), year=2012, country='CH', tags=[], collections=[], newspaper=Newspaper(uid='LLE', acronym='LLE', labels=['newspaper'], languages=['fr'], properties=[], included=True, name='La Liberté', endYear=2018, startYear=1871, firstIssue=None, lastIssue=None, countArticles=-1, countIssues=-1, countPages=-1, fetched=True, deltaYear=147), dataProvider='SNL', topics=[], content=None, mentions=[], v=None)])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result.pydantic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pandas\n", + "We can also get the search results as a [Pandas](https://pandas.pydata.org/) DataFrame. \n", + "This allows us to easily manipulate and analyze the data using pandas' powerful data manipulation capabilities." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyear...newspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
luxwort-1948-11-25-a-i0033arEuropäischer Föderalistenkongreß in Rom7341[{'uid': 'luxwort-1948-11-25-a-p0006', 'num': ...TrueEuropäischer Föderalistenkongreß in Rom (Schlu...[article]Closed1948...1848-03-23T00:00:00+00:001848luxwort-1950-12-30-a[issue]FalseClosed1950-12-30T00:00:00+00:001950True
FZG-1950-06-17-a-i0045arUm EJnropa herum Die Furcht vor Krieg un...13531[{'uid': 'FZG-1950-06-17-a-p0001', 'num': 1, '...FalseUm EJnropa herum Die Furcht vor Krieg und Vern...[article]OpenPrivate1950...NaNNaNNaNNaNNaNNaNNaNNaNNaNTrue
\n", + "

2 rows × 60 columns

\n", + "
" + ], + "text/plain": [ + " type title \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 ar Europäischer Föderalistenkongreß in Rom \n", + "FZG-1950-06-17-a-i0045 ar Um EJnropa herum Die Furcht vor Krieg un... \n", + "\n", + " size nbPages \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 734 1 \n", + "FZG-1950-06-17-a-i0045 1353 1 \n", + "\n", + " pages \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 [{'uid': 'luxwort-1948-11-25-a-p0006', 'num': ... \n", + "FZG-1950-06-17-a-i0045 [{'uid': 'FZG-1950-06-17-a-p0001', 'num': 1, '... \n", + "\n", + " isCC \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 True \n", + "FZG-1950-06-17-a-i0045 False \n", + "\n", + " excerpt \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 Europäischer Föderalistenkongreß in Rom (Schlu... \n", + "FZG-1950-06-17-a-i0045 Um EJnropa herum Die Furcht vor Krieg und Vern... \n", + "\n", + " labels accessRight year ... \\\n", + "uid ... \n", + "luxwort-1948-11-25-a-i0033 [article] Closed 1948 ... \n", + "FZG-1950-06-17-a-i0045 [article] OpenPrivate 1950 ... \n", + "\n", + " newspaper.firstIssue.date \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 1848-03-23T00:00:00+00:00 \n", + "FZG-1950-06-17-a-i0045 NaN \n", + "\n", + " newspaper.firstIssue.year newspaper.lastIssue.uid \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 1848 luxwort-1950-12-30-a \n", + "FZG-1950-06-17-a-i0045 NaN NaN \n", + "\n", + " newspaper.lastIssue.cover \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 \n", + "FZG-1950-06-17-a-i0045 NaN \n", + "\n", + " newspaper.lastIssue.labels \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 [issue] \n", + "FZG-1950-06-17-a-i0045 NaN \n", + "\n", + " newspaper.lastIssue.fresh \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 False \n", + "FZG-1950-06-17-a-i0045 NaN \n", + "\n", + " newspaper.lastIssue.accessRights \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 Closed \n", + "FZG-1950-06-17-a-i0045 NaN \n", + "\n", + " newspaper.lastIssue.date \\\n", + "uid \n", + "luxwort-1948-11-25-a-i0033 1950-12-30T00:00:00+00:00 \n", + "FZG-1950-06-17-a-i0045 NaN \n", + "\n", + " newspaper.lastIssue.year newspaper.fetched \n", + "uid \n", + "luxwort-1948-11-25-a-i0033 1950 True \n", + "FZG-1950-06-17-a-i0045 NaN True \n", + "\n", + "[2 rows x 60 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = result.df\n", + "df.head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get an article\n", + "\n", + "Below we will use the `articles` resource to get an article by its ID:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Article result

\n", + "
Contains 1 items of 1 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uidtypetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicscontentmentionsvissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
0NZZ-1794-08-09-a-i0002page^chutch schleunige Vorkehrungen der bewafneten...12521[{'uid': 'NZZ-1794-08-09-a-p0002', 'num': 2, '...True^chutch schleunige Vorkehrungen der bewafneten...[article]Closed1794[{'uid': 'aida-0001-54-Paris', 'relevance': 2}...[]de[][{'pageUid': 'NZZ-1794-08-09-a-p0002', 'coords...[][53, 92, 118, 189, 249, 309, 372, 436, 496, 55...False1794-08-09T00:00:00+00:00CH[][]NZZ[{'relevance': 0.703, 'topic': {'uid': 'tm-de-...^chutch schleunige Vorkehrungen der bewafneten...[{'person': [], 'location': [[1033, 5], [1164,...NZZ-1794-08-09-a[issue]FalseClosed1794-08-09T00:00:00+00:001794NZZNZZ[newspaper][de]TrueNeue Zürcher Zeitung20171780558804112676549965237[]NZZ-1780-01-12-a[issue]FalseClosed1780-01-12T00:00:00+00:001780NZZ-1950-12-31-a[issue]FalseClosed1950-12-31T00:00:00+00:001950True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "article = impresso.articles.get(\"NZZ-1794-08-09-a-i0002\")\n", + "article" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also get it as a Pydantic model or as a DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'^chutch schleunige Vorkehrungen der bewafnetenNazi «» « ulmacht versichert . unV t >;.. 3 >; Stadthaus auf n ...!)..,. zlVbereyiere wit sc ! i ! enAn '" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "article.pydantic.excerpt" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uidcountrylanguage
0NZZ-1794-08-09-a-i0002CHde
\n", + "
" + ], + "text/plain": [ + " uid country language\n", + "0 NZZ-1794-08-09-a-i0002 CH de" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "article.df[['uid', 'country', 'language']]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Search facets\n", + "\n", + "In this cell, we will search for facets related to the term \"fromage\" in the Impresso collection. This is a convenient way to see a breakdown of the search results by country.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
CH132744
LU4290
\n", + "
" + ], + "text/plain": [ + " count\n", + "val \n", + "CH 132744\n", + "LU 4290" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "country_facet = impresso.search.facet(\"country\", q=\"fromage\")\n", + "country_facet.df" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/notebooks/collections.ipynb b/examples/notebooks/collections.ipynb new file mode 100644 index 0000000..b15920e --- /dev/null +++ b/examples/notebooks/collections.ipynb @@ -0,0 +1,156 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Search collections\n", + "\n", + "Find all collections that your Impresso account owns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result = impresso.collections.find()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Get collection\n", + "\n", + "Get metadata of a colection by its ID." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result = impresso.collections.get(\"local-roka-tOrwrOG3\")\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get collection items\n", + "\n", + "Get items from a collection by its ID." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "colection_id = result.raw[\"uid\"]\n", + "items = impresso.collections.items(colection_id)\n", + "items" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Remove items from collection" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'EXP-2015-06-18-a-i0190'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "item_id = items.pydantic.data[0].uid\n", + "item_id" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "impresso.collections.remove_items(colection_id, [item_id])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Add items to collection" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "impresso.collections.add_items(colection_id, [item_id])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/notebooks/entities.ipynb b/examples/notebooks/entities.ipynb new file mode 100644 index 0000000..c196a2a --- /dev/null +++ b/examples/notebooks/entities.ipynb @@ -0,0 +1,2069 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Search entities\n", + "\n", + "Find all entities that contain a term in their name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindEntities result

\n", + "
Contains 3 items of 3 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nametypecountItemscountMentionswikidataIdwikidata.birthDatewikidata.deathDatewikidata.birthPlace.idwikidata.birthPlace.typewikidata.birthPlace.labels.enwikidata.birthPlace.labels.frwikidata.birthPlace.labels.itwikidata.birthPlace.labels.dewikidata.birthPlace.descriptions.enwikidata.birthPlace.descriptions.frwikidata.birthPlace.descriptions.itwikidata.birthPlace.descriptions.dewikidata.birthPlace.imageswikidata.birthPlace.coordinates.latitudewikidata.birthPlace.coordinates.longitudewikidata.birthPlace.coordinates.altitudewikidata.birthPlace.coordinates.precisionwikidata.birthPlace.coordinates.globewikidata.birthPlace.country.entity-typewikidata.birthPlace.country.numeric-idwikidata.birthPlace.country.idwikidata.deathPlace.idwikidata.deathPlace.typewikidata.deathPlace.labels.frwikidata.deathPlace.labels.itwikidata.deathPlace.labels.dewikidata.deathPlace.labels.enwikidata.deathPlace.descriptions.dewikidata.deathPlace.descriptions.enwikidata.deathPlace.descriptions.frwikidata.deathPlace.descriptions.itwikidata.deathPlace.imageswikidata.deathPlace.coordinates.latitudewikidata.deathPlace.coordinates.longitudewikidata.deathPlace.coordinates.altitudewikidata.deathPlace.coordinates.precisionwikidata.deathPlace.coordinates.globewikidata.deathPlace.country.entity-typewikidata.deathPlace.country.numeric-idwikidata.deathPlace.country.idwikidata.idwikidata.typewikidata.labels.itwikidata.descriptions.enwikidata.descriptions.frwikidata.descriptions.itwikidata.descriptions.dewikidata.imageswikidata.labels.dewikidata.labels.enwikidata.labels.fr
uid
aida-0001-50-Douglas_AdamsDouglas Adamsperson9494Q42+1952-03-11T00:00:00Z+2001-05-11T00:00:00ZQ350locationCambridgeCambridgeCambridgeCambridgecity in Cambridgeshire, Englandville britanniquecittà della Gran Bretagnaenglische Universitätsstadt, Hauptort von Camb...[{'value': 'KingsCollegeChapelWest.jpg', 'rank...52.2080560.1225NaN0.000278http://www.wikidata.org/entity/Q2item145.0Q145Q159288locationSanta BarbaraSanta BarbaraSanta BarbaraSanta BarbaraStadt in Kalifornien, Vereinigte Staatencity in and county seat of Santa Barbara Count...municipalité de Californiecittà della California[{'value': 'Aerial-SantaBarbaraCA10-28-08.jpg'...34.425833-119.714167NaN0.000278http://www.wikidata.org/entity/Q2item30.0Q30Q42humanDouglas AdamsEnglish author and humourist (1952–2001)écrivain de science-fiction et humoriste angla...scrittore e umorista britannico (1952–2001)britischer Science-Fiction-Autor und Humorist[{'value': 'Douglas adams portrait.jpg', 'rank...NaNNaNNaN
aida-0001-50-Douglas_Q._AdamsDouglas Q. Adamsperson3030Q932869+2000-01-01T00:00:00ZNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNQ932869humanDouglas Q. AdamsAmerican professor of EnglishNaNlinguista statunitenseUS-amerikanischer Sprachwissenschaftler[]Douglas Quentin AdamsDouglas Q. AdamsDouglas Q. Adams
aida-0001-54-Douglas_AdamsDouglas Adamslocation2424Q42+1952-03-11T00:00:00Z+2001-05-11T00:00:00ZQ350locationCambridgeCambridgeCambridgeCambridgecity in Cambridgeshire, Englandville britanniquecittà della Gran Bretagnaenglische Universitätsstadt, Hauptort von Camb...[{'value': 'KingsCollegeChapelWest.jpg', 'rank...52.2080560.1225NaN0.000278http://www.wikidata.org/entity/Q2item145.0Q145Q159288locationSanta BarbaraSanta BarbaraSanta BarbaraSanta BarbaraStadt in Kalifornien, Vereinigte Staatencity in and county seat of Santa Barbara Count...municipalité de Californiecittà della California[{'value': 'Aerial-SantaBarbaraCA10-28-08.jpg'...34.425833-119.714167NaN0.000278http://www.wikidata.org/entity/Q2item30.0Q30Q42humanDouglas AdamsEnglish author and humourist (1952–2001)écrivain de science-fiction et humoriste angla...scrittore e umorista britannico (1952–2001)britischer Science-Fiction-Autor und Humorist[{'value': 'Douglas adams portrait.jpg', 'rank...NaNNaNNaN
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.entities.find(q=\"Douglas Adams\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Additionaly filter by entity type." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindEntities result

\n", + "
Contains 10 items (0 - 10) of 31 total items.
\n", + "
\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nametypecountItemscountMentionswikidataIdwikidata.coordinates.latitudewikidata.coordinates.longitudewikidata.coordinates.altitudewikidata.coordinates.precisionwikidata.coordinates.globewikidata.country.idwikidata.country.typewikidata.country.labels.dewikidata.country.labels.enwikidata.country.labels.frwikidata.country.labels.itwikidata.country.descriptions.frwikidata.country.descriptions.itwikidata.country.descriptions.dewikidata.country.descriptions.enwikidata.country.imageswikidata.country.coordinates.latitudewikidata.country.coordinates.longitudewikidata.country.coordinates.altitudewikidata.country.coordinates.precisionwikidata.country.coordinates.globewikidata.country.country.entity-typewikidata.country.country.numeric-idwikidata.country.country.idwikidata.idwikidata.typewikidata.labels.enwikidata.labels.frwikidata.labels.dewikidata.labels.itwikidata.descriptions.enwikidata.descriptions.dewikidata.descriptions.itwikidata.descriptions.frwikidata.imageswikidata.birthDatewikidata.birthPlace.idwikidata.birthPlace.typewikidata.birthPlace.labels.dewikidata.birthPlace.labels.enwikidata.birthPlace.labels.frwikidata.birthPlace.labels.itwikidata.birthPlace.descriptions.itwikidata.birthPlace.descriptions.frwikidata.birthPlace.descriptions.dewikidata.birthPlace.descriptions.enwikidata.birthPlace.imageswikidata.birthPlace.coordinates.latitudewikidata.birthPlace.coordinates.longitudewikidata.birthPlace.coordinates.altitudewikidata.birthPlace.coordinates.precisionwikidata.birthPlace.coordinates.globewikidata.birthPlace.country.entity-typewikidata.birthPlace.country.numeric-idwikidata.birthPlace.country.id
uid
aida-0001-54-San_Jose$2c$_CaliforniaSan Jose, Californialocation24482846Q1655337.304167-121.872778NaN0.000278http://www.wikidata.org/entity/Q2Q30locationVereinigte StaatenUnited States of AmericaÉtats-UnisStati Uniti d'Americapays d'Amérique du NordStato dell'America settentrionaleStaat in Nordamerikacountry primarily located in North America[{'value': 'City Lights of the United States 2...39.828175-98.5795NaN0.000001http://www.wikidata.org/entity/Q2item30.0Q30Q16553locationSan JoseSan JoséSan JoséSan Josecounty seat of Santa Clara County, California,...Metropole in der Bay Area Kalifornienscittà della Californiaville américaine (Californie)[{'value': 'SanJose Infobox Pic Montage.jpg', ...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
aida-0001-54-2007_San_Jose_Grand_Prix_at_Redback_Raceway2007 San Jose Grand Prix at Redback Racewaylocation10581228Q4609234NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNQ4609234item2007 San Jose Grand Prix at Redback RacewayNaNNaNNaNmotor car raceNaNNaNNaN[]NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
aida-0001-54-Mikel_San_JoséMikel San Josélocation9811288Q312437NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNQ312437humanMikel San JoséMikel San JoséMikel San JoséMikel San JoséSpanish association football playerspanischer Fußballspielercalciatore spagnolofootballeur espagnol[{'value': 'Тренировка Атлетика (6).jpg', 'ran...+1989-05-30T00:00:00ZQ600671locationVillava-AtarrabiaVillava-AtarrabiaVillava-AtarrabiaVillavacomune spagnolocommune espagnoleGemeinde in Spanienhuman settlement in Cuenca de Pamplona, Navarr...[{'value': 'Ikurriñavillava2007.jpg', 'rank': ...42.830833-1.608611NaNNaNhttp://www.wikidata.org/entity/Q2item29.0Q29
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.entities.find(q=\"san jose\", entity_type=\"location\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindEntities result

\n", + "
Contains 10 items (0 - 10) of 29 total items.
\n", + "
\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nametypecountItemscountMentionswikidataIdwikidata.idwikidata.typewikidata.labels.enwikidata.imageswikidata.coordinates.latitudewikidata.coordinates.longitudewikidata.coordinates.altitudewikidata.coordinates.precisionwikidata.coordinates.globewikidata.country.idwikidata.country.typewikidata.country.labels.enwikidata.country.labels.frwikidata.country.labels.dewikidata.country.labels.itwikidata.country.descriptions.frwikidata.country.descriptions.itwikidata.country.descriptions.dewikidata.country.descriptions.enwikidata.country.imageswikidata.country.coordinates.latitudewikidata.country.coordinates.longitudewikidata.country.coordinates.altitudewikidata.country.coordinates.precisionwikidata.country.coordinates.globewikidata.country.country.entity-typewikidata.country.country.numeric-idwikidata.country.country.idwikidata.labels.itwikidata.labels.frwikidata.descriptions.enwikidata.labels.dewikidata.descriptions.dewikidata.descriptions.itwikidata.descriptions.frwikidata.birthDatewikidata.birthPlace.idwikidata.birthPlace.typewikidata.birthPlace.labels.dewikidata.birthPlace.labels.enwikidata.birthPlace.labels.frwikidata.birthPlace.labels.itwikidata.birthPlace.descriptions.dewikidata.birthPlace.descriptions.itwikidata.birthPlace.descriptions.frwikidata.birthPlace.descriptions.enwikidata.birthPlace.imageswikidata.birthPlace.coordinates.latitudewikidata.birthPlace.coordinates.longitudewikidata.birthPlace.coordinates.altitudewikidata.birthPlace.coordinates.precisionwikidata.birthPlace.coordinates.globewikidata.birthPlace.country.entity-typewikidata.birthPlace.country.numeric-idwikidata.birthPlace.country.idwikidata.birthPlace.country.typewikidata.birthPlace.country.labels.itwikidata.birthPlace.country.labels.dewikidata.birthPlace.country.labels.enwikidata.birthPlace.country.labels.frwikidata.birthPlace.country.descriptions.frwikidata.birthPlace.country.descriptions.itwikidata.birthPlace.country.descriptions.dewikidata.birthPlace.country.descriptions.enwikidata.birthPlace.country.imageswikidata.birthPlace.country.coordinates.latitudewikidata.birthPlace.country.coordinates.longitudewikidata.birthPlace.country.coordinates.altitudewikidata.birthPlace.country.coordinates.precisionwikidata.birthPlace.country.coordinates.globewikidata.birthPlace.country.country.entity-typewikidata.birthPlace.country.country.numeric-idwikidata.birthPlace.country.country.id
uid
aida-0001-50-San_Jose_WolvesSan Jose Wolvesperson11Q7618261Q7618261itemStockton Wolves[]NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
aida-0001-50-San_José_VillanuevaSan José Villanuevaperson11Q3947419Q3947419locationSan José Villanueva[]13.576614-89.265081NaN0.000278http://www.wikidata.org/entity/Q2Q792locationEl SalvadorSalvadorEl SalvadorEl Salvadorpays d'Amérique centrale depuis 1841stato dell'America centraleStaat in Zentralamerikasovereign state in Central America[{'value': 'ES JoyadeCeren 06 2011 Estructura ...13.668889-88.866111NaN0.000010http://www.wikidata.org/entity/Q2item792.0Q792San José VillanuevaSan José Villanuevamunicipality in La Libertad Department, El Sal...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
aida-0001-50-San_Jose$2c$_CaliforniaSan Jose, Californiaperson44Q16553Q16553locationSan Jose[{'value': 'SanJose Infobox Pic Montage.jpg', ...37.304167-121.872778NaN0.000278http://www.wikidata.org/entity/Q2Q30locationUnited States of AmericaÉtats-UnisVereinigte StaatenStati Uniti d'Americapays d'Amérique du NordStato dell'America settentrionaleStaat in Nordamerikacountry primarily located in North America[{'value': 'City Lights of the United States 2...39.828175-98.579500NaN0.000001http://www.wikidata.org/entity/Q2item30.0Q30San JoseSan Josécounty seat of Santa Clara County, California,...San JoséMetropole in der Bay Area Kalifornienscittà della Californiaville américaine (Californie)NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.entities.find(q=\"san jose\", entity_type=\"person\", order_by=\"-relevance\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get an entity by its ID" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

GetEntity result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nametypecountItemscountMentionswikidataIdwikidata.birthDatewikidata.deathDatewikidata.birthPlace.idwikidata.birthPlace.typewikidata.birthPlace.labels.enwikidata.birthPlace.labels.frwikidata.birthPlace.labels.itwikidata.birthPlace.labels.dewikidata.birthPlace.descriptions.enwikidata.birthPlace.descriptions.frwikidata.birthPlace.descriptions.itwikidata.birthPlace.descriptions.dewikidata.birthPlace.imageswikidata.birthPlace.coordinates.latitudewikidata.birthPlace.coordinates.longitudewikidata.birthPlace.coordinates.altitudewikidata.birthPlace.coordinates.precisionwikidata.birthPlace.coordinates.globewikidata.birthPlace.country.entity-typewikidata.birthPlace.country.numeric-idwikidata.birthPlace.country.idwikidata.deathPlace.idwikidata.deathPlace.typewikidata.deathPlace.labels.frwikidata.deathPlace.labels.itwikidata.deathPlace.labels.dewikidata.deathPlace.labels.enwikidata.deathPlace.descriptions.dewikidata.deathPlace.descriptions.enwikidata.deathPlace.descriptions.frwikidata.deathPlace.descriptions.itwikidata.deathPlace.imageswikidata.deathPlace.coordinates.latitudewikidata.deathPlace.coordinates.longitudewikidata.deathPlace.coordinates.altitudewikidata.deathPlace.coordinates.precisionwikidata.deathPlace.coordinates.globewikidata.deathPlace.country.entity-typewikidata.deathPlace.country.numeric-idwikidata.deathPlace.country.idwikidata.idwikidata.typewikidata.labels.itwikidata.descriptions.enwikidata.descriptions.frwikidata.descriptions.itwikidata.descriptions.dewikidata.images
uid
aida-0001-50-Douglas_AdamsDouglas Adamsperson9494Q42+1952-03-11T00:00:00Z+2001-05-11T00:00:00ZQ350locationCambridgeCambridgeCambridgeCambridgecity in Cambridgeshire, Englandville britanniquecittà della Gran Bretagnaenglische Universitätsstadt, Hauptort von Camb...[{'value': 'KingsCollegeChapelWest.jpg', 'rank...52.2080560.1225None0.000278http://www.wikidata.org/entity/Q2item145Q145Q159288locationSanta BarbaraSanta BarbaraSanta BarbaraSanta BarbaraStadt in Kalifornien, Vereinigte Staatencity in and county seat of Santa Barbara Count...municipalité de Californiecittà della California[{'value': 'Aerial-SantaBarbaraCA10-28-08.jpg'...34.425833-119.714167None0.000278http://www.wikidata.org/entity/Q2item30Q30Q42humanDouglas AdamsEnglish author and humourist (1952–2001)écrivain de science-fiction et humoriste angla...scrittore e umorista britannico (1952–2001)britischer Science-Fiction-Autor und Humorist[{'value': 'Douglas adams portrait.jpg', 'rank...
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.entities.get(\"aida-0001-50-Douglas_Adams\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get multiple entities by IDs" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindEntities result

\n", + "
Contains 3 items of 3 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nametypecountItemscountMentionswikidataIdwikidata.coordinates.latitudewikidata.coordinates.longitudewikidata.coordinates.altitudewikidata.coordinates.precisionwikidata.coordinates.globewikidata.country.idwikidata.country.typewikidata.country.labels.dewikidata.country.labels.enwikidata.country.labels.frwikidata.country.labels.itwikidata.country.descriptions.frwikidata.country.descriptions.itwikidata.country.descriptions.dewikidata.country.descriptions.enwikidata.country.imageswikidata.country.coordinates.latitudewikidata.country.coordinates.longitudewikidata.country.coordinates.altitudewikidata.country.coordinates.precisionwikidata.country.coordinates.globewikidata.country.country.entity-typewikidata.country.country.numeric-idwikidata.country.country.idwikidata.idwikidata.typewikidata.labels.enwikidata.labels.frwikidata.labels.dewikidata.labels.itwikidata.descriptions.enwikidata.descriptions.dewikidata.descriptions.itwikidata.descriptions.frwikidata.images
uid
aida-0001-50-San_Jose$2c$_CaliforniaSan Jose, Californiaperson44Q1655337.304167-121.872778NaN0.000278http://www.wikidata.org/entity/Q2Q30locationVereinigte StaatenUnited States of AmericaÉtats-UnisStati Uniti d'Americapays d'Amérique du NordStato dell'America settentrionaleStaat in Nordamerikacountry primarily located in North America[{'value': 'City Lights of the United States 2...39.828175-98.579500NaN0.000001http://www.wikidata.org/entity/Q2item30.0Q30Q16553locationSan JoseSan JoséSan JoséSan Josecounty seat of Santa Clara County, California,...Metropole in der Bay Area Kalifornienscittà della Californiaville américaine (Californie)[{'value': 'SanJose Infobox Pic Montage.jpg', ...
aida-0001-50-San_Jose_WolvesSan Jose Wolvesperson11Q7618261NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNQ7618261itemStockton WolvesNaNNaNNaNNaNNaNNaNNaN[]
aida-0001-50-San_José_VillanuevaSan José Villanuevaperson11Q394741913.576614-89.265081NaN0.000278http://www.wikidata.org/entity/Q2Q792locationEl SalvadorEl SalvadorSalvadorEl Salvadorpays d'Amérique centrale depuis 1841stato dell'America centraleStaat in Zentralamerikasovereign state in Central America[{'value': 'ES JoyadeCeren 06 2011 Estructura ...13.668889-88.866111NaN0.000010http://www.wikidata.org/entity/Q2item792.0Q792Q3947419locationSan José VillanuevaSan José VillanuevaNaNSan José Villanuevamunicipality in La Libertad Department, El Sal...NaNNaNNaN[]
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import OR\n", + "impresso.entities.find(\n", + " entity_id=OR(\n", + " \"aida-0001-50-San_Jose_Wolves\",\n", + " \"aida-0001-50-San_José_Villanueva\",\n", + " \"aida-0001-50-San_Jose$2c$_California\",\n", + " ),\n", + " load_wikidata=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find entities by [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page) IDs." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindEntities result

\n", + "
Contains 4 items of 4 total items.
\n", + "
\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nametypecountItemscountMentionswikidataIdwikidata.idwikidata.typewikidata.labels.enwikidata.labels.frwikidata.labels.dewikidata.labels.itwikidata.descriptions.enwikidata.descriptions.frwikidata.descriptions.itwikidata.descriptions.dewikidata.imageswikidata.birthDatewikidata.deathDatewikidata.birthPlace.idwikidata.birthPlace.typewikidata.birthPlace.labels.enwikidata.birthPlace.labels.frwikidata.birthPlace.labels.itwikidata.birthPlace.labels.dewikidata.birthPlace.descriptions.enwikidata.birthPlace.descriptions.frwikidata.birthPlace.descriptions.itwikidata.birthPlace.descriptions.dewikidata.birthPlace.imageswikidata.birthPlace.coordinates.latitudewikidata.birthPlace.coordinates.longitudewikidata.birthPlace.coordinates.altitudewikidata.birthPlace.coordinates.precisionwikidata.birthPlace.coordinates.globewikidata.birthPlace.country.entity-typewikidata.birthPlace.country.numeric-idwikidata.birthPlace.country.idwikidata.deathPlace.idwikidata.deathPlace.typewikidata.deathPlace.labels.frwikidata.deathPlace.labels.itwikidata.deathPlace.labels.dewikidata.deathPlace.labels.enwikidata.deathPlace.descriptions.dewikidata.deathPlace.descriptions.enwikidata.deathPlace.descriptions.frwikidata.deathPlace.descriptions.itwikidata.deathPlace.imageswikidata.deathPlace.coordinates.latitudewikidata.deathPlace.coordinates.longitudewikidata.deathPlace.coordinates.altitudewikidata.deathPlace.coordinates.precisionwikidata.deathPlace.coordinates.globewikidata.deathPlace.country.entity-typewikidata.deathPlace.country.numeric-idwikidata.deathPlace.country.id
uid
aida-0001-54-EarthEarthlocation362438Q2Q2itemEarthTerreErdeTerrathird planet from the Sun in the Solar Systemtroisième planète à partir du Soleil dans le s...terzo pianeta del sistema solaredritter Planet von der Sonne aus im Sonnensystem[{'value': 'The Blue Marble (5052124705).jpg',...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
aida-0001-50-Douglas_AdamsDouglas Adamsperson9494Q42Q42humanNaNNaNNaNDouglas AdamsEnglish author and humourist (1952–2001)écrivain de science-fiction et humoriste angla...scrittore e umorista britannico (1952–2001)britischer Science-Fiction-Autor und Humorist[{'value': 'Douglas adams portrait.jpg', 'rank...+1952-03-11T00:00:00Z+2001-05-11T00:00:00ZQ350locationCambridgeCambridgeCambridgeCambridgecity in Cambridgeshire, Englandville britanniquecittà della Gran Bretagnaenglische Universitätsstadt, Hauptort von Camb...[{'value': 'KingsCollegeChapelWest.jpg', 'rank...52.2080560.1225NaN0.000278http://www.wikidata.org/entity/Q2item145.0Q145Q159288locationSanta BarbaraSanta BarbaraSanta BarbaraSanta BarbaraStadt in Kalifornien, Vereinigte Staatencity in and county seat of Santa Barbara Count...municipalité de Californiecittà della California[{'value': 'Aerial-SantaBarbaraCA10-28-08.jpg'...34.425833-119.714167NaN0.000278http://www.wikidata.org/entity/Q2item30.0Q30
aida-0001-54-Douglas_AdamsDouglas Adamslocation2424Q42Q42humanNaNNaNNaNDouglas AdamsEnglish author and humourist (1952–2001)écrivain de science-fiction et humoriste angla...scrittore e umorista britannico (1952–2001)britischer Science-Fiction-Autor und Humorist[{'value': 'Douglas adams portrait.jpg', 'rank...+1952-03-11T00:00:00Z+2001-05-11T00:00:00ZQ350locationCambridgeCambridgeCambridgeCambridgecity in Cambridgeshire, Englandville britanniquecittà della Gran Bretagnaenglische Universitätsstadt, Hauptort von Camb...[{'value': 'KingsCollegeChapelWest.jpg', 'rank...52.2080560.1225NaN0.000278http://www.wikidata.org/entity/Q2item145.0Q145Q159288locationSanta BarbaraSanta BarbaraSanta BarbaraSanta BarbaraStadt in Kalifornien, Vereinigte Staatencity in and county seat of Santa Barbara Count...municipalité de Californiecittà della California[{'value': 'Aerial-SantaBarbaraCA10-28-08.jpg'...34.425833-119.714167NaN0.000278http://www.wikidata.org/entity/Q2item30.0Q30
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import AND\n", + "impresso.entities.find(wikidata_id=AND(\"Q2\", \"Q4\", \"Q42\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/notebooks/newspapers.ipynb b/examples/notebooks/newspapers.ipynb new file mode 100644 index 0000000..61a03d1 --- /dev/null +++ b/examples/notebooks/newspapers.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Search newspapers\n", + "\n", + "Find newspapers having the term 'wort' in their name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindNewspapers result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
acronymlabelslanguagesincludednameendYearstartYearcountArticlescountIssuescountPagesdeltaYearpropertiesfetchedfirstIssue.uidfirstIssue.coverfirstIssue.labelsfirstIssue.freshfirstIssue.accessRightsfirstIssue.datefirstIssue.yearlastIssue.uidlastIssue.coverlastIssue.labelslastIssue.freshlastIssue.accessRightslastIssue.datelastIssue.year
uid
landwortbildlandwortbild[newspaper][de, fr]TrueLuxemburger Land in Wort und Bild18951895755393140[]Truelandwortbild-1895-04-07-a[issue]FalseClosed1895-04-07T00:00:00+00:001895landwortbild-1895-12-29-a[issue]FalseClosed1895-12-29T00:00:00+00:001895
luxwortluxwort[newspaper][de, fr, lb]TrueLuxemburger Wort19501848116033330355101320102[]Trueluxwort-1848-03-23-a[issue]FalseClosed1848-03-23T00:00:00+00:001848luxwort-1950-12-30-a[issue]FalseClosed1950-12-30T00:00:00+00:001950
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = impresso.newspapers.find(\n", + " q=\"wort\",\n", + " order_by=\"lastIssue\",\n", + ")\n", + "result" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/notebooks/search.ipynb b/examples/notebooks/search.ipynb new file mode 100644 index 0000000..3eb1680 --- /dev/null +++ b/examples/notebooks/search.ipynb @@ -0,0 +1,8893 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Search\n", + "\n", + "Find articles in Impresso using a variety of different filters." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Term\n", + "\n", + "Find all items containing \"impresso\" keyword." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 56 items of 56 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-1976-02-23-a-i0207adUNKNOWN371[{'uid': 'LLE-1976-02-23-a-p0004', 'num': 4, '...FalseIMPRESSO-RAPID Carre ä Domdidier cherche pour ...[article]OpenPrivate1976[][]fr[{'fragment': '<em>IMPRESSO</em>-RAPID Carre ä...[{'pageUid': 'LLE-1976-02-23-a-p0004', 'coords...[][]False1976-02-23T00:00:00+00:00CH[][]SNL[{'relevance': 0.023, 'topic': {'uid': 'tm-fr-...[]LLE-1976-02-23-a[issue]FalseNotDefined1976-02-23T00:00:00+00:001976LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
LLE-1973-05-18-a-i0016adUNKNOWN461[{'uid': 'LLE-1973-05-18-a-p0022', 'num': 22, ...FalseImprimerie Impresso-rapide CARREL , Domdidier ...[article]OpenPrivate1973[][]fr[{'fragment': 'Imprimerie <em>Impresso</em>-ra...[{'pageUid': 'LLE-1973-05-18-a-p0022', 'coords...[][]False1973-05-18T00:00:00+00:00CH[][]SNL[{'relevance': 0.035, 'topic': {'uid': 'tm-fr-...[]LLE-1973-05-18-a[issue]FalseNotDefined1973-05-18T00:00:00+00:001973LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
FZG-1995-11-27-a-i0121arKaffeemaschine \"Impresso\" Bügeleisen Dampfrein...221[{'uid': 'FZG-1995-11-27-a-p0004', 'num': 4, '...FalseKaffeemaschine Impresso Bügeleisen Dampfreinig...[article]OpenPrivate1995[{'uid': 'aida-0001-54-SC_Freiburg', 'relevanc...[]de[{'fragment': 'Kaffeemaschine <em>Impresso</em...[{'pageUid': 'FZG-1995-11-27-a-p0004', 'coords...[][]False1995-11-27T00:00:00+00:00CH[][]SNL[{'relevance': 0.085, 'topic': {'uid': 'tm-de-...[]FZG-1995-11-27-a[issue]FalseNotDefined1995-11-27T00:00:00+00:001995FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## With text content only\n", + "\n", + "Limit to articles that have text." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 56 items of 56 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-1976-02-23-a-i0207adUNKNOWN371[{'uid': 'LLE-1976-02-23-a-p0004', 'num': 4, '...FalseIMPRESSO-RAPID Carre ä Domdidier cherche pour ...[article]OpenPrivate1976[][]fr[{'fragment': '<em>IMPRESSO</em>-RAPID Carre ä...[{'pageUid': 'LLE-1976-02-23-a-p0004', 'coords...[][]False1976-02-23T00:00:00+00:00CH[][]SNL[{'relevance': 0.023, 'topic': {'uid': 'tm-fr-...[]LLE-1976-02-23-a[issue]FalseNotDefined1976-02-23T00:00:00+00:001976LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
LLE-1973-05-18-a-i0016adUNKNOWN461[{'uid': 'LLE-1973-05-18-a-p0022', 'num': 22, ...FalseImprimerie Impresso-rapide CARREL , Domdidier ...[article]OpenPrivate1973[][]fr[{'fragment': 'Imprimerie <em>Impresso</em>-ra...[{'pageUid': 'LLE-1973-05-18-a-p0022', 'coords...[][]False1973-05-18T00:00:00+00:00CH[][]SNL[{'relevance': 0.035, 'topic': {'uid': 'tm-fr-...[]LLE-1973-05-18-a[issue]FalseNotDefined1973-05-18T00:00:00+00:001973LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
FZG-1995-11-27-a-i0121arKaffeemaschine \"Impresso\" Bügeleisen Dampfrein...221[{'uid': 'FZG-1995-11-27-a-p0004', 'num': 4, '...FalseKaffeemaschine Impresso Bügeleisen Dampfreinig...[article]OpenPrivate1995[{'uid': 'aida-0001-54-SC_Freiburg', 'relevanc...[]de[{'fragment': 'Kaffeemaschine <em>Impresso</em...[{'pageUid': 'FZG-1995-11-27-a-p0004', 'coords...[][]False1995-11-27T00:00:00+00:00CH[][]SNL[{'relevance': 0.085, 'topic': {'uid': 'tm-de-...[]FZG-1995-11-27-a[issue]FalseNotDefined1995-11-27T00:00:00+00:001995FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"impresso\", with_text_contents=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Title\n", + "Find items that have the keyword \"impresso\" in their title." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetched
uid
FZG-1995-11-27-a-i0121arKaffeemaschine \"Impresso\" Bügeleisen Dampfrein...221[{'uid': 'FZG-1995-11-27-a-p0004', 'num': 4, '...FalseKaffeemaschine Impresso Bügeleisen Dampfreinig...[article]OpenPrivate1995[{'uid': 'aida-0001-54-SC_Freiburg', 'relevanc...[]de[][{'pageUid': 'FZG-1995-11-27-a-p0004', 'coords...[][]False1995-11-27T00:00:00+00:00CH[][]SNL[{'relevance': 0.085, 'topic': {'uid': 'tm-de-...[]FZG-1995-11-27-a[issue]FalseNotDefined1995-11-27T00:00:00+00:001995FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]True
DTT-1976-12-02-a-i0114arDRSI 6.05 Impresso. 6.50 Zum neuen Tag. ...5041[{'uid': 'DTT-1976-12-02-a-p0014', 'num': 14, ...FalseDRSI 6 . 05 Impresso . 6 . 50 Zum neuen Tag . ...[article]OpenPrivate1976[{'uid': 'aida-0001-54-Basel', 'relevance': 1}...[{'uid': 'aida-0001-50-Rudolf_Kelterborn', 're...de[][{'pageUid': 'DTT-1976-12-02-a-p0014', 'coords...[][]False1976-12-02T00:00:00+00:00CH[][]Migros[{'relevance': 0.037, 'topic': {'uid': 'tm-de-...[]DTT-1976-12-02-a[issue]FalseNotDefined1976-12-02T00:00:00+00:001976DTTDTT[newspaper][]True-1-1-1-1-10[]NaN
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(title=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Complex term requests\n", + "Find items that have both terms." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 587 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-1961-06-03-a-i0150ar— Qui l'a appelee ? Un homme ? Une femme...911[{'uid': 'LLE-1961-06-03-a-p0015', 'num': 15, ...False— Qui la appelee ? Un homme ? Une femme ? dema...[article]OpenPrivate1961[{'uid': 'aida-0001-54-Luis_Vera', 'relevance'...[]fr[][{'pageUid': 'LLE-1961-06-03-a-p0015', 'coords...[][]False1961-06-03T00:00:00+00:00CH[][]SNL[{'relevance': 0.048, 'topic': {'uid': 'tm-fr-...[]LLE-1961-06-03-a[issue]FalseNotDefined1961-06-03T00:00:00+00:001961LLELLE[newspaper][fr]TrueLa Liberté2018.01871.0-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
EXP-2012-11-29-a-i0054ar«L’homme dirige, décide, la femme interprète»5381[{'uid': 'EXP-2012-11-29-a-p0007', 'num': 7, '...False« L’homme dirige, décide, la femme interprète ...[article]OpenPrivate2012[{'uid': 'aida-0001-54-Lake_Neuchâtel', 'relev...[{'uid': 'aida-0001-50-Froidevaux', 'relevance...fr[][{'pageUid': 'EXP-2012-11-29-a-p0007', 'coords...[][]False2012-11-29T00:00:00+00:00CH[][]SNL[{'relevance': 0.047, 'topic': {'uid': 'tm-fr-...[]EXP-2012-11-29-a[issue]FalseNotDefined2012-11-29T00:00:00+00:002012EXPEXP[newspaper][fr]TrueL'Express2018.01738.0839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
EXP-2017-05-19-a-i0004arQuand il s’agit de faire le mal, l’homme est p...861[{'uid': 'EXP-2017-05-19-a-p0001', 'num': 1, '...FalseQuand il s’agit de faire le mal, l’homme est p...[article]OpenPrivate2017[{'uid': 'aida-0001-54-Lake_Neuchâtel', 'relev...[]fr[][{'pageUid': 'EXP-2017-05-19-a-p0001', 'coords...[][]True2017-05-19T00:00:00+00:00CH[][]SNL[{'relevance': 0.032, 'topic': {'uid': 'tm-fr-...[]EXP-2017-05-19-a[issue]FalseNotDefined2017-05-19T00:00:00+00:002017EXPEXP[newspaper][fr]TrueL'Express2018.01738.0839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import AND\n", + "\n", + "impresso.search.find(title=AND(\"homme\", \"femme\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find items that have either one term or the other.\n", + "\n", + "Here we find all articles that contain either \"homme\" or \"femme\" in the title." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 57848 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
EXP-1933-01-17-a-i0003arOne jeune femme promet le mariage à son maître...1321[{'uid': 'EXP-1933-01-17-a-p0001', 'num': 1, '...TrueOne jeune femme promet le mariage à son maître...[article]OpenPrivate1933[{'uid': 'aida-0001-54-Lausanne', 'relevance':...[]fr[][{'pageUid': 'EXP-1933-01-17-a-p0001', 'coords...[][]True1933-01-17T00:00:00+00:00CH[][]SNL[{'relevance': 0.128, 'topic': {'uid': 'tm-fr-...[]EXP-1933-01-17-a[issue]FalseNotDefined1933-01-17T00:00:00+00:001933EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]EXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017True
LLE-1961-01-10-a-i0078arpour Ia femme moderne131[{'uid': 'LLE-1961-01-10-a-p0013', 'num': 13, ...Falsepour Ia femme moderne VOICI , Persil extra — l...[article]OpenPrivate1961[][]fr[][{'pageUid': 'LLE-1961-01-10-a-p0013', 'coords...[][]False1961-01-10T00:00:00+00:00CH[][]SNL[{'relevance': 0.087, 'topic': {'uid': 'tm-fr-...[]LLE-1961-01-10-a[issue]FalseNotDefined1961-01-10T00:00:00+00:001961LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTrue
EXP-1933-02-04-a-i0028arJeune homme honnête, intelligent, parlan...4211[{'uid': 'EXP-1933-02-04-a-p0002', 'num': 2, '...TrueJeune homme honnête, intelligent, parlant fran...[article]OpenPrivate1933[{'uid': 'aida-0001-54-Paddle_steamer_Genève',...[{'uid': 'aida-0001-50-Martina_Schild', 'relev...fr[][{'pageUid': 'EXP-1933-02-04-a-p0002', 'coords...[][]False1933-02-04T00:00:00+00:00CH[][]SNL[{'relevance': 0.022, 'topic': {'uid': 'tm-fr-...[]EXP-1933-02-04-a[issue]FalseNotDefined1933-02-04T00:00:00+00:001933EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]EXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import OR\n", + "\n", + "impresso.search.find(title=OR(\"homme\", \"femme\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inverted search (everything excluding term A __OR__ term B).\n", + "\n", + "We want to find all articles with the word \"luddite\" in the title that do not mention neither \"textile\" nor \"machine\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 1 items of 1 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
LES-2010-02-01-a-i0024arLa révolte luddite Kirkpatrick Sale, Edition L...11[{'uid': 'LES-2010-02-01-a-p0011', 'num': 11, ...FalseLarévolteludditeKirkpatrickSale,EditionL’Echap...[article]OpenPrivate2010[{'uid': 'aida-0001-54-England', 'relevance': 1}][]en[][{'pageUid': 'LES-2010-02-01-a-p0011', 'coords...[][]False2010-02-01T00:00:00+00:00CH[][]SNL[][]LES-2010-02-01-a[issue]FalseNotDefined2010-02-01T00:00:00+00:002010LESLES[newspaper][fr]TrueL'Essor2018190651843212010611112[]LES-1906-01-01-a[issue]FalseClosed1906-01-01T00:00:00+00:001906LES-2015-01-01-a[issue]FalseClosed2015-01-01T00:00:00+00:002015True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import OR\n", + "\n", + "impresso.search.find(title=\"luddite\", q=~OR(\"textile\", \"machine\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Complex combintation of terms\n", + "\n", + "The following cell searches all articles with all of the the following condition:\n", + "\n", + "* mentioning \"hitler\" and \"stalin\"\n", + "* also mentioning one of: \"molotow\" or \"ribbentrop\"\n", + "* and not mentioning \"churchill\"" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 462 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
FZG-1986-11-12-a-i0167arStichwort811[{'uid': 'FZG-1986-11-12-a-p0003', 'num': 3, '...FalseStichwort ( fw ) Am letzten Samstag ist der le...[article]OpenPrivate1986[][]de[{'fragment': ' im Alter von 97 Jahren gestorb...[{'pageUid': 'FZG-1986-11-12-a-p0003', 'coords...[][]False1986-11-12T00:00:00+00:00CH[][]SNL[{'relevance': 0.351, 'topic': {'uid': 'tm-de-...[]FZG-1986-11-12-a[issue]FalseNotDefined1986-11-12T00:00:00+00:001986FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
luxwort-1946-04-30-a-i0004arWie Hitlers Dolmetscher sie sah Hinter den ver...10561[{'uid': 'luxwort-1946-04-30-a-p0002', 'num': ...TrueDiktatoren und Diplomaten Wie Hitlers Dolmetsc...[article]Closed1946[{'uid': 'aida-0001-54-Berlin', 'relevance': 2...[{'uid': 'aida-0001-50-John_F._Simon_Jr.', 're...de[{'fragment': ' ehrlich meine. <em>Hitler</em>...[{'pageUid': 'luxwort-1946-04-30-a-p0002', 'co...[][]False1946-04-30T00:00:00+00:00LU[][]BNL[{'relevance': 0.025, 'topic': {'uid': 'tm-de-...[]luxwort-1946-04-30-a[issue]FalseNotDefined1946-04-30T00:00:00+00:001946luxwortluxwort[newspaper][de, fr, lb]TrueLuxemburger Wort19501848116033330355101320102[]Trueluxwort-1848-03-23-a[issue]FalseClosed1848-03-23T00:00:00+00:001848luxwort-1950-12-30-a[issue]FalseClosed1950-12-30T00:00:00+00:001950
luxwort-1946-04-02-a-i0053arDie gestrigen Verhandlungen in Nürnberg2351[{'uid': 'luxwort-1946-04-02-a-p0001', 'num': ...TrueDie gestrigen Verhandlungen in Nürnberg Nürnbe...[article]Closed1946[{'uid': 'aida-0001-54-German_cruiser_Nürnberg...[{'uid': 'aida-0001-50-Carl_Friedrich_Gauss', ...de[{'fragment': '-russische Pakt wurde schnell u...[{'pageUid': 'luxwort-1946-04-02-a-p0001', 'co...[][]True1946-04-02T00:00:00+00:00LU[][]BNL[{'relevance': 0.037, 'topic': {'uid': 'tm-de-...[]luxwort-1946-04-02-a[issue]FalseNotDefined1946-04-02T00:00:00+00:001946luxwortluxwort[newspaper][de, fr, lb]TrueLuxemburger Wort19501848116033330355101320102[]Trueluxwort-1848-03-23-a[issue]FalseClosed1848-03-23T00:00:00+00:001848luxwort-1950-12-30-a[issue]FalseClosed1950-12-30T00:00:00+00:001950
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import AND, OR\n", + "\n", + "impresso.search.find(q=AND(\"hitler\", \"stalin\") & OR(\"molotow\", \"ribbentrop\") & ~OR(\"churchill\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Front page\n", + "\n", + "Find articles published on the front page only" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 1 items of 1 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetched
uid
LLE-1970-11-10-a-i0021arRencontre Scheel-Cyrankiewicz2491[{'uid': 'LLE-1970-11-10-a-p0001', 'num': 1, '...FalseRencontre Scheel-Cyrankiewicz M . Walter Schee...[article]OpenPrivate1970[{'uid': 'aida-0001-54-Poland', 'relevance': 1...[{'uid': 'aida-0001-50-Walter_Scheel', 'releva...fr[{'fragment': ' Auschwitz : « Nous avons eu ur...[{'pageUid': 'LLE-1970-11-10-a-p0001', 'coords...[][]True1970-11-10T00:00:00+00:00CH[][]SNL[{'relevance': 0.082, 'topic': {'uid': 'tm-fr-...[]LLE-1970-11-10-a[issue]FalseNotDefined1970-11-10T00:00:00+00:001970LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"impresso\", front_page=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entity ID\n", + "\n", + "Search by entity ID" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 2373440 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-1961-01-09-a-i0098arValeur5461[{'uid': 'LLE-1961-01-09-a-p0013', 'num': 13, ...FalseValeur Emission de Lachat de parts du Fonds Su...[article]OpenPrivate1961[{'uid': 'aida-0001-54-Switzerland', 'relevanc...[]fr[][{'pageUid': 'LLE-1961-01-09-a-p0013', 'coords...[][]False1961-01-09T00:00:00+00:00CH[][]SNL[{'relevance': 0.099, 'topic': {'uid': 'tm-fr-...[]LLE-1961-01-09-a[issue]FalseNotDefined1961-01-09T00:00:00+00:001961LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
EXP-1933-01-17-a-i0023arOn cherche jeunefille pour deux enfants ...4071[{'uid': 'EXP-1933-01-17-a-p0002', 'num': 2, '...TrueOn cherche jeunefille pour deux enfants (6 et ...[article]OpenPrivate1933[{'uid': 'aida-0001-54-Zürich', 'relevance': 1...[]fr[][{'pageUid': 'EXP-1933-01-17-a-p0002', 'coords...[][]False1933-01-17T00:00:00+00:00CH[][]SNL[{'relevance': 0.05, 'topic': {'uid': 'tm-fr-a...[]EXP-1933-01-17-a[issue]FalseNotDefined1933-01-17T00:00:00+00:001933EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
EXP-2012-12-10-a-i0068arCINÉMA Apollo 1 Faubourg du10681[{'uid': 'EXP-2012-12-10-a-p0013', 'num': 13, ...FalseCINÉMA Apollo 1 Faubourg du Lac 11, tél. 0900 ...[article]OpenPrivate2012[{'uid': 'aida-0001-54-Switzerland', 'relevanc...[{'uid': 'aida-0001-50-Robert_Pattinson', 'rel...fr[][{'pageUid': 'EXP-2012-12-10-a-p0013', 'coords...[][]False2012-12-10T00:00:00+00:00CH[][]SNL[{'relevance': 0.029, 'topic': {'uid': 'tm-fr-...[]EXP-2012-12-10-a[issue]FalseNotDefined2012-12-10T00:00:00+00:002012EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(entity_id=\"aida-0001-54-Switzerland\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find all articles that mention Switzerland and Albert Einstein." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 626 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
EXP-2013-10-02-a-i0190arFleurier, pépinière de Nobel6641[{'uid': 'EXP-2013-10-02-a-p0029', 'num': 29, ...FalseFleurier, pépinière de Nobel SCIENCES Deux sav...[article]OpenPrivate2013[{'uid': 'aida-0001-54-Neuchâtel', 'relevance'...[{'uid': 'aida-0001-50-Charles_Édouard_Guillau...fr[][{'pageUid': 'EXP-2013-10-02-a-p0029', 'coords...[][]False2013-10-02T00:00:00+00:00CH[][]SNL[{'relevance': 0.029, 'topic': {'uid': 'tm-fr-...[]EXP-2013-10-02-a[issue]FalseNotDefined2013-10-02T00:00:00+00:002013EXPEXP[newspaper][fr]TrueL'Express2018.01738.0839728746204701819280[]EXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017True
IMP-1975-04-18-a-i0281ar(La plupart des émissions sont2021[{'uid': 'IMP-1975-04-18-a-p0028', 'num': 28, ...False(La plupart des émissions sont en couleurs) SU...[article]OpenPrivate1975[{'uid': 'aida-0001-54-Switzerland', 'relevanc...[{'uid': 'aida-0001-50-Guy_de_Maupassant', 're...fr[][{'pageUid': 'IMP-1975-04-18-a-p0028', 'coords...[][]False1975-04-18T00:00:00+00:00CH[][]SNL[][]IMP-1975-04-18-a[issue]FalseNotDefined1975-04-18T00:00:00+00:001975IMPIMP[newspaper][fr]TrueL'Impartial2018.01881.0710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
EXP-2000-04-20-a-i0368ar7.05 Teletubbies 464644881.30 T. V17741[{'uid': 'EXP-2000-04-20-a-p0036', 'num': 36, ...True7.05 Teletubbies 464644881.30 T. V .+ 955641 /...[article]OpenPrivate2000[{'uid': 'aida-0001-54-Miami', 'relevance': 1}...[{'uid': 'aida-0001-50-Mike_Hammer', 'relevanc...fr[][{'pageUid': 'EXP-2000-04-20-a-p0036', 'coords...[][]False2000-04-20T00:00:00+00:00CH[][]SNL[{'relevance': 0.708, 'topic': {'uid': 'tm-fr-...[]EXP-2000-04-20-a[issue]FalseNotDefined2000-04-20T00:00:00+00:002000EXPEXP[newspaper][fr]TrueL'Express2018.01738.0839728746204701819280[]EXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(entity_id=AND(\"aida-0001-54-Switzerland\", \"aida-0001-50-Albert_Einstein\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find all articles that mention either Switzerland or Albert Einstein." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 2374957 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-1961-01-09-a-i0098arValeur5461[{'uid': 'LLE-1961-01-09-a-p0013', 'num': 13, ...FalseValeur Emission de Lachat de parts du Fonds Su...[article]OpenPrivate1961[{'uid': 'aida-0001-54-Switzerland', 'relevanc...[]fr[][{'pageUid': 'LLE-1961-01-09-a-p0013', 'coords...[][]False1961-01-09T00:00:00+00:00CH[][]SNL[{'relevance': 0.099, 'topic': {'uid': 'tm-fr-...[]LLE-1961-01-09-a[issue]FalseNotDefined1961-01-09T00:00:00+00:001961LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
EXP-1933-01-17-a-i0023arOn cherche jeunefille pour deux enfants ...4071[{'uid': 'EXP-1933-01-17-a-p0002', 'num': 2, '...TrueOn cherche jeunefille pour deux enfants (6 et ...[article]OpenPrivate1933[{'uid': 'aida-0001-54-Zürich', 'relevance': 1...[]fr[][{'pageUid': 'EXP-1933-01-17-a-p0002', 'coords...[][]False1933-01-17T00:00:00+00:00CH[][]SNL[{'relevance': 0.05, 'topic': {'uid': 'tm-fr-a...[]EXP-1933-01-17-a[issue]FalseNotDefined1933-01-17T00:00:00+00:001933EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
EXP-2012-12-10-a-i0068arCINÉMA Apollo 1 Faubourg du10681[{'uid': 'EXP-2012-12-10-a-p0013', 'num': 13, ...FalseCINÉMA Apollo 1 Faubourg du Lac 11, tél. 0900 ...[article]OpenPrivate2012[{'uid': 'aida-0001-54-Switzerland', 'relevanc...[{'uid': 'aida-0001-50-Robert_Pattinson', 'rel...fr[][{'pageUid': 'EXP-2012-12-10-a-p0013', 'coords...[][]False2012-12-10T00:00:00+00:00CH[][]SNL[{'relevance': 0.029, 'topic': {'uid': 'tm-fr-...[]EXP-2012-12-10-a[issue]FalseNotDefined2012-12-10T00:00:00+00:002012EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(entity_id=OR(\"aida-0001-54-Switzerland\", \"aida-0001-50-Albert_Einstein\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Newspaper\n", + "\n", + "Limit search to two newspapers" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 481 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
GDL-1951-04-04-a-i0086ad'événement de 1951 est sans2231[{'uid': 'GDL-1951-04-04-a-p0004', 'num': 4, '...True'événement de 1951 est sans contredit l'inaugu...[article]OpenPrivate1951[{'uid': 'aida-0001-54-Medal_bar', 'relevance'...[]fr[{'fragment': ' avec la mise en service des de...[{'pageUid': 'GDL-1951-04-04-a-p0004', 'coords...[][]False1951-04-04T00:00:00+00:00CH[][]SNL[{'relevance': 0.023, 'topic': {'uid': 'tm-fr-...[]GDL-1951-04-04-a[issue]FalseNotDefined1951-04-04T00:00:00+00:001951GDLGDL[newspaper][]TrueGazette de Lausanne19911804420005351070441517187[]GDL-1798-02-01-a[issue]FalseClosed1798-02-01T00:00:00+00:001798GDL-1998-02-28-a[issue]FalseClosed1998-02-28T00:00:00+00:001998True
GDL-1951-07-03-a-i0009adAMERICAN EXPORT LINES Le nouveau1641[{'uid': 'GDL-1951-07-03-a-p0002', 'num': 2, '...TrueAMERICAN EXPORT LINES Le nouveau Service Expre...[article]OpenPrivate1951[{'uid': 'aida-0001-54-Province_of_New_York', ...[]fr[{'fragment': '-d'œuvre de l'architecture nava...[{'pageUid': 'GDL-1951-07-03-a-p0002', 'coords...[][]False1951-07-03T00:00:00+00:00CH[][]SNL[{'relevance': 0.234, 'topic': {'uid': 'tm-fr-...[]GDL-1951-07-03-a[issue]FalseNotDefined1951-07-03T00:00:00+00:001951GDLGDL[newspaper][]TrueGazette de Lausanne19911804420005351070441517187[]GDL-1798-02-01-a[issue]FalseClosed1798-02-01T00:00:00+00:001798GDL-1998-02-28-a[issue]FalseClosed1998-02-28T00:00:00+00:001998True
GDL-1951-09-01-a-i0185adLe nouveau • Express pour1621[{'uid': 'GDL-1951-09-01-a-p0010', 'num': 10, ...TrueLe nouveau • Express pour passagers Méditerran...[article]OpenPrivate1951[{'uid': 'aida-0001-54-Independence_Bowl', 're...[]fr[{'fragment': ' américaine, les nouveaux trans...[{'pageUid': 'GDL-1951-09-01-a-p0010', 'coords...[][]False1951-09-01T00:00:00+00:00CH[][]SNL[{'relevance': 0.203, 'topic': {'uid': 'tm-fr-...[]GDL-1951-09-01-a[issue]FalseNotDefined1951-09-01T00:00:00+00:001951GDLGDL[newspaper][]TrueGazette de Lausanne19911804420005351070441517187[]GDL-1798-02-01-a[issue]FalseClosed1798-02-01T00:00:00+00:001798GDL-1998-02-28-a[issue]FalseClosed1998-02-28T00:00:00+00:001998True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"independence\", newspaper_id=OR(\"EXP\", \"GDL\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Date range\n", + "\n", + "Items published between dates" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 1898 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
JDG-1957-10-25-a-i0032adHommes d'affaires ! Vous vc...1751[{'uid': 'JDG-1957-10-25-a-p0003', 'num': 3, '...TrueHommes d'affaires ! Vous vc... devez de... ......[article]OpenPrivate1957[{'uid': 'aida-0001-54-Independence$2c$_Ohio',...[]fr[{'fragment': ' aller aux Etats-Unis, n'hésite...[{'pageUid': 'JDG-1957-10-25-a-p0003', 'coords...[][]False1957-10-25T00:00:00+00:00CH[][]SNL[{'relevance': 0.408, 'topic': {'uid': 'tm-fr-...[]JDG-1957-10-25-a[issue]FalseNotDefined1957-10-25T00:00:00+00:001957JDGJDG[newspaper][]TrueJournal de Genève1998.01826.0406288449131494186172[]JDG-1826-01-01-a[issue]FalseClosed1826-01-01T00:00:00+00:001826JDG-1997-12-31-a[issue]FalseClosed1997-12-31T00:00:00+00:001997True
JDG-1958-03-24-a-i0076adAllez-vous aux U. S. A.1551[{'uid': 'JDG-1958-03-24-a-p0006', 'num': 6, '...TrueAllez-vous aux U. S. A. pour affaires ? ... al...[article]OpenPrivate1958[{'uid': 'aida-0001-54-Independence$2c$_Ohio',...[]fr[{'fragment': ' » sur les luxueux <em>Independ...[{'pageUid': 'JDG-1958-03-24-a-p0006', 'coords...[][]False1958-03-24T00:00:00+00:00CH[][]SNL[{'relevance': 0.025, 'topic': {'uid': 'tm-fr-...[]JDG-1958-03-24-a[issue]FalseNotDefined1958-03-24T00:00:00+00:001958JDGJDG[newspaper][]TrueJournal de Genève1998.01826.0406288449131494186172[]JDG-1826-01-01-a[issue]FalseClosed1826-01-01T00:00:00+00:001826JDG-1997-12-31-a[issue]FalseClosed1997-12-31T00:00:00+00:001997True
JDG-1958-03-20-a-i0045adAllez-vous aux U. S. A.1571[{'uid': 'JDG-1958-03-20-a-p0003', 'num': 3, '...TrueAllez-vous aux U. S. A. pour affaires} ... alo...[article]OpenPrivate1958[{'uid': 'aida-0001-54-Independence$2c$_Iowa',...[]fr[{'fragment': ' <em>Independence</em> ou Const...[{'pageUid': 'JDG-1958-03-20-a-p0003', 'coords...[][]False1958-03-20T00:00:00+00:00CH[][]SNL[{'relevance': 0.035, 'topic': {'uid': 'tm-fr-...[]JDG-1958-03-20-a[issue]FalseNotDefined1958-03-20T00:00:00+00:001958JDGJDG[newspaper][]TrueJournal de Genève1998.01826.0406288449131494186172[]JDG-1826-01-01-a[issue]FalseClosed1826-01-01T00:00:00+00:001826JDG-1997-12-31-a[issue]FalseClosed1997-12-31T00:00:00+00:001997True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import DateRange\n", + "\n", + "impresso.search.find(q=\"independence\", date_range=DateRange(\"1921-05-21\", \"2001-01-02\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Articles published at any time excluding the range (not the `~` that negates the range)." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 411 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
IMP-2016-08-08-a-i0095ar« Independence Day : Resurgence121[{'uid': 'IMP-2016-08-08-a-p0013', 'num': 13, ...False« Independence Day : Resurgence » : défense pl...[article]OpenPrivate2016[{'uid': 'aida-0001-54-Independence_Bowl', 're...[]fr[{'fragment': '« <em>Independence</em> Day : R...[{'pageUid': 'IMP-2016-08-08-a-p0013', 'coords...[][]False2016-08-08T00:00:00+00:00CH[][]SNL[][]IMP-2016-08-08-a[issue]FalseNotDefined2016-08-08T00:00:00+00:002016IMPIMP[newspaper][fr]TrueL'Impartial2018.01881.0710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
EXP-2016-08-08-a-i0101ar« Independence Day : Resurgence121[{'uid': 'EXP-2016-08-08-a-p0013', 'num': 13, ...False« Independence Day : Resurgence » : défense pl...[article]OpenPrivate2016[{'uid': 'aida-0001-54-Independence_Bowl', 're...[]fr[{'fragment': '« <em>Independence</em> Day : R...[{'pageUid': 'EXP-2016-08-08-a-p0013', 'coords...[][]False2016-08-08T00:00:00+00:00CH[][]SNL[{'relevance': 0.023, 'topic': {'uid': 'tm-fr-...[]EXP-2016-08-08-a[issue]FalseNotDefined2016-08-08T00:00:00+00:002016EXPEXP[newspaper][fr]TrueL'Express2018.01738.0839728746204701819280[]EXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017True
IMP-2016-07-26-a-i0102arJeff Goldblum (à gauche) et181[{'uid': 'IMP-2016-07-26-a-p0011', 'num': 11, ...FalseJeff Goldblum (à gauche) et Liam Hemsworth à l...[article]OpenPrivate2016[{'uid': 'aida-0001-54-Independence_Bowl', 're...[{'uid': 'aida-0001-50-Jeff_Goldblum', 'releva...fr[{'fragment': 'Jeff Goldblum (à gauche) et Lia...[{'pageUid': 'IMP-2016-07-26-a-p0011', 'coords...[][]False2016-07-26T00:00:00+00:00CH[][]SNL[][]IMP-2016-07-26-a[issue]FalseNotDefined2016-07-26T00:00:00+00:002016IMPIMP[newspaper][fr]TrueL'Impartial2018.01881.0710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import DateRange\n", + "\n", + "impresso.search.find(q=\"independence\", date_range=~DateRange(\"1921-05-21\", \"2001-01-02\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Language\n", + "\n", + "Search for the term \"banana\" in English or Italian." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 7 items of 7 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-1969-09-26-a-i0120aravec un nouveau Programme des plus jolis...731[{'uid': 'LLE-1969-09-26-a-p0010', 'num': 10, ...Falseavec un nouveau Programme des plus jolis ncgro...[article]OpenPrivate1969[{'uid': 'aida-0001-54-Mexico', 'relevance': 1}][{'uid': 'aida-0001-50-Honey_Pie', 'relevance'...en[{'fragment': ' - <em>Banana</em> B cat Song -...[{'pageUid': 'LLE-1969-09-26-a-p0010', 'coords...[][]False1969-09-26T00:00:00+00:00CH[][]SNL[][]LLE-1969-09-26-a[issue]FalseNotDefined1969-09-26T00:00:00+00:001969LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
FZG-1981-02-28-a-i0088arRadio-Hitparade So., 19.00 Radio DRS 1 1...1611[{'uid': 'FZG-1981-02-28-a-p0013', 'num': 13, ...FalseRadio-Hitparade So ., 19 . 00 Radio DRS 1 1 . ...[article]OpenPrivate1981[][{'uid': 'aida-0001-50-Barclay_James_Harvest',...en[{'fragment': ' ( Boney M . ) , 12 . Celebrati...[{'pageUid': 'FZG-1981-02-28-a-p0013', 'coords...[][]False1981-02-28T00:00:00+00:00CH[][]SNL[][]FZG-1981-02-28-a[issue]FalseNotDefined1981-02-28T00:00:00+00:001981FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
FZG-1981-01-23-a-i0068arRadio-Hitparade In der Radio-Hitparade, ...1831[{'uid': 'FZG-1981-01-23-a-p0016', 'num': 16, ...FalseRadio-Hitparade In der Radio-Hitparade , die a...[article]OpenPrivate1981[][{'uid': 'aida-0001-50-John_Lennon', 'relevanc...en[{'fragment': ' ) , 12 . Passion ( Rod Stewart...[{'pageUid': 'FZG-1981-01-23-a-p0016', 'coords...[][]False1981-01-23T00:00:00+00:00CH[][]SNL[][]FZG-1981-01-23-a[issue]FalseNotDefined1981-01-23T00:00:00+00:001981FZGFZG[newspaper][de]TrueFreiburger Nachrichten20181865-1-1-1153[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"banana\", language=OR(\"it\", \"en\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now search for the word \"banana\" in any language _except_ English or Italian." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"banana\", language=~OR(\"it\", \"en\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entity mention\n", + "\n", + "Find articles that mention two entities." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 50 items of 50 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
NZZ-1947-02-28-c-i0008pageCINEMA WNEGUTtPAKTIA Eilh » Willi12921[{'uid': 'NZZ-1947-02-28-c-p0008', 'num': 8, '...TrueCINEMA WNEGUTtPAKTIA Eilh » Willi «»!. V .» Je...[article]Closed1947[{'uid': 'aida-0001-54-Marseille', 'relevance'...[{'uid': 'aida-0001-50-Friedel_Rausch', 'relev...de[][{'pageUid': 'NZZ-1947-02-28-c-p0008', 'coords...[][]False1947-02-28T00:00:00+00:00CH[][]NZZ[{'relevance': 0.167, 'topic': {'uid': 'tm-de-...[]NZZ-1947-02-28-c[issue]FalseNotDefined1947-02-28T00:00:00+00:001947NZZNZZ[newspaper][de]TrueNeue Zürcher Zeitung20171780558804112676549965237[]NZZ-1780-01-12-a[issue]FalseClosed1780-01-12T00:00:00+00:001780NZZ-1950-12-31-a[issue]FalseClosed1950-12-31T00:00:00+00:001950True
IMP-2000-03-11-a-i0352ar7.25 Les superstars du catch16821[{'uid': 'IMP-2000-03-11-a-p0036', 'num': 36, ...True7.25 Les superstars du catch 94246576 8.10 Sur...[article]OpenPrivate2000[{'uid': 'aida-0001-54-Rugby_union', 'relevanc...[{'uid': 'aida-0001-50-John_Woo_$28$musician$2...fr[][{'pageUid': 'IMP-2000-03-11-a-p0036', 'coords...[][]False2000-03-11T00:00:00+00:00CH[][]SNL[{'relevance': 0.15, 'topic': {'uid': 'tm-fr-a...[]IMP-2000-03-11-a[issue]FalseNotDefined2000-03-11T00:00:00+00:002000IMPIMP[newspaper][fr]TrueL'Impartial20181881710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
GDL-1988-09-05-a-i0130arcinémas9511[{'uid': 'GDL-1988-09-05-a-p0022', 'num': 22, ...Truecinémas Nico de Andrew Davis, avec Steven Seag...[article]OpenPrivate1988[{'uid': 'aida-0001-54-Cannes', 'relevance': 2...[{'uid': 'aida-0001-50-Steven_Seagal', 'releva...fr[][{'pageUid': 'GDL-1988-09-05-a-p0022', 'coords...[][]False1988-09-05T00:00:00+00:00CH[][]SNL[{'relevance': 0.167, 'topic': {'uid': 'tm-fr-...[]GDL-1988-09-05-a[issue]FalseNotDefined1988-09-05T00:00:00+00:001988GDLGDL[newspaper][]TrueGazette de Lausanne19911804420005351070441517187[]GDL-1798-02-01-a[issue]FalseClosed1798-02-01T00:00:00+00:001798GDL-1998-02-28-a[issue]FalseClosed1998-02-28T00:00:00+00:001998True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(mention=AND(\"Charlie Chaplin\", \"Switzerland\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Topic\n", + "\n", + "Find articles that match either of the two topics." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 3075009 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
IMP-2017-09-20-a-i0083arHOROSCOPE6781[{'uid': 'IMP-2017-09-20-a-p0010', 'num': 10, ...FalseHOROSCOPE BÉLIER (21.3-20.4) Amour : vous aure...[article]OpenPrivate2017[][]fr[][{'pageUid': 'IMP-2017-09-20-a-p0010', 'coords...[][]False2017-09-20T00:00:00+00:00CH[][]SNL[{'relevance': 0.94, 'topic': {'uid': 'tm-fr-a...[]IMP-2017-09-20-a[issue]FalseNotDefined2017-09-20T00:00:00+00:002017IMPIMP[newspaper][fr]TrueL'Impartial20181881710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
IMP-2017-07-03-a-i0023arHOROSCOPE6851[{'uid': 'IMP-2017-07-03-a-p0002', 'num': 2, '...FalseHOROSCOPE BÉLIER (21.3-20.4) Amour : c'est enc...[article]OpenPrivate2017[][]fr[][{'pageUid': 'IMP-2017-07-03-a-p0002', 'coords...[][]False2017-07-03T00:00:00+00:00CH[][]SNL[{'relevance': 0.935, 'topic': {'uid': 'tm-fr-...[]IMP-2017-07-03-a[issue]FalseNotDefined2017-07-03T00:00:00+00:002017IMPIMP[newspaper][fr]TrueL'Impartial20181881710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
IMP-2013-08-27-a-i0098arHOROSCOPE7531[{'uid': 'IMP-2013-08-27-a-p0012', 'num': 12, ...TrueHOROSCOPE BÉLIER (21.3-20.4) Amour : voici l'o...[article]OpenPrivate2013[][]fr[][{'pageUid': 'IMP-2013-08-27-a-p0012', 'coords...[][]False2013-08-27T00:00:00+00:00CH[][]SNL[{'relevance': 0.933, 'topic': {'uid': 'tm-fr-...[]IMP-2013-08-27-a[issue]FalseNotDefined2013-08-27T00:00:00+00:002013IMPIMP[newspaper][fr]TrueL'Impartial20181881710316140228756672137[]IMP-1881-01-01-a[issue]FalseClosed1881-01-01T00:00:00+00:001881IMP-2018-01-22-a[issue]FalseClosed2018-01-22T00:00:00+00:002018True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(topic_id=OR(\"tm-fr-all-v2.0_tp07_fr\", \"tm-fr-all-v2.0_tp48_fr\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Collection\n", + "\n", + "Find all articles in a collection." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(collection_id=\"REPLACEME\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Country\n", + "\n", + "Find all articles published in either of the two specified countries." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 5592 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.fetchednewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.year
uid
LLE-2002-07-24-a-i0069arREPERES| La révolution de Schengen2261[{'uid': 'LLE-2002-07-24-a-p0007', 'num': 7, '...FalseREPERES | La révolution de Schengen Conclu en ...[article]OpenPrivate2002[{'uid': 'aida-0001-54-Luxembourg', 'relevance...[]fr[{'fragment': 'REPERES | La révolution de <em>...[{'pageUid': 'LLE-2002-07-24-a-p0007', 'coords...[][]False2002-07-24T00:00:00+00:00CH[][]SNL[{'relevance': 0.054, 'topic': {'uid': 'tm-fr-...[]LLE-2002-07-24-a[issue]FalseNotDefined2002-07-24T00:00:00+00:002002LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
LLE-2004-06-25-a-i0157arssc5681[{'uid': 'LLE-2004-06-25-a-p0011', 'num': 11, ...Falsessc LASIN maintient la pression sur le « menso...[article]OpenPrivate2004[{'uid': 'aida-0001-54-Suisse$2c$_Moselle', 'r...[]fr[{'fragment': 'ssc LASIN maintient la pression...[{'pageUid': 'LLE-2004-06-25-a-p0011', 'coords...[][]False2004-06-25T00:00:00+00:00CH[][]SNL[][]LLE-2004-06-25-a[issue]FalseNotDefined2004-06-25T00:00:00+00:002004LLELLE[newspaper][fr]TrueLa Liberté20181871-1-1-1147[]TrueNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
EXP-1997-06-21-a-i0122arSchengen La Suisse va devenir une île2261[{'uid': 'EXP-1997-06-21-a-p0014', 'num': 14, ...TrueSchengen La Suisse va devenir une île La Suiss...[article]OpenPrivate1997[{'uid': 'aida-0001-54-Suisse$2c$_Moselle', 'r...[]fr[{'fragment': '<em>Schengen</em> La Suisse va ...[{'pageUid': 'EXP-1997-06-21-a-p0014', 'coords...[][]False1997-06-21T00:00:00+00:00CH[][]SNL[{'relevance': 0.155, 'topic': {'uid': 'tm-fr-...[]EXP-1997-06-21-a[issue]FalseNotDefined1997-06-21T00:00:00+00:001997EXPEXP[newspaper][fr]TrueL'Express20181738839728746204701819280[]TrueEXP-1740-01-01-a[issue]FalseClosed1740-01-01T00:00:00+00:001740EXP-2017-10-31-a[issue]FalseClosed2017-10-31T00:00:00+00:002017
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"Schengen\", country=OR(\"FR\", \"CH\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Access rights\n", + "\n", + "Limit search to articles with specific access rights." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 5999 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
luxembourg1935-1936-09-12-a-i0036arSchengen.871[{'uid': 'luxembourg1935-1936-09-12-a-p0003', ...TrueSchengen. —Service d’auto- bus. — A l’occasion...[article]Closed1936[{'uid': 'aida-0001-54-Luxembourg', 'relevance...[]fr[{'fragment': '<em>Schengen</em>. —Service d’a...[{'pageUid': 'luxembourg1935-1936-09-12-a-p000...[][]False1936-09-12T00:00:00+00:00LU[][]BNL[][]luxembourg1935-1936-09-12-a[issue]FalseNotDefined1936-09-12T00:00:00+00:001936luxembourg1935luxembourg1935[newspaper][]TrueLuxembourg (1935)NaNNaN141638153988860[]luxembourg1935-1935-04-16-a[issue]FalseClosed1935-04-16T00:00:00+00:001935luxembourg1935-1940-05-10-a[issue]FalseClosed1940-05-10T00:00:00+00:001940True
luxembourg1935-1938-11-12-a-i0038arSchengen.511[{'uid': 'luxembourg1935-1938-11-12-a-p0003', ...TrueSchengen. - Association de vi- ticulteurs. — U...[article]Closed1938[][]fr[{'fragment': '<em>Schengen</em>. - Associatio...[{'pageUid': 'luxembourg1935-1938-11-12-a-p000...[][]False1938-11-12T00:00:00+00:00LU[][]BNL[][]luxembourg1935-1938-11-12-a[issue]FalseNotDefined1938-11-12T00:00:00+00:001938luxembourg1935luxembourg1935[newspaper][]TrueLuxembourg (1935)NaNNaN141638153988860[]luxembourg1935-1935-04-16-a[issue]FalseClosed1935-04-16T00:00:00+00:001935luxembourg1935-1940-05-10-a[issue]FalseClosed1940-05-10T00:00:00+00:001940True
obermosel-1934-10-02-a-i0047obAvis de décès 1 Page 31611[{'uid': 'obermosel-1934-10-02-a-p0003', 'num'...TrueAVIS MORTUAIRE. Monsieur Jean-Baptiste Schenge...[article]Closed1934[{'uid': 'aida-0001-54-Paris', 'relevance': 1}][]fr[{'fragment': 'AVIS MORTUAIRE. Monsieur Jean-B...[{'pageUid': 'obermosel-1934-10-02-a-p0003', '...[][]False1934-10-02T00:00:00+00:00LU[][]BNL[][]obermosel-1934-10-02-a[issue]FalseNotDefined1934-10-02T00:00:00+00:001934obermoselobermosel[newspaper][de]TrueObermosel-Zeitung1948.01881.0569343125636421267[]obermosel-1881-06-18-a[issue]FalseClosed1881-06-18T00:00:00+00:001881obermosel-1948-04-03-a[issue]FalseClosed1948-04-03T00:00:00+00:001948True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"Schengen\", access_rights=\"Closed\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Partner\n", + "\n", + "Limit search to articles provided by a specific partner of the Impresso project." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 18 items of 18 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.properties
uid
DTT-1969-04-30-a-i0159arDas neue Statut der KP Chinas4471[{'uid': 'DTT-1969-04-30-a-p0002', 'num': 2, '...FalseDas neue Statut der KP Chinas Peking , 29 . Ap...[article]OpenPrivate1969[{'uid': 'aida-0001-54-Mao_Dun', 'relevance': ...[{'uid': 'aida-0001-50-Mao_Zedong', 'relevance...de[{'fragment': ' Tschou-En-lai , Tschen Po-ta u...[{'pageUid': 'DTT-1969-04-30-a-p0002', 'coords...[][]False1969-04-30T00:00:00+00:00CH[][]Migros[{'relevance': 0.468, 'topic': {'uid': 'tm-de-...[]DTT-1969-04-30-a[issue]FalseNotDefined1969-04-30T00:00:00+00:001969DTTDTT[newspaper][]True-1-1-1-1-10[]
DTT-1977-08-31-a-i0189arMaosoleum1371[{'uid': 'DTT-1977-08-31-a-p0002', 'num': 2, '...FalseMaosoleum Mysteriös PEKING- Mao Tsetung ist in...[article]OpenPrivate1977[][{'uid': 'aida-0001-50-Mao_Zedong', 'relevance...de[{'fragment': ' gestorben » Es ist der Vizekom...[{'pageUid': 'DTT-1977-08-31-a-p0002', 'coords...[][]False1977-08-31T00:00:00+00:00CH[][]Migros[{'relevance': 0.061, 'topic': {'uid': 'tm-de-...[]DTT-1977-08-31-a[issue]FalseNotDefined1977-08-31T00:00:00+00:001977DTTDTT[newspaper][]True-1-1-1-1-10[]
DTT-1960-04-07-a-i0020ardischen Abgeordneten Raghuvira an, daß d...1251[{'uid': 'DTT-1960-04-07-a-p0012', 'num': 12, ...Falsedischen Abgeordneten Raghuvira an , daß demnäc...[article]OpenPrivate1960[{'uid': 'aida-0001-54-Taiwan', 'relevance': 1...[]de[{'fragment': ' <em>Scheng</em> mit überwältig...[{'pageUid': 'DTT-1960-04-07-a-p0012', 'coords...[][]False1960-04-07T00:00:00+00:00CH[][]Migros[{'relevance': 0.069, 'topic': {'uid': 'tm-de-...[]DTT-1960-04-07-a[issue]FalseNotDefined1960-04-07T00:00:00+00:001960DTTDTT[newspaper][]True-1-1-1-1-10[]
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.find(q=\"Schengen\", partner_id=\"Migros\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Text reuse cluster\n", + "\n", + "Find all articles that are part of a specific text reuse cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Search result

\n", + "
Contains 100 items (0 - 100) of 39032 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typetitlesizenbPagespagesisCCexcerptlabelsaccessRightyearlocationspersonslanguagematchesregionsregionBreakscontentLineBreaksisFrontdatecountrytagscollectionsdataProvidertopicsmentionsissue.uidissue.coverissue.labelsissue.freshissue.accessRightsissue.dateissue.yearnewspaper.uidnewspaper.acronymnewspaper.labelsnewspaper.languagesnewspaper.includednewspaper.namenewspaper.endYearnewspaper.startYearnewspaper.countArticlesnewspaper.countIssuesnewspaper.countPagesnewspaper.deltaYearnewspaper.propertiesnewspaper.firstIssue.uidnewspaper.firstIssue.covernewspaper.firstIssue.labelsnewspaper.firstIssue.freshnewspaper.firstIssue.accessRightsnewspaper.firstIssue.datenewspaper.firstIssue.yearnewspaper.lastIssue.uidnewspaper.lastIssue.covernewspaper.lastIssue.labelsnewspaper.lastIssue.freshnewspaper.lastIssue.accessRightsnewspaper.lastIssue.datenewspaper.lastIssue.yearnewspaper.fetched
uid
JDG-1985-11-15-a-i0074arSOCIETES5421[{'uid': 'JDG-1985-11-15-a-p0011', 'num': 11, ...TrueSOCIETES BANQUE CRÉDIT SUISSE.-Le conseil d'ad...[article]OpenPrivate1985[{'uid': 'aida-0001-54-Guernsey', 'relevance':...[]fr[][{'pageUid': 'JDG-1985-11-15-a-p0011', 'coords...[][]False1985-11-15T00:00:00+00:00CH[][]SNL[][]JDG-1985-11-15-a[issue]FalseNotDefined1985-11-15T00:00:00+00:001985JDGJDG[newspaper][]TrueJournal de Genève1998.01826.0406288449131494186172[]JDG-1826-01-01-a[issue]FalseClosed1826-01-01T00:00:00+00:001826JDG-1997-12-31-a[issue]FalseClosed1997-12-31T00:00:00+00:001997True
JDG-1987-02-13-a-i0031arSOCIETES8111[{'uid': 'JDG-1987-02-13-a-p0005', 'num': 5, '...TrueSOCIETES Banque de la Suisse Italienne : hauss...[article]OpenPrivate1987[{'uid': 'aida-0001-54-Switzerland', 'relevanc...[{'uid': 'aida-0001-50-Max_Lorentz', 'relevanc...fr[][{'pageUid': 'JDG-1987-02-13-a-p0005', 'coords...[][]False1987-02-13T00:00:00+00:00CH[][]SNL[][]JDG-1987-02-13-a[issue]FalseNotDefined1987-02-13T00:00:00+00:001987JDGJDG[newspaper][]TrueJournal de Genève1998.01826.0406288449131494186172[]JDG-1826-01-01-a[issue]FalseClosed1826-01-01T00:00:00+00:001826JDG-1997-12-31-a[issue]FalseClosed1997-12-31T00:00:00+00:001997True
GDL-1988-10-26-a-i0064arSOCIETES5571[{'uid': 'GDL-1988-10-26-a-p0009', 'num': 9, '...TrueSOCIETES EMPRUNTS EMPRUNT 4 5 / 8 % DE LA BANQ...[article]OpenPrivate1988[{'uid': 'aida-0001-54-London', 'relevance': 1...[{'uid': 'aida-0001-50-Sandy_Keith', 'relevanc...fr[][{'pageUid': 'GDL-1988-10-26-a-p0009', 'coords...[][]False1988-10-26T00:00:00+00:00CH[][]SNL[{'relevance': 0.029, 'topic': {'uid': 'tm-fr-...[]GDL-1988-10-26-a[issue]FalseNotDefined1988-10-26T00:00:00+00:001988GDLGDL[newspaper][]TrueGazette de Lausanne1991.01804.0420005351070441517187[]GDL-1798-02-01-a[issue]FalseClosed1798-02-01T00:00:00+00:001798GDL-1998-02-28-a[issue]FalseClosed1998-02-28T00:00:00+00:001998True
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import OR\n", + "impresso.search.find(text_reuse_cluster_id=OR(\"tr-nobp-all-v01-c29\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Facets\n", + "\n", + "Facets are a way to get a summary of the search results from the perspective of a specific field. In a facet search result the field values are grouped together and the number of items in each group is displayed. \n", + "\n", + "Facet search method has the same attributes as the search method." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Date range\n", + "\n", + "Get the number of articles that mention \"Impresso\", published on ever particular date." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 17 items of 17 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
1861-01-01T00:00:00Z3
1894-01-01T00:00:00Z1
1946-01-01T00:00:00Z1
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"daterange\", q=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Year\n", + "\n", + "Get the number of articles that mention \"impresso\", published during every particular year." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 17 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.refs.citem.refs.aitem.refs.m
val
1861318615574955749126
189411894124620124620190
1946119463396053396056770
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"year\", q=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Content length\n", + "\n", + "Get the number of articles that mention \"impresso\", grouped by content length." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 100 items of 100 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
06
1006
20011
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"contentLength\", q=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Month\n", + "\n", + "Get the number of articles that mention \"impresso\", published during every particular month." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items of 10 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
12
23
35
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"month\", q=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Country\n", + "\n", + "Get the number of articles that mention \"impresso\", grouped by country they were published in." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
CH55
LU1
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"country\", q=\"impresso\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Type\n", + "\n", + "Get the number of items that mention \"impresso\", grouped by type of item." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 8 items of 8 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
ad14856907
ar24836851
ob123835
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"type\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Topic\n", + "\n", + "Find topics that the articles mentioning \"impresso\" are related to." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 263 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uiditem.languageitem.communityitem.pagerankitem.degreeitem.xitem.yitem.relatedTopicsitem.countItemsitem.excerptitem.wordsitem.model
val
tm-de-all-v2.0_tp00_de241tm-de-all-v2.0_tp00_detm-de-all-v2.0_tp00_dede0000[]265405[{'w': 'london', 'p': 0.02403}, {'w': 'new', '...[{'w': 'london', 'p': 0.02403}, {'w': 'new', '...tm-de-all-v2.0
tm-de-all-v2.0_tp01_de527tm-de-all-v2.0_tp01_detm-de-all-v2.0_tp01_dede0000[]377965[{'w': 'new', 'p': 0.03594}, {'w': 'york', 'p'...[{'w': 'new', 'p': 0.03594}, {'w': 'york', 'p'...tm-de-all-v2.0
tm-de-all-v2.0_tp02_de741tm-de-all-v2.0_tp02_detm-de-all-v2.0_tp02_dede0000[]512501[{'w': 'zimmer', 'p': 0.02682}, {'w': 'wort', ...[{'w': 'zimmer', 'p': 0.02682}, {'w': 'wort', ...tm-de-all-v2.0
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"topic\", q=\"pomme\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Collection\n", + "\n", + "Find collections the articles mentioning \"pomme\" are part of." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 1 items of 1 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uiditem.nameitem.descriptionitem.statusitem.creationDateitem.lastModifiedDateitem.countItemsitem.creator.uiditem.creator.usernameitem.labels
val
local-roka-UaJ1domy16local-roka-UaJ1domylocal-roka-UaJ1domyestelle-test-collection-for-recsys-not-workingcontaining paris roubaix or paris roubais or ...PRI2020-09-24T09:11:42+00:002020-09-24T09:14:51.970000+00:006193local-rokaroman.kalyakin[bucket, collection]
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"collection\", q=\"pomme\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Newspaper\n", + "\n", + "Find newspapers that the articles mentioning \"Schengen\" were published in." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 39 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uiditem.acronymitem.labelsitem.languagesitem.includeditem.nameitem.endYearitem.startYearitem.countArticlesitem.countIssuesitem.countPagesitem.deltaYearitem.propertiesitem.fetched
val
DTT18DTT[newspaper][]TrueLa SentinelleNaNNaN-1.0-1.0-1.00.0[]True
EXP1424EXPEXPNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
FZG681FZGFZGNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"newspaper\", q=\"Schengen\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Language\n", + "\n", + "Find all languages the articles mentioning \"impresso\" were published in." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 4 items of 4 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuid
val
de5784de
en2en
fr6446fr
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"language\", q=\"Schengen\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Person\n", + "\n", + "Find all persons mentioned in articles that mention \"Schengen\". Get only the last page." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 3 items (7140 - 7143) of 7143 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uid
val
aida-0001-50-Étienne_Schmit3aida-0001-50-Étienne_Schmitaida-0001-50-Étienne_Schmit
aida-0001-50-Íngrid_Betancourt1aida-0001-50-Íngrid_Betancourtaida-0001-50-Íngrid_Betancourt
aida-0001-50-İsmail_Cem_İpekçi3aida-0001-50-İsmail_Cem_İpekçiaida-0001-50-İsmail_Cem_İpekçi
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"person\", q=\"Schengen\", offset=7140)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Location\n", + "\n", + "Find all locations mentioned in articles that mention \"Schengen\". Get only the last page." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 4 items (3310 - 3314) of 3314 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uid
val
aida-0001-54-Ünye1aida-0001-54-Ünyeaida-0001-54-Ünye
aida-0001-54-Łomża2aida-0001-54-Łomżaaida-0001-54-Łomża
aida-0001-54-Świnoujście1aida-0001-54-Świnoujścieaida-0001-54-Świnoujście
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"location\", q=\"Schengen\", offset=3310)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## NAG\n", + "\n", + "Find all entities without a known type mentioned in articles that mention \"homme\" and \"femme\"." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 6 items of 6 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
bert-nag-55-AFP12
bert-nag-55-AP17
bert-nag-55-ATS_SDA50
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import AND\n", + "impresso.search.facet(\"nag\", title=AND(\"homme\", \"femme\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Access rights\n", + "\n", + "Get access rights of articles mentioning \"pomme\"." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 4 items of 4 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
Closed5677
OpenPrivate47691
OpenPublic2128
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"accessRight\", q=\"pomme\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Partner\n", + "\n", + "Get Impresso partners that provided articles mentioning \"pomme\"." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 4 items of 4 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
BNL4862
Migros1230
NZZ2751
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.search.facet(\"partner\", q=\"pomme\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/notebooks/textReuse.ipynb b/examples/notebooks/textReuse.ipynb new file mode 100644 index 0000000..6c29afb --- /dev/null +++ b/examples/notebooks/textReuse.ipynb @@ -0,0 +1,5370 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect, AND, OR\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Text reuse clusters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Find clusters mentioning text" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 5 items (2 - 7) of 190 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c137438978332Un rapport géné-\\nral au roi Léopold sur la si...59.18367321891-07-201891-07-21
tr-nobp-all-v01-c60129939020Wie Kinder der Mission ihm erzählt haben, gibt...51.00000021896-02-061896-02-21
tr-nobp-all-v01-c42949726081renversé\\nLÉOPOLDVILLE, 9 mars A la veille de ...55.40540521961-03-101961-03-10
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\",\n", + " offset=2,\n", + " limit=5,\n", + " order_by=\"passages-count\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cluster size" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c200886PRIX CRAQUANTS\\nPROFITEZ-EN MAINTENANT ! OFFRE...1.010101632007-05-152011-12-29
tr-nobp-all-v01-c117172La Chaux-de-Fonds,\\nLe Sphynx samedi 22 mars 2...38.571429502008-01-142008-12-22
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\",\n", + " cluster_size=(50, 100),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mentioning text in title" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c433978Trafic-marchandises Luxembourg — Suisse.\\nAvec...0.5813951391931-02-161958-01-17
tr-nobp-all-v01-c325226JOURNAL de GENEVE\\net GAZETTE de LAUSANNE\\nEdi...36.0000001431991-12-131993-11-30
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " title=AND(\"luxembourg\", \"suisse\"),\n", + " cluster_size=(100, 200),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lexical overlap" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 3 items of 3 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c154619006960Fusillade entre soldats de\\nl’ONU et soldats c...50.98039241961-03-041961-03-04
tr-nobp-all-v01-c60129939020Wie Kinder der Mission ihm erzählt haben, gibt...51.00000021896-02-061896-02-21
tr-nobp-all-v01-c240518594491Encore avantageux plus\\nValable du 28.8 au 3.9...50.00000022007-08-282008-09-02
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\",\n", + " lexical_overlap=(50, 51),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Day delta\n", + "\n", + "Number of days between the first and last mention of the text in the cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 1 items of 1 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c34359907704Les Sociétés anonymes suisses\\npendant la cris...78.53658521937-05-081937-07-10
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\",\n", + " day_delta=(50, 100),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Date range" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 95 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c171798985973veut récupérer\\nMatadi et Banana\\nLéopoldville...66.95652221961-03-071961-03-07
tr-nobp-all-v01-c214748626011Le président\\ndu Zimbabwe\\nun pasteur\\nSalisbu...89.22155721980-04-121980-04-12
tr-nobp-all-v01-c85899364059Le premier satellite americain serait lire\\nde...43.13725531955-08-161955-08-19
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import DateRange\n", + "\n", + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\", \n", + " date_range=DateRange(\"1921-05-21\", \"2001-01-02\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Newspaper" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 139 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c51539934627Banana, Feindouno et\\nFeltscher à Lausanne\\nFO...100.00022013-08-312013-08-31
tr-nobp-all-v01-c117193Deschansonsàenfairetrémousserplusd’un\\nFocus\\n...100.00022008-07-102008-07-10
tr-nobp-all-v01-c299325Colonies de vacances », « Juanita\\nBanana », «...34.37521967-06-221967-10-02
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\", \n", + " newspaper_id=OR(\"EXP\", \"GDL\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Collection" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(collection_id=\"12312312\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Front page" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 16 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c231928631691La « Panther » coulée\\nMilan , 28 teptembre .\\...60.60606121914-09-291914-09-29
tr-nobp-all-v01-c68719627685congolaise\\nLEOPOLDVILLE (AFP et VPI). — « D'a...53.65853731961-03-211961-03-21
tr-nobp-all-v01-c94489677052se plaint\\nà Bruxelles\\n» \"Z, 'îi’ÜL 'HT *\\nNe...64.80000031960-09-091960-09-09
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\", \n", + " front_page=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Topic" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 16 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c117193Deschansonsàenfairetrémousserplusd’un\\nFocus\\n...100.00000022008-07-102008-07-10
tr-nobp-all-v01-c171801904581. Faisaient la tournée des cours. 2. Province...53.84615452005-03-302008-07-07
tr-nobp-all-v01-c171801904571. Faisaient la tournée des cours. 2. Province...78.81355932008-07-072008-07-07
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\", \n", + " topic_id=OR(\"tm-fr-all-v2.0_tp07_fr\", \"tm-fr-all-v2.0_tp48_fr\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Language" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 3 items of 3 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c8590352366INTERNATIONAL\\nPORTFOLIO SICAV\\n1, rue Schille...18.840580301975-07-111997-03-26
tr-nobp-all-v01-c322228Amsterdam, Atlanta, Barcelona, Brussels, Chica...76.92307721989-12-021990-04-13
tr-nobp-all-v01-c223338773787Business men, students of affairs,\\nmen of let...59.67741921947-03-131947-03-13
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"luxembourg\", \n", + " language=OR(\"it\", \"en\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Country" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 1792 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c249108133968En route vers\\nSchengen\\nSUISSE _.\\nEn dépit d...97.29729722001-03-272001-03-27
tr-nobp-all-v01-c111669500795Comité d'action contre l'adhésion à Schengen /...70.83333332005-06-022005-06-03
tr-nobp-all-v01-c25770065012Schengen L'Autriche\\nmembre à part entière\\nL'...100.00000021998-04-021998-04-02
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"schengen\", \n", + " country=OR(\"FR\", \"CH\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entity mention" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 43 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c60129931875Die Verwaltung der öf-\\nfentlichen Gebäude hat...46.15384621946-07-311946-09-20
tr-nobp-all-v01-c42949763205Europe : collaborations indivisibles\\nEDITORIA...100.00000021993-05-141993-05-14
tr-nobp-all-v01-c68719674988CONSEIL FEDERAL Lutte contre la criminalité\\nF...86.20689721995-06-281995-06-28
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"schengen\", \n", + " mention=OR(\"Belval\", \"Lausanne\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entity by ID" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReuseClusters result

\n", + "
Contains 10 items (0 - 10) of 21 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textSamplecluster.lexicalOverlapcluster.clusterSizecluster.timeCoverage.fromcluster.timeCoverage.to
cluster.id
tr-nobp-all-v01-c128849280553Schreckliche Seefahrt . Antwerpen ,\\n(>; v . O...71.52777821892-02-191892-02-20
tr-nobp-all-v01-c68719627685congolaise\\nLEOPOLDVILLE (AFP et VPI). — « D'a...53.65853731961-03-211961-03-21
tr-nobp-all-v01-c111669354290Afin de financer un projet de télévision pirat...60.93750031987-08-141987-08-15
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.find(\n", + " text=\"banana\",\n", + " entity_id=\"aida-0001-54-Switzerland\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Text reuse clusters facets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Date range" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 321 items of 321 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
1700-01-01T00:00:00Z0
1701-01-01T00:00:00Z0
1702-01-01T00:00:00Z0
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.facet(\"daterange\", lexical_overlap=(1, 2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cluster size" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items of 10 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
01687
100000
200000
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.facet(\n", + " \"textReuseClusterSize\",\n", + " lexical_overlap=(1, 2)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lexical overlap" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items of 10 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
01687
100
200
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.facet(\n", + " \"textReuseClusterLexicalOverlap\",\n", + " lexical_overlap=(1, 2)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Day delta" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items of 10 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
0219
1028
205
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.facet(\n", + " \"textReuseClusterDayDelta\",\n", + " lexical_overlap=(1, 2)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Newspaper" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 54 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uiditem.acronymitem.labelsitem.languagesitem.includeditem.nameitem.endYearitem.startYearitem.countArticlesitem.countIssuesitem.countPagesitem.deltaYearitem.propertiesitem.fetched
val
BNN4BNNBNNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
CDV6CDVCDVNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
CON1CONCONNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.facet(\n", + " \"newspaper\",\n", + " lexical_overlap=(1, 2)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Text reuse passages" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Find passages mentioning text" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 5 items (2 - 7) of 247 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c103079291010-IMP-2008-04-28-a-i0300@0:268902689Tu n’aurais pas dû partir\\nJean-Louis Grosmair...Tu n’aurais pas dû partir[35][][{'id': 'tr-nobp-all-v01-c103079291010'}]False26892008-04-28T00:00:00+00:00[57,1275,1366,489]IMP-2008-04-28-a-i0300tr-nobp-all-v01-c10307929101020100.000000IMPIMP-2008-04-28-a
c103079305149-tageblatt-1941-02-10-a-i0068@0:356903569Gerichtszeitung\\nAm 10. Mai gegen 9 Uhr morgen...Gerichtszeitung[10][local-duma-mxB6kMKc][{'id': 'tr-nobp-all-v01-c103079305149'}, {'id...False35691941-02-10T00:00:00+00:00[100,1200,1810,1527]tageblatt-1941-02-10-a-i0068tr-nobp-all-v01-c1030793051492068.181818tageblatttageblatt-1941-02-10-a
c103079397256-luxwort-1941-04-12-a-i0078@0:8030803Oeffentliche Verdinggabe\\nAuf die Lieferung vo...Oeffentliche Verdinggabe[5][local-duma-mxB6kMKc][{'id': 'tr-nobp-all-v01-c103079397256'}]False8031941-04-12T00:00:00+00:00[3634,1462,852,873]luxwort-1941-04-12-a-i0078tr-nobp-all-v01-c1030793972562362.337662luxwortluxwort-1941-04-12-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"belval\",\n", + " offset=2,\n", + " limit=5,\n", + " order_by=\"clusterSize\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cluster size" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 3 items of 3 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c200886-EXP-2009-07-29-a-i0041@0:5220522PRIX CRAQUANTS\\nPROFITEZ-EN MAINTENANT ! OFFRE...NaN[4][][{'id': 'tr-nobp-all-v01-c163801'}, {'id': 'tr...False5222009-07-29T00:00:00+00:00[91,130,1487,1655]EXP-2009-07-29-a-i0041tr-nobp-all-v01-c2008866316891.010101EXPEXP-2009-07-29-a
c117172-IMP-2008-03-25-a-i0111@0:6420642La Chaux-de-Fonds,\\nLe Sphynx samedi 22 mars 2...NaN[12][][{'id': 'tr-nobp-all-v01-c117172'}]False6422008-03-25T00:00:00+00:00[148,315,1530,2220]IMP-2008-03-25-a-i0111tr-nobp-all-v01-c1171725034338.571429IMPIMP-2008-03-25-a
c117172-EXP-2008-03-25-a-i0105@0:6420642La Chaux-de-Fonds,\\nLe Sphynx samedi 22 mars 2...[12][][{'id': 'tr-nobp-all-v01-c117172'}]False6422008-03-25T00:00:00+00:00[148,315,1530,2220]EXP-2008-03-25-a-i0105tr-nobp-all-v01-c1171725034338.571429EXPEXP-2008-03-25-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\",\n", + " cluster_size=(50, 100),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mentioning text in title" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items of 10 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c433978-obermosel-1946-08-14-a-i0035@0:4740474CHEMINS DE FER LUXEMBOURGEOIS. — Avis.\\nTarif ...CHEMINS DE FER LUXEMBOURGEOIS. — Avis. Tarif i...[7][][{'id': 'tr-nobp-all-v01-c433978'}]False4741946-08-14T00:00:00+00:00[2640,3768,840,392]obermosel-1946-08-14-a-i0035tr-nobp-all-v01-c43397813998320.581395obermoselobermosel-1946-08-14-a
c433978-luxwort-1946-02-28-a-i0031@0:4950495AVIS — Tarif international voyageurs\\net bagag...AVIS — Tarif international voyageurs et bagage...[3][][{'id': 'tr-nobp-all-v01-c433978'}]False4951946-02-28T00:00:00+00:00[3044,4564,700,293]luxwort-1946-02-28-a-i0031tr-nobp-all-v01-c43397813998320.581395luxwortluxwort-1946-02-28-a
c433978-obermosel-1946-03-13-a-i0042@0:5570557CHEMIN DE FER LUXEMBOURGEOIS.\\nAvis. — Trafic-...CHEMIN DE FER LUXEMBOURGEOIS. Avis. — Trafic-m...[6][][{'id': 'tr-nobp-all-v01-c433978'}]False5571946-03-13T00:00:00+00:00[1060,2754,828,420]obermosel-1946-03-13-a-i0042tr-nobp-all-v01-c43397813998320.581395obermoselobermosel-1946-03-13-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " title=AND(\"luxembourg\", \"suisse\"),\n", + " cluster_size=(100, 200),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lexical overlap" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 7 items of 7 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c154619006960-JDG-1961-03-04-a-i0097@6739:717667397176Léopoldville, 3. — (Reuter). — Une fusillade a...Le représentant de M. «H» dénonce /'anarchie m...[12][local-IIV_6APb-X0x8SwxS, local-IIV_6APb-4hURA...[{'id': 'tr-nobp-all-v01-c154618904093'}, {'id...False4371961-03-04T00:00:00+00:00[1452,1001,607,211]JDG-1961-03-04-a-i0097tr-nobp-all-v01-c1546190069604050.980392JDGJDG-1961-03-04-a
c154619006960-IMP-1961-03-04-a-i0219@660:11056601105LEOPOLDVILLE, 4.-Reuter.-Une\\nfusillade a écla...Fusillades entre soldats de Mobutu et Casques ...[20][local-IIV_6APb-X0x8SwxS][{'id': 'tr-nobp-all-v01-c154619006959'}, {'id...False4451961-03-04T00:00:00+00:00[1040,920,315,236]IMP-1961-03-04-a-i0219tr-nobp-all-v01-c1546190069604050.980392IMPIMP-1961-03-04-a
c154619006960-LSE-1961-03-04-a-i0005@0:4800480Fusillade entre soldats de\\nl’ONU et soldats c...Fusillade entre soldats de l’ONU et soldats co...[1][local-IIV_6APb-X0x8SwxS, local-IIV_6APb-4hURA...[{'id': 'tr-nobp-all-v01-c154619006959'}, {'id...True4801961-03-04T00:00:00+00:00[46,361,683,228]LSE-1961-03-04-a-i0005tr-nobp-all-v01-c1546190069604050.980392LSELSE-1961-03-04-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\",\n", + " lexical_overlap=(50, 51),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Day delta\n", + "\n", + "Number of days between the first and last mention of the text in the cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 1 items of 1 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c34359907704-LLS-1937-05-08-a-i0013@0:271002710Les Sociétés anonymes suisses\\npendant la cris...Les Sociétés anonymes suisses pendant la crise[4][local-FQTNIpkU-bvKkvb9s][{'id': 'tr-nobp-all-v01-c34359907704'}, {'id'...False27101937-05-08T00:00:00+00:00[140,2361,736,2146]LLS-1937-05-08-a-i0013tr-nobp-all-v01-c3435990770426378.536585LLSLLS-1937-05-08-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\",\n", + " day_delta=(50, 100),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Date range" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 194 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c77309774782-IMP-1967-06-23-a-i0023@1879:197618791976colonies de vacances », « Juanita\\nBanana », «...Des chansons dans l'air, une fanfare pour troi...[4][local-la-cVcTVCC4-nnaiNiEv, local-An-RPAyTHnn...[{'id': 'tr-nobp-all-v01-c299324'}, {'id': 'tr...False971967-06-23T00:00:00+00:00[721,1570,313,55]IMP-1967-06-23-a-i0023tr-nobp-all-v01-c77309774782210137.500000IMPIMP-1967-06-23-a
c299325-EXP-1967-06-22-a-i0052@1833:193418331934Colonies de vacances », « Juanita\\nBanana », «...Le «commandant» Haag emmènera le cortège des v...[3][local-la-cVcTVCC4-nnaiNiEv, local-An-RPAyTHnn...[{'id': 'tr-nobp-all-v01-c299324'}, {'id': 'tr...False1011967-06-22T00:00:00+00:00[1815,1703,358,88]EXP-1967-06-22-a-i0052tr-nobp-all-v01-c299325210234.375000EXPEXP-1967-06-22-a
c171798985973-JDG-1961-03-07-a-i0101@3226:433932264339veut récupérer\\nMatadi et Banana\\nLéopoldville...A Matadi/ des forces congolaises désarment 135...[12][local-IIV_6APb-X0x8SwxS, local-IIV_6APb-4hURA...[{'id': 'tr-nobp-all-v01-c111669463995'}, {'id...False11131961-03-07T00:00:00+00:00[777,478,1244,846]JDG-1961-03-07-a-i0101tr-nobp-all-v01-c1717989859732066.956522JDGJDG-1961-03-07-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from impresso import DateRange\n", + "\n", + "impresso.text_reuse.passages.find(\n", + " text=\"banana\", \n", + " date_range=DateRange(\"1921-05-21\", \"2001-01-02\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Newspaper" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 145 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c51539934627-EXP-2013-08-31-a-i0228@0:6340634Banana, Feindouno et\\nFeltscher à Lausanne\\nFO...Banana, Feindouno et Feltscher à Lausanne[27][local-duma-_liThC5Z][{'id': 'tr-nobp-all-v01-c51539934627'}]False6342013-08-31T00:00:00+00:00[1446,1166,1928,2217]EXP-2013-08-31-a-i0228tr-nobp-all-v01-c5153993462720100.000EXPEXP-2013-08-31-a
c117193-EXP-2008-07-10-a-i0330@0:8150815Deschansonsàenfairetrémousserplusd’un\\nFocus\\n...Deschansonsàenfairetrémousserplusd’un[31][local-la-cVcTVCC4-nnaiNiEv][{'id': 'tr-nobp-all-v01-c117193'}, {'id': 'tr...False8152008-07-10T00:00:00+00:00[890,607,805,585]EXP-2008-07-10-a-i0330tr-nobp-all-v01-c11719320100.000EXPEXP-2008-07-10-a
c299325-EXP-1967-06-22-a-i0052@1833:193418331934Colonies de vacances », « Juanita\\nBanana », «...Le «commandant» Haag emmènera le cortège des v...[3][local-la-cVcTVCC4-nnaiNiEv, local-An-RPAyTHnn...[{'id': 'tr-nobp-all-v01-c299324'}, {'id': 'tr...False1011967-06-22T00:00:00+00:00[1815,1703,358,88]EXP-1967-06-22-a-i0052tr-nobp-all-v01-c299325210234.375EXPEXP-1967-06-22-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\", \n", + " newspaper_id=OR(\"EXP\", \"GDL\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Collection" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(collection_id=\"12312312\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Front page" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 20 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c231928631691-LLE-1914-09-29-a-i0001@15035:152741503515274La « Panther » coulée\\nMilan , 28 teptembre .\\...LA GUERRE EUROPÉENNE[1][local-eb-FuR4RpIy, local-eb-3rEiI2S8, local-d...[{'id': 'tr-nobp-all-v01-c197568509353'}, {'id...True2391914-09-29T00:00:00+00:00[2577,3325,476,275]LLE-1914-09-29-a-i0001tr-nobp-all-v01-c2319286316912060.606061LLELLE-1914-09-29-a
c68719627685-EXP-1961-03-21-a-i0004@138:12591381259congolaise\\nLEOPOLDVILLE (AFP et VPI). — « D'a...Mobutu: «Il n est pus question de lâcher Mutud...[1][local-IIV_6APb-4hURA0iX][{'id': 'tr-nobp-all-v01-c68719627685'}]True11211961-03-21T00:00:00+00:00[775,3627,1365,1202]EXP-1961-03-21-a-i0004tr-nobp-all-v01-c687196276853053.658537EXPEXP-1961-03-21-a
c94489677052-LSE-1960-09-09-a-i0006@61:1077611077se plaint\\nà Bruxelles\\n» \"Z, 'îi’ÜL 'HT *\\nNe...Nouvelles médailles olympiques pour la Suisse ...[1][local-clsc-Q0ydTtHr, local-IIV_6APb-X0x8SwxS,...[{'id': 'tr-nobp-all-v01-c257698380769'}, {'id...True10161960-09-09T00:00:00+00:00[52,997,831,630]LSE-1960-09-09-a-i0006tr-nobp-all-v01-c944896770523064.800000LSELSE-1960-09-09-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\", \n", + " front_page=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Topic" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 33 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c117193-EXP-2008-07-10-a-i0330@0:8150815Deschansonsàenfairetrémousserplusd’un\\nFocus\\n...Deschansonsàenfairetrémousserplusd’un[31][local-la-cVcTVCC4-nnaiNiEv][{'id': 'tr-nobp-all-v01-c117193'}, {'id': 'tr...False8152008-07-10T00:00:00+00:00[890,607,805,585]EXP-2008-07-10-a-i0330tr-nobp-all-v01-c11719320100.000000EXPEXP-2008-07-10-a
c117193-IMP-2008-07-10-a-i0258@0:8150815Deschansonsàenfairetrémousserplusd’un\\nFocus\\n...Deschansonsàenfairetrémousserplusd’un[27][local-la-cVcTVCC4-nnaiNiEv][{'id': 'tr-nobp-all-v01-c117193'}, {'id': 'tr...False8152008-07-10T00:00:00+00:00[890,607,805,585]IMP-2008-07-10-a-i0258tr-nobp-all-v01-c11719320100.000000IMPIMP-2008-07-10-a
c17180190458-EXP-2008-07-07-a-i0118@403:6994036991. Faisaient la tournée des cours. 2. Province...MOTS CROISÉS N 1206[11][][{'id': 'tr-nobp-all-v01-c17180190457'}, {'id'...False2962008-07-07T00:00:00+00:00[57,2249,533,74]EXP-2008-07-07-a-i0118tr-nobp-all-v01-c171801904585119553.846154EXPEXP-2008-07-07-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\", \n", + " topic_id=OR(\"tm-fr-all-v2.0_tp07_fr\", \"tm-fr-all-v2.0_tp48_fr\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Language" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 13 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c8590352366-JDG-1990-03-14-a-i0145@141:632141632L-1526 Luxembourg-5, bd de ia Foire\\nRC. Luxem...NaN[20][][{'id': 'tr-nobp-all-v01-c8590352366'}]False4911990-03-14T00:00:00+00:00[418,3682,1570,913]JDG-1990-03-14-a-i0145tr-nobp-all-v01-c859035236630792918.84058JDGJDG-1990-03-14-a
c8590352366-JDG-1989-03-15-a-i0158@38:66138661FUND\\nSociété Anonyme d'Investissement\\nRegist...NaN[22][][{'id': 'tr-nobp-all-v01-c8590352366'}]False6231989-03-15T00:00:00+00:00[224,955,1158,843]JDG-1989-03-15-a-i0158tr-nobp-all-v01-c859035236630792918.84058JDGJDG-1989-03-15-a
c8590352366-JDG-1987-07-15-a-i0100@35:77135771Société Anonyme\\nRegistered Office : 2, boulev...NaN[16][][{'id': 'tr-nobp-all-v01-c8590352366'}]False7361987-07-15T00:00:00+00:00[1511,376,1189,792]JDG-1987-07-15-a-i0100tr-nobp-all-v01-c859035236630792918.84058JDGJDG-1987-07-15-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"luxembourg\", \n", + " language=OR(\"it\", \"en\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Country" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 3908 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c249108133968-IMP-2001-03-27-a-i0004@0:2740274En route vers\\nSchengen\\nSUISSE _.\\nEn dépit d...En route vers Schengen[1][][{'id': 'tr-nobp-all-v01-c249108133968'}]True2742001-03-27T00:00:00+00:00[2435,4461,551,791]IMP-2001-03-27-a-i0004tr-nobp-all-v01-c2491081339682097.297297IMPIMP-2001-03-27-a
c249108133968-EXP-2001-03-27-a-i0006@0:2700270En route vers\\nSchengen\\nSUISSE\\nEn dépit des ...En route vers Schengen[1][][{'id': 'tr-nobp-all-v01-c249108133968'}]True2702001-03-27T00:00:00+00:00[2400,4375,539,772]EXP-2001-03-27-a-i0006tr-nobp-all-v01-c2491081339682097.297297EXPEXP-2001-03-27-a
c8590241644-EXP-2005-04-02-a-i0127@64:31264312Schengen augmente l'efficacité de la police.\\n...NaN[15][][{'id': 'tr-nobp-all-v01-c8590241644'}]False2482005-04-02T00:00:00+00:00[2422,4812,991,303]EXP-2005-04-02-a-i0127tr-nobp-all-v01-c85902416446132.000000EXPEXP-2005-04-02-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"schengen\", \n", + " country=OR(\"FR\", \"CH\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entity mention" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 93 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c34360149524-EXP-2008-09-13-a-i0231@0:4960496Une première évaluation positive\\nKEYSTONE\\nSC...Une première évaluation positive[27][local-IIV_6APb-9J2N1eZG, local-duma-_liThC5Z][{'id': 'tr-nobp-all-v01-c34360149524'}]False4962008-09-13T00:00:00+00:00[311,241,1098,203]EXP-2008-09-13-a-i0231tr-nobp-all-v01-c3436014952420100.000000EXPEXP-2008-09-13-a
c60129931875-obermosel-1946-09-20-a-i0006@5970:639159706391Die Verwaltung der öf-\\nfentlichen Gebäude hat...Aus der Stâd Luxemburg, den 20. September 1946.[3][local-eb-BwavXVCj][{'id': 'tr-nobp-all-v01-c60129931875'}]False4211946-09-20T00:00:00+00:00[1814,1261,834,481]obermosel-1946-09-20-a-i0006tr-nobp-all-v01-c6012993187525146.153846obermoselobermosel-1946-09-20-a
c42949763205-GDL-1993-05-14-a-i0002@0:6540654Europe : collaborations indivisibles\\nEDITORIA...Europe: collaborations indivisibles[1][local-a0gi4Riu-WF6FqmwG, local-mr-q_1EtALV, l...[{'id': 'tr-nobp-all-v01-c42949763203'}, {'id'...True6541993-05-14T00:00:00+00:00[102,2792,1267,912]GDL-1993-05-14-a-i0002tr-nobp-all-v01-c4294976320520100.000000GDLGDL-1993-05-14-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"schengen\", \n", + " mention=OR(\"Belval\", \"Lausanne\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Entity by ID" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

FindTextReusePassages result

\n", + "
Contains 10 items (0 - 10) of 41 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
offsetStartoffsetEndcontenttitlepageNumberscollectionsconnectedClustersisFrontsizedatepageRegionsarticle.idtextReuseCluster.idtextReuseCluster.clusterSizetextReuseCluster.timeDifferenceDaytextReuseCluster.lexicalOverlapnewspaper.idissue.id
id
c128849280553-NZZ-1892-02-19-a-i0002@20029:213352002921335Schreckliche Seefahrt . Antwerpen ,\\n(>; v . O...NaN[2][local-T1DjhD1h-uNBjhkZe, local-aTgqy7LI-gcAEG...[{'id': 'tr-nobp-all-v01-c128849280553'}]False13061892-02-19T00:00:00+00:00[2927,2504,864,1040]NZZ-1892-02-19-a-i0002tr-nobp-all-v01-c1288492805532171.527778NZZNZZ-1892-02-19-a
c68719627685-EXP-1961-03-21-a-i0004@138:12591381259congolaise\\nLEOPOLDVILLE (AFP et VPI). — « D'a...Mobutu: «Il n est pus question de lâcher Mutud...[1][local-IIV_6APb-4hURA0iX][{'id': 'tr-nobp-all-v01-c68719627685'}]True11211961-03-21T00:00:00+00:00[775,3627,1365,1202]EXP-1961-03-21-a-i0004tr-nobp-all-v01-c687196276853053.658537EXPEXP-1961-03-21-a
c111669354290-GDL-1987-08-15-a-i0198@3130:351331303513Afin de financer un projet de télévision pirat...écouter voir[27][][{'id': 'tr-nobp-all-v01-c103079486133'}, {'id...False3831987-08-15T00:00:00+00:00[2717,4412,779,277]GDL-1987-08-15-a-i0198tr-nobp-all-v01-c1116693542903160.937500GDLGDL-1987-08-15-a
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.find(\n", + " text=\"banana\",\n", + " entity_id=\"aida-0001-54-Switzerland\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Text reuse passages facets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## newspaper" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 77 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uiditem.acronymitem.labelsitem.languagesitem.includeditem.nameitem.endYearitem.startYearitem.countArticlesitem.countIssuesitem.countPagesitem.deltaYearitem.propertiesitem.fetched
val
BDC175BDCBDCNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
BLB903BLBBLBNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
BNN7369BNNBNNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.clusters.facet(\"newspaper\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## daterange" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 59 items of 59 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
1875-01-01T00:00:00Z1
1885-01-01T00:00:00Z6
1886-01-01T00:00:00Z4
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"daterange\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## yearmonth" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 114 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
1875-041
1885-022
1885-084
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"yearmonth\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## year" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 59 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.refs.citem.refs.aitem.refs.m
val
187511875756087560873
1885618851114841114841361
1886418861263461263461442
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"year\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## connectedClusters" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 704 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
tr-nobp-all-v01-c1030792727341
tr-nobp-all-v01-c1030793800992
tr-nobp-all-v01-c1030793988112
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"connectedClusters\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## textReuseClusterSize" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 200 items of 200 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
2368
2520
5020
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"textReuseClusterSize\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## textReuseClusterLexicalOverlap" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 100 items of 100 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
02
11
20
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"textReuseClusterLexicalOverlap\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## textReuseClusterDayDelta" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 800 items of 800 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
0331
10011
2003
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"textReuseClusterDayDelta\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## textReuseCluster" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 190 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
tr-nobp-all-v01-c1030793800991
tr-nobp-all-v01-c1030793988112
tr-nobp-all-v01-c1030794161872
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"textReuseCluster\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## collection" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\n", + " \"collection\",\n", + " text=\"banana\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## topic" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 147 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uiditem.languageitem.communityitem.pagerankitem.degreeitem.xitem.yitem.relatedTopicsitem.countItemsitem.excerptitem.wordsitem.model
val
tm-de-all-v2.0_tp01_de10tm-de-all-v2.0_tp01_detm-de-all-v2.0_tp01_dede0000[]377965[{'w': 'new', 'p': 0.03594}, {'w': 'york', 'p'...[{'w': 'new', 'p': 0.03594}, {'w': 'york', 'p'...tm-de-all-v2.0
tm-de-all-v2.0_tp05_de1tm-de-all-v2.0_tp05_detm-de-all-v2.0_tp05_dede0000[]327863[{'w': 'antrag', 'p': 0.03065}, {'w': 'rat', '...[{'w': 'antrag', 'p': 0.03065}, {'w': 'rat', '...tm-de-all-v2.0
tm-de-all-v2.0_tp07_de4tm-de-all-v2.0_tp07_detm-de-all-v2.0_tp07_dede0000[]366370[{'w': 'arbeiter', 'p': 0.07288}, {'w': 'arbei...[{'w': 'arbeiter', 'p': 0.07288}, {'w': 'arbei...tm-de-all-v2.0
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\"topic\", text=\"banana\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## person" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 535 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uid
val
aida-0001-50-1967–68_Los_Angeles_Kings_season2aida-0001-50-1967–68_Los_Angeles_Kings_seasonaida-0001-50-1967–68_Los_Angeles_Kings_season
aida-0001-50-2003–04_San_Jose_Sharks_season2aida-0001-50-2003–04_San_Jose_Sharks_seasonaida-0001-50-2003–04_San_Jose_Sharks_season
aida-0001-50-2004–05_San_Antonio_Spurs_season4aida-0001-50-2004–05_San_Antonio_Spurs_seasonaida-0001-50-2004–05_San_Antonio_Spurs_season
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\"person\", text=\"banana\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## location" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 10 items (0 - 10) of 498 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuiditem.uid
val
aida-0001-54-2010_Qatar_motorcycle_Grand_Prix2aida-0001-54-2010_Qatar_motorcycle_Grand_Prixaida-0001-54-2010_Qatar_motorcycle_Grand_Prix
aida-0001-54-2010_Sony_Ericsson_Open2aida-0001-54-2010_Sony_Ericsson_Openaida-0001-54-2010_Sony_Ericsson_Open
aida-0001-54-ATI_Technologies4aida-0001-54-ATI_Technologiesaida-0001-54-ATI_Technologies
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\"location\", text=\"banana\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## nag" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 0 items of 0 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\"nag\", text=\"banana\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## language" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuid
val
de17de
fr348fr
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\"language\", text=\"banana\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## country" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Facet result

\n", + "
Contains 2 items of 2 total items.
\n", + "
\n", + "See this result in the Impresso App.\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
val
CH359
LU6
\n", + "
\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "impresso.text_reuse.passages.facet(\"country\", text=\"banana\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/notebooks/tools.ipynb b/examples/notebooks/tools.ipynb new file mode 100644 index 0000000..abc9eb2 --- /dev/null +++ b/examples/notebooks/tools.ipynb @@ -0,0 +1,158 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🎉 You are now connected to the Impresso API! 🎉\n", + "🔗 Using API: https://dev.impresso-project.ch/public-api\n" + ] + } + ], + "source": [ + "from impresso import connect\n", + "\n", + "impresso = connect()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Named entity recognition\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Ner result

\n", + "
Contains 19 items of 19 total items.
\n", + "
\n", + "

Data preview:

\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
typesurfaceFormisTypeNestedoffset.startoffset.endconfidence.nerconfidence.nel
id
0:36:pers:stacked-2-bert-medium-historic-multilingual-v3-base|mgenrepersJean-Baptiste Nicolas Robert SchumanFalse13793.8196.27
14:36:comp.name:stacked-2-bert-medium-historic-multilingual-v3-base|mgenrecomp.nameNicolas Robert SchumanFalse153750.58NaN
0:36:pers.ind:stacked-2-bert-medium-historic-multilingual-v3-base|mgenrepers.indJean-Baptiste Nicolas Robert SchumanFalse13785.4291.84
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "text = \"\"\"\n", + "Jean-Baptiste Nicolas Robert Schuman ( \n", + "29 June 1886 – 4 September 1963) was a Luxembourg-born French \n", + "statesman. Schuman was a Christian democratic (Popular \n", + "Republican Movement) political thinker and activist. \n", + "\"\"\"\n", + "result = impresso.tools.ner(\n", + " text=text\n", + ")\n", + "result" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/impresso/__init__.py b/impresso/__init__.py index 631f122..8df3b55 100644 --- a/impresso/__init__.py +++ b/impresso/__init__.py @@ -1,3 +1,12 @@ -__version__ = "0.1.0" - -from .echo import echo +from impresso.client import connect # noqa +from impresso.api_models import * # noqa +from impresso.structures import ( # noqa + TermSet, + AND, + OR, + DateRange, + Fuzzy, + Soft, + Exact, + Partial, +) diff --git a/impresso/api_client/__init__.py b/impresso/api_client/__init__.py new file mode 100644 index 0000000..090c918 --- /dev/null +++ b/impresso/api_client/__init__.py @@ -0,0 +1,8 @@ +"""A client library for accessing Impresso Public API""" + +from .client import AuthenticatedClient, Client + +__all__ = ( + "AuthenticatedClient", + "Client", +) diff --git a/impresso/api_client/api/__init__.py b/impresso/api_client/api/__init__.py new file mode 100644 index 0000000..81f9fa2 --- /dev/null +++ b/impresso/api_client/api/__init__.py @@ -0,0 +1 @@ +"""Contains methods for accessing the API""" diff --git a/impresso/api_client/api/articles/__init__.py b/impresso/api_client/api/articles/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/articles/find_articles.py b/impresso/api_client/api/articles/find_articles.py new file mode 100644 index 0000000..d207972 --- /dev/null +++ b/impresso/api_client/api/articles/find_articles.py @@ -0,0 +1,238 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.find_articles_order_by import FindArticlesOrderBy +from ...models.find_articles_resolve import FindArticlesResolve +from ...models.find_articles_response_200 import FindArticlesResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + resolve: Union[Unset, FindArticlesResolve] = UNSET, + order_by: Union[Unset, FindArticlesOrderBy] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_resolve: Union[Unset, str] = UNSET + if not isinstance(resolve, Unset): + json_resolve = resolve.value + + params["resolve"] = json_resolve + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/articles", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindArticlesResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindArticlesResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindArticlesResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + resolve: Union[Unset, FindArticlesResolve] = UNSET, + order_by: Union[Unset, FindArticlesOrderBy] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindArticlesResponse200]]: + """Find articles that match the given query + + Args: + resolve (Union[Unset, FindArticlesResolve]): + order_by (Union[Unset, FindArticlesOrderBy]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindArticlesResponse200]] + """ + + kwargs = _get_kwargs( + resolve=resolve, + order_by=order_by, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + resolve: Union[Unset, FindArticlesResolve] = UNSET, + order_by: Union[Unset, FindArticlesOrderBy] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindArticlesResponse200]]: + """Find articles that match the given query + + Args: + resolve (Union[Unset, FindArticlesResolve]): + order_by (Union[Unset, FindArticlesOrderBy]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindArticlesResponse200] + """ + + return sync_detailed( + client=client, + resolve=resolve, + order_by=order_by, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + resolve: Union[Unset, FindArticlesResolve] = UNSET, + order_by: Union[Unset, FindArticlesOrderBy] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindArticlesResponse200]]: + """Find articles that match the given query + + Args: + resolve (Union[Unset, FindArticlesResolve]): + order_by (Union[Unset, FindArticlesOrderBy]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindArticlesResponse200]] + """ + + kwargs = _get_kwargs( + resolve=resolve, + order_by=order_by, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + resolve: Union[Unset, FindArticlesResolve] = UNSET, + order_by: Union[Unset, FindArticlesOrderBy] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindArticlesResponse200]]: + """Find articles that match the given query + + Args: + resolve (Union[Unset, FindArticlesResolve]): + order_by (Union[Unset, FindArticlesOrderBy]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindArticlesResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + resolve=resolve, + order_by=order_by, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/articles/get_article.py b/impresso/api_client/api/articles/get_article.py new file mode 100644 index 0000000..17445d9 --- /dev/null +++ b/impresso/api_client/api/articles/get_article.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.article import Article +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + id: str, +) -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/articles/{id}", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Article, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = Article.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Article, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Article, Error]]: + """Get an article by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Article, Error]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Article, Error]]: + """Get an article by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Article, Error] + """ + + return sync_detailed( + id=id, + client=client, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Article, Error]]: + """Get an article by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Article, Error]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Article, Error]]: + """Get an article by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Article, Error] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + ) + ).parsed diff --git a/impresso/api_client/api/authentication/__init__.py b/impresso/api_client/api/authentication/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/authentication/authentication_issue_token.py b/impresso/api_client/api/authentication/authentication_issue_token.py new file mode 100644 index 0000000..42caae6 --- /dev/null +++ b/impresso/api_client/api/authentication/authentication_issue_token.py @@ -0,0 +1,169 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.authentication_create_request import AuthenticationCreateRequest +from ...models.authentication_response import AuthenticationResponse +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + *, + body: AuthenticationCreateRequest, +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "post", + "url": "/authentication", + } + + _body = body.to_dict() + + _kwargs["json"] = _body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[AuthenticationResponse, Error]]: + if response.status_code == HTTPStatus.CREATED: + response_201 = AuthenticationResponse.from_dict(response.json()) + + return response_201 + if response.status_code == HTTPStatus.BAD_REQUEST: + response_400 = Error.from_dict(response.json()) + + return response_400 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[AuthenticationResponse, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: Union[AuthenticatedClient, Client], + body: AuthenticationCreateRequest, +) -> Response[Union[AuthenticationResponse, Error]]: + """Authenticate user + + Args: + body (AuthenticationCreateRequest): Request body for the authentication endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[AuthenticationResponse, Error]] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: Union[AuthenticatedClient, Client], + body: AuthenticationCreateRequest, +) -> Optional[Union[AuthenticationResponse, Error]]: + """Authenticate user + + Args: + body (AuthenticationCreateRequest): Request body for the authentication endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[AuthenticationResponse, Error] + """ + + return sync_detailed( + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + *, + client: Union[AuthenticatedClient, Client], + body: AuthenticationCreateRequest, +) -> Response[Union[AuthenticationResponse, Error]]: + """Authenticate user + + Args: + body (AuthenticationCreateRequest): Request body for the authentication endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[AuthenticationResponse, Error]] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: Union[AuthenticatedClient, Client], + body: AuthenticationCreateRequest, +) -> Optional[Union[AuthenticationResponse, Error]]: + """Authenticate user + + Args: + body (AuthenticationCreateRequest): Request body for the authentication endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[AuthenticationResponse, Error] + """ + + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/impresso/api_client/api/collections/__init__.py b/impresso/api_client/api/collections/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/collections/create_collection.py b/impresso/api_client/api/collections/create_collection.py new file mode 100644 index 0000000..9508a8a --- /dev/null +++ b/impresso/api_client/api/collections/create_collection.py @@ -0,0 +1,181 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.collection import Collection +from ...models.error import Error +from ...models.new_collection import NewCollection +from ...types import Response + + +def _get_kwargs( + *, + body: NewCollection, +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "post", + "url": "/collections", + } + + _body = body.to_dict() + + _kwargs["json"] = _body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Collection, Error]]: + if response.status_code == HTTPStatus.CREATED: + response_201 = Collection.from_dict(response.json()) + + return response_201 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Collection, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Response[Union[Collection, Error]]: + """Create a new collection + + Args: + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Collection, Error]] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Optional[Union[Collection, Error]]: + """Create a new collection + + Args: + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Collection, Error] + """ + + return sync_detailed( + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Response[Union[Collection, Error]]: + """Create a new collection + + Args: + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Collection, Error]] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Optional[Union[Collection, Error]]: + """Create a new collection + + Args: + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Collection, Error] + """ + + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/impresso/api_client/api/collections/find_collections.py b/impresso/api_client/api/collections/find_collections.py new file mode 100644 index 0000000..ae61de3 --- /dev/null +++ b/impresso/api_client/api/collections/find_collections.py @@ -0,0 +1,245 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.find_collections_order_by import FindCollectionsOrderBy +from ...models.find_collections_response_200 import FindCollectionsResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + uids: Union[Unset, str] = UNSET, + q: Union[Unset, str] = UNSET, + order_by: FindCollectionsOrderBy = FindCollectionsOrderBy.VALUE_0, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + params["uids"] = uids + + params["q"] = q + + json_order_by = order_by.value + params["order_by"] = json_order_by + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/collections", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindCollectionsResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindCollectionsResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindCollectionsResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + uids: Union[Unset, str] = UNSET, + q: Union[Unset, str] = UNSET, + order_by: FindCollectionsOrderBy = FindCollectionsOrderBy.VALUE_0, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindCollectionsResponse200]]: + """Find collections + + Args: + uids (Union[Unset, str]): + q (Union[Unset, str]): + order_by (FindCollectionsOrderBy): Default: FindCollectionsOrderBy.VALUE_0. + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindCollectionsResponse200]] + """ + + kwargs = _get_kwargs( + uids=uids, + q=q, + order_by=order_by, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + uids: Union[Unset, str] = UNSET, + q: Union[Unset, str] = UNSET, + order_by: FindCollectionsOrderBy = FindCollectionsOrderBy.VALUE_0, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindCollectionsResponse200]]: + """Find collections + + Args: + uids (Union[Unset, str]): + q (Union[Unset, str]): + order_by (FindCollectionsOrderBy): Default: FindCollectionsOrderBy.VALUE_0. + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindCollectionsResponse200] + """ + + return sync_detailed( + client=client, + uids=uids, + q=q, + order_by=order_by, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + uids: Union[Unset, str] = UNSET, + q: Union[Unset, str] = UNSET, + order_by: FindCollectionsOrderBy = FindCollectionsOrderBy.VALUE_0, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindCollectionsResponse200]]: + """Find collections + + Args: + uids (Union[Unset, str]): + q (Union[Unset, str]): + order_by (FindCollectionsOrderBy): Default: FindCollectionsOrderBy.VALUE_0. + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindCollectionsResponse200]] + """ + + kwargs = _get_kwargs( + uids=uids, + q=q, + order_by=order_by, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + uids: Union[Unset, str] = UNSET, + q: Union[Unset, str] = UNSET, + order_by: FindCollectionsOrderBy = FindCollectionsOrderBy.VALUE_0, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindCollectionsResponse200]]: + """Find collections + + Args: + uids (Union[Unset, str]): + q (Union[Unset, str]): + order_by (FindCollectionsOrderBy): Default: FindCollectionsOrderBy.VALUE_0. + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindCollectionsResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + uids=uids, + q=q, + order_by=order_by, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/collections/get_collection.py b/impresso/api_client/api/collections/get_collection.py new file mode 100644 index 0000000..c5d50c5 --- /dev/null +++ b/impresso/api_client/api/collections/get_collection.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.collection import Collection +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + id: str, +) -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/collections/{id}", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Collection, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = Collection.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Collection, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Collection, Error]]: + """Get a collection by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Collection, Error]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Collection, Error]]: + """Get a collection by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Collection, Error] + """ + + return sync_detailed( + id=id, + client=client, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Collection, Error]]: + """Get a collection by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Collection, Error]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Collection, Error]]: + """Get a collection by its UID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Collection, Error] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + ) + ).parsed diff --git a/impresso/api_client/api/collections/patch_collections_collection_id_items.py b/impresso/api_client/api/collections/patch_collections_collection_id_items.py new file mode 100644 index 0000000..5a71e22 --- /dev/null +++ b/impresso/api_client/api/collections/patch_collections_collection_id_items.py @@ -0,0 +1,198 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.collectable_items_updated_response import CollectableItemsUpdatedResponse +from ...models.error import Error +from ...models.update_collectable_items import UpdateCollectableItems +from ...types import Response + + +def _get_kwargs( + collection_id: str, + *, + body: UpdateCollectableItems, +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "patch", + "url": f"/collections/{collection_id}/items", + } + + _body = body.to_dict() + + _kwargs["json"] = _body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[CollectableItemsUpdatedResponse, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = CollectableItemsUpdatedResponse.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[CollectableItemsUpdatedResponse, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + collection_id: str, + *, + client: AuthenticatedClient, + body: UpdateCollectableItems, +) -> Response[Union[CollectableItemsUpdatedResponse, Error]]: + """Update items in the collection + + Args: + collection_id (str): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[CollectableItemsUpdatedResponse, Error]] + """ + + kwargs = _get_kwargs( + collection_id=collection_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + collection_id: str, + *, + client: AuthenticatedClient, + body: UpdateCollectableItems, +) -> Optional[Union[CollectableItemsUpdatedResponse, Error]]: + """Update items in the collection + + Args: + collection_id (str): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[CollectableItemsUpdatedResponse, Error] + """ + + return sync_detailed( + collection_id=collection_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + collection_id: str, + *, + client: AuthenticatedClient, + body: UpdateCollectableItems, +) -> Response[Union[CollectableItemsUpdatedResponse, Error]]: + """Update items in the collection + + Args: + collection_id (str): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[CollectableItemsUpdatedResponse, Error]] + """ + + kwargs = _get_kwargs( + collection_id=collection_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + collection_id: str, + *, + client: AuthenticatedClient, + body: UpdateCollectableItems, +) -> Optional[Union[CollectableItemsUpdatedResponse, Error]]: + """Update items in the collection + + Args: + collection_id (str): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[CollectableItemsUpdatedResponse, Error] + """ + + return ( + await asyncio_detailed( + collection_id=collection_id, + client=client, + body=body, + ) + ).parsed diff --git a/impresso/api_client/api/collections/remove_collection.py b/impresso/api_client/api/collections/remove_collection.py new file mode 100644 index 0000000..a7dca0a --- /dev/null +++ b/impresso/api_client/api/collections/remove_collection.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.remove_collection_response import RemoveCollectionResponse +from ...types import Response + + +def _get_kwargs( + id: str, +) -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "delete", + "url": f"/collections/{id}", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, RemoveCollectionResponse]]: + if response.status_code == HTTPStatus.OK: + response_200 = RemoveCollectionResponse.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, RemoveCollectionResponse]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Error, RemoveCollectionResponse]]: + """Remove a collection + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, RemoveCollectionResponse]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Error, RemoveCollectionResponse]]: + """Remove a collection + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, RemoveCollectionResponse] + """ + + return sync_detailed( + id=id, + client=client, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Error, RemoveCollectionResponse]]: + """Remove a collection + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, RemoveCollectionResponse]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Error, RemoveCollectionResponse]]: + """Remove a collection + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, RemoveCollectionResponse] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + ) + ).parsed diff --git a/impresso/api_client/api/collections/update_collection.py b/impresso/api_client/api/collections/update_collection.py new file mode 100644 index 0000000..8307186 --- /dev/null +++ b/impresso/api_client/api/collections/update_collection.py @@ -0,0 +1,198 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.collection import Collection +from ...models.error import Error +from ...models.new_collection import NewCollection +from ...types import Response + + +def _get_kwargs( + id: str, + *, + body: NewCollection, +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "patch", + "url": f"/collections/{id}", + } + + _body = body.to_dict() + + _kwargs["json"] = _body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Collection, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = Collection.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Collection, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Response[Union[Collection, Error]]: + """Update a collection + + Args: + id (str): + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Collection, Error]] + """ + + kwargs = _get_kwargs( + id=id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Optional[Union[Collection, Error]]: + """Update a collection + + Args: + id (str): + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Collection, Error] + """ + + return sync_detailed( + id=id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Response[Union[Collection, Error]]: + """Update a collection + + Args: + id (str): + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Collection, Error]] + """ + + kwargs = _get_kwargs( + id=id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, + body: NewCollection, +) -> Optional[Union[Collection, Error]]: + """Update a collection + + Args: + id (str): + body (NewCollection): Create new collection request + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Collection, Error] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + body=body, + ) + ).parsed diff --git a/impresso/api_client/api/entities/__init__.py b/impresso/api_client/api/entities/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/entities/find_entities.py b/impresso/api_client/api/entities/find_entities.py new file mode 100644 index 0000000..7744308 --- /dev/null +++ b/impresso/api_client/api/entities/find_entities.py @@ -0,0 +1,275 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.find_entities_order_by import FindEntitiesOrderBy +from ...models.find_entities_response_200 import FindEntitiesResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + q: Union[Unset, str] = UNSET, + resolve: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindEntitiesOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + params["q"] = q + + params["resolve"] = resolve + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/entities", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindEntitiesResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindEntitiesResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindEntitiesResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + resolve: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindEntitiesOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindEntitiesResponse200]]: + """Find entities that match the given query + + Args: + q (Union[Unset, str]): + resolve (Union[Unset, bool]): + order_by (Union[Unset, FindEntitiesOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindEntitiesResponse200]] + """ + + kwargs = _get_kwargs( + q=q, + resolve=resolve, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + resolve: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindEntitiesOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindEntitiesResponse200]]: + """Find entities that match the given query + + Args: + q (Union[Unset, str]): + resolve (Union[Unset, bool]): + order_by (Union[Unset, FindEntitiesOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindEntitiesResponse200] + """ + + return sync_detailed( + client=client, + q=q, + resolve=resolve, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + resolve: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindEntitiesOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindEntitiesResponse200]]: + """Find entities that match the given query + + Args: + q (Union[Unset, str]): + resolve (Union[Unset, bool]): + order_by (Union[Unset, FindEntitiesOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindEntitiesResponse200]] + """ + + kwargs = _get_kwargs( + q=q, + resolve=resolve, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + resolve: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindEntitiesOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindEntitiesResponse200]]: + """Find entities that match the given query + + Args: + q (Union[Unset, str]): + resolve (Union[Unset, bool]): + order_by (Union[Unset, FindEntitiesOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindEntitiesResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + q=q, + resolve=resolve, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/entities/get_entity.py b/impresso/api_client/api/entities/get_entity.py new file mode 100644 index 0000000..1c939ef --- /dev/null +++ b/impresso/api_client/api/entities/get_entity.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.entity_details import EntityDetails +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + id: str, +) -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/entities/{id}", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[EntityDetails, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = EntityDetails.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[EntityDetails, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[EntityDetails, Error]]: + """Get an entity by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[EntityDetails, Error]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[EntityDetails, Error]]: + """Get an entity by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[EntityDetails, Error] + """ + + return sync_detailed( + id=id, + client=client, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[EntityDetails, Error]]: + """Get an entity by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[EntityDetails, Error]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[EntityDetails, Error]]: + """Get an entity by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[EntityDetails, Error] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + ) + ).parsed diff --git a/impresso/api_client/api/newspapers/__init__.py b/impresso/api_client/api/newspapers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/newspapers/find_newspapers.py b/impresso/api_client/api/newspapers/find_newspapers.py new file mode 100644 index 0000000..4b2d001 --- /dev/null +++ b/impresso/api_client/api/newspapers/find_newspapers.py @@ -0,0 +1,263 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.find_newspapers_order_by import FindNewspapersOrderBy +from ...models.find_newspapers_response_200 import FindNewspapersResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + included_only: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindNewspapersOrderBy] = UNSET, + faster: Union[Unset, bool] = UNSET, + q: Union[Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + params["includedOnly"] = included_only + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + params["faster"] = faster + + params["q"] = q + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/newspapers", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindNewspapersResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindNewspapersResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindNewspapersResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + included_only: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindNewspapersOrderBy] = UNSET, + faster: Union[Unset, bool] = UNSET, + q: Union[Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindNewspapersResponse200]]: + """Find newspapers that match the given query + + Args: + included_only (Union[Unset, bool]): + order_by (Union[Unset, FindNewspapersOrderBy]): + faster (Union[Unset, bool]): + q (Union[Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindNewspapersResponse200]] + """ + + kwargs = _get_kwargs( + included_only=included_only, + order_by=order_by, + faster=faster, + q=q, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + included_only: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindNewspapersOrderBy] = UNSET, + faster: Union[Unset, bool] = UNSET, + q: Union[Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindNewspapersResponse200]]: + """Find newspapers that match the given query + + Args: + included_only (Union[Unset, bool]): + order_by (Union[Unset, FindNewspapersOrderBy]): + faster (Union[Unset, bool]): + q (Union[Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindNewspapersResponse200] + """ + + return sync_detailed( + client=client, + included_only=included_only, + order_by=order_by, + faster=faster, + q=q, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + included_only: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindNewspapersOrderBy] = UNSET, + faster: Union[Unset, bool] = UNSET, + q: Union[Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindNewspapersResponse200]]: + """Find newspapers that match the given query + + Args: + included_only (Union[Unset, bool]): + order_by (Union[Unset, FindNewspapersOrderBy]): + faster (Union[Unset, bool]): + q (Union[Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindNewspapersResponse200]] + """ + + kwargs = _get_kwargs( + included_only=included_only, + order_by=order_by, + faster=faster, + q=q, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + included_only: Union[Unset, bool] = UNSET, + order_by: Union[Unset, FindNewspapersOrderBy] = UNSET, + faster: Union[Unset, bool] = UNSET, + q: Union[Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindNewspapersResponse200]]: + """Find newspapers that match the given query + + Args: + included_only (Union[Unset, bool]): + order_by (Union[Unset, FindNewspapersOrderBy]): + faster (Union[Unset, bool]): + q (Union[Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindNewspapersResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + included_only=included_only, + order_by=order_by, + faster=faster, + q=q, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/newspapers/get_newspaper.py b/impresso/api_client/api/newspapers/get_newspaper.py new file mode 100644 index 0000000..4ac1fe9 --- /dev/null +++ b/impresso/api_client/api/newspapers/get_newspaper.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.newspaper import Newspaper +from ...types import Response + + +def _get_kwargs( + id: str, +) -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/newspapers/{id}", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, Newspaper]]: + if response.status_code == HTTPStatus.OK: + response_200 = Newspaper.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, Newspaper]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Error, Newspaper]]: + """Get a newspaper by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, Newspaper]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Error, Newspaper]]: + """Get a newspaper by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, Newspaper] + """ + + return sync_detailed( + id=id, + client=client, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Error, Newspaper]]: + """Get a newspaper by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, Newspaper]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Error, Newspaper]]: + """Get a newspaper by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, Newspaper] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + ) + ).parsed diff --git a/impresso/api_client/api/not_used/__init__.py b/impresso/api_client/api/not_used/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/not_used/patch_collections_collection_id_items_id.py b/impresso/api_client/api/not_used/patch_collections_collection_id_items_id.py new file mode 100644 index 0000000..ef4b378 --- /dev/null +++ b/impresso/api_client/api/not_used/patch_collections_collection_id_items_id.py @@ -0,0 +1,211 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.collectable_items_updated_response import CollectableItemsUpdatedResponse +from ...models.error import Error +from ...models.update_collectable_items import UpdateCollectableItems +from ...types import Response + + +def _get_kwargs( + collection_id: str, + id: int, + *, + body: UpdateCollectableItems, +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "patch", + "url": f"/collections/{collection_id}/items/{id}", + } + + _body = body.to_dict() + + _kwargs["json"] = _body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[CollectableItemsUpdatedResponse, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = CollectableItemsUpdatedResponse.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[CollectableItemsUpdatedResponse, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + collection_id: str, + id: int, + *, + client: Union[AuthenticatedClient, Client], + body: UpdateCollectableItems, +) -> Response[Union[CollectableItemsUpdatedResponse, Error]]: + """Updates the resource identified by id using data. + + Args: + collection_id (str): + id (int): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[CollectableItemsUpdatedResponse, Error]] + """ + + kwargs = _get_kwargs( + collection_id=collection_id, + id=id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + collection_id: str, + id: int, + *, + client: Union[AuthenticatedClient, Client], + body: UpdateCollectableItems, +) -> Optional[Union[CollectableItemsUpdatedResponse, Error]]: + """Updates the resource identified by id using data. + + Args: + collection_id (str): + id (int): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[CollectableItemsUpdatedResponse, Error] + """ + + return sync_detailed( + collection_id=collection_id, + id=id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + collection_id: str, + id: int, + *, + client: Union[AuthenticatedClient, Client], + body: UpdateCollectableItems, +) -> Response[Union[CollectableItemsUpdatedResponse, Error]]: + """Updates the resource identified by id using data. + + Args: + collection_id (str): + id (int): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[CollectableItemsUpdatedResponse, Error]] + """ + + kwargs = _get_kwargs( + collection_id=collection_id, + id=id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + collection_id: str, + id: int, + *, + client: Union[AuthenticatedClient, Client], + body: UpdateCollectableItems, +) -> Optional[Union[CollectableItemsUpdatedResponse, Error]]: + """Updates the resource identified by id using data. + + Args: + collection_id (str): + id (int): + body (UpdateCollectableItems): Request to update collectible items in a collection + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[CollectableItemsUpdatedResponse, Error] + """ + + return ( + await asyncio_detailed( + collection_id=collection_id, + id=id, + client=client, + body=body, + ) + ).parsed diff --git a/impresso/api_client/api/search/__init__.py b/impresso/api_client/api/search/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/search/search.py b/impresso/api_client/api/search/search.py new file mode 100644 index 0000000..c56c78e --- /dev/null +++ b/impresso/api_client/api/search/search.py @@ -0,0 +1,297 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.search_facets import SearchFacets +from ...models.search_group_by import SearchGroupBy +from ...models.search_order_by import SearchOrderBy +from ...models.search_response_200 import SearchResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + q: Union[Unset, str] = UNSET, + group_by: SearchGroupBy = SearchGroupBy.ARTICLES, + order_by: Union[Unset, SearchOrderBy] = UNSET, + facets: Union[Unset, SearchFacets] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + params["q"] = q + + json_group_by = group_by.value + params["group_by"] = json_group_by + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_facets: Union[Unset, str] = UNSET + if not isinstance(facets, Unset): + json_facets = facets.value + + params["facets"] = json_facets + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/search", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, SearchResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = SearchResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, SearchResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + group_by: SearchGroupBy = SearchGroupBy.ARTICLES, + order_by: Union[Unset, SearchOrderBy] = UNSET, + facets: Union[Unset, SearchFacets] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchResponse200]]: + """Find articles that match the given query + + Args: + q (Union[Unset, str]): + group_by (SearchGroupBy): Default: SearchGroupBy.ARTICLES. + order_by (Union[Unset, SearchOrderBy]): + facets (Union[Unset, SearchFacets]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchResponse200]] + """ + + kwargs = _get_kwargs( + q=q, + group_by=group_by, + order_by=order_by, + facets=facets, + filters=filters, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + group_by: SearchGroupBy = SearchGroupBy.ARTICLES, + order_by: Union[Unset, SearchOrderBy] = UNSET, + facets: Union[Unset, SearchFacets] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchResponse200]]: + """Find articles that match the given query + + Args: + q (Union[Unset, str]): + group_by (SearchGroupBy): Default: SearchGroupBy.ARTICLES. + order_by (Union[Unset, SearchOrderBy]): + facets (Union[Unset, SearchFacets]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchResponse200] + """ + + return sync_detailed( + client=client, + q=q, + group_by=group_by, + order_by=order_by, + facets=facets, + filters=filters, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + group_by: SearchGroupBy = SearchGroupBy.ARTICLES, + order_by: Union[Unset, SearchOrderBy] = UNSET, + facets: Union[Unset, SearchFacets] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchResponse200]]: + """Find articles that match the given query + + Args: + q (Union[Unset, str]): + group_by (SearchGroupBy): Default: SearchGroupBy.ARTICLES. + order_by (Union[Unset, SearchOrderBy]): + facets (Union[Unset, SearchFacets]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchResponse200]] + """ + + kwargs = _get_kwargs( + q=q, + group_by=group_by, + order_by=order_by, + facets=facets, + filters=filters, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + q: Union[Unset, str] = UNSET, + group_by: SearchGroupBy = SearchGroupBy.ARTICLES, + order_by: Union[Unset, SearchOrderBy] = UNSET, + facets: Union[Unset, SearchFacets] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchResponse200]]: + """Find articles that match the given query + + Args: + q (Union[Unset, str]): + group_by (SearchGroupBy): Default: SearchGroupBy.ARTICLES. + order_by (Union[Unset, SearchOrderBy]): + facets (Union[Unset, SearchFacets]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + q=q, + group_by=group_by, + order_by=order_by, + facets=facets, + filters=filters, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/search_facets/__init__.py b/impresso/api_client/api/search_facets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/search_facets/find_search_facets.py b/impresso/api_client/api/search_facets/find_search_facets.py new file mode 100644 index 0000000..60a8c1b --- /dev/null +++ b/impresso/api_client/api/search_facets/find_search_facets.py @@ -0,0 +1,351 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.find_search_facets_facets_item import FindSearchFacetsFacetsItem +from ...models.find_search_facets_group_by import FindSearchFacetsGroupBy +from ...models.find_search_facets_order_by import FindSearchFacetsOrderBy +from ...models.find_search_facets_range_include import FindSearchFacetsRangeInclude +from ...models.find_search_facets_response_200 import FindSearchFacetsResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + facets: List[FindSearchFacetsFacetsItem], + order_by: Union[Unset, FindSearchFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindSearchFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindSearchFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_facets = [] + for facets_item_data in facets: + facets_item = facets_item_data.value + json_facets.append(facets_item) + + params["facets"] = json_facets + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["range_start"] = range_start + + params["range_end"] = range_end + + params["range_gap"] = range_gap + + json_range_include: Union[Unset, str] = UNSET + if not isinstance(range_include, Unset): + json_range_include = range_include.value + + params["range_include"] = json_range_include + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/search-facets/search", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindSearchFacetsResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindSearchFacetsResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindSearchFacetsResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + facets: List[FindSearchFacetsFacetsItem], + order_by: Union[Unset, FindSearchFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindSearchFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindSearchFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindSearchFacetsResponse200]]: + """Get mutliple search index facets + + Args: + facets (List[FindSearchFacetsFacetsItem]): + order_by (Union[Unset, FindSearchFacetsOrderBy]): + group_by (Union[Unset, FindSearchFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindSearchFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindSearchFacetsResponse200]] + """ + + kwargs = _get_kwargs( + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + facets: List[FindSearchFacetsFacetsItem], + order_by: Union[Unset, FindSearchFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindSearchFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindSearchFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindSearchFacetsResponse200]]: + """Get mutliple search index facets + + Args: + facets (List[FindSearchFacetsFacetsItem]): + order_by (Union[Unset, FindSearchFacetsOrderBy]): + group_by (Union[Unset, FindSearchFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindSearchFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindSearchFacetsResponse200] + """ + + return sync_detailed( + client=client, + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + facets: List[FindSearchFacetsFacetsItem], + order_by: Union[Unset, FindSearchFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindSearchFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindSearchFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindSearchFacetsResponse200]]: + """Get mutliple search index facets + + Args: + facets (List[FindSearchFacetsFacetsItem]): + order_by (Union[Unset, FindSearchFacetsOrderBy]): + group_by (Union[Unset, FindSearchFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindSearchFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindSearchFacetsResponse200]] + """ + + kwargs = _get_kwargs( + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + facets: List[FindSearchFacetsFacetsItem], + order_by: Union[Unset, FindSearchFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindSearchFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindSearchFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindSearchFacetsResponse200]]: + """Get mutliple search index facets + + Args: + facets (List[FindSearchFacetsFacetsItem]): + order_by (Union[Unset, FindSearchFacetsOrderBy]): + group_by (Union[Unset, FindSearchFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindSearchFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindSearchFacetsResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/search_facets/find_tr_clusters_facets.py b/impresso/api_client/api/search_facets/find_tr_clusters_facets.py new file mode 100644 index 0000000..c039f80 --- /dev/null +++ b/impresso/api_client/api/search_facets/find_tr_clusters_facets.py @@ -0,0 +1,351 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.find_tr_clusters_facets_facets_item import FindTrClustersFacetsFacetsItem +from ...models.find_tr_clusters_facets_group_by import FindTrClustersFacetsGroupBy +from ...models.find_tr_clusters_facets_order_by import FindTrClustersFacetsOrderBy +from ...models.find_tr_clusters_facets_range_include import FindTrClustersFacetsRangeInclude +from ...models.find_tr_clusters_facets_response_200 import FindTrClustersFacetsResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + facets: List[FindTrClustersFacetsFacetsItem], + order_by: Union[Unset, FindTrClustersFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrClustersFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrClustersFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_facets = [] + for facets_item_data in facets: + facets_item = facets_item_data.value + json_facets.append(facets_item) + + params["facets"] = json_facets + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["range_start"] = range_start + + params["range_end"] = range_end + + params["range_gap"] = range_gap + + json_range_include: Union[Unset, str] = UNSET + if not isinstance(range_include, Unset): + json_range_include = range_include.value + + params["range_include"] = json_range_include + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/search-facets/tr-clusters", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindTrClustersFacetsResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindTrClustersFacetsResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindTrClustersFacetsResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + facets: List[FindTrClustersFacetsFacetsItem], + order_by: Union[Unset, FindTrClustersFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrClustersFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrClustersFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTrClustersFacetsResponse200]]: + """Get mutliple text reuse clusters index facets + + Args: + facets (List[FindTrClustersFacetsFacetsItem]): + order_by (Union[Unset, FindTrClustersFacetsOrderBy]): + group_by (Union[Unset, FindTrClustersFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrClustersFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTrClustersFacetsResponse200]] + """ + + kwargs = _get_kwargs( + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + facets: List[FindTrClustersFacetsFacetsItem], + order_by: Union[Unset, FindTrClustersFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrClustersFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrClustersFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTrClustersFacetsResponse200]]: + """Get mutliple text reuse clusters index facets + + Args: + facets (List[FindTrClustersFacetsFacetsItem]): + order_by (Union[Unset, FindTrClustersFacetsOrderBy]): + group_by (Union[Unset, FindTrClustersFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrClustersFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTrClustersFacetsResponse200] + """ + + return sync_detailed( + client=client, + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + facets: List[FindTrClustersFacetsFacetsItem], + order_by: Union[Unset, FindTrClustersFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrClustersFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrClustersFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTrClustersFacetsResponse200]]: + """Get mutliple text reuse clusters index facets + + Args: + facets (List[FindTrClustersFacetsFacetsItem]): + order_by (Union[Unset, FindTrClustersFacetsOrderBy]): + group_by (Union[Unset, FindTrClustersFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrClustersFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTrClustersFacetsResponse200]] + """ + + kwargs = _get_kwargs( + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + facets: List[FindTrClustersFacetsFacetsItem], + order_by: Union[Unset, FindTrClustersFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrClustersFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrClustersFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTrClustersFacetsResponse200]]: + """Get mutliple text reuse clusters index facets + + Args: + facets (List[FindTrClustersFacetsFacetsItem]): + order_by (Union[Unset, FindTrClustersFacetsOrderBy]): + group_by (Union[Unset, FindTrClustersFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrClustersFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTrClustersFacetsResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/search_facets/find_tr_passages_facets.py b/impresso/api_client/api/search_facets/find_tr_passages_facets.py new file mode 100644 index 0000000..30d8161 --- /dev/null +++ b/impresso/api_client/api/search_facets/find_tr_passages_facets.py @@ -0,0 +1,351 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.find_tr_passages_facets_facets_item import FindTrPassagesFacetsFacetsItem +from ...models.find_tr_passages_facets_group_by import FindTrPassagesFacetsGroupBy +from ...models.find_tr_passages_facets_order_by import FindTrPassagesFacetsOrderBy +from ...models.find_tr_passages_facets_range_include import FindTrPassagesFacetsRangeInclude +from ...models.find_tr_passages_facets_response_200 import FindTrPassagesFacetsResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + facets: List[FindTrPassagesFacetsFacetsItem], + order_by: Union[Unset, FindTrPassagesFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrPassagesFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrPassagesFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_facets = [] + for facets_item_data in facets: + facets_item = facets_item_data.value + json_facets.append(facets_item) + + params["facets"] = json_facets + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["range_start"] = range_start + + params["range_end"] = range_end + + params["range_gap"] = range_gap + + json_range_include: Union[Unset, str] = UNSET + if not isinstance(range_include, Unset): + json_range_include = range_include.value + + params["range_include"] = json_range_include + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/search-facets/tr-passages", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindTrPassagesFacetsResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindTrPassagesFacetsResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindTrPassagesFacetsResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + facets: List[FindTrPassagesFacetsFacetsItem], + order_by: Union[Unset, FindTrPassagesFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrPassagesFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrPassagesFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTrPassagesFacetsResponse200]]: + """Get mutliple text reuse passages index facets + + Args: + facets (List[FindTrPassagesFacetsFacetsItem]): + order_by (Union[Unset, FindTrPassagesFacetsOrderBy]): + group_by (Union[Unset, FindTrPassagesFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrPassagesFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTrPassagesFacetsResponse200]] + """ + + kwargs = _get_kwargs( + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + facets: List[FindTrPassagesFacetsFacetsItem], + order_by: Union[Unset, FindTrPassagesFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrPassagesFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrPassagesFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTrPassagesFacetsResponse200]]: + """Get mutliple text reuse passages index facets + + Args: + facets (List[FindTrPassagesFacetsFacetsItem]): + order_by (Union[Unset, FindTrPassagesFacetsOrderBy]): + group_by (Union[Unset, FindTrPassagesFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrPassagesFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTrPassagesFacetsResponse200] + """ + + return sync_detailed( + client=client, + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + facets: List[FindTrPassagesFacetsFacetsItem], + order_by: Union[Unset, FindTrPassagesFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrPassagesFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrPassagesFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTrPassagesFacetsResponse200]]: + """Get mutliple text reuse passages index facets + + Args: + facets (List[FindTrPassagesFacetsFacetsItem]): + order_by (Union[Unset, FindTrPassagesFacetsOrderBy]): + group_by (Union[Unset, FindTrPassagesFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrPassagesFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTrPassagesFacetsResponse200]] + """ + + kwargs = _get_kwargs( + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + facets: List[FindTrPassagesFacetsFacetsItem], + order_by: Union[Unset, FindTrPassagesFacetsOrderBy] = UNSET, + group_by: Union[Unset, FindTrPassagesFacetsGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, FindTrPassagesFacetsRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTrPassagesFacetsResponse200]]: + """Get mutliple text reuse passages index facets + + Args: + facets (List[FindTrPassagesFacetsFacetsItem]): + order_by (Union[Unset, FindTrPassagesFacetsOrderBy]): + group_by (Union[Unset, FindTrPassagesFacetsGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, FindTrPassagesFacetsRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTrPassagesFacetsResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + facets=facets, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/search_facets/get_search_facet.py b/impresso/api_client/api/search_facets/get_search_facet.py new file mode 100644 index 0000000..279d637 --- /dev/null +++ b/impresso/api_client/api/search_facets/get_search_facet.py @@ -0,0 +1,344 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.get_search_facet_group_by import GetSearchFacetGroupBy +from ...models.get_search_facet_id import GetSearchFacetId +from ...models.get_search_facet_order_by import GetSearchFacetOrderBy +from ...models.get_search_facet_range_include import GetSearchFacetRangeInclude +from ...models.search_facet import SearchFacet +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + id: GetSearchFacetId, + *, + order_by: Union[Unset, GetSearchFacetOrderBy] = UNSET, + group_by: Union[Unset, GetSearchFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetSearchFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["range_start"] = range_start + + params["range_end"] = range_end + + params["range_gap"] = range_gap + + json_range_include: Union[Unset, str] = UNSET + if not isinstance(range_include, Unset): + json_range_include = range_include.value + + params["range_include"] = json_range_include + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/search-facets/search/{id}", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, SearchFacet]]: + if response.status_code == HTTPStatus.OK: + response_200 = SearchFacet.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, SearchFacet]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: GetSearchFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetSearchFacetOrderBy] = UNSET, + group_by: Union[Unset, GetSearchFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetSearchFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchFacet]]: + """Get a single search index facet + + Args: + id (GetSearchFacetId): + order_by (Union[Unset, GetSearchFacetOrderBy]): + group_by (Union[Unset, GetSearchFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetSearchFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchFacet]] + """ + + kwargs = _get_kwargs( + id=id, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: GetSearchFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetSearchFacetOrderBy] = UNSET, + group_by: Union[Unset, GetSearchFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetSearchFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchFacet]]: + """Get a single search index facet + + Args: + id (GetSearchFacetId): + order_by (Union[Unset, GetSearchFacetOrderBy]): + group_by (Union[Unset, GetSearchFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetSearchFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchFacet] + """ + + return sync_detailed( + id=id, + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + id: GetSearchFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetSearchFacetOrderBy] = UNSET, + group_by: Union[Unset, GetSearchFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetSearchFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchFacet]]: + """Get a single search index facet + + Args: + id (GetSearchFacetId): + order_by (Union[Unset, GetSearchFacetOrderBy]): + group_by (Union[Unset, GetSearchFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetSearchFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchFacet]] + """ + + kwargs = _get_kwargs( + id=id, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: GetSearchFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetSearchFacetOrderBy] = UNSET, + group_by: Union[Unset, GetSearchFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetSearchFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchFacet]]: + """Get a single search index facet + + Args: + id (GetSearchFacetId): + order_by (Union[Unset, GetSearchFacetOrderBy]): + group_by (Union[Unset, GetSearchFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetSearchFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchFacet] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/search_facets/get_tr_clusters_facet.py b/impresso/api_client/api/search_facets/get_tr_clusters_facet.py new file mode 100644 index 0000000..205d74c --- /dev/null +++ b/impresso/api_client/api/search_facets/get_tr_clusters_facet.py @@ -0,0 +1,344 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.get_tr_clusters_facet_group_by import GetTrClustersFacetGroupBy +from ...models.get_tr_clusters_facet_id import GetTrClustersFacetId +from ...models.get_tr_clusters_facet_order_by import GetTrClustersFacetOrderBy +from ...models.get_tr_clusters_facet_range_include import GetTrClustersFacetRangeInclude +from ...models.search_facet import SearchFacet +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + id: GetTrClustersFacetId, + *, + order_by: Union[Unset, GetTrClustersFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrClustersFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrClustersFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["range_start"] = range_start + + params["range_end"] = range_end + + params["range_gap"] = range_gap + + json_range_include: Union[Unset, str] = UNSET + if not isinstance(range_include, Unset): + json_range_include = range_include.value + + params["range_include"] = json_range_include + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/search-facets/tr-clusters/{id}", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, SearchFacet]]: + if response.status_code == HTTPStatus.OK: + response_200 = SearchFacet.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, SearchFacet]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: GetTrClustersFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrClustersFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrClustersFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrClustersFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchFacet]]: + """Get a single text reuse clusters index facet + + Args: + id (GetTrClustersFacetId): + order_by (Union[Unset, GetTrClustersFacetOrderBy]): + group_by (Union[Unset, GetTrClustersFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrClustersFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchFacet]] + """ + + kwargs = _get_kwargs( + id=id, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: GetTrClustersFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrClustersFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrClustersFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrClustersFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchFacet]]: + """Get a single text reuse clusters index facet + + Args: + id (GetTrClustersFacetId): + order_by (Union[Unset, GetTrClustersFacetOrderBy]): + group_by (Union[Unset, GetTrClustersFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrClustersFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchFacet] + """ + + return sync_detailed( + id=id, + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + id: GetTrClustersFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrClustersFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrClustersFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrClustersFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchFacet]]: + """Get a single text reuse clusters index facet + + Args: + id (GetTrClustersFacetId): + order_by (Union[Unset, GetTrClustersFacetOrderBy]): + group_by (Union[Unset, GetTrClustersFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrClustersFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchFacet]] + """ + + kwargs = _get_kwargs( + id=id, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: GetTrClustersFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrClustersFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrClustersFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrClustersFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchFacet]]: + """Get a single text reuse clusters index facet + + Args: + id (GetTrClustersFacetId): + order_by (Union[Unset, GetTrClustersFacetOrderBy]): + group_by (Union[Unset, GetTrClustersFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrClustersFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchFacet] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/search_facets/get_tr_passages_facet.py b/impresso/api_client/api/search_facets/get_tr_passages_facet.py new file mode 100644 index 0000000..5ef16e7 --- /dev/null +++ b/impresso/api_client/api/search_facets/get_tr_passages_facet.py @@ -0,0 +1,344 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.get_tr_passages_facet_group_by import GetTrPassagesFacetGroupBy +from ...models.get_tr_passages_facet_id import GetTrPassagesFacetId +from ...models.get_tr_passages_facet_order_by import GetTrPassagesFacetOrderBy +from ...models.get_tr_passages_facet_range_include import GetTrPassagesFacetRangeInclude +from ...models.search_facet import SearchFacet +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + id: GetTrPassagesFacetId, + *, + order_by: Union[Unset, GetTrPassagesFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrPassagesFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrPassagesFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["range_start"] = range_start + + params["range_end"] = range_end + + params["range_gap"] = range_gap + + json_range_include: Union[Unset, str] = UNSET + if not isinstance(range_include, Unset): + json_range_include = range_include.value + + params["range_include"] = json_range_include + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/search-facets/tr-passages/{id}", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, SearchFacet]]: + if response.status_code == HTTPStatus.OK: + response_200 = SearchFacet.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, SearchFacet]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: GetTrPassagesFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrPassagesFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrPassagesFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrPassagesFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchFacet]]: + """Get a single text reuse passages index facet + + Args: + id (GetTrPassagesFacetId): + order_by (Union[Unset, GetTrPassagesFacetOrderBy]): + group_by (Union[Unset, GetTrPassagesFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrPassagesFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchFacet]] + """ + + kwargs = _get_kwargs( + id=id, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: GetTrPassagesFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrPassagesFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrPassagesFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrPassagesFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchFacet]]: + """Get a single text reuse passages index facet + + Args: + id (GetTrPassagesFacetId): + order_by (Union[Unset, GetTrPassagesFacetOrderBy]): + group_by (Union[Unset, GetTrPassagesFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrPassagesFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchFacet] + """ + + return sync_detailed( + id=id, + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + id: GetTrPassagesFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrPassagesFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrPassagesFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrPassagesFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, SearchFacet]]: + """Get a single text reuse passages index facet + + Args: + id (GetTrPassagesFacetId): + order_by (Union[Unset, GetTrPassagesFacetOrderBy]): + group_by (Union[Unset, GetTrPassagesFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrPassagesFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, SearchFacet]] + """ + + kwargs = _get_kwargs( + id=id, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: GetTrPassagesFacetId, + *, + client: AuthenticatedClient, + order_by: Union[Unset, GetTrPassagesFacetOrderBy] = UNSET, + group_by: Union[Unset, GetTrPassagesFacetGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + range_start: Union[Unset, float] = UNSET, + range_end: Union[Unset, float] = UNSET, + range_gap: Union[Unset, float] = UNSET, + range_include: Union[Unset, GetTrPassagesFacetRangeInclude] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, SearchFacet]]: + """Get a single text reuse passages index facet + + Args: + id (GetTrPassagesFacetId): + order_by (Union[Unset, GetTrPassagesFacetOrderBy]): + group_by (Union[Unset, GetTrPassagesFacetGroupBy]): + filters (Union[List['Filter'], Unset, str]): + range_start (Union[Unset, float]): + range_end (Union[Unset, float]): + range_gap (Union[Unset, float]): + range_include (Union[Unset, GetTrPassagesFacetRangeInclude]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, SearchFacet] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + range_start=range_start, + range_end=range_end, + range_gap=range_gap, + range_include=range_include, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/text_reuse_clusters/__init__.py b/impresso/api_client/api/text_reuse_clusters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/text_reuse_clusters/find_text_reuse_clusters.py b/impresso/api_client/api/text_reuse_clusters/find_text_reuse_clusters.py new file mode 100644 index 0000000..f903baa --- /dev/null +++ b/impresso/api_client/api/text_reuse_clusters/find_text_reuse_clusters.py @@ -0,0 +1,260 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.find_text_reuse_clusters_order_by import FindTextReuseClustersOrderBy +from ...models.find_text_reuse_clusters_response import FindTextReuseClustersResponse +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + text: Union[Unset, str] = UNSET, + order_by: Union[Unset, FindTextReuseClustersOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + params["text"] = text + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/text-reuse-clusters", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindTextReuseClustersResponse]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindTextReuseClustersResponse.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindTextReuseClustersResponse]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + text: Union[Unset, str] = UNSET, + order_by: Union[Unset, FindTextReuseClustersOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTextReuseClustersResponse]]: + """Find text reuse clusters + + Args: + text (Union[Unset, str]): + order_by (Union[Unset, FindTextReuseClustersOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTextReuseClustersResponse]] + """ + + kwargs = _get_kwargs( + text=text, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + text: Union[Unset, str] = UNSET, + order_by: Union[Unset, FindTextReuseClustersOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTextReuseClustersResponse]]: + """Find text reuse clusters + + Args: + text (Union[Unset, str]): + order_by (Union[Unset, FindTextReuseClustersOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTextReuseClustersResponse] + """ + + return sync_detailed( + client=client, + text=text, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + text: Union[Unset, str] = UNSET, + order_by: Union[Unset, FindTextReuseClustersOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTextReuseClustersResponse]]: + """Find text reuse clusters + + Args: + text (Union[Unset, str]): + order_by (Union[Unset, FindTextReuseClustersOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTextReuseClustersResponse]] + """ + + kwargs = _get_kwargs( + text=text, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + text: Union[Unset, str] = UNSET, + order_by: Union[Unset, FindTextReuseClustersOrderBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTextReuseClustersResponse]]: + """Find text reuse clusters + + Args: + text (Union[Unset, str]): + order_by (Union[Unset, FindTextReuseClustersOrderBy]): + filters (Union[List['Filter'], Unset, str]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTextReuseClustersResponse] + """ + + return ( + await asyncio_detailed( + client=client, + text=text, + order_by=order_by, + filters=filters, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/text_reuse_clusters/get_text_reuse_cluster.py b/impresso/api_client/api/text_reuse_clusters/get_text_reuse_cluster.py new file mode 100644 index 0000000..d9a5bec --- /dev/null +++ b/impresso/api_client/api/text_reuse_clusters/get_text_reuse_cluster.py @@ -0,0 +1,196 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.text_reuse_cluster_compound import TextReuseClusterCompound +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + id: str, + *, + include_details: Union[Unset, bool] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + params["include_details"] = include_details + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/text-reuse-clusters/{id}", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, TextReuseClusterCompound]]: + if response.status_code == HTTPStatus.OK: + response_200 = TextReuseClusterCompound.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, TextReuseClusterCompound]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, + include_details: Union[Unset, bool] = UNSET, +) -> Response[Union[Error, TextReuseClusterCompound]]: + """Get text reuse cluster by ID + + Args: + id (str): + include_details (Union[Unset, bool]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, TextReuseClusterCompound]] + """ + + kwargs = _get_kwargs( + id=id, + include_details=include_details, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, + include_details: Union[Unset, bool] = UNSET, +) -> Optional[Union[Error, TextReuseClusterCompound]]: + """Get text reuse cluster by ID + + Args: + id (str): + include_details (Union[Unset, bool]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, TextReuseClusterCompound] + """ + + return sync_detailed( + id=id, + client=client, + include_details=include_details, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, + include_details: Union[Unset, bool] = UNSET, +) -> Response[Union[Error, TextReuseClusterCompound]]: + """Get text reuse cluster by ID + + Args: + id (str): + include_details (Union[Unset, bool]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, TextReuseClusterCompound]] + """ + + kwargs = _get_kwargs( + id=id, + include_details=include_details, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, + include_details: Union[Unset, bool] = UNSET, +) -> Optional[Union[Error, TextReuseClusterCompound]]: + """Get text reuse cluster by ID + + Args: + id (str): + include_details (Union[Unset, bool]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, TextReuseClusterCompound] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + include_details=include_details, + ) + ).parsed diff --git a/impresso/api_client/api/text_reuse_passages/__init__.py b/impresso/api_client/api/text_reuse_passages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/text_reuse_passages/find_text_reuse_passages.py b/impresso/api_client/api/text_reuse_passages/find_text_reuse_passages.py new file mode 100644 index 0000000..91bf6b0 --- /dev/null +++ b/impresso/api_client/api/text_reuse_passages/find_text_reuse_passages.py @@ -0,0 +1,285 @@ +from http import HTTPStatus +from typing import Any, Dict, List, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.filter_ import Filter +from ...models.find_text_reuse_passages_addons import FindTextReusePassagesAddons +from ...models.find_text_reuse_passages_group_by import FindTextReusePassagesGroupBy +from ...models.find_text_reuse_passages_order_by import FindTextReusePassagesOrderBy +from ...models.find_text_reuse_passages_response_200 import FindTextReusePassagesResponse200 +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + order_by: Union[Unset, FindTextReusePassagesOrderBy] = UNSET, + group_by: Union[Unset, FindTextReusePassagesGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + addons: Union[Unset, "FindTextReusePassagesAddons"] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Dict[str, Any]: + params: Dict[str, Any] = {} + + json_order_by: Union[Unset, str] = UNSET + if not isinstance(order_by, Unset): + json_order_by = order_by.value + + params["order_by"] = json_order_by + + json_group_by: Union[Unset, str] = UNSET + if not isinstance(group_by, Unset): + json_group_by = group_by.value + + params["group_by"] = json_group_by + + json_filters: Union[List[Dict[str, Any]], Unset, str] + if isinstance(filters, Unset): + json_filters = UNSET + elif isinstance(filters, list): + json_filters = [] + for filters_type_1_item_data in filters: + filters_type_1_item = filters_type_1_item_data.to_dict() + json_filters.append(filters_type_1_item) + + else: + json_filters = filters + params["filters"] = json_filters + + json_addons: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(addons, Unset): + json_addons = addons.to_dict() + if not isinstance(json_addons, Unset): + params.update(json_addons) + + params["limit"] = limit + + params["offset"] = offset + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/text-reuse-passages", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, FindTextReusePassagesResponse200]]: + if response.status_code == HTTPStatus.OK: + response_200 = FindTextReusePassagesResponse200.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, FindTextReusePassagesResponse200]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + order_by: Union[Unset, FindTextReusePassagesOrderBy] = UNSET, + group_by: Union[Unset, FindTextReusePassagesGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + addons: Union[Unset, "FindTextReusePassagesAddons"] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTextReusePassagesResponse200]]: + """Find text reuse passages + + Args: + order_by (Union[Unset, FindTextReusePassagesOrderBy]): + group_by (Union[Unset, FindTextReusePassagesGroupBy]): + filters (Union[List['Filter'], Unset, str]): + addons (Union[Unset, FindTextReusePassagesAddons]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTextReusePassagesResponse200]] + """ + + kwargs = _get_kwargs( + order_by=order_by, + group_by=group_by, + filters=filters, + addons=addons, + limit=limit, + offset=offset, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + order_by: Union[Unset, FindTextReusePassagesOrderBy] = UNSET, + group_by: Union[Unset, FindTextReusePassagesGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + addons: Union[Unset, "FindTextReusePassagesAddons"] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTextReusePassagesResponse200]]: + """Find text reuse passages + + Args: + order_by (Union[Unset, FindTextReusePassagesOrderBy]): + group_by (Union[Unset, FindTextReusePassagesGroupBy]): + filters (Union[List['Filter'], Unset, str]): + addons (Union[Unset, FindTextReusePassagesAddons]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTextReusePassagesResponse200] + """ + + return sync_detailed( + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + addons=addons, + limit=limit, + offset=offset, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + order_by: Union[Unset, FindTextReusePassagesOrderBy] = UNSET, + group_by: Union[Unset, FindTextReusePassagesGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + addons: Union[Unset, "FindTextReusePassagesAddons"] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Response[Union[Error, FindTextReusePassagesResponse200]]: + """Find text reuse passages + + Args: + order_by (Union[Unset, FindTextReusePassagesOrderBy]): + group_by (Union[Unset, FindTextReusePassagesGroupBy]): + filters (Union[List['Filter'], Unset, str]): + addons (Union[Unset, FindTextReusePassagesAddons]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, FindTextReusePassagesResponse200]] + """ + + kwargs = _get_kwargs( + order_by=order_by, + group_by=group_by, + filters=filters, + addons=addons, + limit=limit, + offset=offset, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + order_by: Union[Unset, FindTextReusePassagesOrderBy] = UNSET, + group_by: Union[Unset, FindTextReusePassagesGroupBy] = UNSET, + filters: Union[List["Filter"], Unset, str] = UNSET, + addons: Union[Unset, "FindTextReusePassagesAddons"] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, +) -> Optional[Union[Error, FindTextReusePassagesResponse200]]: + """Find text reuse passages + + Args: + order_by (Union[Unset, FindTextReusePassagesOrderBy]): + group_by (Union[Unset, FindTextReusePassagesGroupBy]): + filters (Union[List['Filter'], Unset, str]): + addons (Union[Unset, FindTextReusePassagesAddons]): + limit (Union[Unset, int]): + offset (Union[Unset, int]): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, FindTextReusePassagesResponse200] + """ + + return ( + await asyncio_detailed( + client=client, + order_by=order_by, + group_by=group_by, + filters=filters, + addons=addons, + limit=limit, + offset=offset, + ) + ).parsed diff --git a/impresso/api_client/api/text_reuse_passages/get_text_reuse_passage.py b/impresso/api_client/api/text_reuse_passages/get_text_reuse_passage.py new file mode 100644 index 0000000..93b0291 --- /dev/null +++ b/impresso/api_client/api/text_reuse_passages/get_text_reuse_passage.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.text_reuse_passage import TextReusePassage +from ...types import Response + + +def _get_kwargs( + id: str, +) -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "get", + "url": f"/text-reuse-passages/{id}", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, TextReusePassage]]: + if response.status_code == HTTPStatus.OK: + response_200 = TextReusePassage.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, TextReusePassage]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Error, TextReusePassage]]: + """Get text reuse passage by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, TextReusePassage]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Error, TextReusePassage]]: + """Get text reuse passage by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, TextReusePassage] + """ + + return sync_detailed( + id=id, + client=client, + ).parsed + + +async def asyncio_detailed( + id: str, + *, + client: AuthenticatedClient, +) -> Response[Union[Error, TextReusePassage]]: + """Get text reuse passage by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, TextReusePassage]] + """ + + kwargs = _get_kwargs( + id=id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id: str, + *, + client: AuthenticatedClient, +) -> Optional[Union[Error, TextReusePassage]]: + """Get text reuse passage by ID + + Args: + id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, TextReusePassage] + """ + + return ( + await asyncio_detailed( + id=id, + client=client, + ) + ).parsed diff --git a/impresso/api_client/api/tools/__init__.py b/impresso/api_client/api/tools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/tools/perform_ner.py b/impresso/api_client/api/tools/perform_ner.py new file mode 100644 index 0000000..3783460 --- /dev/null +++ b/impresso/api_client/api/tools/perform_ner.py @@ -0,0 +1,181 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.impresso_named_entity_recognition_request import ImpressoNamedEntityRecognitionRequest +from ...models.impresso_named_entity_recognition_response import ImpressoNamedEntityRecognitionResponse +from ...types import Response + + +def _get_kwargs( + *, + body: ImpressoNamedEntityRecognitionRequest, +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "post", + "url": "/tools/ner", + } + + _body = body.to_dict() + + _kwargs["json"] = _body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[Error, ImpressoNamedEntityRecognitionResponse]]: + if response.status_code == HTTPStatus.CREATED: + response_201 = ImpressoNamedEntityRecognitionResponse.from_dict(response.json()) + + return response_201 + if response.status_code == HTTPStatus.UNAUTHORIZED: + response_401 = Error.from_dict(response.json()) + + return response_401 + if response.status_code == HTTPStatus.FORBIDDEN: + response_403 = Error.from_dict(response.json()) + + return response_403 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.TOO_MANY_REQUESTS: + response_429 = Error.from_dict(response.json()) + + return response_429 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[Error, ImpressoNamedEntityRecognitionResponse]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: ImpressoNamedEntityRecognitionRequest, +) -> Response[Union[Error, ImpressoNamedEntityRecognitionResponse]]: + """Perform Named Entity Recognition of a text + + Args: + body (ImpressoNamedEntityRecognitionRequest): Request body for the Impresso NER endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, ImpressoNamedEntityRecognitionResponse]] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + body: ImpressoNamedEntityRecognitionRequest, +) -> Optional[Union[Error, ImpressoNamedEntityRecognitionResponse]]: + """Perform Named Entity Recognition of a text + + Args: + body (ImpressoNamedEntityRecognitionRequest): Request body for the Impresso NER endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, ImpressoNamedEntityRecognitionResponse] + """ + + return sync_detailed( + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: ImpressoNamedEntityRecognitionRequest, +) -> Response[Union[Error, ImpressoNamedEntityRecognitionResponse]]: + """Perform Named Entity Recognition of a text + + Args: + body (ImpressoNamedEntityRecognitionRequest): Request body for the Impresso NER endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[Error, ImpressoNamedEntityRecognitionResponse]] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + body: ImpressoNamedEntityRecognitionRequest, +) -> Optional[Union[Error, ImpressoNamedEntityRecognitionResponse]]: + """Perform Named Entity Recognition of a text + + Args: + body (ImpressoNamedEntityRecognitionRequest): Request body for the Impresso NER endpoint + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[Error, ImpressoNamedEntityRecognitionResponse] + """ + + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/impresso/api_client/api/version/__init__.py b/impresso/api_client/api/version/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/api_client/api/version/get_version_details.py b/impresso/api_client/api/version/get_version_details.py new file mode 100644 index 0000000..615051f --- /dev/null +++ b/impresso/api_client/api/version/get_version_details.py @@ -0,0 +1,139 @@ +from http import HTTPStatus +from typing import Any, Dict, Optional, Union + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.api_version import APIVersion +from ...models.error import Error +from ...types import Response + + +def _get_kwargs() -> Dict[str, Any]: + _kwargs: Dict[str, Any] = { + "method": "get", + "url": "/version", + } + + return _kwargs + + +def _parse_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Optional[Union[APIVersion, Error]]: + if response.status_code == HTTPStatus.OK: + response_200 = APIVersion.from_dict(response.json()) + + return response_200 + if response.status_code == HTTPStatus.NOT_FOUND: + response_404 = Error.from_dict(response.json()) + + return response_404 + if response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY: + response_422 = Error.from_dict(response.json()) + + return response_422 + if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR: + response_500 = Error.from_dict(response.json()) + + return response_500 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: Union[AuthenticatedClient, Client], response: httpx.Response +) -> Response[Union[APIVersion, Error]]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: Union[AuthenticatedClient, Client], +) -> Response[Union[APIVersion, Error]]: + """Get version object + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[APIVersion, Error]] + """ + + kwargs = _get_kwargs() + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: Union[AuthenticatedClient, Client], +) -> Optional[Union[APIVersion, Error]]: + """Get version object + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[APIVersion, Error] + """ + + return sync_detailed( + client=client, + ).parsed + + +async def asyncio_detailed( + *, + client: Union[AuthenticatedClient, Client], +) -> Response[Union[APIVersion, Error]]: + """Get version object + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Union[APIVersion, Error]] + """ + + kwargs = _get_kwargs() + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: Union[AuthenticatedClient, Client], +) -> Optional[Union[APIVersion, Error]]: + """Get version object + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Union[APIVersion, Error] + """ + + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/impresso/api_client/client.py b/impresso/api_client/client.py new file mode 100644 index 0000000..63a2493 --- /dev/null +++ b/impresso/api_client/client.py @@ -0,0 +1,268 @@ +import ssl +from typing import Any, Dict, Optional, Union + +import httpx +from attrs import define, evolve, field + + +@define +class Client: + """A class for keeping track of data related to the API + + The following are accepted as keyword arguments and will be used to construct httpx Clients internally: + + ``base_url``: The base URL for the API, all requests are made to a relative path to this URL + + ``cookies``: A dictionary of cookies to be sent with every request + + ``headers``: A dictionary of headers to be sent with every request + + ``timeout``: The maximum amount of a time a request can take. API functions will raise + httpx.TimeoutException if this is exceeded. + + ``verify_ssl``: Whether or not to verify the SSL certificate of the API server. This should be True in production, + but can be set to False for testing purposes. + + ``follow_redirects``: Whether or not to follow redirects. Default value is False. + + ``httpx_args``: A dictionary of additional arguments to be passed to the ``httpx.Client`` and ``httpx.AsyncClient`` constructor. + + + Attributes: + raise_on_unexpected_status: Whether or not to raise an errors.UnexpectedStatus if the API returns a + status code that was not documented in the source OpenAPI document. Can also be provided as a keyword + argument to the constructor. + """ + + raise_on_unexpected_status: bool = field(default=False, kw_only=True) + _base_url: str = field(alias="base_url") + _cookies: Dict[str, str] = field(factory=dict, kw_only=True, alias="cookies") + _headers: Dict[str, str] = field(factory=dict, kw_only=True, alias="headers") + _timeout: Optional[httpx.Timeout] = field(default=None, kw_only=True, alias="timeout") + _verify_ssl: Union[str, bool, ssl.SSLContext] = field(default=True, kw_only=True, alias="verify_ssl") + _follow_redirects: bool = field(default=False, kw_only=True, alias="follow_redirects") + _httpx_args: Dict[str, Any] = field(factory=dict, kw_only=True, alias="httpx_args") + _client: Optional[httpx.Client] = field(default=None, init=False) + _async_client: Optional[httpx.AsyncClient] = field(default=None, init=False) + + def with_headers(self, headers: Dict[str, str]) -> "Client": + """Get a new client matching this one with additional headers""" + if self._client is not None: + self._client.headers.update(headers) + if self._async_client is not None: + self._async_client.headers.update(headers) + return evolve(self, headers={**self._headers, **headers}) + + def with_cookies(self, cookies: Dict[str, str]) -> "Client": + """Get a new client matching this one with additional cookies""" + if self._client is not None: + self._client.cookies.update(cookies) + if self._async_client is not None: + self._async_client.cookies.update(cookies) + return evolve(self, cookies={**self._cookies, **cookies}) + + def with_timeout(self, timeout: httpx.Timeout) -> "Client": + """Get a new client matching this one with a new timeout (in seconds)""" + if self._client is not None: + self._client.timeout = timeout + if self._async_client is not None: + self._async_client.timeout = timeout + return evolve(self, timeout=timeout) + + def set_httpx_client(self, client: httpx.Client) -> "Client": + """Manually the underlying httpx.Client + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._client = client + return self + + def get_httpx_client(self) -> httpx.Client: + """Get the underlying httpx.Client, constructing a new one if not previously set""" + if self._client is None: + self._client = httpx.Client( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._client + + def __enter__(self) -> "Client": + """Enter a context manager for self.client—you cannot enter twice (see httpx docs)""" + self.get_httpx_client().__enter__() + return self + + def __exit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for internal httpx.Client (see httpx docs)""" + self.get_httpx_client().__exit__(*args, **kwargs) + + def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> "Client": + """Manually the underlying httpx.AsyncClient + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._async_client = async_client + return self + + def get_async_httpx_client(self) -> httpx.AsyncClient: + """Get the underlying httpx.AsyncClient, constructing a new one if not previously set""" + if self._async_client is None: + self._async_client = httpx.AsyncClient( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._async_client + + async def __aenter__(self) -> "Client": + """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)""" + await self.get_async_httpx_client().__aenter__() + return self + + async def __aexit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" + await self.get_async_httpx_client().__aexit__(*args, **kwargs) + + +@define +class AuthenticatedClient: + """A Client which has been authenticated for use on secured endpoints + + The following are accepted as keyword arguments and will be used to construct httpx Clients internally: + + ``base_url``: The base URL for the API, all requests are made to a relative path to this URL + + ``cookies``: A dictionary of cookies to be sent with every request + + ``headers``: A dictionary of headers to be sent with every request + + ``timeout``: The maximum amount of a time a request can take. API functions will raise + httpx.TimeoutException if this is exceeded. + + ``verify_ssl``: Whether or not to verify the SSL certificate of the API server. This should be True in production, + but can be set to False for testing purposes. + + ``follow_redirects``: Whether or not to follow redirects. Default value is False. + + ``httpx_args``: A dictionary of additional arguments to be passed to the ``httpx.Client`` and ``httpx.AsyncClient`` constructor. + + + Attributes: + raise_on_unexpected_status: Whether or not to raise an errors.UnexpectedStatus if the API returns a + status code that was not documented in the source OpenAPI document. Can also be provided as a keyword + argument to the constructor. + token: The token to use for authentication + prefix: The prefix to use for the Authorization header + auth_header_name: The name of the Authorization header + """ + + raise_on_unexpected_status: bool = field(default=False, kw_only=True) + _base_url: str = field(alias="base_url") + _cookies: Dict[str, str] = field(factory=dict, kw_only=True, alias="cookies") + _headers: Dict[str, str] = field(factory=dict, kw_only=True, alias="headers") + _timeout: Optional[httpx.Timeout] = field(default=None, kw_only=True, alias="timeout") + _verify_ssl: Union[str, bool, ssl.SSLContext] = field(default=True, kw_only=True, alias="verify_ssl") + _follow_redirects: bool = field(default=False, kw_only=True, alias="follow_redirects") + _httpx_args: Dict[str, Any] = field(factory=dict, kw_only=True, alias="httpx_args") + _client: Optional[httpx.Client] = field(default=None, init=False) + _async_client: Optional[httpx.AsyncClient] = field(default=None, init=False) + + token: str + prefix: str = "Bearer" + auth_header_name: str = "Authorization" + + def with_headers(self, headers: Dict[str, str]) -> "AuthenticatedClient": + """Get a new client matching this one with additional headers""" + if self._client is not None: + self._client.headers.update(headers) + if self._async_client is not None: + self._async_client.headers.update(headers) + return evolve(self, headers={**self._headers, **headers}) + + def with_cookies(self, cookies: Dict[str, str]) -> "AuthenticatedClient": + """Get a new client matching this one with additional cookies""" + if self._client is not None: + self._client.cookies.update(cookies) + if self._async_client is not None: + self._async_client.cookies.update(cookies) + return evolve(self, cookies={**self._cookies, **cookies}) + + def with_timeout(self, timeout: httpx.Timeout) -> "AuthenticatedClient": + """Get a new client matching this one with a new timeout (in seconds)""" + if self._client is not None: + self._client.timeout = timeout + if self._async_client is not None: + self._async_client.timeout = timeout + return evolve(self, timeout=timeout) + + def set_httpx_client(self, client: httpx.Client) -> "AuthenticatedClient": + """Manually the underlying httpx.Client + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._client = client + return self + + def get_httpx_client(self) -> httpx.Client: + """Get the underlying httpx.Client, constructing a new one if not previously set""" + if self._client is None: + self._headers[self.auth_header_name] = f"{self.prefix} {self.token}" if self.prefix else self.token + self._client = httpx.Client( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._client + + def __enter__(self) -> "AuthenticatedClient": + """Enter a context manager for self.client—you cannot enter twice (see httpx docs)""" + self.get_httpx_client().__enter__() + return self + + def __exit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for internal httpx.Client (see httpx docs)""" + self.get_httpx_client().__exit__(*args, **kwargs) + + def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> "AuthenticatedClient": + """Manually the underlying httpx.AsyncClient + + **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. + """ + self._async_client = async_client + return self + + def get_async_httpx_client(self) -> httpx.AsyncClient: + """Get the underlying httpx.AsyncClient, constructing a new one if not previously set""" + if self._async_client is None: + self._headers[self.auth_header_name] = f"{self.prefix} {self.token}" if self.prefix else self.token + self._async_client = httpx.AsyncClient( + base_url=self._base_url, + cookies=self._cookies, + headers=self._headers, + timeout=self._timeout, + verify=self._verify_ssl, + follow_redirects=self._follow_redirects, + **self._httpx_args, + ) + return self._async_client + + async def __aenter__(self) -> "AuthenticatedClient": + """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)""" + await self.get_async_httpx_client().__aenter__() + return self + + async def __aexit__(self, *args: Any, **kwargs: Any) -> None: + """Exit a context manager for underlying httpx.AsyncClient (see httpx docs)""" + await self.get_async_httpx_client().__aexit__(*args, **kwargs) diff --git a/impresso/api_client/errors.py b/impresso/api_client/errors.py new file mode 100644 index 0000000..5f92e76 --- /dev/null +++ b/impresso/api_client/errors.py @@ -0,0 +1,16 @@ +"""Contains shared errors types that can be raised from API functions""" + + +class UnexpectedStatus(Exception): + """Raised by api functions when the response status an undocumented status and Client.raise_on_unexpected_status is True""" + + def __init__(self, status_code: int, content: bytes): + self.status_code = status_code + self.content = content + + super().__init__( + f"Unexpected status code: {status_code}\n\nResponse content:\n{content.decode(errors='ignore')}" + ) + + +__all__ = ["UnexpectedStatus"] diff --git a/impresso/api_client/models/__init__.py b/impresso/api_client/models/__init__.py new file mode 100644 index 0000000..ae65f43 --- /dev/null +++ b/impresso/api_client/models/__init__.py @@ -0,0 +1,273 @@ +"""Contains all the data models used in inputs/outputs""" + +from .api_version import APIVersion +from .api_version_api_version import APIVersionApiVersion +from .api_version_documents_date_span import APIVersionDocumentsDateSpan +from .api_version_features import APIVersionFeatures +from .api_version_features_additional_property import APIVersionFeaturesAdditionalProperty +from .api_version_mysql import APIVersionMysql +from .api_version_newspapers import APIVersionNewspapers +from .api_version_newspapers_additional_property import APIVersionNewspapersAdditionalProperty +from .api_version_solr import APIVersionSolr +from .api_version_solr_endpoints import APIVersionSolrEndpoints +from .article import Article +from .article_access_right import ArticleAccessRight +from .article_labels_item import ArticleLabelsItem +from .article_match import ArticleMatch +from .article_mentions_item import ArticleMentionsItem +from .article_region import ArticleRegion +from .article_topic import ArticleTopic +from .authentication_create_request import AuthenticationCreateRequest +from .authentication_create_request_strategy import AuthenticationCreateRequestStrategy +from .authentication_response import AuthenticationResponse +from .authentication_response_authentication import AuthenticationResponseAuthentication +from .authentication_response_authentication_payload import AuthenticationResponseAuthenticationPayload +from .base_find import BaseFind +from .base_find_info import BaseFindInfo +from .base_user import BaseUser +from .collectable_item_group import CollectableItemGroup +from .collectable_item_group_content_type import CollectableItemGroupContentType +from .collectable_items_updated_response import CollectableItemsUpdatedResponse +from .collection import Collection +from .entity import Entity +from .entity_details import EntityDetails +from .entity_details_type import EntityDetailsType +from .error import Error +from .filter_ import Filter +from .filter_context import FilterContext +from .filter_op import FilterOp +from .filter_precision import FilterPrecision +from .find_articles_order_by import FindArticlesOrderBy +from .find_articles_resolve import FindArticlesResolve +from .find_articles_response_200 import FindArticlesResponse200 +from .find_articles_response_200_info import FindArticlesResponse200Info +from .find_collections_order_by import FindCollectionsOrderBy +from .find_collections_response_200 import FindCollectionsResponse200 +from .find_collections_response_200_info import FindCollectionsResponse200Info +from .find_entities_order_by import FindEntitiesOrderBy +from .find_entities_response_200 import FindEntitiesResponse200 +from .find_entities_response_200_info import FindEntitiesResponse200Info +from .find_newspapers_order_by import FindNewspapersOrderBy +from .find_newspapers_response_200 import FindNewspapersResponse200 +from .find_newspapers_response_200_info import FindNewspapersResponse200Info +from .find_search_facets_facets_item import FindSearchFacetsFacetsItem +from .find_search_facets_group_by import FindSearchFacetsGroupBy +from .find_search_facets_order_by import FindSearchFacetsOrderBy +from .find_search_facets_range_include import FindSearchFacetsRangeInclude +from .find_search_facets_response_200 import FindSearchFacetsResponse200 +from .find_search_facets_response_200_info import FindSearchFacetsResponse200Info +from .find_text_reuse_clusters_order_by import FindTextReuseClustersOrderBy +from .find_text_reuse_clusters_response import FindTextReuseClustersResponse +from .find_text_reuse_passages_addons import FindTextReusePassagesAddons +from .find_text_reuse_passages_group_by import FindTextReusePassagesGroupBy +from .find_text_reuse_passages_order_by import FindTextReusePassagesOrderBy +from .find_text_reuse_passages_response_200 import FindTextReusePassagesResponse200 +from .find_text_reuse_passages_response_200_info import FindTextReusePassagesResponse200Info +from .find_tr_clusters_facets_facets_item import FindTrClustersFacetsFacetsItem +from .find_tr_clusters_facets_group_by import FindTrClustersFacetsGroupBy +from .find_tr_clusters_facets_order_by import FindTrClustersFacetsOrderBy +from .find_tr_clusters_facets_range_include import FindTrClustersFacetsRangeInclude +from .find_tr_clusters_facets_response_200 import FindTrClustersFacetsResponse200 +from .find_tr_clusters_facets_response_200_info import FindTrClustersFacetsResponse200Info +from .find_tr_passages_facets_facets_item import FindTrPassagesFacetsFacetsItem +from .find_tr_passages_facets_group_by import FindTrPassagesFacetsGroupBy +from .find_tr_passages_facets_order_by import FindTrPassagesFacetsOrderBy +from .find_tr_passages_facets_range_include import FindTrPassagesFacetsRangeInclude +from .find_tr_passages_facets_response_200 import FindTrPassagesFacetsResponse200 +from .find_tr_passages_facets_response_200_info import FindTrPassagesFacetsResponse200Info +from .get_search_facet_group_by import GetSearchFacetGroupBy +from .get_search_facet_id import GetSearchFacetId +from .get_search_facet_order_by import GetSearchFacetOrderBy +from .get_search_facet_range_include import GetSearchFacetRangeInclude +from .get_tr_clusters_facet_group_by import GetTrClustersFacetGroupBy +from .get_tr_clusters_facet_id import GetTrClustersFacetId +from .get_tr_clusters_facet_order_by import GetTrClustersFacetOrderBy +from .get_tr_clusters_facet_range_include import GetTrClustersFacetRangeInclude +from .get_tr_passages_facet_group_by import GetTrPassagesFacetGroupBy +from .get_tr_passages_facet_id import GetTrPassagesFacetId +from .get_tr_passages_facet_order_by import GetTrPassagesFacetOrderBy +from .get_tr_passages_facet_range_include import GetTrPassagesFacetRangeInclude +from .impresso_named_entity_recognition_entity import ImpressoNamedEntityRecognitionEntity +from .impresso_named_entity_recognition_entity_confidence import ImpressoNamedEntityRecognitionEntityConfidence +from .impresso_named_entity_recognition_entity_offset import ImpressoNamedEntityRecognitionEntityOffset +from .impresso_named_entity_recognition_entity_type import ImpressoNamedEntityRecognitionEntityType +from .impresso_named_entity_recognition_request import ImpressoNamedEntityRecognitionRequest +from .impresso_named_entity_recognition_response import ImpressoNamedEntityRecognitionResponse +from .location_specific_fields import LocationSpecificFields +from .location_specific_fields_descriptions import LocationSpecificFieldsDescriptions +from .location_specific_fields_images_item import LocationSpecificFieldsImagesItem +from .location_specific_fields_labels import LocationSpecificFieldsLabels +from .new_collection import NewCollection +from .newspaper import Newspaper +from .newspaper_issue import NewspaperIssue +from .newspaper_property import NewspaperProperty +from .page import Page +from .page_regions_item import PageRegionsItem +from .remove_collection_response import RemoveCollectionResponse +from .remove_collection_response_params import RemoveCollectionResponseParams +from .remove_collection_response_params_status import RemoveCollectionResponseParamsStatus +from .remove_collection_response_task import RemoveCollectionResponseTask +from .search_facet import SearchFacet +from .search_facet_bucket import SearchFacetBucket +from .search_facet_range_bucket import SearchFacetRangeBucket +from .search_facets import SearchFacets +from .search_group_by import SearchGroupBy +from .search_order_by import SearchOrderBy +from .search_response_200 import SearchResponse200 +from .search_response_200_info import SearchResponse200Info +from .text_reuse_cluster import TextReuseCluster +from .text_reuse_cluster_compound import TextReuseClusterCompound +from .text_reuse_cluster_details import TextReuseClusterDetails +from .text_reuse_cluster_details_facets_item import TextReuseClusterDetailsFacetsItem +from .text_reuse_cluster_details_facets_item_buckets_item import TextReuseClusterDetailsFacetsItemBucketsItem +from .text_reuse_cluster_details_resolution import TextReuseClusterDetailsResolution +from .text_reuse_cluster_time_coverage import TextReuseClusterTimeCoverage +from .text_reuse_passage import TextReusePassage +from .text_reuse_passage_article_details import TextReusePassageArticleDetails +from .text_reuse_passage_cluster_details import TextReusePassageClusterDetails +from .text_reuse_passage_connected_clusters_item import TextReusePassageConnectedClustersItem +from .text_reuse_passage_issue import TextReusePassageIssue +from .topic import Topic +from .topic_related_topics_item import TopicRelatedTopicsItem +from .topic_word import TopicWord +from .update_collectable_items import UpdateCollectableItems +from .user import User +from .year import Year +from .year_weights import YearWeights + +__all__ = ( + "APIVersion", + "APIVersionApiVersion", + "APIVersionDocumentsDateSpan", + "APIVersionFeatures", + "APIVersionFeaturesAdditionalProperty", + "APIVersionMysql", + "APIVersionNewspapers", + "APIVersionNewspapersAdditionalProperty", + "APIVersionSolr", + "APIVersionSolrEndpoints", + "Article", + "ArticleAccessRight", + "ArticleLabelsItem", + "ArticleMatch", + "ArticleMentionsItem", + "ArticleRegion", + "ArticleTopic", + "AuthenticationCreateRequest", + "AuthenticationCreateRequestStrategy", + "AuthenticationResponse", + "AuthenticationResponseAuthentication", + "AuthenticationResponseAuthenticationPayload", + "BaseFind", + "BaseFindInfo", + "BaseUser", + "CollectableItemGroup", + "CollectableItemGroupContentType", + "CollectableItemsUpdatedResponse", + "Collection", + "Entity", + "EntityDetails", + "EntityDetailsType", + "Error", + "Filter", + "FilterContext", + "FilterOp", + "FilterPrecision", + "FindArticlesOrderBy", + "FindArticlesResolve", + "FindArticlesResponse200", + "FindArticlesResponse200Info", + "FindCollectionsOrderBy", + "FindCollectionsResponse200", + "FindCollectionsResponse200Info", + "FindEntitiesOrderBy", + "FindEntitiesResponse200", + "FindEntitiesResponse200Info", + "FindNewspapersOrderBy", + "FindNewspapersResponse200", + "FindNewspapersResponse200Info", + "FindSearchFacetsFacetsItem", + "FindSearchFacetsGroupBy", + "FindSearchFacetsOrderBy", + "FindSearchFacetsRangeInclude", + "FindSearchFacetsResponse200", + "FindSearchFacetsResponse200Info", + "FindTextReuseClustersOrderBy", + "FindTextReuseClustersResponse", + "FindTextReusePassagesAddons", + "FindTextReusePassagesGroupBy", + "FindTextReusePassagesOrderBy", + "FindTextReusePassagesResponse200", + "FindTextReusePassagesResponse200Info", + "FindTrClustersFacetsFacetsItem", + "FindTrClustersFacetsGroupBy", + "FindTrClustersFacetsOrderBy", + "FindTrClustersFacetsRangeInclude", + "FindTrClustersFacetsResponse200", + "FindTrClustersFacetsResponse200Info", + "FindTrPassagesFacetsFacetsItem", + "FindTrPassagesFacetsGroupBy", + "FindTrPassagesFacetsOrderBy", + "FindTrPassagesFacetsRangeInclude", + "FindTrPassagesFacetsResponse200", + "FindTrPassagesFacetsResponse200Info", + "GetSearchFacetGroupBy", + "GetSearchFacetId", + "GetSearchFacetOrderBy", + "GetSearchFacetRangeInclude", + "GetTrClustersFacetGroupBy", + "GetTrClustersFacetId", + "GetTrClustersFacetOrderBy", + "GetTrClustersFacetRangeInclude", + "GetTrPassagesFacetGroupBy", + "GetTrPassagesFacetId", + "GetTrPassagesFacetOrderBy", + "GetTrPassagesFacetRangeInclude", + "ImpressoNamedEntityRecognitionEntity", + "ImpressoNamedEntityRecognitionEntityConfidence", + "ImpressoNamedEntityRecognitionEntityOffset", + "ImpressoNamedEntityRecognitionEntityType", + "ImpressoNamedEntityRecognitionRequest", + "ImpressoNamedEntityRecognitionResponse", + "LocationSpecificFields", + "LocationSpecificFieldsDescriptions", + "LocationSpecificFieldsImagesItem", + "LocationSpecificFieldsLabels", + "NewCollection", + "Newspaper", + "NewspaperIssue", + "NewspaperProperty", + "Page", + "PageRegionsItem", + "RemoveCollectionResponse", + "RemoveCollectionResponseParams", + "RemoveCollectionResponseParamsStatus", + "RemoveCollectionResponseTask", + "SearchFacet", + "SearchFacetBucket", + "SearchFacetRangeBucket", + "SearchFacets", + "SearchGroupBy", + "SearchOrderBy", + "SearchResponse200", + "SearchResponse200Info", + "TextReuseCluster", + "TextReuseClusterCompound", + "TextReuseClusterDetails", + "TextReuseClusterDetailsFacetsItem", + "TextReuseClusterDetailsFacetsItemBucketsItem", + "TextReuseClusterDetailsResolution", + "TextReuseClusterTimeCoverage", + "TextReusePassage", + "TextReusePassageArticleDetails", + "TextReusePassageClusterDetails", + "TextReusePassageConnectedClustersItem", + "TextReusePassageIssue", + "Topic", + "TopicRelatedTopicsItem", + "TopicWord", + "UpdateCollectableItems", + "User", + "Year", + "YearWeights", +) diff --git a/impresso/api_client/models/api_version.py b/impresso/api_client/models/api_version.py new file mode 100644 index 0000000..edf018a --- /dev/null +++ b/impresso/api_client/models/api_version.py @@ -0,0 +1,103 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.api_version_api_version import APIVersionApiVersion + from ..models.api_version_documents_date_span import APIVersionDocumentsDateSpan + from ..models.api_version_features import APIVersionFeatures + from ..models.api_version_mysql import APIVersionMysql + from ..models.api_version_newspapers import APIVersionNewspapers + from ..models.api_version_solr import APIVersionSolr + + +T = TypeVar("T", bound="APIVersion") + + +@_attrs_define +class APIVersion: + """Version of the API. Contains information about the current version of the API, features, etc. + + Attributes: + solr (APIVersionSolr): + mysql (APIVersionMysql): + version (str): + api_version (APIVersionApiVersion): + documents_date_span (APIVersionDocumentsDateSpan): + newspapers (APIVersionNewspapers): + features (APIVersionFeatures): + """ + + solr: "APIVersionSolr" + mysql: "APIVersionMysql" + version: str + api_version: "APIVersionApiVersion" + documents_date_span: "APIVersionDocumentsDateSpan" + newspapers: "APIVersionNewspapers" + features: "APIVersionFeatures" + + def to_dict(self) -> Dict[str, Any]: + solr = self.solr.to_dict() + + mysql = self.mysql.to_dict() + + version = self.version + + api_version = self.api_version.to_dict() + + documents_date_span = self.documents_date_span.to_dict() + + newspapers = self.newspapers.to_dict() + + features = self.features.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "solr": solr, + "mysql": mysql, + "version": version, + "apiVersion": api_version, + "documentsDateSpan": documents_date_span, + "newspapers": newspapers, + "features": features, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.api_version_api_version import APIVersionApiVersion + from ..models.api_version_documents_date_span import APIVersionDocumentsDateSpan + from ..models.api_version_features import APIVersionFeatures + from ..models.api_version_mysql import APIVersionMysql + from ..models.api_version_newspapers import APIVersionNewspapers + from ..models.api_version_solr import APIVersionSolr + + d = src_dict.copy() + solr = APIVersionSolr.from_dict(d.pop("solr")) + + mysql = APIVersionMysql.from_dict(d.pop("mysql")) + + version = d.pop("version") + + api_version = APIVersionApiVersion.from_dict(d.pop("apiVersion")) + + documents_date_span = APIVersionDocumentsDateSpan.from_dict(d.pop("documentsDateSpan")) + + newspapers = APIVersionNewspapers.from_dict(d.pop("newspapers")) + + features = APIVersionFeatures.from_dict(d.pop("features")) + + api_version = cls( + solr=solr, + mysql=mysql, + version=version, + api_version=api_version, + documents_date_span=documents_date_span, + newspapers=newspapers, + features=features, + ) + + return api_version diff --git a/impresso/api_client/models/api_version_api_version.py b/impresso/api_client/models/api_version_api_version.py new file mode 100644 index 0000000..3dbb8fd --- /dev/null +++ b/impresso/api_client/models/api_version_api_version.py @@ -0,0 +1,76 @@ +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="APIVersionApiVersion") + + +@_attrs_define +class APIVersionApiVersion: + """ + Attributes: + branch (Union[Unset, str]): + revision (Union[Unset, str]): + version (Union[Unset, str]): + """ + + branch: Union[Unset, str] = UNSET + revision: Union[Unset, str] = UNSET + version: Union[Unset, str] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + branch = self.branch + + revision = self.revision + + version = self.version + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if branch is not UNSET: + field_dict["branch"] = branch + if revision is not UNSET: + field_dict["revision"] = revision + if version is not UNSET: + field_dict["version"] = version + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + branch = d.pop("branch", UNSET) + + revision = d.pop("revision", UNSET) + + version = d.pop("version", UNSET) + + api_version_api_version = cls( + branch=branch, + revision=revision, + version=version, + ) + + api_version_api_version.additional_properties = d + return api_version_api_version + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_documents_date_span.py b/impresso/api_client/models/api_version_documents_date_span.py new file mode 100644 index 0000000..f8cddbb --- /dev/null +++ b/impresso/api_client/models/api_version_documents_date_span.py @@ -0,0 +1,83 @@ +import datetime +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="APIVersionDocumentsDateSpan") + + +@_attrs_define +class APIVersionDocumentsDateSpan: + """ + Attributes: + start (Union[Unset, datetime.datetime]): + end (Union[Unset, datetime.datetime]): + """ + + start: Union[Unset, datetime.datetime] = UNSET + end: Union[Unset, datetime.datetime] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + start: Union[Unset, str] = UNSET + if not isinstance(self.start, Unset): + start = self.start.isoformat() + + end: Union[Unset, str] = UNSET + if not isinstance(self.end, Unset): + end = self.end.isoformat() + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if start is not UNSET: + field_dict["start"] = start + if end is not UNSET: + field_dict["end"] = end + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + _start = d.pop("start", UNSET) + start: Union[Unset, datetime.datetime] + if isinstance(_start, Unset): + start = UNSET + else: + start = isoparse(_start) + + _end = d.pop("end", UNSET) + end: Union[Unset, datetime.datetime] + if isinstance(_end, Unset): + end = UNSET + else: + end = isoparse(_end) + + api_version_documents_date_span = cls( + start=start, + end=end, + ) + + api_version_documents_date_span.additional_properties = d + return api_version_documents_date_span + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_features.py b/impresso/api_client/models/api_version_features.py new file mode 100644 index 0000000..5a4f309 --- /dev/null +++ b/impresso/api_client/models/api_version_features.py @@ -0,0 +1,56 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.api_version_features_additional_property import APIVersionFeaturesAdditionalProperty + + +T = TypeVar("T", bound="APIVersionFeatures") + + +@_attrs_define +class APIVersionFeatures: + """ """ + + additional_properties: Dict[str, "APIVersionFeaturesAdditionalProperty"] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + field_dict[prop_name] = prop.to_dict() + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.api_version_features_additional_property import APIVersionFeaturesAdditionalProperty + + d = src_dict.copy() + api_version_features = cls() + + additional_properties = {} + for prop_name, prop_dict in d.items(): + additional_property = APIVersionFeaturesAdditionalProperty.from_dict(prop_dict) + + additional_properties[prop_name] = additional_property + + api_version_features.additional_properties = additional_properties + return api_version_features + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> "APIVersionFeaturesAdditionalProperty": + return self.additional_properties[key] + + def __setitem__(self, key: str, value: "APIVersionFeaturesAdditionalProperty") -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_features_additional_property.py b/impresso/api_client/models/api_version_features_additional_property.py new file mode 100644 index 0000000..160ff22 --- /dev/null +++ b/impresso/api_client/models/api_version_features_additional_property.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="APIVersionFeaturesAdditionalProperty") + + +@_attrs_define +class APIVersionFeaturesAdditionalProperty: + """ """ + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + api_version_features_additional_property = cls() + + api_version_features_additional_property.additional_properties = d + return api_version_features_additional_property + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_mysql.py b/impresso/api_client/models/api_version_mysql.py new file mode 100644 index 0000000..d474f9d --- /dev/null +++ b/impresso/api_client/models/api_version_mysql.py @@ -0,0 +1,58 @@ +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="APIVersionMysql") + + +@_attrs_define +class APIVersionMysql: + """ + Attributes: + endpoint (Union[Unset, str]): + """ + + endpoint: Union[Unset, str] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + endpoint = self.endpoint + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if endpoint is not UNSET: + field_dict["endpoint"] = endpoint + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + endpoint = d.pop("endpoint", UNSET) + + api_version_mysql = cls( + endpoint=endpoint, + ) + + api_version_mysql.additional_properties = d + return api_version_mysql + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_newspapers.py b/impresso/api_client/models/api_version_newspapers.py new file mode 100644 index 0000000..cda1a2f --- /dev/null +++ b/impresso/api_client/models/api_version_newspapers.py @@ -0,0 +1,56 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.api_version_newspapers_additional_property import APIVersionNewspapersAdditionalProperty + + +T = TypeVar("T", bound="APIVersionNewspapers") + + +@_attrs_define +class APIVersionNewspapers: + """ """ + + additional_properties: Dict[str, "APIVersionNewspapersAdditionalProperty"] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + field_dict[prop_name] = prop.to_dict() + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.api_version_newspapers_additional_property import APIVersionNewspapersAdditionalProperty + + d = src_dict.copy() + api_version_newspapers = cls() + + additional_properties = {} + for prop_name, prop_dict in d.items(): + additional_property = APIVersionNewspapersAdditionalProperty.from_dict(prop_dict) + + additional_properties[prop_name] = additional_property + + api_version_newspapers.additional_properties = additional_properties + return api_version_newspapers + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> "APIVersionNewspapersAdditionalProperty": + return self.additional_properties[key] + + def __setitem__(self, key: str, value: "APIVersionNewspapersAdditionalProperty") -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_newspapers_additional_property.py b/impresso/api_client/models/api_version_newspapers_additional_property.py new file mode 100644 index 0000000..ce3e4b6 --- /dev/null +++ b/impresso/api_client/models/api_version_newspapers_additional_property.py @@ -0,0 +1,58 @@ +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="APIVersionNewspapersAdditionalProperty") + + +@_attrs_define +class APIVersionNewspapersAdditionalProperty: + """ + Attributes: + name (Union[Unset, str]): + """ + + name: Union[Unset, str] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + name = self.name + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if name is not UNSET: + field_dict["name"] = name + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + name = d.pop("name", UNSET) + + api_version_newspapers_additional_property = cls( + name=name, + ) + + api_version_newspapers_additional_property.additional_properties = d + return api_version_newspapers_additional_property + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_solr.py b/impresso/api_client/models/api_version_solr.py new file mode 100644 index 0000000..3dcbac5 --- /dev/null +++ b/impresso/api_client/models/api_version_solr.py @@ -0,0 +1,71 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.api_version_solr_endpoints import APIVersionSolrEndpoints + + +T = TypeVar("T", bound="APIVersionSolr") + + +@_attrs_define +class APIVersionSolr: + """ + Attributes: + endpoints (Union[Unset, APIVersionSolrEndpoints]): + """ + + endpoints: Union[Unset, "APIVersionSolrEndpoints"] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + endpoints: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.endpoints, Unset): + endpoints = self.endpoints.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if endpoints is not UNSET: + field_dict["endpoints"] = endpoints + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.api_version_solr_endpoints import APIVersionSolrEndpoints + + d = src_dict.copy() + _endpoints = d.pop("endpoints", UNSET) + endpoints: Union[Unset, APIVersionSolrEndpoints] + if isinstance(_endpoints, Unset): + endpoints = UNSET + else: + endpoints = APIVersionSolrEndpoints.from_dict(_endpoints) + + api_version_solr = cls( + endpoints=endpoints, + ) + + api_version_solr.additional_properties = d + return api_version_solr + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/api_version_solr_endpoints.py b/impresso/api_client/models/api_version_solr_endpoints.py new file mode 100644 index 0000000..b3d49ac --- /dev/null +++ b/impresso/api_client/models/api_version_solr_endpoints.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="APIVersionSolrEndpoints") + + +@_attrs_define +class APIVersionSolrEndpoints: + """ """ + + additional_properties: Dict[str, str] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + api_version_solr_endpoints = cls() + + api_version_solr_endpoints.additional_properties = d + return api_version_solr_endpoints + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/article.py b/impresso/api_client/models/article.py new file mode 100644 index 0000000..2f47361 --- /dev/null +++ b/impresso/api_client/models/article.py @@ -0,0 +1,478 @@ +import datetime +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..models.article_access_right import ArticleAccessRight +from ..models.article_labels_item import ArticleLabelsItem +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.article_match import ArticleMatch + from ..models.article_mentions_item import ArticleMentionsItem + from ..models.article_region import ArticleRegion + from ..models.article_topic import ArticleTopic + from ..models.collection import Collection + from ..models.entity import Entity + from ..models.newspaper import Newspaper + from ..models.newspaper_issue import NewspaperIssue + from ..models.page import Page + + +T = TypeVar("T", bound="Article") + + +@_attrs_define +class Article: + """A journal/magazine article + + Attributes: + uid (str): The unique identifier of the article + type (str): The type of the article. NOTE: may be empty. + title (str): The title of the article + size (int): The size of the article in characters + nb_pages (int): The number of pages in this article + pages (List['Page']): + is_cc (bool): TODO + excerpt (str): The excerpt of the article + labels (List[ArticleLabelsItem]): TODO + access_right (ArticleAccessRight): + year (int): The year of the article + locations (Union[Unset, List['Entity']]): + persons (Union[Unset, List['Entity']]): + language (Union[Unset, str]): The language code of the article + issue (Union[Unset, NewspaperIssue]): + matches (Union[Unset, List['ArticleMatch']]): + regions (Union[Unset, List['ArticleRegion']]): + region_breaks (Union[Unset, List[int]]): + content_line_breaks (Union[Unset, List[int]]): + is_front (Union[Unset, bool]): TODO + date (Union[None, Unset, datetime.datetime]): + country (Union[Unset, str]): The country code of the article + tags (Union[Unset, List[str]]): + collections (Union[List['Collection'], List[str], Unset]): + newspaper (Union[Unset, Newspaper]): A newspaper + data_provider (Union[None, Unset, str]): + topics (Union[Unset, List['ArticleTopic']]): + content (Union[Unset, str]): The content of the article + mentions (Union[Unset, List['ArticleMentionsItem']]): + v (Union[Unset, str]): TODO + """ + + uid: str + type: str + title: str + size: int + nb_pages: int + pages: List["Page"] + is_cc: bool + excerpt: str + labels: List[ArticleLabelsItem] + access_right: ArticleAccessRight + year: int + locations: Union[Unset, List["Entity"]] = UNSET + persons: Union[Unset, List["Entity"]] = UNSET + language: Union[Unset, str] = UNSET + issue: Union[Unset, "NewspaperIssue"] = UNSET + matches: Union[Unset, List["ArticleMatch"]] = UNSET + regions: Union[Unset, List["ArticleRegion"]] = UNSET + region_breaks: Union[Unset, List[int]] = UNSET + content_line_breaks: Union[Unset, List[int]] = UNSET + is_front: Union[Unset, bool] = UNSET + date: Union[None, Unset, datetime.datetime] = UNSET + country: Union[Unset, str] = UNSET + tags: Union[Unset, List[str]] = UNSET + collections: Union[List["Collection"], List[str], Unset] = UNSET + newspaper: Union[Unset, "Newspaper"] = UNSET + data_provider: Union[None, Unset, str] = UNSET + topics: Union[Unset, List["ArticleTopic"]] = UNSET + content: Union[Unset, str] = UNSET + mentions: Union[Unset, List["ArticleMentionsItem"]] = UNSET + v: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + type = self.type + + title = self.title + + size = self.size + + nb_pages = self.nb_pages + + pages = [] + for pages_item_data in self.pages: + pages_item = pages_item_data.to_dict() + pages.append(pages_item) + + is_cc = self.is_cc + + excerpt = self.excerpt + + labels = [] + for labels_item_data in self.labels: + labels_item = labels_item_data.value + labels.append(labels_item) + + access_right = self.access_right.value + + year = self.year + + locations: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.locations, Unset): + locations = [] + for locations_item_data in self.locations: + locations_item = locations_item_data.to_dict() + locations.append(locations_item) + + persons: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.persons, Unset): + persons = [] + for persons_item_data in self.persons: + persons_item = persons_item_data.to_dict() + persons.append(persons_item) + + language = self.language + + issue: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.issue, Unset): + issue = self.issue.to_dict() + + matches: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.matches, Unset): + matches = [] + for matches_item_data in self.matches: + matches_item = matches_item_data.to_dict() + matches.append(matches_item) + + regions: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.regions, Unset): + regions = [] + for regions_item_data in self.regions: + regions_item = regions_item_data.to_dict() + regions.append(regions_item) + + region_breaks: Union[Unset, List[int]] = UNSET + if not isinstance(self.region_breaks, Unset): + region_breaks = self.region_breaks + + content_line_breaks: Union[Unset, List[int]] = UNSET + if not isinstance(self.content_line_breaks, Unset): + content_line_breaks = self.content_line_breaks + + is_front = self.is_front + + date: Union[None, Unset, str] + if isinstance(self.date, Unset): + date = UNSET + elif isinstance(self.date, datetime.datetime): + date = self.date.isoformat() + else: + date = self.date + + country = self.country + + tags: Union[Unset, List[str]] = UNSET + if not isinstance(self.tags, Unset): + tags = self.tags + + collections: Union[List[Dict[str, Any]], List[str], Unset] + if isinstance(self.collections, Unset): + collections = UNSET + elif isinstance(self.collections, list): + collections = self.collections + + else: + collections = [] + for collections_type_1_item_data in self.collections: + collections_type_1_item = collections_type_1_item_data.to_dict() + collections.append(collections_type_1_item) + + newspaper: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.newspaper, Unset): + newspaper = self.newspaper.to_dict() + + data_provider: Union[None, Unset, str] + if isinstance(self.data_provider, Unset): + data_provider = UNSET + else: + data_provider = self.data_provider + + topics: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.topics, Unset): + topics = [] + for topics_item_data in self.topics: + topics_item = topics_item_data.to_dict() + topics.append(topics_item) + + content = self.content + + mentions: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.mentions, Unset): + mentions = [] + for mentions_item_data in self.mentions: + mentions_item = mentions_item_data.to_dict() + mentions.append(mentions_item) + + v = self.v + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "type": type, + "title": title, + "size": size, + "nbPages": nb_pages, + "pages": pages, + "isCC": is_cc, + "excerpt": excerpt, + "labels": labels, + "accessRight": access_right, + "year": year, + } + ) + if locations is not UNSET: + field_dict["locations"] = locations + if persons is not UNSET: + field_dict["persons"] = persons + if language is not UNSET: + field_dict["language"] = language + if issue is not UNSET: + field_dict["issue"] = issue + if matches is not UNSET: + field_dict["matches"] = matches + if regions is not UNSET: + field_dict["regions"] = regions + if region_breaks is not UNSET: + field_dict["regionBreaks"] = region_breaks + if content_line_breaks is not UNSET: + field_dict["contentLineBreaks"] = content_line_breaks + if is_front is not UNSET: + field_dict["isFront"] = is_front + if date is not UNSET: + field_dict["date"] = date + if country is not UNSET: + field_dict["country"] = country + if tags is not UNSET: + field_dict["tags"] = tags + if collections is not UNSET: + field_dict["collections"] = collections + if newspaper is not UNSET: + field_dict["newspaper"] = newspaper + if data_provider is not UNSET: + field_dict["dataProvider"] = data_provider + if topics is not UNSET: + field_dict["topics"] = topics + if content is not UNSET: + field_dict["content"] = content + if mentions is not UNSET: + field_dict["mentions"] = mentions + if v is not UNSET: + field_dict["v"] = v + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.article_match import ArticleMatch + from ..models.article_mentions_item import ArticleMentionsItem + from ..models.article_region import ArticleRegion + from ..models.article_topic import ArticleTopic + from ..models.collection import Collection + from ..models.entity import Entity + from ..models.newspaper import Newspaper + from ..models.newspaper_issue import NewspaperIssue + from ..models.page import Page + + d = src_dict.copy() + uid = d.pop("uid") + + type = d.pop("type") + + title = d.pop("title") + + size = d.pop("size") + + nb_pages = d.pop("nbPages") + + pages = [] + _pages = d.pop("pages") + for pages_item_data in _pages: + pages_item = Page.from_dict(pages_item_data) + + pages.append(pages_item) + + is_cc = d.pop("isCC") + + excerpt = d.pop("excerpt") + + labels = [] + _labels = d.pop("labels") + for labels_item_data in _labels: + labels_item = ArticleLabelsItem(labels_item_data) + + labels.append(labels_item) + + access_right = ArticleAccessRight(d.pop("accessRight")) + + year = d.pop("year") + + locations = [] + _locations = d.pop("locations", UNSET) + for locations_item_data in _locations or []: + locations_item = Entity.from_dict(locations_item_data) + + locations.append(locations_item) + + persons = [] + _persons = d.pop("persons", UNSET) + for persons_item_data in _persons or []: + persons_item = Entity.from_dict(persons_item_data) + + persons.append(persons_item) + + language = d.pop("language", UNSET) + + _issue = d.pop("issue", UNSET) + issue: Union[Unset, NewspaperIssue] + if isinstance(_issue, Unset): + issue = UNSET + else: + issue = NewspaperIssue.from_dict(_issue) + + matches = [] + _matches = d.pop("matches", UNSET) + for matches_item_data in _matches or []: + matches_item = ArticleMatch.from_dict(matches_item_data) + + matches.append(matches_item) + + regions = [] + _regions = d.pop("regions", UNSET) + for regions_item_data in _regions or []: + regions_item = ArticleRegion.from_dict(regions_item_data) + + regions.append(regions_item) + + region_breaks = cast(List[int], d.pop("regionBreaks", UNSET)) + + content_line_breaks = cast(List[int], d.pop("contentLineBreaks", UNSET)) + + is_front = d.pop("isFront", UNSET) + + def _parse_date(data: object) -> Union[None, Unset, datetime.datetime]: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + date_type_0_type_0 = isoparse(data) + + return date_type_0_type_0 + except: # noqa: E722 + pass + return cast(Union[None, Unset, datetime.datetime], data) + + date = _parse_date(d.pop("date", UNSET)) + + country = d.pop("country", UNSET) + + tags = cast(List[str], d.pop("tags", UNSET)) + + def _parse_collections(data: object) -> Union[List["Collection"], List[str], Unset]: + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + collections_type_0 = cast(List[str], data) + + return collections_type_0 + except: # noqa: E722 + pass + if not isinstance(data, list): + raise TypeError() + collections_type_1 = [] + _collections_type_1 = data + for collections_type_1_item_data in _collections_type_1: + collections_type_1_item = Collection.from_dict(collections_type_1_item_data) + + collections_type_1.append(collections_type_1_item) + + return collections_type_1 + + collections = _parse_collections(d.pop("collections", UNSET)) + + _newspaper = d.pop("newspaper", UNSET) + newspaper: Union[Unset, Newspaper] + if isinstance(_newspaper, Unset): + newspaper = UNSET + else: + newspaper = Newspaper.from_dict(_newspaper) + + def _parse_data_provider(data: object) -> Union[None, Unset, str]: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(Union[None, Unset, str], data) + + data_provider = _parse_data_provider(d.pop("dataProvider", UNSET)) + + topics = [] + _topics = d.pop("topics", UNSET) + for topics_item_data in _topics or []: + topics_item = ArticleTopic.from_dict(topics_item_data) + + topics.append(topics_item) + + content = d.pop("content", UNSET) + + mentions = [] + _mentions = d.pop("mentions", UNSET) + for mentions_item_data in _mentions or []: + mentions_item = ArticleMentionsItem.from_dict(mentions_item_data) + + mentions.append(mentions_item) + + v = d.pop("v", UNSET) + + article = cls( + uid=uid, + type=type, + title=title, + size=size, + nb_pages=nb_pages, + pages=pages, + is_cc=is_cc, + excerpt=excerpt, + labels=labels, + access_right=access_right, + year=year, + locations=locations, + persons=persons, + language=language, + issue=issue, + matches=matches, + regions=regions, + region_breaks=region_breaks, + content_line_breaks=content_line_breaks, + is_front=is_front, + date=date, + country=country, + tags=tags, + collections=collections, + newspaper=newspaper, + data_provider=data_provider, + topics=topics, + content=content, + mentions=mentions, + v=v, + ) + + return article diff --git a/impresso/api_client/models/article_access_right.py b/impresso/api_client/models/article_access_right.py new file mode 100644 index 0000000..627d8f0 --- /dev/null +++ b/impresso/api_client/models/article_access_right.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class ArticleAccessRight(str, Enum): + CLOSED = "Closed" + NA = "na" + OPENPRIVATE = "OpenPrivate" + OPENPUBLIC = "OpenPublic" + + def __str__(self) -> str: + return str(self.value) + + +ArticleAccessRightLiteral = Literal[ + "Closed", + "na", + "OpenPrivate", + "OpenPublic", +] diff --git a/impresso/api_client/models/article_labels_item.py b/impresso/api_client/models/article_labels_item.py new file mode 100644 index 0000000..cfa5b36 --- /dev/null +++ b/impresso/api_client/models/article_labels_item.py @@ -0,0 +1,12 @@ +from enum import Enum +from typing import Literal + + +class ArticleLabelsItem(str, Enum): + ARTICLE = "article" + + def __str__(self) -> str: + return str(self.value) + + +ArticleLabelsItemLiteral = Literal["article",] diff --git a/impresso/api_client/models/article_match.py b/impresso/api_client/models/article_match.py new file mode 100644 index 0000000..27582ac --- /dev/null +++ b/impresso/api_client/models/article_match.py @@ -0,0 +1,70 @@ +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ArticleMatch") + + +@_attrs_define +class ArticleMatch: + """TODO + + Attributes: + fragment (str): TODO + coords (Union[Unset, List[float]]): TODO + page_uid (Union[Unset, str]): TODO + iiif (Union[Unset, str]): TODO + """ + + fragment: str + coords: Union[Unset, List[float]] = UNSET + page_uid: Union[Unset, str] = UNSET + iiif: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + fragment = self.fragment + + coords: Union[Unset, List[float]] = UNSET + if not isinstance(self.coords, Unset): + coords = self.coords + + page_uid = self.page_uid + + iiif = self.iiif + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "fragment": fragment, + } + ) + if coords is not UNSET: + field_dict["coords"] = coords + if page_uid is not UNSET: + field_dict["pageUid"] = page_uid + if iiif is not UNSET: + field_dict["iiif"] = iiif + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + fragment = d.pop("fragment") + + coords = cast(List[float], d.pop("coords", UNSET)) + + page_uid = d.pop("pageUid", UNSET) + + iiif = d.pop("iiif", UNSET) + + article_match = cls( + fragment=fragment, + coords=coords, + page_uid=page_uid, + iiif=iiif, + ) + + return article_match diff --git a/impresso/api_client/models/article_mentions_item.py b/impresso/api_client/models/article_mentions_item.py new file mode 100644 index 0000000..26f5eb8 --- /dev/null +++ b/impresso/api_client/models/article_mentions_item.py @@ -0,0 +1,69 @@ +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ArticleMentionsItem") + + +@_attrs_define +class ArticleMentionsItem: + """ + Attributes: + person (Union[Unset, List[List[int]]]): + location (Union[Unset, List[List[int]]]): + """ + + person: Union[Unset, List[List[int]]] = UNSET + location: Union[Unset, List[List[int]]] = UNSET + + def to_dict(self) -> Dict[str, Any]: + person: Union[Unset, List[List[int]]] = UNSET + if not isinstance(self.person, Unset): + person = [] + for person_item_data in self.person: + person_item = person_item_data + + person.append(person_item) + + location: Union[Unset, List[List[int]]] = UNSET + if not isinstance(self.location, Unset): + location = [] + for location_item_data in self.location: + location_item = location_item_data + + location.append(location_item) + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if person is not UNSET: + field_dict["person"] = person + if location is not UNSET: + field_dict["location"] = location + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + person = [] + _person = d.pop("person", UNSET) + for person_item_data in _person or []: + person_item = cast(List[int], person_item_data) + + person.append(person_item) + + location = [] + _location = d.pop("location", UNSET) + for location_item_data in _location or []: + location_item = cast(List[int], location_item_data) + + location.append(location_item) + + article_mentions_item = cls( + person=person, + location=location, + ) + + return article_mentions_item diff --git a/impresso/api_client/models/article_region.py b/impresso/api_client/models/article_region.py new file mode 100644 index 0000000..f22dc11 --- /dev/null +++ b/impresso/api_client/models/article_region.py @@ -0,0 +1,77 @@ +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ArticleRegion") + + +@_attrs_define +class ArticleRegion: + """TODO + + Attributes: + page_uid (str): + coords (List[float]): + is_empty (bool): TODO + iiif_fragment (Union[Unset, str]): IIIF fragment URL + g (Union[Unset, List[str]]): TODO + """ + + page_uid: str + coords: List[float] + is_empty: bool + iiif_fragment: Union[Unset, str] = UNSET + g: Union[Unset, List[str]] = UNSET + + def to_dict(self) -> Dict[str, Any]: + page_uid = self.page_uid + + coords = self.coords + + is_empty = self.is_empty + + iiif_fragment = self.iiif_fragment + + g: Union[Unset, List[str]] = UNSET + if not isinstance(self.g, Unset): + g = self.g + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "pageUid": page_uid, + "coords": coords, + "isEmpty": is_empty, + } + ) + if iiif_fragment is not UNSET: + field_dict["iiifFragment"] = iiif_fragment + if g is not UNSET: + field_dict["g"] = g + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + page_uid = d.pop("pageUid") + + coords = cast(List[float], d.pop("coords")) + + is_empty = d.pop("isEmpty") + + iiif_fragment = d.pop("iiifFragment", UNSET) + + g = cast(List[str], d.pop("g", UNSET)) + + article_region = cls( + page_uid=page_uid, + coords=coords, + is_empty=is_empty, + iiif_fragment=iiif_fragment, + g=g, + ) + + return article_region diff --git a/impresso/api_client/models/article_topic.py b/impresso/api_client/models/article_topic.py new file mode 100644 index 0000000..4c26f8e --- /dev/null +++ b/impresso/api_client/models/article_topic.py @@ -0,0 +1,72 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.topic import Topic + + +T = TypeVar("T", bound="ArticleTopic") + + +@_attrs_define +class ArticleTopic: + """TODO + + Attributes: + relevance (float): TODO + topic (Union[Unset, Topic]): A topic (TODO) + topic_uid (Union[Unset, str]): TODO + """ + + relevance: float + topic: Union[Unset, "Topic"] = UNSET + topic_uid: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + relevance = self.relevance + + topic: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.topic, Unset): + topic = self.topic.to_dict() + + topic_uid = self.topic_uid + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "relevance": relevance, + } + ) + if topic is not UNSET: + field_dict["topic"] = topic + if topic_uid is not UNSET: + field_dict["topicUid"] = topic_uid + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.topic import Topic + + d = src_dict.copy() + relevance = d.pop("relevance") + + _topic = d.pop("topic", UNSET) + topic: Union[Unset, Topic] + if isinstance(_topic, Unset): + topic = UNSET + else: + topic = Topic.from_dict(_topic) + + topic_uid = d.pop("topicUid", UNSET) + + article_topic = cls( + relevance=relevance, + topic=topic, + topic_uid=topic_uid, + ) + + return article_topic diff --git a/impresso/api_client/models/authentication_create_request.py b/impresso/api_client/models/authentication_create_request.py new file mode 100644 index 0000000..3fd5762 --- /dev/null +++ b/impresso/api_client/models/authentication_create_request.py @@ -0,0 +1,89 @@ +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.authentication_create_request_strategy import AuthenticationCreateRequestStrategy +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AuthenticationCreateRequest") + + +@_attrs_define +class AuthenticationCreateRequest: + """Request body for the authentication endpoint + + Attributes: + strategy (AuthenticationCreateRequestStrategy): + email (Union[Unset, str]): + password (Union[Unset, str]): + access_token (Union[Unset, str]): + """ + + strategy: AuthenticationCreateRequestStrategy + email: Union[Unset, str] = UNSET + password: Union[Unset, str] = UNSET + access_token: Union[Unset, str] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + strategy = self.strategy.value + + email = self.email + + password = self.password + + access_token = self.access_token + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "strategy": strategy, + } + ) + if email is not UNSET: + field_dict["email"] = email + if password is not UNSET: + field_dict["password"] = password + if access_token is not UNSET: + field_dict["accessToken"] = access_token + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + strategy = AuthenticationCreateRequestStrategy(d.pop("strategy")) + + email = d.pop("email", UNSET) + + password = d.pop("password", UNSET) + + access_token = d.pop("accessToken", UNSET) + + authentication_create_request = cls( + strategy=strategy, + email=email, + password=password, + access_token=access_token, + ) + + authentication_create_request.additional_properties = d + return authentication_create_request + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/authentication_create_request_strategy.py b/impresso/api_client/models/authentication_create_request_strategy.py new file mode 100644 index 0000000..8f3a3ac --- /dev/null +++ b/impresso/api_client/models/authentication_create_request_strategy.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class AuthenticationCreateRequestStrategy(str, Enum): + JWT_APP = "jwt-app" + LOCAL = "local" + + def __str__(self) -> str: + return str(self.value) + + +AuthenticationCreateRequestStrategyLiteral = Literal[ + "jwt-app", + "local", +] diff --git a/impresso/api_client/models/authentication_response.py b/impresso/api_client/models/authentication_response.py new file mode 100644 index 0000000..0357f5e --- /dev/null +++ b/impresso/api_client/models/authentication_response.py @@ -0,0 +1,63 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.authentication_response_authentication import AuthenticationResponseAuthentication + from ..models.user import User + + +T = TypeVar("T", bound="AuthenticationResponse") + + +@_attrs_define +class AuthenticationResponse: + """Authentication Response + + Attributes: + access_token (str): + authentication (AuthenticationResponseAuthentication): + user (User): User details + """ + + access_token: str + authentication: "AuthenticationResponseAuthentication" + user: "User" + + def to_dict(self) -> Dict[str, Any]: + access_token = self.access_token + + authentication = self.authentication.to_dict() + + user = self.user.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "accessToken": access_token, + "authentication": authentication, + "user": user, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.authentication_response_authentication import AuthenticationResponseAuthentication + from ..models.user import User + + d = src_dict.copy() + access_token = d.pop("accessToken") + + authentication = AuthenticationResponseAuthentication.from_dict(d.pop("authentication")) + + user = User.from_dict(d.pop("user")) + + authentication_response = cls( + access_token=access_token, + authentication=authentication, + user=user, + ) + + return authentication_response diff --git a/impresso/api_client/models/authentication_response_authentication.py b/impresso/api_client/models/authentication_response_authentication.py new file mode 100644 index 0000000..695cb21 --- /dev/null +++ b/impresso/api_client/models/authentication_response_authentication.py @@ -0,0 +1,80 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.authentication_response_authentication_payload import AuthenticationResponseAuthenticationPayload + + +T = TypeVar("T", bound="AuthenticationResponseAuthentication") + + +@_attrs_define +class AuthenticationResponseAuthentication: + """ + Attributes: + strategy (Union[Unset, str]): + payload (Union[Unset, AuthenticationResponseAuthenticationPayload]): + """ + + strategy: Union[Unset, str] = UNSET + payload: Union[Unset, "AuthenticationResponseAuthenticationPayload"] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + strategy = self.strategy + + payload: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.payload, Unset): + payload = self.payload.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if strategy is not UNSET: + field_dict["strategy"] = strategy + if payload is not UNSET: + field_dict["payload"] = payload + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.authentication_response_authentication_payload import AuthenticationResponseAuthenticationPayload + + d = src_dict.copy() + strategy = d.pop("strategy", UNSET) + + _payload = d.pop("payload", UNSET) + payload: Union[Unset, AuthenticationResponseAuthenticationPayload] + if isinstance(_payload, Unset): + payload = UNSET + else: + payload = AuthenticationResponseAuthenticationPayload.from_dict(_payload) + + authentication_response_authentication = cls( + strategy=strategy, + payload=payload, + ) + + authentication_response_authentication.additional_properties = d + return authentication_response_authentication + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/authentication_response_authentication_payload.py b/impresso/api_client/models/authentication_response_authentication_payload.py new file mode 100644 index 0000000..c8fd90f --- /dev/null +++ b/impresso/api_client/models/authentication_response_authentication_payload.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="AuthenticationResponseAuthenticationPayload") + + +@_attrs_define +class AuthenticationResponseAuthenticationPayload: + """ """ + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + authentication_response_authentication_payload = cls() + + authentication_response_authentication_payload.additional_properties = d + return authentication_response_authentication_payload + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/base_find.py b/impresso/api_client/models/base_find.py new file mode 100644 index 0000000..fa12957 --- /dev/null +++ b/impresso/api_client/models/base_find.py @@ -0,0 +1,76 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, cast + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.base_find_info import BaseFindInfo + + +T = TypeVar("T", bound="BaseFind") + + +@_attrs_define +class BaseFind: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (BaseFindInfo): Additional information about the response. + data (List[Any]): + """ + + limit: int + offset: int + total: int + info: "BaseFindInfo" + data: List[Any] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = self.data + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.base_find_info import BaseFindInfo + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = BaseFindInfo.from_dict(d.pop("info")) + + data = cast(List[Any], d.pop("data")) + + base_find = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return base_find diff --git a/impresso/api_client/models/base_find_info.py b/impresso/api_client/models/base_find_info.py new file mode 100644 index 0000000..e5f8b00 --- /dev/null +++ b/impresso/api_client/models/base_find_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="BaseFindInfo") + + +@_attrs_define +class BaseFindInfo: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + base_find_info = cls() + + base_find_info.additional_properties = d + return base_find_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/base_user.py b/impresso/api_client/models/base_user.py new file mode 100644 index 0000000..9f9379f --- /dev/null +++ b/impresso/api_client/models/base_user.py @@ -0,0 +1,66 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="BaseUser") + + +@_attrs_define +class BaseUser: + """ + Attributes: + uid (str): Example: local-dg. + username (str): Example: daniele.guido. + """ + + uid: str + username: str + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + username = self.username + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "uid": uid, + "username": username, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + uid = d.pop("uid") + + username = d.pop("username") + + base_user = cls( + uid=uid, + username=username, + ) + + base_user.additional_properties = d + return base_user + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/collectable_item_group.py b/impresso/api_client/models/collectable_item_group.py new file mode 100644 index 0000000..f2001ba --- /dev/null +++ b/impresso/api_client/models/collectable_item_group.py @@ -0,0 +1,142 @@ +import datetime +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field +from dateutil.parser import isoparse + +from ..models.collectable_item_group_content_type import CollectableItemGroupContentType +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.collection import Collection + + +T = TypeVar("T", bound="CollectableItemGroup") + + +@_attrs_define +class CollectableItemGroup: + """Collectable item group object + + Attributes: + item_id (Union[Unset, str]): The id of the collectable item group + content_type (Union[Unset, CollectableItemGroupContentType]): Content type of the collectable item group: + (A)rticle, (E)ntities, (P)ages, (I)ssues + collection_ids (Union[Unset, List[str]]): Ids of the collections + search_queries (Union[Unset, List[str]]): Search queries + collections (Union[Unset, List['Collection']]): Collection objects + latest_date_added (Union[Unset, datetime.datetime]): The latest date added to the collectable item group + """ + + item_id: Union[Unset, str] = UNSET + content_type: Union[Unset, CollectableItemGroupContentType] = UNSET + collection_ids: Union[Unset, List[str]] = UNSET + search_queries: Union[Unset, List[str]] = UNSET + collections: Union[Unset, List["Collection"]] = UNSET + latest_date_added: Union[Unset, datetime.datetime] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + item_id = self.item_id + + content_type: Union[Unset, str] = UNSET + if not isinstance(self.content_type, Unset): + content_type = self.content_type.value + + collection_ids: Union[Unset, List[str]] = UNSET + if not isinstance(self.collection_ids, Unset): + collection_ids = self.collection_ids + + search_queries: Union[Unset, List[str]] = UNSET + if not isinstance(self.search_queries, Unset): + search_queries = self.search_queries + + collections: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.collections, Unset): + collections = [] + for collections_item_data in self.collections: + collections_item = collections_item_data.to_dict() + collections.append(collections_item) + + latest_date_added: Union[Unset, str] = UNSET + if not isinstance(self.latest_date_added, Unset): + latest_date_added = self.latest_date_added.isoformat() + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if item_id is not UNSET: + field_dict["itemId"] = item_id + if content_type is not UNSET: + field_dict["contentType"] = content_type + if collection_ids is not UNSET: + field_dict["collectionIds"] = collection_ids + if search_queries is not UNSET: + field_dict["searchQueries"] = search_queries + if collections is not UNSET: + field_dict["collections"] = collections + if latest_date_added is not UNSET: + field_dict["latestDateAdded"] = latest_date_added + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.collection import Collection + + d = src_dict.copy() + item_id = d.pop("itemId", UNSET) + + _content_type = d.pop("contentType", UNSET) + content_type: Union[Unset, CollectableItemGroupContentType] + if isinstance(_content_type, Unset): + content_type = UNSET + else: + content_type = CollectableItemGroupContentType(_content_type) + + collection_ids = cast(List[str], d.pop("collectionIds", UNSET)) + + search_queries = cast(List[str], d.pop("searchQueries", UNSET)) + + collections = [] + _collections = d.pop("collections", UNSET) + for collections_item_data in _collections or []: + collections_item = Collection.from_dict(collections_item_data) + + collections.append(collections_item) + + _latest_date_added = d.pop("latestDateAdded", UNSET) + latest_date_added: Union[Unset, datetime.datetime] + if isinstance(_latest_date_added, Unset): + latest_date_added = UNSET + else: + latest_date_added = isoparse(_latest_date_added) + + collectable_item_group = cls( + item_id=item_id, + content_type=content_type, + collection_ids=collection_ids, + search_queries=search_queries, + collections=collections, + latest_date_added=latest_date_added, + ) + + collectable_item_group.additional_properties = d + return collectable_item_group + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/collectable_item_group_content_type.py b/impresso/api_client/models/collectable_item_group_content_type.py new file mode 100644 index 0000000..f69997e --- /dev/null +++ b/impresso/api_client/models/collectable_item_group_content_type.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class CollectableItemGroupContentType(str, Enum): + A = "A" + E = "E" + I = "I" + P = "P" + + def __str__(self) -> str: + return str(self.value) + + +CollectableItemGroupContentTypeLiteral = Literal[ + "A", + "E", + "I", + "P", +] diff --git a/impresso/api_client/models/collectable_items_updated_response.py b/impresso/api_client/models/collectable_items_updated_response.py new file mode 100644 index 0000000..32f97a5 --- /dev/null +++ b/impresso/api_client/models/collectable_items_updated_response.py @@ -0,0 +1,67 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="CollectableItemsUpdatedResponse") + + +@_attrs_define +class CollectableItemsUpdatedResponse: + """Request to update collectible items in a collection + + Attributes: + total_added (int): Total number of items added to the collection + total_removed (int): Total number of items removed from the collection + """ + + total_added: int + total_removed: int + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + total_added = self.total_added + + total_removed = self.total_removed + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "totalAdded": total_added, + "totalRemoved": total_removed, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + total_added = d.pop("totalAdded") + + total_removed = d.pop("totalRemoved") + + collectable_items_updated_response = cls( + total_added=total_added, + total_removed=total_removed, + ) + + collectable_items_updated_response.additional_properties = d + return collectable_items_updated_response + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/collection.py b/impresso/api_client/models/collection.py new file mode 100644 index 0000000..cfcb694 --- /dev/null +++ b/impresso/api_client/models/collection.py @@ -0,0 +1,120 @@ +import datetime +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.base_user import BaseUser + + +T = TypeVar("T", bound="Collection") + + +@_attrs_define +class Collection: + """Description of the collection object (Collection class) + + Attributes: + uid (str): + name (str): + description (str): + status (str): Example: PRI. + creation_date (datetime.datetime): + last_modified_date (datetime.datetime): + count_items (Union[int, str]): + creator (BaseUser): + labels (Union[Unset, List[str]]): + """ + + uid: str + name: str + description: str + status: str + creation_date: datetime.datetime + last_modified_date: datetime.datetime + count_items: Union[int, str] + creator: "BaseUser" + labels: Union[Unset, List[str]] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + name = self.name + + description = self.description + + status = self.status + + creation_date = self.creation_date.isoformat() + + last_modified_date = self.last_modified_date.isoformat() + + count_items: Union[int, str] + count_items = self.count_items + + creator = self.creator.to_dict() + + labels: Union[Unset, List[str]] = UNSET + if not isinstance(self.labels, Unset): + labels = self.labels + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "name": name, + "description": description, + "status": status, + "creationDate": creation_date, + "lastModifiedDate": last_modified_date, + "countItems": count_items, + "creator": creator, + } + ) + if labels is not UNSET: + field_dict["labels"] = labels + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.base_user import BaseUser + + d = src_dict.copy() + uid = d.pop("uid") + + name = d.pop("name") + + description = d.pop("description") + + status = d.pop("status") + + creation_date = isoparse(d.pop("creationDate")) + + last_modified_date = isoparse(d.pop("lastModifiedDate")) + + def _parse_count_items(data: object) -> Union[int, str]: + return cast(Union[int, str], data) + + count_items = _parse_count_items(d.pop("countItems")) + + creator = BaseUser.from_dict(d.pop("creator")) + + labels = cast(List[str], d.pop("labels", UNSET)) + + collection = cls( + uid=uid, + name=name, + description=description, + status=status, + creation_date=creation_date, + last_modified_date=last_modified_date, + count_items=count_items, + creator=creator, + labels=labels, + ) + + return collection diff --git a/impresso/api_client/models/entity.py b/impresso/api_client/models/entity.py new file mode 100644 index 0000000..883c422 --- /dev/null +++ b/impresso/api_client/models/entity.py @@ -0,0 +1,47 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="Entity") + + +@_attrs_define +class Entity: + """An entity like location, person, etc + + Attributes: + uid (str): Unique identifier of the entity + relevance (int): Relevance of the entity in the document + """ + + uid: str + relevance: int + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + relevance = self.relevance + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "relevance": relevance, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + uid = d.pop("uid") + + relevance = d.pop("relevance") + + entity = cls( + uid=uid, + relevance=relevance, + ) + + return entity diff --git a/impresso/api_client/models/entity_details.py b/impresso/api_client/models/entity_details.py new file mode 100644 index 0000000..8cae3c7 --- /dev/null +++ b/impresso/api_client/models/entity_details.py @@ -0,0 +1,105 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..models.entity_details_type import EntityDetailsType +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.location_specific_fields import LocationSpecificFields + + +T = TypeVar("T", bound="EntityDetails") + + +@_attrs_define +class EntityDetails: + """An entity like location, person, etc + + Attributes: + uid (str): Unique identifier of the entity + name (str): Entity name + type (EntityDetailsType): + count_items (int): TODO + count_mentions (int): Number of mentions of this entity in articles + wikidata_id (Union[Unset, str]): ID of the entity in wikidata + wikidata (Union[Unset, LocationSpecificFields]): Details of a wikidata entity + """ + + uid: str + name: str + type: EntityDetailsType + count_items: int + count_mentions: int + wikidata_id: Union[Unset, str] = UNSET + wikidata: Union[Unset, "LocationSpecificFields"] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + name = self.name + + type = self.type.value + + count_items = self.count_items + + count_mentions = self.count_mentions + + wikidata_id = self.wikidata_id + + wikidata: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.wikidata, Unset): + wikidata = self.wikidata.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "name": name, + "type": type, + "countItems": count_items, + "countMentions": count_mentions, + } + ) + if wikidata_id is not UNSET: + field_dict["wikidataId"] = wikidata_id + if wikidata is not UNSET: + field_dict["wikidata"] = wikidata + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.location_specific_fields import LocationSpecificFields + + d = src_dict.copy() + uid = d.pop("uid") + + name = d.pop("name") + + type = EntityDetailsType(d.pop("type")) + + count_items = d.pop("countItems") + + count_mentions = d.pop("countMentions") + + wikidata_id = d.pop("wikidataId", UNSET) + + _wikidata = d.pop("wikidata", UNSET) + wikidata: Union[Unset, LocationSpecificFields] + if isinstance(_wikidata, Unset): + wikidata = UNSET + else: + wikidata = LocationSpecificFields.from_dict(_wikidata) + + entity_details = cls( + uid=uid, + name=name, + type=type, + count_items=count_items, + count_mentions=count_mentions, + wikidata_id=wikidata_id, + wikidata=wikidata, + ) + + return entity_details diff --git a/impresso/api_client/models/entity_details_type.py b/impresso/api_client/models/entity_details_type.py new file mode 100644 index 0000000..4f72d1d --- /dev/null +++ b/impresso/api_client/models/entity_details_type.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class EntityDetailsType(str, Enum): + LOCATION = "location" + PERSON = "person" + + def __str__(self) -> str: + return str(self.value) + + +EntityDetailsTypeLiteral = Literal[ + "location", + "person", +] diff --git a/impresso/api_client/models/error.py b/impresso/api_client/models/error.py new file mode 100644 index 0000000..57b0458 --- /dev/null +++ b/impresso/api_client/models/error.py @@ -0,0 +1,86 @@ +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="Error") + + +@_attrs_define +class Error: + """Error response that follows https://datatracker.ietf.org/doc/html/rfc7807#section-3.1 + + Attributes: + type (str): A URI reference [RFC3986] that identifies the problem type. + title (str): A short, human-readable summary of the problem type. + status (int): The HTTP status code ([RFC7231], Section 6) + detail (Union[Unset, str]): A human-readable explanation specific to this occurrence of the problem. + """ + + type: str + title: str + status: int + detail: Union[Unset, str] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + type = self.type + + title = self.title + + status = self.status + + detail = self.detail + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "type": type, + "title": title, + "status": status, + } + ) + if detail is not UNSET: + field_dict["detail"] = detail + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + type = d.pop("type") + + title = d.pop("title") + + status = d.pop("status") + + detail = d.pop("detail", UNSET) + + error = cls( + type=type, + title=title, + status=status, + detail=detail, + ) + + error.additional_properties = d + return error + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/filter_.py b/impresso/api_client/models/filter_.py new file mode 100644 index 0000000..cbb0dd5 --- /dev/null +++ b/impresso/api_client/models/filter_.py @@ -0,0 +1,148 @@ +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..models.filter_context import FilterContext +from ..models.filter_op import FilterOp +from ..models.filter_precision import FilterPrecision +from ..types import UNSET, Unset + +T = TypeVar("T", bound="Filter") + + +@_attrs_define +class Filter: + """A single filter criteria + + Attributes: + type (str): Possible values are in 'search.validators:eachFilterValidator.type.choices' + context (Union[Unset, FilterContext]): Default: FilterContext.INCLUDE. + op (Union[Unset, FilterOp]): Default: FilterOp.OR. + precision (Union[Unset, FilterPrecision]): Default: FilterPrecision.EXACT. + q (Union[List[str], Unset, str]): + daterange (Union[Unset, str]): + uids (Union[Unset, str]): + uid (Union[Unset, str]): + """ + + type: str + context: Union[Unset, FilterContext] = FilterContext.INCLUDE + op: Union[Unset, FilterOp] = FilterOp.OR + precision: Union[Unset, FilterPrecision] = FilterPrecision.EXACT + q: Union[List[str], Unset, str] = UNSET + daterange: Union[Unset, str] = UNSET + uids: Union[Unset, str] = UNSET + uid: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + type = self.type + + context: Union[Unset, str] = UNSET + if not isinstance(self.context, Unset): + context = self.context.value + + op: Union[Unset, str] = UNSET + if not isinstance(self.op, Unset): + op = self.op.value + + precision: Union[Unset, str] = UNSET + if not isinstance(self.precision, Unset): + precision = self.precision.value + + q: Union[List[str], Unset, str] + if isinstance(self.q, Unset): + q = UNSET + elif isinstance(self.q, list): + q = self.q + + else: + q = self.q + + daterange = self.daterange + + uids = self.uids + + uid = self.uid + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "type": type, + } + ) + if context is not UNSET: + field_dict["context"] = context + if op is not UNSET: + field_dict["op"] = op + if precision is not UNSET: + field_dict["precision"] = precision + if q is not UNSET: + field_dict["q"] = q + if daterange is not UNSET: + field_dict["daterange"] = daterange + if uids is not UNSET: + field_dict["uids"] = uids + if uid is not UNSET: + field_dict["uid"] = uid + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + type = d.pop("type") + + _context = d.pop("context", UNSET) + context: Union[Unset, FilterContext] + if isinstance(_context, Unset): + context = UNSET + else: + context = FilterContext(_context) + + _op = d.pop("op", UNSET) + op: Union[Unset, FilterOp] + if isinstance(_op, Unset): + op = UNSET + else: + op = FilterOp(_op) + + _precision = d.pop("precision", UNSET) + precision: Union[Unset, FilterPrecision] + if isinstance(_precision, Unset): + precision = UNSET + else: + precision = FilterPrecision(_precision) + + def _parse_q(data: object) -> Union[List[str], Unset, str]: + if isinstance(data, Unset): + return data + try: + if not isinstance(data, list): + raise TypeError() + q_type_1 = cast(List[str], data) + + return q_type_1 + except: # noqa: E722 + pass + return cast(Union[List[str], Unset, str], data) + + q = _parse_q(d.pop("q", UNSET)) + + daterange = d.pop("daterange", UNSET) + + uids = d.pop("uids", UNSET) + + uid = d.pop("uid", UNSET) + + filter_ = cls( + type=type, + context=context, + op=op, + precision=precision, + q=q, + daterange=daterange, + uids=uids, + uid=uid, + ) + + return filter_ diff --git a/impresso/api_client/models/filter_context.py b/impresso/api_client/models/filter_context.py new file mode 100644 index 0000000..fd0ca29 --- /dev/null +++ b/impresso/api_client/models/filter_context.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class FilterContext(str, Enum): + EXCLUDE = "exclude" + INCLUDE = "include" + + def __str__(self) -> str: + return str(self.value) + + +FilterContextLiteral = Literal[ + "exclude", + "include", +] diff --git a/impresso/api_client/models/filter_op.py b/impresso/api_client/models/filter_op.py new file mode 100644 index 0000000..57faacf --- /dev/null +++ b/impresso/api_client/models/filter_op.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class FilterOp(str, Enum): + AND = "AND" + OR = "OR" + + def __str__(self) -> str: + return str(self.value) + + +FilterOpLiteral = Literal[ + "AND", + "OR", +] diff --git a/impresso/api_client/models/filter_precision.py b/impresso/api_client/models/filter_precision.py new file mode 100644 index 0000000..172bf34 --- /dev/null +++ b/impresso/api_client/models/filter_precision.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class FilterPrecision(str, Enum): + EXACT = "exact" + FUZZY = "fuzzy" + PARTIAL = "partial" + SOFT = "soft" + + def __str__(self) -> str: + return str(self.value) + + +FilterPrecisionLiteral = Literal[ + "exact", + "fuzzy", + "partial", + "soft", +] diff --git a/impresso/api_client/models/find_articles_order_by.py b/impresso/api_client/models/find_articles_order_by.py new file mode 100644 index 0000000..4f1eea0 --- /dev/null +++ b/impresso/api_client/models/find_articles_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class FindArticlesOrderBy(str, Enum): + DATE = "date" + RELEVANCE = "relevance" + VALUE_0 = "-date" + VALUE_2 = "-relevance" + + def __str__(self) -> str: + return str(self.value) + + +FindArticlesOrderByLiteral = Literal[ + "date", + "relevance", + "-date", + "-relevance", +] diff --git a/impresso/api_client/models/find_articles_resolve.py b/impresso/api_client/models/find_articles_resolve.py new file mode 100644 index 0000000..eef032e --- /dev/null +++ b/impresso/api_client/models/find_articles_resolve.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class FindArticlesResolve(str, Enum): + COLLECTION = "collection" + TAGS = "tags" + + def __str__(self) -> str: + return str(self.value) + + +FindArticlesResolveLiteral = Literal[ + "collection", + "tags", +] diff --git a/impresso/api_client/models/find_articles_response_200.py b/impresso/api_client/models/find_articles_response_200.py new file mode 100644 index 0000000..ee286d0 --- /dev/null +++ b/impresso/api_client/models/find_articles_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.article import Article + from ..models.find_articles_response_200_info import FindArticlesResponse200Info + + +T = TypeVar("T", bound="FindArticlesResponse200") + + +@_attrs_define +class FindArticlesResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindArticlesResponse200Info): Additional information about the response. + data (List['Article']): + """ + + limit: int + offset: int + total: int + info: "FindArticlesResponse200Info" + data: List["Article"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.article import Article + from ..models.find_articles_response_200_info import FindArticlesResponse200Info + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindArticlesResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = Article.from_dict(data_item_data) + + data.append(data_item) + + find_articles_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_articles_response_200 diff --git a/impresso/api_client/models/find_articles_response_200_info.py b/impresso/api_client/models/find_articles_response_200_info.py new file mode 100644 index 0000000..0eca229 --- /dev/null +++ b/impresso/api_client/models/find_articles_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindArticlesResponse200Info") + + +@_attrs_define +class FindArticlesResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_articles_response_200_info = cls() + + find_articles_response_200_info.additional_properties = d + return find_articles_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_collections_order_by.py b/impresso/api_client/models/find_collections_order_by.py new file mode 100644 index 0000000..d8e7f04 --- /dev/null +++ b/impresso/api_client/models/find_collections_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class FindCollectionsOrderBy(str, Enum): + DATE = "date" + SIZE = "size" + VALUE_0 = "-date" + VALUE_2 = "-size" + + def __str__(self) -> str: + return str(self.value) + + +FindCollectionsOrderByLiteral = Literal[ + "date", + "size", + "-date", + "-size", +] diff --git a/impresso/api_client/models/find_collections_response_200.py b/impresso/api_client/models/find_collections_response_200.py new file mode 100644 index 0000000..c9159a3 --- /dev/null +++ b/impresso/api_client/models/find_collections_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.collection import Collection + from ..models.find_collections_response_200_info import FindCollectionsResponse200Info + + +T = TypeVar("T", bound="FindCollectionsResponse200") + + +@_attrs_define +class FindCollectionsResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindCollectionsResponse200Info): Additional information about the response. + data (List['Collection']): + """ + + limit: int + offset: int + total: int + info: "FindCollectionsResponse200Info" + data: List["Collection"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.collection import Collection + from ..models.find_collections_response_200_info import FindCollectionsResponse200Info + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindCollectionsResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = Collection.from_dict(data_item_data) + + data.append(data_item) + + find_collections_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_collections_response_200 diff --git a/impresso/api_client/models/find_collections_response_200_info.py b/impresso/api_client/models/find_collections_response_200_info.py new file mode 100644 index 0000000..b75b394 --- /dev/null +++ b/impresso/api_client/models/find_collections_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindCollectionsResponse200Info") + + +@_attrs_define +class FindCollectionsResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_collections_response_200_info = cls() + + find_collections_response_200_info.additional_properties = d + return find_collections_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_entities_order_by.py b/impresso/api_client/models/find_entities_order_by.py new file mode 100644 index 0000000..419839d --- /dev/null +++ b/impresso/api_client/models/find_entities_order_by.py @@ -0,0 +1,28 @@ +from enum import Enum +from typing import Literal + + +class FindEntitiesOrderBy(str, Enum): + COUNT = "count" + COUNT_MENTIONS = "count-mentions" + NAME = "name" + RELEVANCE = "relevance" + VALUE_1 = "-relevance" + VALUE_3 = "-name" + VALUE_5 = "-count" + VALUE_7 = "-count-mentions" + + def __str__(self) -> str: + return str(self.value) + + +FindEntitiesOrderByLiteral = Literal[ + "count", + "count-mentions", + "name", + "relevance", + "-relevance", + "-name", + "-count", + "-count-mentions", +] diff --git a/impresso/api_client/models/find_entities_response_200.py b/impresso/api_client/models/find_entities_response_200.py new file mode 100644 index 0000000..ee5a114 --- /dev/null +++ b/impresso/api_client/models/find_entities_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.entity_details import EntityDetails + from ..models.find_entities_response_200_info import FindEntitiesResponse200Info + + +T = TypeVar("T", bound="FindEntitiesResponse200") + + +@_attrs_define +class FindEntitiesResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindEntitiesResponse200Info): Additional information about the response. + data (List['EntityDetails']): + """ + + limit: int + offset: int + total: int + info: "FindEntitiesResponse200Info" + data: List["EntityDetails"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.entity_details import EntityDetails + from ..models.find_entities_response_200_info import FindEntitiesResponse200Info + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindEntitiesResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = EntityDetails.from_dict(data_item_data) + + data.append(data_item) + + find_entities_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_entities_response_200 diff --git a/impresso/api_client/models/find_entities_response_200_info.py b/impresso/api_client/models/find_entities_response_200_info.py new file mode 100644 index 0000000..ee7f17c --- /dev/null +++ b/impresso/api_client/models/find_entities_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindEntitiesResponse200Info") + + +@_attrs_define +class FindEntitiesResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_entities_response_200_info = cls() + + find_entities_response_200_info.additional_properties = d + return find_entities_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_newspapers_order_by.py b/impresso/api_client/models/find_newspapers_order_by.py new file mode 100644 index 0000000..fa13b95 --- /dev/null +++ b/impresso/api_client/models/find_newspapers_order_by.py @@ -0,0 +1,36 @@ +from enum import Enum +from typing import Literal + + +class FindNewspapersOrderBy(str, Enum): + COUNTISSUES = "countIssues" + ENDYEAR = "endYear" + FIRSTISSUE = "firstIssue" + LASTISSUE = "lastIssue" + NAME = "name" + STARTYEAR = "startYear" + VALUE_0 = "-name" + VALUE_11 = "-countIssues" + VALUE_2 = "-startYear" + VALUE_4 = "-endYear" + VALUE_7 = "-firstIssue" + VALUE_9 = "-lastIssue" + + def __str__(self) -> str: + return str(self.value) + + +FindNewspapersOrderByLiteral = Literal[ + "countIssues", + "endYear", + "firstIssue", + "lastIssue", + "name", + "startYear", + "-name", + "-countIssues", + "-startYear", + "-endYear", + "-firstIssue", + "-lastIssue", +] diff --git a/impresso/api_client/models/find_newspapers_response_200.py b/impresso/api_client/models/find_newspapers_response_200.py new file mode 100644 index 0000000..82e75ec --- /dev/null +++ b/impresso/api_client/models/find_newspapers_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.find_newspapers_response_200_info import FindNewspapersResponse200Info + from ..models.newspaper import Newspaper + + +T = TypeVar("T", bound="FindNewspapersResponse200") + + +@_attrs_define +class FindNewspapersResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindNewspapersResponse200Info): Additional information about the response. + data (List['Newspaper']): + """ + + limit: int + offset: int + total: int + info: "FindNewspapersResponse200Info" + data: List["Newspaper"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.find_newspapers_response_200_info import FindNewspapersResponse200Info + from ..models.newspaper import Newspaper + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindNewspapersResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = Newspaper.from_dict(data_item_data) + + data.append(data_item) + + find_newspapers_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_newspapers_response_200 diff --git a/impresso/api_client/models/find_newspapers_response_200_info.py b/impresso/api_client/models/find_newspapers_response_200_info.py new file mode 100644 index 0000000..8129669 --- /dev/null +++ b/impresso/api_client/models/find_newspapers_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindNewspapersResponse200Info") + + +@_attrs_define +class FindNewspapersResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_newspapers_response_200_info = cls() + + find_newspapers_response_200_info.additional_properties = d + return find_newspapers_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_search_facets_facets_item.py b/impresso/api_client/models/find_search_facets_facets_item.py new file mode 100644 index 0000000..7e54c08 --- /dev/null +++ b/impresso/api_client/models/find_search_facets_facets_item.py @@ -0,0 +1,42 @@ +from enum import Enum +from typing import Literal + + +class FindSearchFacetsFacetsItem(str, Enum): + ACCESSRIGHT = "accessRight" + COLLECTION = "collection" + CONTENTLENGTH = "contentLength" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + MONTH = "month" + NAG = "nag" + NEWSPAPER = "newspaper" + PARTNER = "partner" + PERSON = "person" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + + def __str__(self) -> str: + return str(self.value) + + +FindSearchFacetsFacetsItemLiteral = Literal[ + "accessRight", + "collection", + "contentLength", + "country", + "daterange", + "language", + "location", + "month", + "nag", + "newspaper", + "partner", + "person", + "topic", + "type", + "year", +] diff --git a/impresso/api_client/models/find_search_facets_group_by.py b/impresso/api_client/models/find_search_facets_group_by.py new file mode 100644 index 0000000..85755ef --- /dev/null +++ b/impresso/api_client/models/find_search_facets_group_by.py @@ -0,0 +1,42 @@ +from enum import Enum +from typing import Literal + + +class FindSearchFacetsGroupBy(str, Enum): + ACCESSRIGHT = "accessRight" + COLLECTION = "collection" + CONTENTLENGTH = "contentLength" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + MONTH = "month" + NAG = "nag" + NEWSPAPER = "newspaper" + PARTNER = "partner" + PERSON = "person" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + + def __str__(self) -> str: + return str(self.value) + + +FindSearchFacetsGroupByLiteral = Literal[ + "accessRight", + "collection", + "contentLength", + "country", + "daterange", + "language", + "location", + "month", + "nag", + "newspaper", + "partner", + "person", + "topic", + "type", + "year", +] diff --git a/impresso/api_client/models/find_search_facets_order_by.py b/impresso/api_client/models/find_search_facets_order_by.py new file mode 100644 index 0000000..e17b903 --- /dev/null +++ b/impresso/api_client/models/find_search_facets_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class FindSearchFacetsOrderBy(str, Enum): + COUNT = "count" + VALUE = "value" + VALUE_0 = "-count" + VALUE_2 = "-value" + + def __str__(self) -> str: + return str(self.value) + + +FindSearchFacetsOrderByLiteral = Literal[ + "count", + "value", + "-count", + "-value", +] diff --git a/impresso/api_client/models/find_search_facets_range_include.py b/impresso/api_client/models/find_search_facets_range_include.py new file mode 100644 index 0000000..8e8e6a3 --- /dev/null +++ b/impresso/api_client/models/find_search_facets_range_include.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class FindSearchFacetsRangeInclude(str, Enum): + ALL = "all" + EDGE = "edge" + UPPER = "upper" + + def __str__(self) -> str: + return str(self.value) + + +FindSearchFacetsRangeIncludeLiteral = Literal[ + "all", + "edge", + "upper", +] diff --git a/impresso/api_client/models/find_search_facets_response_200.py b/impresso/api_client/models/find_search_facets_response_200.py new file mode 100644 index 0000000..6ca2df8 --- /dev/null +++ b/impresso/api_client/models/find_search_facets_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.find_search_facets_response_200_info import FindSearchFacetsResponse200Info + from ..models.search_facet import SearchFacet + + +T = TypeVar("T", bound="FindSearchFacetsResponse200") + + +@_attrs_define +class FindSearchFacetsResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindSearchFacetsResponse200Info): Additional information about the response. + data (List['SearchFacet']): + """ + + limit: int + offset: int + total: int + info: "FindSearchFacetsResponse200Info" + data: List["SearchFacet"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.find_search_facets_response_200_info import FindSearchFacetsResponse200Info + from ..models.search_facet import SearchFacet + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindSearchFacetsResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = SearchFacet.from_dict(data_item_data) + + data.append(data_item) + + find_search_facets_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_search_facets_response_200 diff --git a/impresso/api_client/models/find_search_facets_response_200_info.py b/impresso/api_client/models/find_search_facets_response_200_info.py new file mode 100644 index 0000000..cb769f4 --- /dev/null +++ b/impresso/api_client/models/find_search_facets_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindSearchFacetsResponse200Info") + + +@_attrs_define +class FindSearchFacetsResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_search_facets_response_200_info = cls() + + find_search_facets_response_200_info.additional_properties = d + return find_search_facets_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_text_reuse_clusters_order_by.py b/impresso/api_client/models/find_text_reuse_clusters_order_by.py new file mode 100644 index 0000000..a366afa --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_clusters_order_by.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class FindTextReuseClustersOrderBy(str, Enum): + PASSAGES_COUNT = "passages-count" + VALUE_1 = "-passages-count" + + def __str__(self) -> str: + return str(self.value) + + +FindTextReuseClustersOrderByLiteral = Literal[ + "passages-count", + "-passages-count", +] diff --git a/impresso/api_client/models/find_text_reuse_clusters_response.py b/impresso/api_client/models/find_text_reuse_clusters_response.py new file mode 100644 index 0000000..ebbccd4 --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_clusters_response.py @@ -0,0 +1,61 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.text_reuse_cluster_compound import TextReuseClusterCompound + + +T = TypeVar("T", bound="FindTextReuseClustersResponse") + + +@_attrs_define +class FindTextReuseClustersResponse: + """Response for GET /text-reuse-clusters + + Attributes: + clusters (List['TextReuseClusterCompound']): + info (Any): + """ + + clusters: List["TextReuseClusterCompound"] + info: Any + + def to_dict(self) -> Dict[str, Any]: + clusters = [] + for clusters_item_data in self.clusters: + clusters_item = clusters_item_data.to_dict() + clusters.append(clusters_item) + + info = self.info + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "clusters": clusters, + "info": info, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.text_reuse_cluster_compound import TextReuseClusterCompound + + d = src_dict.copy() + clusters = [] + _clusters = d.pop("clusters") + for clusters_item_data in _clusters: + clusters_item = TextReuseClusterCompound.from_dict(clusters_item_data) + + clusters.append(clusters_item) + + info = d.pop("info") + + find_text_reuse_clusters_response = cls( + clusters=clusters, + info=info, + ) + + return find_text_reuse_clusters_response diff --git a/impresso/api_client/models/find_text_reuse_passages_addons.py b/impresso/api_client/models/find_text_reuse_passages_addons.py new file mode 100644 index 0000000..659d8b8 --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_passages_addons.py @@ -0,0 +1,38 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="FindTextReusePassagesAddons") + + +@_attrs_define +class FindTextReusePassagesAddons: + """ + Attributes: + newspaper (Union[Unset, Any]): + """ + + newspaper: Union[Unset, Any] = UNSET + + def to_dict(self) -> Dict[str, Any]: + newspaper = self.newspaper + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if newspaper is not UNSET: + field_dict["newspaper"] = newspaper + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + newspaper = d.pop("newspaper", UNSET) + + find_text_reuse_passages_addons = cls( + newspaper=newspaper, + ) + + return find_text_reuse_passages_addons diff --git a/impresso/api_client/models/find_text_reuse_passages_group_by.py b/impresso/api_client/models/find_text_reuse_passages_group_by.py new file mode 100644 index 0000000..e2baaaf --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_passages_group_by.py @@ -0,0 +1,12 @@ +from enum import Enum +from typing import Literal + + +class FindTextReusePassagesGroupBy(str, Enum): + TEXTREUSECLUSTERID = "textReuseClusterId" + + def __str__(self) -> str: + return str(self.value) + + +FindTextReusePassagesGroupByLiteral = Literal["textReuseClusterId",] diff --git a/impresso/api_client/models/find_text_reuse_passages_order_by.py b/impresso/api_client/models/find_text_reuse_passages_order_by.py new file mode 100644 index 0000000..08b8c5b --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_passages_order_by.py @@ -0,0 +1,32 @@ +from enum import Enum +from typing import Literal + + +class FindTextReusePassagesOrderBy(str, Enum): + CLUSTERSIZE = "clusterSize" + DATE = "date" + LEXICALOVERLAP = "lexicalOverlap" + SIZE = "size" + TIMEDIFFERENCEDAY = "timeDifferenceDay" + VALUE_1 = "-clusterSize" + VALUE_3 = "-lexicalOverlap" + VALUE_5 = "-timeDifferenceDay" + VALUE_7 = "-size" + VALUE_9 = "-date" + + def __str__(self) -> str: + return str(self.value) + + +FindTextReusePassagesOrderByLiteral = Literal[ + "clusterSize", + "date", + "lexicalOverlap", + "size", + "timeDifferenceDay", + "-clusterSize", + "-lexicalOverlap", + "-timeDifferenceDay", + "-size", + "-date", +] diff --git a/impresso/api_client/models/find_text_reuse_passages_response_200.py b/impresso/api_client/models/find_text_reuse_passages_response_200.py new file mode 100644 index 0000000..33c0927 --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_passages_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.find_text_reuse_passages_response_200_info import FindTextReusePassagesResponse200Info + from ..models.text_reuse_passage import TextReusePassage + + +T = TypeVar("T", bound="FindTextReusePassagesResponse200") + + +@_attrs_define +class FindTextReusePassagesResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindTextReusePassagesResponse200Info): Additional information about the response. + data (List['TextReusePassage']): + """ + + limit: int + offset: int + total: int + info: "FindTextReusePassagesResponse200Info" + data: List["TextReusePassage"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.find_text_reuse_passages_response_200_info import FindTextReusePassagesResponse200Info + from ..models.text_reuse_passage import TextReusePassage + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindTextReusePassagesResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = TextReusePassage.from_dict(data_item_data) + + data.append(data_item) + + find_text_reuse_passages_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_text_reuse_passages_response_200 diff --git a/impresso/api_client/models/find_text_reuse_passages_response_200_info.py b/impresso/api_client/models/find_text_reuse_passages_response_200_info.py new file mode 100644 index 0000000..4bf2355 --- /dev/null +++ b/impresso/api_client/models/find_text_reuse_passages_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindTextReusePassagesResponse200Info") + + +@_attrs_define +class FindTextReusePassagesResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_text_reuse_passages_response_200_info = cls() + + find_text_reuse_passages_response_200_info.additional_properties = d + return find_text_reuse_passages_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_tr_clusters_facets_facets_item.py b/impresso/api_client/models/find_tr_clusters_facets_facets_item.py new file mode 100644 index 0000000..ba4bf03 --- /dev/null +++ b/impresso/api_client/models/find_tr_clusters_facets_facets_item.py @@ -0,0 +1,22 @@ +from enum import Enum +from typing import Literal + + +class FindTrClustersFacetsFacetsItem(str, Enum): + DATERANGE = "daterange" + NEWSPAPER = "newspaper" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + + def __str__(self) -> str: + return str(self.value) + + +FindTrClustersFacetsFacetsItemLiteral = Literal[ + "daterange", + "newspaper", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", +] diff --git a/impresso/api_client/models/find_tr_clusters_facets_group_by.py b/impresso/api_client/models/find_tr_clusters_facets_group_by.py new file mode 100644 index 0000000..dc4702d --- /dev/null +++ b/impresso/api_client/models/find_tr_clusters_facets_group_by.py @@ -0,0 +1,22 @@ +from enum import Enum +from typing import Literal + + +class FindTrClustersFacetsGroupBy(str, Enum): + DATERANGE = "daterange" + NEWSPAPER = "newspaper" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + + def __str__(self) -> str: + return str(self.value) + + +FindTrClustersFacetsGroupByLiteral = Literal[ + "daterange", + "newspaper", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", +] diff --git a/impresso/api_client/models/find_tr_clusters_facets_order_by.py b/impresso/api_client/models/find_tr_clusters_facets_order_by.py new file mode 100644 index 0000000..ffb2527 --- /dev/null +++ b/impresso/api_client/models/find_tr_clusters_facets_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class FindTrClustersFacetsOrderBy(str, Enum): + COUNT = "count" + VALUE = "value" + VALUE_0 = "-count" + VALUE_2 = "-value" + + def __str__(self) -> str: + return str(self.value) + + +FindTrClustersFacetsOrderByLiteral = Literal[ + "count", + "value", + "-count", + "-value", +] diff --git a/impresso/api_client/models/find_tr_clusters_facets_range_include.py b/impresso/api_client/models/find_tr_clusters_facets_range_include.py new file mode 100644 index 0000000..aec87a5 --- /dev/null +++ b/impresso/api_client/models/find_tr_clusters_facets_range_include.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class FindTrClustersFacetsRangeInclude(str, Enum): + ALL = "all" + EDGE = "edge" + UPPER = "upper" + + def __str__(self) -> str: + return str(self.value) + + +FindTrClustersFacetsRangeIncludeLiteral = Literal[ + "all", + "edge", + "upper", +] diff --git a/impresso/api_client/models/find_tr_clusters_facets_response_200.py b/impresso/api_client/models/find_tr_clusters_facets_response_200.py new file mode 100644 index 0000000..89534be --- /dev/null +++ b/impresso/api_client/models/find_tr_clusters_facets_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.find_tr_clusters_facets_response_200_info import FindTrClustersFacetsResponse200Info + from ..models.search_facet import SearchFacet + + +T = TypeVar("T", bound="FindTrClustersFacetsResponse200") + + +@_attrs_define +class FindTrClustersFacetsResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindTrClustersFacetsResponse200Info): Additional information about the response. + data (List['SearchFacet']): + """ + + limit: int + offset: int + total: int + info: "FindTrClustersFacetsResponse200Info" + data: List["SearchFacet"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.find_tr_clusters_facets_response_200_info import FindTrClustersFacetsResponse200Info + from ..models.search_facet import SearchFacet + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindTrClustersFacetsResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = SearchFacet.from_dict(data_item_data) + + data.append(data_item) + + find_tr_clusters_facets_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_tr_clusters_facets_response_200 diff --git a/impresso/api_client/models/find_tr_clusters_facets_response_200_info.py b/impresso/api_client/models/find_tr_clusters_facets_response_200_info.py new file mode 100644 index 0000000..492850a --- /dev/null +++ b/impresso/api_client/models/find_tr_clusters_facets_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindTrClustersFacetsResponse200Info") + + +@_attrs_define +class FindTrClustersFacetsResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_tr_clusters_facets_response_200_info = cls() + + find_tr_clusters_facets_response_200_info.additional_properties = d + return find_tr_clusters_facets_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/find_tr_passages_facets_facets_item.py b/impresso/api_client/models/find_tr_passages_facets_facets_item.py new file mode 100644 index 0000000..2e6a839 --- /dev/null +++ b/impresso/api_client/models/find_tr_passages_facets_facets_item.py @@ -0,0 +1,46 @@ +from enum import Enum +from typing import Literal + + +class FindTrPassagesFacetsFacetsItem(str, Enum): + COLLECTION = "collection" + CONNECTEDCLUSTERS = "connectedClusters" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + NAG = "nag" + NEWSPAPER = "newspaper" + PERSON = "person" + TEXTREUSECLUSTER = "textReuseCluster" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + YEARMONTH = "yearmonth" + + def __str__(self) -> str: + return str(self.value) + + +FindTrPassagesFacetsFacetsItemLiteral = Literal[ + "collection", + "connectedClusters", + "country", + "daterange", + "language", + "location", + "nag", + "newspaper", + "person", + "textReuseCluster", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", + "topic", + "type", + "year", + "yearmonth", +] diff --git a/impresso/api_client/models/find_tr_passages_facets_group_by.py b/impresso/api_client/models/find_tr_passages_facets_group_by.py new file mode 100644 index 0000000..43c0ae2 --- /dev/null +++ b/impresso/api_client/models/find_tr_passages_facets_group_by.py @@ -0,0 +1,46 @@ +from enum import Enum +from typing import Literal + + +class FindTrPassagesFacetsGroupBy(str, Enum): + COLLECTION = "collection" + CONNECTEDCLUSTERS = "connectedClusters" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + NAG = "nag" + NEWSPAPER = "newspaper" + PERSON = "person" + TEXTREUSECLUSTER = "textReuseCluster" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + YEARMONTH = "yearmonth" + + def __str__(self) -> str: + return str(self.value) + + +FindTrPassagesFacetsGroupByLiteral = Literal[ + "collection", + "connectedClusters", + "country", + "daterange", + "language", + "location", + "nag", + "newspaper", + "person", + "textReuseCluster", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", + "topic", + "type", + "year", + "yearmonth", +] diff --git a/impresso/api_client/models/find_tr_passages_facets_order_by.py b/impresso/api_client/models/find_tr_passages_facets_order_by.py new file mode 100644 index 0000000..276fbf5 --- /dev/null +++ b/impresso/api_client/models/find_tr_passages_facets_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class FindTrPassagesFacetsOrderBy(str, Enum): + COUNT = "count" + VALUE = "value" + VALUE_0 = "-count" + VALUE_2 = "-value" + + def __str__(self) -> str: + return str(self.value) + + +FindTrPassagesFacetsOrderByLiteral = Literal[ + "count", + "value", + "-count", + "-value", +] diff --git a/impresso/api_client/models/find_tr_passages_facets_range_include.py b/impresso/api_client/models/find_tr_passages_facets_range_include.py new file mode 100644 index 0000000..25ceac2 --- /dev/null +++ b/impresso/api_client/models/find_tr_passages_facets_range_include.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class FindTrPassagesFacetsRangeInclude(str, Enum): + ALL = "all" + EDGE = "edge" + UPPER = "upper" + + def __str__(self) -> str: + return str(self.value) + + +FindTrPassagesFacetsRangeIncludeLiteral = Literal[ + "all", + "edge", + "upper", +] diff --git a/impresso/api_client/models/find_tr_passages_facets_response_200.py b/impresso/api_client/models/find_tr_passages_facets_response_200.py new file mode 100644 index 0000000..c1b905b --- /dev/null +++ b/impresso/api_client/models/find_tr_passages_facets_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.find_tr_passages_facets_response_200_info import FindTrPassagesFacetsResponse200Info + from ..models.search_facet import SearchFacet + + +T = TypeVar("T", bound="FindTrPassagesFacetsResponse200") + + +@_attrs_define +class FindTrPassagesFacetsResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (FindTrPassagesFacetsResponse200Info): Additional information about the response. + data (List['SearchFacet']): + """ + + limit: int + offset: int + total: int + info: "FindTrPassagesFacetsResponse200Info" + data: List["SearchFacet"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.find_tr_passages_facets_response_200_info import FindTrPassagesFacetsResponse200Info + from ..models.search_facet import SearchFacet + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = FindTrPassagesFacetsResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = SearchFacet.from_dict(data_item_data) + + data.append(data_item) + + find_tr_passages_facets_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return find_tr_passages_facets_response_200 diff --git a/impresso/api_client/models/find_tr_passages_facets_response_200_info.py b/impresso/api_client/models/find_tr_passages_facets_response_200_info.py new file mode 100644 index 0000000..557feb6 --- /dev/null +++ b/impresso/api_client/models/find_tr_passages_facets_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="FindTrPassagesFacetsResponse200Info") + + +@_attrs_define +class FindTrPassagesFacetsResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + find_tr_passages_facets_response_200_info = cls() + + find_tr_passages_facets_response_200_info.additional_properties = d + return find_tr_passages_facets_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/get_search_facet_group_by.py b/impresso/api_client/models/get_search_facet_group_by.py new file mode 100644 index 0000000..6240dee --- /dev/null +++ b/impresso/api_client/models/get_search_facet_group_by.py @@ -0,0 +1,42 @@ +from enum import Enum +from typing import Literal + + +class GetSearchFacetGroupBy(str, Enum): + ACCESSRIGHT = "accessRight" + COLLECTION = "collection" + CONTENTLENGTH = "contentLength" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + MONTH = "month" + NAG = "nag" + NEWSPAPER = "newspaper" + PARTNER = "partner" + PERSON = "person" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + + def __str__(self) -> str: + return str(self.value) + + +GetSearchFacetGroupByLiteral = Literal[ + "accessRight", + "collection", + "contentLength", + "country", + "daterange", + "language", + "location", + "month", + "nag", + "newspaper", + "partner", + "person", + "topic", + "type", + "year", +] diff --git a/impresso/api_client/models/get_search_facet_id.py b/impresso/api_client/models/get_search_facet_id.py new file mode 100644 index 0000000..7ac4c04 --- /dev/null +++ b/impresso/api_client/models/get_search_facet_id.py @@ -0,0 +1,42 @@ +from enum import Enum +from typing import Literal + + +class GetSearchFacetId(str, Enum): + ACCESSRIGHT = "accessRight" + COLLECTION = "collection" + CONTENTLENGTH = "contentLength" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + MONTH = "month" + NAG = "nag" + NEWSPAPER = "newspaper" + PARTNER = "partner" + PERSON = "person" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + + def __str__(self) -> str: + return str(self.value) + + +GetSearchFacetIdLiteral = Literal[ + "accessRight", + "collection", + "contentLength", + "country", + "daterange", + "language", + "location", + "month", + "nag", + "newspaper", + "partner", + "person", + "topic", + "type", + "year", +] diff --git a/impresso/api_client/models/get_search_facet_order_by.py b/impresso/api_client/models/get_search_facet_order_by.py new file mode 100644 index 0000000..f122b11 --- /dev/null +++ b/impresso/api_client/models/get_search_facet_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class GetSearchFacetOrderBy(str, Enum): + COUNT = "count" + VALUE = "value" + VALUE_0 = "-count" + VALUE_2 = "-value" + + def __str__(self) -> str: + return str(self.value) + + +GetSearchFacetOrderByLiteral = Literal[ + "count", + "value", + "-count", + "-value", +] diff --git a/impresso/api_client/models/get_search_facet_range_include.py b/impresso/api_client/models/get_search_facet_range_include.py new file mode 100644 index 0000000..d24d9e5 --- /dev/null +++ b/impresso/api_client/models/get_search_facet_range_include.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class GetSearchFacetRangeInclude(str, Enum): + ALL = "all" + EDGE = "edge" + UPPER = "upper" + + def __str__(self) -> str: + return str(self.value) + + +GetSearchFacetRangeIncludeLiteral = Literal[ + "all", + "edge", + "upper", +] diff --git a/impresso/api_client/models/get_tr_clusters_facet_group_by.py b/impresso/api_client/models/get_tr_clusters_facet_group_by.py new file mode 100644 index 0000000..00aead3 --- /dev/null +++ b/impresso/api_client/models/get_tr_clusters_facet_group_by.py @@ -0,0 +1,22 @@ +from enum import Enum +from typing import Literal + + +class GetTrClustersFacetGroupBy(str, Enum): + DATERANGE = "daterange" + NEWSPAPER = "newspaper" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + + def __str__(self) -> str: + return str(self.value) + + +GetTrClustersFacetGroupByLiteral = Literal[ + "daterange", + "newspaper", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", +] diff --git a/impresso/api_client/models/get_tr_clusters_facet_id.py b/impresso/api_client/models/get_tr_clusters_facet_id.py new file mode 100644 index 0000000..cab4a0b --- /dev/null +++ b/impresso/api_client/models/get_tr_clusters_facet_id.py @@ -0,0 +1,22 @@ +from enum import Enum +from typing import Literal + + +class GetTrClustersFacetId(str, Enum): + DATERANGE = "daterange" + NEWSPAPER = "newspaper" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + + def __str__(self) -> str: + return str(self.value) + + +GetTrClustersFacetIdLiteral = Literal[ + "daterange", + "newspaper", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", +] diff --git a/impresso/api_client/models/get_tr_clusters_facet_order_by.py b/impresso/api_client/models/get_tr_clusters_facet_order_by.py new file mode 100644 index 0000000..8775ec1 --- /dev/null +++ b/impresso/api_client/models/get_tr_clusters_facet_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class GetTrClustersFacetOrderBy(str, Enum): + COUNT = "count" + VALUE = "value" + VALUE_0 = "-count" + VALUE_2 = "-value" + + def __str__(self) -> str: + return str(self.value) + + +GetTrClustersFacetOrderByLiteral = Literal[ + "count", + "value", + "-count", + "-value", +] diff --git a/impresso/api_client/models/get_tr_clusters_facet_range_include.py b/impresso/api_client/models/get_tr_clusters_facet_range_include.py new file mode 100644 index 0000000..c43eeda --- /dev/null +++ b/impresso/api_client/models/get_tr_clusters_facet_range_include.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class GetTrClustersFacetRangeInclude(str, Enum): + ALL = "all" + EDGE = "edge" + UPPER = "upper" + + def __str__(self) -> str: + return str(self.value) + + +GetTrClustersFacetRangeIncludeLiteral = Literal[ + "all", + "edge", + "upper", +] diff --git a/impresso/api_client/models/get_tr_passages_facet_group_by.py b/impresso/api_client/models/get_tr_passages_facet_group_by.py new file mode 100644 index 0000000..f5cdd0d --- /dev/null +++ b/impresso/api_client/models/get_tr_passages_facet_group_by.py @@ -0,0 +1,46 @@ +from enum import Enum +from typing import Literal + + +class GetTrPassagesFacetGroupBy(str, Enum): + COLLECTION = "collection" + CONNECTEDCLUSTERS = "connectedClusters" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + NAG = "nag" + NEWSPAPER = "newspaper" + PERSON = "person" + TEXTREUSECLUSTER = "textReuseCluster" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + YEARMONTH = "yearmonth" + + def __str__(self) -> str: + return str(self.value) + + +GetTrPassagesFacetGroupByLiteral = Literal[ + "collection", + "connectedClusters", + "country", + "daterange", + "language", + "location", + "nag", + "newspaper", + "person", + "textReuseCluster", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", + "topic", + "type", + "year", + "yearmonth", +] diff --git a/impresso/api_client/models/get_tr_passages_facet_id.py b/impresso/api_client/models/get_tr_passages_facet_id.py new file mode 100644 index 0000000..f621473 --- /dev/null +++ b/impresso/api_client/models/get_tr_passages_facet_id.py @@ -0,0 +1,46 @@ +from enum import Enum +from typing import Literal + + +class GetTrPassagesFacetId(str, Enum): + COLLECTION = "collection" + CONNECTEDCLUSTERS = "connectedClusters" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + NAG = "nag" + NEWSPAPER = "newspaper" + PERSON = "person" + TEXTREUSECLUSTER = "textReuseCluster" + TEXTREUSECLUSTERDAYDELTA = "textReuseClusterDayDelta" + TEXTREUSECLUSTERLEXICALOVERLAP = "textReuseClusterLexicalOverlap" + TEXTREUSECLUSTERSIZE = "textReuseClusterSize" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + YEARMONTH = "yearmonth" + + def __str__(self) -> str: + return str(self.value) + + +GetTrPassagesFacetIdLiteral = Literal[ + "collection", + "connectedClusters", + "country", + "daterange", + "language", + "location", + "nag", + "newspaper", + "person", + "textReuseCluster", + "textReuseClusterDayDelta", + "textReuseClusterLexicalOverlap", + "textReuseClusterSize", + "topic", + "type", + "year", + "yearmonth", +] diff --git a/impresso/api_client/models/get_tr_passages_facet_order_by.py b/impresso/api_client/models/get_tr_passages_facet_order_by.py new file mode 100644 index 0000000..094338b --- /dev/null +++ b/impresso/api_client/models/get_tr_passages_facet_order_by.py @@ -0,0 +1,20 @@ +from enum import Enum +from typing import Literal + + +class GetTrPassagesFacetOrderBy(str, Enum): + COUNT = "count" + VALUE = "value" + VALUE_0 = "-count" + VALUE_2 = "-value" + + def __str__(self) -> str: + return str(self.value) + + +GetTrPassagesFacetOrderByLiteral = Literal[ + "count", + "value", + "-count", + "-value", +] diff --git a/impresso/api_client/models/get_tr_passages_facet_range_include.py b/impresso/api_client/models/get_tr_passages_facet_range_include.py new file mode 100644 index 0000000..f131b02 --- /dev/null +++ b/impresso/api_client/models/get_tr_passages_facet_range_include.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class GetTrPassagesFacetRangeInclude(str, Enum): + ALL = "all" + EDGE = "edge" + UPPER = "upper" + + def __str__(self) -> str: + return str(self.value) + + +GetTrPassagesFacetRangeIncludeLiteral = Literal[ + "all", + "edge", + "upper", +] diff --git a/impresso/api_client/models/impresso_named_entity_recognition_entity.py b/impresso/api_client/models/impresso_named_entity_recognition_entity.py new file mode 100644 index 0000000..ef9210a --- /dev/null +++ b/impresso/api_client/models/impresso_named_entity_recognition_entity.py @@ -0,0 +1,93 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +from ..models.impresso_named_entity_recognition_entity_type import ImpressoNamedEntityRecognitionEntityType + +if TYPE_CHECKING: + from ..models.impresso_named_entity_recognition_entity_confidence import ( + ImpressoNamedEntityRecognitionEntityConfidence, + ) + from ..models.impresso_named_entity_recognition_entity_offset import ImpressoNamedEntityRecognitionEntityOffset + + +T = TypeVar("T", bound="ImpressoNamedEntityRecognitionEntity") + + +@_attrs_define +class ImpressoNamedEntityRecognitionEntity: + """Impresso NER entity + + Attributes: + id (str): ID of the entity + type (ImpressoNamedEntityRecognitionEntityType): Type of the entity + surface_form (str): Surface form of the entity + offset (ImpressoNamedEntityRecognitionEntityOffset): + is_type_nested (bool): Whether the entity type is nested + confidence (ImpressoNamedEntityRecognitionEntityConfidence): + """ + + id: str + type: ImpressoNamedEntityRecognitionEntityType + surface_form: str + offset: "ImpressoNamedEntityRecognitionEntityOffset" + is_type_nested: bool + confidence: "ImpressoNamedEntityRecognitionEntityConfidence" + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + type = self.type.value + + surface_form = self.surface_form + + offset = self.offset.to_dict() + + is_type_nested = self.is_type_nested + + confidence = self.confidence.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + "type": type, + "surfaceForm": surface_form, + "offset": offset, + "isTypeNested": is_type_nested, + "confidence": confidence, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.impresso_named_entity_recognition_entity_confidence import ( + ImpressoNamedEntityRecognitionEntityConfidence, + ) + from ..models.impresso_named_entity_recognition_entity_offset import ImpressoNamedEntityRecognitionEntityOffset + + d = src_dict.copy() + id = d.pop("id") + + type = ImpressoNamedEntityRecognitionEntityType(d.pop("type")) + + surface_form = d.pop("surfaceForm") + + offset = ImpressoNamedEntityRecognitionEntityOffset.from_dict(d.pop("offset")) + + is_type_nested = d.pop("isTypeNested") + + confidence = ImpressoNamedEntityRecognitionEntityConfidence.from_dict(d.pop("confidence")) + + impresso_named_entity_recognition_entity = cls( + id=id, + type=type, + surface_form=surface_form, + offset=offset, + is_type_nested=is_type_nested, + confidence=confidence, + ) + + return impresso_named_entity_recognition_entity diff --git a/impresso/api_client/models/impresso_named_entity_recognition_entity_confidence.py b/impresso/api_client/models/impresso_named_entity_recognition_entity_confidence.py new file mode 100644 index 0000000..2602680 --- /dev/null +++ b/impresso/api_client/models/impresso_named_entity_recognition_entity_confidence.py @@ -0,0 +1,49 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ImpressoNamedEntityRecognitionEntityConfidence") + + +@_attrs_define +class ImpressoNamedEntityRecognitionEntityConfidence: + """ + Attributes: + ner (float): Confidence score for the named entity recognition + nel (Union[Unset, float]): Confidence score for the named entity linking + """ + + ner: float + nel: Union[Unset, float] = UNSET + + def to_dict(self) -> Dict[str, Any]: + ner = self.ner + + nel = self.nel + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "ner": ner, + } + ) + if nel is not UNSET: + field_dict["nel"] = nel + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + ner = d.pop("ner") + + nel = d.pop("nel", UNSET) + + impresso_named_entity_recognition_entity_confidence = cls( + ner=ner, + nel=nel, + ) + + return impresso_named_entity_recognition_entity_confidence diff --git a/impresso/api_client/models/impresso_named_entity_recognition_entity_offset.py b/impresso/api_client/models/impresso_named_entity_recognition_entity_offset.py new file mode 100644 index 0000000..070b758 --- /dev/null +++ b/impresso/api_client/models/impresso_named_entity_recognition_entity_offset.py @@ -0,0 +1,46 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="ImpressoNamedEntityRecognitionEntityOffset") + + +@_attrs_define +class ImpressoNamedEntityRecognitionEntityOffset: + """ + Attributes: + start (int): Start offset of the entity in the text + end (int): End offset of the entity in the text + """ + + start: int + end: int + + def to_dict(self) -> Dict[str, Any]: + start = self.start + + end = self.end + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "start": start, + "end": end, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + start = d.pop("start") + + end = d.pop("end") + + impresso_named_entity_recognition_entity_offset = cls( + start=start, + end=end, + ) + + return impresso_named_entity_recognition_entity_offset diff --git a/impresso/api_client/models/impresso_named_entity_recognition_entity_type.py b/impresso/api_client/models/impresso_named_entity_recognition_entity_type.py new file mode 100644 index 0000000..5d6edbc --- /dev/null +++ b/impresso/api_client/models/impresso_named_entity_recognition_entity_type.py @@ -0,0 +1,76 @@ +from enum import Enum +from typing import Literal + + +class ImpressoNamedEntityRecognitionEntityType(str, Enum): + COMP_DEMONYM = "comp.demonym" + COMP_FUNCTION = "comp.function" + COMP_NAME = "comp.name" + COMP_QUALIFIER = "comp.qualifier" + COMP_TITLE = "comp.title" + LOC = "loc" + LOC_ADD_ELEC = "loc.add.elec" + LOC_ADD_PHYS = "loc.add.phys" + LOC_ADM_NAT = "loc.adm.nat" + LOC_ADM_REG = "loc.adm.reg" + LOC_ADM_SUP = "loc.adm.sup" + LOC_ADM_TOWN = "loc.adm.town" + LOC_FAC = "loc.fac" + LOC_ORO = "loc.oro" + LOC_PHYS_ASTRO = "loc.phys.astro" + LOC_PHYS_GEO = "loc.phys.geo" + LOC_PHYS_HYDRO = "loc.phys.hydro" + LOC_UNK = "loc.unk" + ORG = "org" + ORG_ADM = "org.adm" + ORG_ENT = "org.ent" + ORG_ENT_PRESSAGENCY = "org.ent.pressagency" + PERS = "pers" + PERS_COLL = "pers.coll" + PERS_IND = "pers.ind" + PERS_IND_ARTICLEAUTHOR = "pers.ind.articleauthor" + PROD = "prod" + PROD_DOCTR = "prod.doctr" + PROD_MEDIA = "prod.media" + TIME = "time" + TIME_DATE_ABS = "time.date.abs" + TIME_HOUR_ABS = "time.hour.abs" + + def __str__(self) -> str: + return str(self.value) + + +ImpressoNamedEntityRecognitionEntityTypeLiteral = Literal[ + "comp.demonym", + "comp.function", + "comp.name", + "comp.qualifier", + "comp.title", + "loc", + "loc.add.elec", + "loc.add.phys", + "loc.adm.nat", + "loc.adm.reg", + "loc.adm.sup", + "loc.adm.town", + "loc.fac", + "loc.oro", + "loc.phys.astro", + "loc.phys.geo", + "loc.phys.hydro", + "loc.unk", + "org", + "org.adm", + "org.ent", + "org.ent.pressagency", + "pers", + "pers.coll", + "pers.ind", + "pers.ind.articleauthor", + "prod", + "prod.doctr", + "prod.media", + "time", + "time.date.abs", + "time.hour.abs", +] diff --git a/impresso/api_client/models/impresso_named_entity_recognition_request.py b/impresso/api_client/models/impresso_named_entity_recognition_request.py new file mode 100644 index 0000000..6a3b01c --- /dev/null +++ b/impresso/api_client/models/impresso_named_entity_recognition_request.py @@ -0,0 +1,39 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="ImpressoNamedEntityRecognitionRequest") + + +@_attrs_define +class ImpressoNamedEntityRecognitionRequest: + """Request body for the Impresso NER endpoint + + Attributes: + text (str): Text to be processed for named entity recognition + """ + + text: str + + def to_dict(self) -> Dict[str, Any]: + text = self.text + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "text": text, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + text = d.pop("text") + + impresso_named_entity_recognition_request = cls( + text=text, + ) + + return impresso_named_entity_recognition_request diff --git a/impresso/api_client/models/impresso_named_entity_recognition_response.py b/impresso/api_client/models/impresso_named_entity_recognition_response.py new file mode 100644 index 0000000..aabee0a --- /dev/null +++ b/impresso/api_client/models/impresso_named_entity_recognition_response.py @@ -0,0 +1,79 @@ +import datetime +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +if TYPE_CHECKING: + from ..models.impresso_named_entity_recognition_entity import ImpressoNamedEntityRecognitionEntity + + +T = TypeVar("T", bound="ImpressoNamedEntityRecognitionResponse") + + +@_attrs_define +class ImpressoNamedEntityRecognitionResponse: + """Response of the Impresso NER endpoint + + Attributes: + model_id (str): ID of the model used for the named entity recognition + text (str): Text processed for named entity recognition + timestamp (datetime.datetime): Timestamp of when named entity recognition was performed + entities (List['ImpressoNamedEntityRecognitionEntity']): + """ + + model_id: str + text: str + timestamp: datetime.datetime + entities: List["ImpressoNamedEntityRecognitionEntity"] + + def to_dict(self) -> Dict[str, Any]: + model_id = self.model_id + + text = self.text + + timestamp = self.timestamp.isoformat() + + entities = [] + for entities_item_data in self.entities: + entities_item = entities_item_data.to_dict() + entities.append(entities_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "modelId": model_id, + "text": text, + "timestamp": timestamp, + "entities": entities, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.impresso_named_entity_recognition_entity import ImpressoNamedEntityRecognitionEntity + + d = src_dict.copy() + model_id = d.pop("modelId") + + text = d.pop("text") + + timestamp = isoparse(d.pop("timestamp")) + + entities = [] + _entities = d.pop("entities") + for entities_item_data in _entities: + entities_item = ImpressoNamedEntityRecognitionEntity.from_dict(entities_item_data) + + entities.append(entities_item) + + impresso_named_entity_recognition_response = cls( + model_id=model_id, + text=text, + timestamp=timestamp, + entities=entities, + ) + + return impresso_named_entity_recognition_response diff --git a/impresso/api_client/models/location_specific_fields.py b/impresso/api_client/models/location_specific_fields.py new file mode 100644 index 0000000..73bdc1c --- /dev/null +++ b/impresso/api_client/models/location_specific_fields.py @@ -0,0 +1,109 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.location_specific_fields_descriptions import LocationSpecificFieldsDescriptions + from ..models.location_specific_fields_images_item import LocationSpecificFieldsImagesItem + from ..models.location_specific_fields_labels import LocationSpecificFieldsLabels + + +T = TypeVar("T", bound="LocationSpecificFields") + + +@_attrs_define +class LocationSpecificFields: + """Details of a wikidata entity + + Attributes: + id (str): + type (str): + labels (LocationSpecificFieldsLabels): Labels of the entity. Key is the language code. + descriptions (LocationSpecificFieldsDescriptions): Labels of the entity. Key is the language code. + images (List['LocationSpecificFieldsImagesItem']): + """ + + id: str + type: str + labels: "LocationSpecificFieldsLabels" + descriptions: "LocationSpecificFieldsDescriptions" + images: List["LocationSpecificFieldsImagesItem"] + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + type = self.type + + labels = self.labels.to_dict() + + descriptions = self.descriptions.to_dict() + + images = [] + for images_item_data in self.images: + images_item = images_item_data.to_dict() + images.append(images_item) + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "id": id, + "type": type, + "labels": labels, + "descriptions": descriptions, + "images": images, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.location_specific_fields_descriptions import LocationSpecificFieldsDescriptions + from ..models.location_specific_fields_images_item import LocationSpecificFieldsImagesItem + from ..models.location_specific_fields_labels import LocationSpecificFieldsLabels + + d = src_dict.copy() + id = d.pop("id") + + type = d.pop("type") + + labels = LocationSpecificFieldsLabels.from_dict(d.pop("labels")) + + descriptions = LocationSpecificFieldsDescriptions.from_dict(d.pop("descriptions")) + + images = [] + _images = d.pop("images") + for images_item_data in _images: + images_item = LocationSpecificFieldsImagesItem.from_dict(images_item_data) + + images.append(images_item) + + location_specific_fields = cls( + id=id, + type=type, + labels=labels, + descriptions=descriptions, + images=images, + ) + + location_specific_fields.additional_properties = d + return location_specific_fields + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/location_specific_fields_descriptions.py b/impresso/api_client/models/location_specific_fields_descriptions.py new file mode 100644 index 0000000..55a4b47 --- /dev/null +++ b/impresso/api_client/models/location_specific_fields_descriptions.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="LocationSpecificFieldsDescriptions") + + +@_attrs_define +class LocationSpecificFieldsDescriptions: + """Labels of the entity. Key is the language code.""" + + additional_properties: Dict[str, str] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + location_specific_fields_descriptions = cls() + + location_specific_fields_descriptions.additional_properties = d + return location_specific_fields_descriptions + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/location_specific_fields_images_item.py b/impresso/api_client/models/location_specific_fields_images_item.py new file mode 100644 index 0000000..54db9e8 --- /dev/null +++ b/impresso/api_client/models/location_specific_fields_images_item.py @@ -0,0 +1,74 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="LocationSpecificFieldsImagesItem") + + +@_attrs_define +class LocationSpecificFieldsImagesItem: + """ + Attributes: + value (str): + rank (str): + datatype (str): + """ + + value: str + rank: str + datatype: str + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + value = self.value + + rank = self.rank + + datatype = self.datatype + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "value": value, + "rank": rank, + "datatype": datatype, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + value = d.pop("value") + + rank = d.pop("rank") + + datatype = d.pop("datatype") + + location_specific_fields_images_item = cls( + value=value, + rank=rank, + datatype=datatype, + ) + + location_specific_fields_images_item.additional_properties = d + return location_specific_fields_images_item + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/location_specific_fields_labels.py b/impresso/api_client/models/location_specific_fields_labels.py new file mode 100644 index 0000000..a547ea0 --- /dev/null +++ b/impresso/api_client/models/location_specific_fields_labels.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="LocationSpecificFieldsLabels") + + +@_attrs_define +class LocationSpecificFieldsLabels: + """Labels of the entity. Key is the language code.""" + + additional_properties: Dict[str, str] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + location_specific_fields_labels = cls() + + location_specific_fields_labels.additional_properties = d + return location_specific_fields_labels + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/new_collection.py b/impresso/api_client/models/new_collection.py new file mode 100644 index 0000000..241f0d7 --- /dev/null +++ b/impresso/api_client/models/new_collection.py @@ -0,0 +1,59 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="NewCollection") + + +@_attrs_define +class NewCollection: + """Create new collection request + + Attributes: + name (str): + description (Union[Unset, str]): + status (Union[Unset, str]): Example: PRI. + """ + + name: str + description: Union[Unset, str] = UNSET + status: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + name = self.name + + description = self.description + + status = self.status + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "name": name, + } + ) + if description is not UNSET: + field_dict["description"] = description + if status is not UNSET: + field_dict["status"] = status + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + name = d.pop("name") + + description = d.pop("description", UNSET) + + status = d.pop("status", UNSET) + + new_collection = cls( + name=name, + description=description, + status=status, + ) + + return new_collection diff --git a/impresso/api_client/models/newspaper.py b/impresso/api_client/models/newspaper.py new file mode 100644 index 0000000..a1913eb --- /dev/null +++ b/impresso/api_client/models/newspaper.py @@ -0,0 +1,209 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.newspaper_issue import NewspaperIssue + from ..models.newspaper_property import NewspaperProperty + + +T = TypeVar("T", bound="Newspaper") + + +@_attrs_define +class Newspaper: + """A newspaper + + Attributes: + uid (str): The unique identifier of the newspaper + acronym (str): The acronym of the newspaper + labels (List[str]): The labels of the newspaper + languages (List[str]): Language codes of the languages used in the newspaper + included (bool): TODO + name (str): Title of the newspaper + end_year (Union[None, int]): + start_year (Union[None, int]): + count_articles (int): The number of articles in the newspaper + count_issues (int): The number of issues in the newspaper + count_pages (int): The number of pages in the newspaper + delta_year (int): The number of years of the newspaper available + properties (Union[Unset, List['NewspaperProperty']]): TODO + first_issue (Union[Unset, NewspaperIssue]): + last_issue (Union[Unset, NewspaperIssue]): + fetched (Union[Unset, bool]): TODO + """ + + uid: str + acronym: str + labels: List[str] + languages: List[str] + included: bool + name: str + end_year: Union[None, int] + start_year: Union[None, int] + count_articles: int + count_issues: int + count_pages: int + delta_year: int + properties: Union[Unset, List["NewspaperProperty"]] = UNSET + first_issue: Union[Unset, "NewspaperIssue"] = UNSET + last_issue: Union[Unset, "NewspaperIssue"] = UNSET + fetched: Union[Unset, bool] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + acronym = self.acronym + + labels = self.labels + + languages = self.languages + + included = self.included + + name = self.name + + end_year: Union[None, int] + end_year = self.end_year + + start_year: Union[None, int] + start_year = self.start_year + + count_articles = self.count_articles + + count_issues = self.count_issues + + count_pages = self.count_pages + + delta_year = self.delta_year + + properties: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.properties, Unset): + properties = [] + for properties_item_data in self.properties: + properties_item = properties_item_data.to_dict() + properties.append(properties_item) + + first_issue: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.first_issue, Unset): + first_issue = self.first_issue.to_dict() + + last_issue: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.last_issue, Unset): + last_issue = self.last_issue.to_dict() + + fetched = self.fetched + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "acronym": acronym, + "labels": labels, + "languages": languages, + "included": included, + "name": name, + "endYear": end_year, + "startYear": start_year, + "countArticles": count_articles, + "countIssues": count_issues, + "countPages": count_pages, + "deltaYear": delta_year, + } + ) + if properties is not UNSET: + field_dict["properties"] = properties + if first_issue is not UNSET: + field_dict["firstIssue"] = first_issue + if last_issue is not UNSET: + field_dict["lastIssue"] = last_issue + if fetched is not UNSET: + field_dict["fetched"] = fetched + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.newspaper_issue import NewspaperIssue + from ..models.newspaper_property import NewspaperProperty + + d = src_dict.copy() + uid = d.pop("uid") + + acronym = d.pop("acronym") + + labels = cast(List[str], d.pop("labels")) + + languages = cast(List[str], d.pop("languages")) + + included = d.pop("included") + + name = d.pop("name") + + def _parse_end_year(data: object) -> Union[None, int]: + if data is None: + return data + return cast(Union[None, int], data) + + end_year = _parse_end_year(d.pop("endYear")) + + def _parse_start_year(data: object) -> Union[None, int]: + if data is None: + return data + return cast(Union[None, int], data) + + start_year = _parse_start_year(d.pop("startYear")) + + count_articles = d.pop("countArticles") + + count_issues = d.pop("countIssues") + + count_pages = d.pop("countPages") + + delta_year = d.pop("deltaYear") + + properties = [] + _properties = d.pop("properties", UNSET) + for properties_item_data in _properties or []: + properties_item = NewspaperProperty.from_dict(properties_item_data) + + properties.append(properties_item) + + _first_issue = d.pop("firstIssue", UNSET) + first_issue: Union[Unset, NewspaperIssue] + if isinstance(_first_issue, Unset): + first_issue = UNSET + else: + first_issue = NewspaperIssue.from_dict(_first_issue) + + _last_issue = d.pop("lastIssue", UNSET) + last_issue: Union[Unset, NewspaperIssue] + if isinstance(_last_issue, Unset): + last_issue = UNSET + else: + last_issue = NewspaperIssue.from_dict(_last_issue) + + fetched = d.pop("fetched", UNSET) + + newspaper = cls( + uid=uid, + acronym=acronym, + labels=labels, + languages=languages, + included=included, + name=name, + end_year=end_year, + start_year=start_year, + count_articles=count_articles, + count_issues=count_issues, + count_pages=count_pages, + delta_year=delta_year, + properties=properties, + first_issue=first_issue, + last_issue=last_issue, + fetched=fetched, + ) + + return newspaper diff --git a/impresso/api_client/models/newspaper_issue.py b/impresso/api_client/models/newspaper_issue.py new file mode 100644 index 0000000..a79f4fa --- /dev/null +++ b/impresso/api_client/models/newspaper_issue.py @@ -0,0 +1,99 @@ +import datetime +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="NewspaperIssue") + + +@_attrs_define +class NewspaperIssue: + """ + Attributes: + uid (str): The unique identifier of the issue + cover (str): TODO + labels (List[str]): The labels of the issue + fresh (bool): TODO + access_rights (str): TODO: list available options + date (Union[Unset, datetime.datetime]): The date of the issue + year (Union[Unset, str]): The year of the issue + """ + + uid: str + cover: str + labels: List[str] + fresh: bool + access_rights: str + date: Union[Unset, datetime.datetime] = UNSET + year: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + cover = self.cover + + labels = self.labels + + fresh = self.fresh + + access_rights = self.access_rights + + date: Union[Unset, str] = UNSET + if not isinstance(self.date, Unset): + date = self.date.isoformat() + + year = self.year + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "cover": cover, + "labels": labels, + "fresh": fresh, + "accessRights": access_rights, + } + ) + if date is not UNSET: + field_dict["date"] = date + if year is not UNSET: + field_dict["year"] = year + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + uid = d.pop("uid") + + cover = d.pop("cover") + + labels = cast(List[str], d.pop("labels")) + + fresh = d.pop("fresh") + + access_rights = d.pop("accessRights") + + _date = d.pop("date", UNSET) + date: Union[Unset, datetime.datetime] + if isinstance(_date, Unset): + date = UNSET + else: + date = isoparse(_date) + + year = d.pop("year", UNSET) + + newspaper_issue = cls( + uid=uid, + cover=cover, + labels=labels, + fresh=fresh, + access_rights=access_rights, + date=date, + year=year, + ) + + return newspaper_issue diff --git a/impresso/api_client/models/newspaper_property.py b/impresso/api_client/models/newspaper_property.py new file mode 100644 index 0000000..96cb71f --- /dev/null +++ b/impresso/api_client/models/newspaper_property.py @@ -0,0 +1,85 @@ +from typing import Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="NewspaperProperty") + + +@_attrs_define +class NewspaperProperty: + """ + Attributes: + name (str): The name of the property + value (str): The value of the property + label (str): The label of the property + is_url (Union[Unset, bool]): Whether the value is a URL + """ + + name: str + value: str + label: str + is_url: Union[Unset, bool] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + name = self.name + + value = self.value + + label = self.label + + is_url = self.is_url + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "name": name, + "value": value, + "label": label, + } + ) + if is_url is not UNSET: + field_dict["isUrl"] = is_url + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + name = d.pop("name") + + value = d.pop("value") + + label = d.pop("label") + + is_url = d.pop("isUrl", UNSET) + + newspaper_property = cls( + name=name, + value=value, + label=label, + is_url=is_url, + ) + + newspaper_property.additional_properties = d + return newspaper_property + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/page.py b/impresso/api_client/models/page.py new file mode 100644 index 0000000..84e2193 --- /dev/null +++ b/impresso/api_client/models/page.py @@ -0,0 +1,154 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.page_regions_item import PageRegionsItem + + +T = TypeVar("T", bound="Page") + + +@_attrs_define +class Page: + """A page of an article + + Attributes: + uid (str): The unique identifier of the page + num (int): The number of the page + issue_uid (str): Reference to the article + newspaper_uid (str): Unique ID of the newspaper + iiif (str): The IIF image file name of the page + iiif_thumbnail (str): The IIF image thumbnail file name of the page + access_rights (str): The access rights code + labels (List[str]): Page labels + has_coords (bool): Whether the page has coordinates + has_errors (bool): Whether the page has errors + regions (List['PageRegionsItem']): Regions of the page + obfuscated (Union[Unset, bool]): Whether the page image has been obfuscated because the user is not authorised + to access it + iiif_fragment (Union[Unset, str]): The IIIF fragment of the page, image file name + """ + + uid: str + num: int + issue_uid: str + newspaper_uid: str + iiif: str + iiif_thumbnail: str + access_rights: str + labels: List[str] + has_coords: bool + has_errors: bool + regions: List["PageRegionsItem"] + obfuscated: Union[Unset, bool] = UNSET + iiif_fragment: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + num = self.num + + issue_uid = self.issue_uid + + newspaper_uid = self.newspaper_uid + + iiif = self.iiif + + iiif_thumbnail = self.iiif_thumbnail + + access_rights = self.access_rights + + labels = self.labels + + has_coords = self.has_coords + + has_errors = self.has_errors + + regions = [] + for regions_item_data in self.regions: + regions_item = regions_item_data.to_dict() + regions.append(regions_item) + + obfuscated = self.obfuscated + + iiif_fragment = self.iiif_fragment + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "num": num, + "issueUid": issue_uid, + "newspaperUid": newspaper_uid, + "iiif": iiif, + "iiifThumbnail": iiif_thumbnail, + "accessRights": access_rights, + "labels": labels, + "hasCoords": has_coords, + "hasErrors": has_errors, + "regions": regions, + } + ) + if obfuscated is not UNSET: + field_dict["obfuscated"] = obfuscated + if iiif_fragment is not UNSET: + field_dict["iiifFragment"] = iiif_fragment + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.page_regions_item import PageRegionsItem + + d = src_dict.copy() + uid = d.pop("uid") + + num = d.pop("num") + + issue_uid = d.pop("issueUid") + + newspaper_uid = d.pop("newspaperUid") + + iiif = d.pop("iiif") + + iiif_thumbnail = d.pop("iiifThumbnail") + + access_rights = d.pop("accessRights") + + labels = cast(List[str], d.pop("labels")) + + has_coords = d.pop("hasCoords") + + has_errors = d.pop("hasErrors") + + regions = [] + _regions = d.pop("regions") + for regions_item_data in _regions: + regions_item = PageRegionsItem.from_dict(regions_item_data) + + regions.append(regions_item) + + obfuscated = d.pop("obfuscated", UNSET) + + iiif_fragment = d.pop("iiifFragment", UNSET) + + page = cls( + uid=uid, + num=num, + issue_uid=issue_uid, + newspaper_uid=newspaper_uid, + iiif=iiif, + iiif_thumbnail=iiif_thumbnail, + access_rights=access_rights, + labels=labels, + has_coords=has_coords, + has_errors=has_errors, + regions=regions, + obfuscated=obfuscated, + iiif_fragment=iiif_fragment, + ) + + return page diff --git a/impresso/api_client/models/page_regions_item.py b/impresso/api_client/models/page_regions_item.py new file mode 100644 index 0000000..49852ec --- /dev/null +++ b/impresso/api_client/models/page_regions_item.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="PageRegionsItem") + + +@_attrs_define +class PageRegionsItem: + """ """ + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + page_regions_item = cls() + + page_regions_item.additional_properties = d + return page_regions_item + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/remove_collection_response.py b/impresso/api_client/models/remove_collection_response.py new file mode 100644 index 0000000..0733ac6 --- /dev/null +++ b/impresso/api_client/models/remove_collection_response.py @@ -0,0 +1,55 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.remove_collection_response_params import RemoveCollectionResponseParams + from ..models.remove_collection_response_task import RemoveCollectionResponseTask + + +T = TypeVar("T", bound="RemoveCollectionResponse") + + +@_attrs_define +class RemoveCollectionResponse: + """Remove collection response + + Attributes: + params (RemoveCollectionResponseParams): + task (RemoveCollectionResponseTask): Deletion task details + """ + + params: "RemoveCollectionResponseParams" + task: "RemoveCollectionResponseTask" + + def to_dict(self) -> Dict[str, Any]: + params = self.params.to_dict() + + task = self.task.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "params": params, + "task": task, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.remove_collection_response_params import RemoveCollectionResponseParams + from ..models.remove_collection_response_task import RemoveCollectionResponseTask + + d = src_dict.copy() + params = RemoveCollectionResponseParams.from_dict(d.pop("params")) + + task = RemoveCollectionResponseTask.from_dict(d.pop("task")) + + remove_collection_response = cls( + params=params, + task=task, + ) + + return remove_collection_response diff --git a/impresso/api_client/models/remove_collection_response_params.py b/impresso/api_client/models/remove_collection_response_params.py new file mode 100644 index 0000000..214fee2 --- /dev/null +++ b/impresso/api_client/models/remove_collection_response_params.py @@ -0,0 +1,55 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..models.remove_collection_response_params_status import RemoveCollectionResponseParamsStatus +from ..types import UNSET, Unset + +T = TypeVar("T", bound="RemoveCollectionResponseParams") + + +@_attrs_define +class RemoveCollectionResponseParams: + """ + Attributes: + id (Union[Unset, str]): The collection id + status (Union[Unset, RemoveCollectionResponseParamsStatus]): The status of the operation + """ + + id: Union[Unset, str] = UNSET + status: Union[Unset, RemoveCollectionResponseParamsStatus] = UNSET + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + status: Union[Unset, str] = UNSET + if not isinstance(self.status, Unset): + status = self.status.value + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if id is not UNSET: + field_dict["id"] = id + if status is not UNSET: + field_dict["status"] = status + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + id = d.pop("id", UNSET) + + _status = d.pop("status", UNSET) + status: Union[Unset, RemoveCollectionResponseParamsStatus] + if isinstance(_status, Unset): + status = UNSET + else: + status = RemoveCollectionResponseParamsStatus(_status) + + remove_collection_response_params = cls( + id=id, + status=status, + ) + + return remove_collection_response_params diff --git a/impresso/api_client/models/remove_collection_response_params_status.py b/impresso/api_client/models/remove_collection_response_params_status.py new file mode 100644 index 0000000..d3ab186 --- /dev/null +++ b/impresso/api_client/models/remove_collection_response_params_status.py @@ -0,0 +1,12 @@ +from enum import Enum +from typing import Literal + + +class RemoveCollectionResponseParamsStatus(str, Enum): + DEL = "DEL" + + def __str__(self) -> str: + return str(self.value) + + +RemoveCollectionResponseParamsStatusLiteral = Literal["DEL",] diff --git a/impresso/api_client/models/remove_collection_response_task.py b/impresso/api_client/models/remove_collection_response_task.py new file mode 100644 index 0000000..f986e9d --- /dev/null +++ b/impresso/api_client/models/remove_collection_response_task.py @@ -0,0 +1,48 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="RemoveCollectionResponseTask") + + +@_attrs_define +class RemoveCollectionResponseTask: + """Deletion task details + + Attributes: + task_id (Union[Unset, str]): The ID of the task + creation_date (Union[Unset, str]): When task was created + """ + + task_id: Union[Unset, str] = UNSET + creation_date: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + task_id = self.task_id + + creation_date = self.creation_date + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if task_id is not UNSET: + field_dict["task_id"] = task_id + if creation_date is not UNSET: + field_dict["creationDate"] = creation_date + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + task_id = d.pop("task_id", UNSET) + + creation_date = d.pop("creationDate", UNSET) + + remove_collection_response_task = cls( + task_id=task_id, + creation_date=creation_date, + ) + + return remove_collection_response_task diff --git a/impresso/api_client/models/search_facet.py b/impresso/api_client/models/search_facet.py new file mode 100644 index 0000000..1464f7f --- /dev/null +++ b/impresso/api_client/models/search_facet.py @@ -0,0 +1,128 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.search_facet_bucket import SearchFacetBucket + from ..models.search_facet_range_bucket import SearchFacetRangeBucket + + +T = TypeVar("T", bound="SearchFacet") + + +@_attrs_define +class SearchFacet: + """An object containing search results for a facet + + Attributes: + type (str): The type of facet + num_buckets (int): The number of buckets in the facet + buckets (Union[List['SearchFacetBucket'], List['SearchFacetRangeBucket']]): + min_ (Union[Unset, Any]): TODO + max_ (Union[Unset, Any]): TODO + gap (Union[Unset, Any]): TODO + """ + + type: str + num_buckets: int + buckets: Union[List["SearchFacetBucket"], List["SearchFacetRangeBucket"]] + min_: Union[Unset, Any] = UNSET + max_: Union[Unset, Any] = UNSET + gap: Union[Unset, Any] = UNSET + + def to_dict(self) -> Dict[str, Any]: + type = self.type + + num_buckets = self.num_buckets + + buckets: List[Dict[str, Any]] + if isinstance(self.buckets, list): + buckets = [] + for buckets_type_0_item_data in self.buckets: + buckets_type_0_item = buckets_type_0_item_data.to_dict() + buckets.append(buckets_type_0_item) + + else: + buckets = [] + for buckets_type_1_item_data in self.buckets: + buckets_type_1_item = buckets_type_1_item_data.to_dict() + buckets.append(buckets_type_1_item) + + min_ = self.min_ + + max_ = self.max_ + + gap = self.gap + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "type": type, + "numBuckets": num_buckets, + "buckets": buckets, + } + ) + if min_ is not UNSET: + field_dict["min"] = min_ + if max_ is not UNSET: + field_dict["max"] = max_ + if gap is not UNSET: + field_dict["gap"] = gap + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.search_facet_bucket import SearchFacetBucket + from ..models.search_facet_range_bucket import SearchFacetRangeBucket + + d = src_dict.copy() + type = d.pop("type") + + num_buckets = d.pop("numBuckets") + + def _parse_buckets(data: object) -> Union[List["SearchFacetBucket"], List["SearchFacetRangeBucket"]]: + try: + if not isinstance(data, list): + raise TypeError() + buckets_type_0 = [] + _buckets_type_0 = data + for buckets_type_0_item_data in _buckets_type_0: + buckets_type_0_item = SearchFacetBucket.from_dict(buckets_type_0_item_data) + + buckets_type_0.append(buckets_type_0_item) + + return buckets_type_0 + except: # noqa: E722 + pass + if not isinstance(data, list): + raise TypeError() + buckets_type_1 = [] + _buckets_type_1 = data + for buckets_type_1_item_data in _buckets_type_1: + buckets_type_1_item = SearchFacetRangeBucket.from_dict(buckets_type_1_item_data) + + buckets_type_1.append(buckets_type_1_item) + + return buckets_type_1 + + buckets = _parse_buckets(d.pop("buckets")) + + min_ = d.pop("min", UNSET) + + max_ = d.pop("max", UNSET) + + gap = d.pop("gap", UNSET) + + search_facet = cls( + type=type, + num_buckets=num_buckets, + buckets=buckets, + min_=min_, + max_=max_, + gap=gap, + ) + + return search_facet diff --git a/impresso/api_client/models/search_facet_bucket.py b/impresso/api_client/models/search_facet_bucket.py new file mode 100644 index 0000000..4782b33 --- /dev/null +++ b/impresso/api_client/models/search_facet_bucket.py @@ -0,0 +1,140 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.collection import Collection + from ..models.entity import Entity + from ..models.newspaper import Newspaper + from ..models.topic import Topic + from ..models.year import Year + + +T = TypeVar("T", bound="SearchFacetBucket") + + +@_attrs_define +class SearchFacetBucket: + """Facet bucket + + Attributes: + count (int): Number of items in the bucket + val (str): Value of the 'type' element + uid (Union[Unset, str]): UID of the 'type' element. Same as 'val' + item (Union['Collection', 'Entity', 'Newspaper', 'Topic', 'Year', Unset]): The item in the bucket. Particular + objct schema depends on the facet type + """ + + count: int + val: str + uid: Union[Unset, str] = UNSET + item: Union["Collection", "Entity", "Newspaper", "Topic", "Year", Unset] = UNSET + + def to_dict(self) -> Dict[str, Any]: + from ..models.collection import Collection + from ..models.entity import Entity + from ..models.newspaper import Newspaper + from ..models.topic import Topic + + count = self.count + + val = self.val + + uid = self.uid + + item: Union[Dict[str, Any], Unset] + if isinstance(self.item, Unset): + item = UNSET + elif isinstance(self.item, Newspaper): + item = self.item.to_dict() + elif isinstance(self.item, Collection): + item = self.item.to_dict() + elif isinstance(self.item, Entity): + item = self.item.to_dict() + elif isinstance(self.item, Topic): + item = self.item.to_dict() + else: + item = self.item.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "count": count, + "val": val, + } + ) + if uid is not UNSET: + field_dict["uid"] = uid + if item is not UNSET: + field_dict["item"] = item + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.collection import Collection + from ..models.entity import Entity + from ..models.newspaper import Newspaper + from ..models.topic import Topic + from ..models.year import Year + + d = src_dict.copy() + count = d.pop("count") + + val = d.pop("val") + + uid = d.pop("uid", UNSET) + + def _parse_item(data: object) -> Union["Collection", "Entity", "Newspaper", "Topic", "Year", Unset]: + if isinstance(data, Unset): + return data + try: + if not isinstance(data, dict): + raise TypeError() + item_type_0 = Newspaper.from_dict(data) + + return item_type_0 + except: # noqa: E722 + pass + try: + if not isinstance(data, dict): + raise TypeError() + item_type_1 = Collection.from_dict(data) + + return item_type_1 + except: # noqa: E722 + pass + try: + if not isinstance(data, dict): + raise TypeError() + item_type_2 = Entity.from_dict(data) + + return item_type_2 + except: # noqa: E722 + pass + try: + if not isinstance(data, dict): + raise TypeError() + item_type_3 = Topic.from_dict(data) + + return item_type_3 + except: # noqa: E722 + pass + if not isinstance(data, dict): + raise TypeError() + item_type_4 = Year.from_dict(data) + + return item_type_4 + + item = _parse_item(d.pop("item", UNSET)) + + search_facet_bucket = cls( + count=count, + val=val, + uid=uid, + item=item, + ) + + return search_facet_bucket diff --git a/impresso/api_client/models/search_facet_range_bucket.py b/impresso/api_client/models/search_facet_range_bucket.py new file mode 100644 index 0000000..c7760b8 --- /dev/null +++ b/impresso/api_client/models/search_facet_range_bucket.py @@ -0,0 +1,67 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="SearchFacetRangeBucket") + + +@_attrs_define +class SearchFacetRangeBucket: + """Facet bucket + + Attributes: + count (int): Number of items in the bucket + val (int): Value of the 'type' element + lower (Union[Unset, int]): Lower bound of the range + upper (Union[Unset, int]): Lower bound of the range + """ + + count: int + val: int + lower: Union[Unset, int] = UNSET + upper: Union[Unset, int] = UNSET + + def to_dict(self) -> Dict[str, Any]: + count = self.count + + val = self.val + + lower = self.lower + + upper = self.upper + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "count": count, + "val": val, + } + ) + if lower is not UNSET: + field_dict["lower"] = lower + if upper is not UNSET: + field_dict["upper"] = upper + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + count = d.pop("count") + + val = d.pop("val") + + lower = d.pop("lower", UNSET) + + upper = d.pop("upper", UNSET) + + search_facet_range_bucket = cls( + count=count, + val=val, + lower=lower, + upper=upper, + ) + + return search_facet_range_bucket diff --git a/impresso/api_client/models/search_facets.py b/impresso/api_client/models/search_facets.py new file mode 100644 index 0000000..7dea955 --- /dev/null +++ b/impresso/api_client/models/search_facets.py @@ -0,0 +1,42 @@ +from enum import Enum +from typing import Literal + + +class SearchFacets(str, Enum): + ACCESSRIGHT = "accessRight" + COLLECTION = "collection" + CONTENTLENGTH = "contentLength" + COUNTRY = "country" + DATERANGE = "daterange" + LANGUAGE = "language" + LOCATION = "location" + MONTH = "month" + NAG = "nag" + NEWSPAPER = "newspaper" + PARTNER = "partner" + PERSON = "person" + TOPIC = "topic" + TYPE = "type" + YEAR = "year" + + def __str__(self) -> str: + return str(self.value) + + +SearchFacetsLiteral = Literal[ + "accessRight", + "collection", + "contentLength", + "country", + "daterange", + "language", + "location", + "month", + "nag", + "newspaper", + "partner", + "person", + "topic", + "type", + "year", +] diff --git a/impresso/api_client/models/search_group_by.py b/impresso/api_client/models/search_group_by.py new file mode 100644 index 0000000..7c22108 --- /dev/null +++ b/impresso/api_client/models/search_group_by.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import Literal + + +class SearchGroupBy(str, Enum): + ARTICLES = "articles" + RAW = "raw" + + def __str__(self) -> str: + return str(self.value) + + +SearchGroupByLiteral = Literal[ + "articles", + "raw", +] diff --git a/impresso/api_client/models/search_order_by.py b/impresso/api_client/models/search_order_by.py new file mode 100644 index 0000000..664ce40 --- /dev/null +++ b/impresso/api_client/models/search_order_by.py @@ -0,0 +1,24 @@ +from enum import Enum +from typing import Literal + + +class SearchOrderBy(str, Enum): + DATE = "date" + ID = "id" + RELEVANCE = "relevance" + VALUE_0 = "-date" + VALUE_2 = "-relevance" + VALUE_5 = "-id" + + def __str__(self) -> str: + return str(self.value) + + +SearchOrderByLiteral = Literal[ + "date", + "id", + "relevance", + "-date", + "-relevance", + "-id", +] diff --git a/impresso/api_client/models/search_response_200.py b/impresso/api_client/models/search_response_200.py new file mode 100644 index 0000000..e51107e --- /dev/null +++ b/impresso/api_client/models/search_response_200.py @@ -0,0 +1,86 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.article import Article + from ..models.search_response_200_info import SearchResponse200Info + + +T = TypeVar("T", bound="SearchResponse200") + + +@_attrs_define +class SearchResponse200: + """ + Attributes: + limit (int): The number of items returned in this response + offset (int): Starting index of the items subset returned in this response + total (int): The total number of items matching the query + info (SearchResponse200Info): Additional information about the response. + data (List['Article']): + """ + + limit: int + offset: int + total: int + info: "SearchResponse200Info" + data: List["Article"] + + def to_dict(self) -> Dict[str, Any]: + limit = self.limit + + offset = self.offset + + total = self.total + + info = self.info.to_dict() + + data = [] + for data_item_data in self.data: + data_item = data_item_data.to_dict() + data.append(data_item) + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "limit": limit, + "offset": offset, + "total": total, + "info": info, + "data": data, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.article import Article + from ..models.search_response_200_info import SearchResponse200Info + + d = src_dict.copy() + limit = d.pop("limit") + + offset = d.pop("offset") + + total = d.pop("total") + + info = SearchResponse200Info.from_dict(d.pop("info")) + + data = [] + _data = d.pop("data") + for data_item_data in _data: + data_item = Article.from_dict(data_item_data) + + data.append(data_item) + + search_response_200 = cls( + limit=limit, + offset=offset, + total=total, + info=info, + data=data, + ) + + return search_response_200 diff --git a/impresso/api_client/models/search_response_200_info.py b/impresso/api_client/models/search_response_200_info.py new file mode 100644 index 0000000..85c345c --- /dev/null +++ b/impresso/api_client/models/search_response_200_info.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="SearchResponse200Info") + + +@_attrs_define +class SearchResponse200Info: + """Additional information about the response.""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + search_response_200_info = cls() + + search_response_200_info.additional_properties = d + return search_response_200_info + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/text_reuse_cluster.py b/impresso/api_client/models/text_reuse_cluster.py new file mode 100644 index 0000000..8c317e3 --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster.py @@ -0,0 +1,90 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.text_reuse_cluster_time_coverage import TextReuseClusterTimeCoverage + + +T = TypeVar("T", bound="TextReuseCluster") + + +@_attrs_define +class TextReuseCluster: + """Represents a cluster of text reuse passages + + Attributes: + id (str): ID of the text reuse passage Example: abc123. + lexical_overlap (Union[Unset, float]): Percentage of overlap between passages in the cluster + cluster_size (Union[Unset, float]): Number of passages in cluster + connected_clusters_count (Union[Unset, float]): Number of connected clusters + time_coverage (Union[Unset, TextReuseClusterTimeCoverage]): Time window covered by documents in the cluster + """ + + id: str + lexical_overlap: Union[Unset, float] = UNSET + cluster_size: Union[Unset, float] = UNSET + connected_clusters_count: Union[Unset, float] = UNSET + time_coverage: Union[Unset, "TextReuseClusterTimeCoverage"] = UNSET + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + lexical_overlap = self.lexical_overlap + + cluster_size = self.cluster_size + + connected_clusters_count = self.connected_clusters_count + + time_coverage: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.time_coverage, Unset): + time_coverage = self.time_coverage.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + } + ) + if lexical_overlap is not UNSET: + field_dict["lexicalOverlap"] = lexical_overlap + if cluster_size is not UNSET: + field_dict["clusterSize"] = cluster_size + if connected_clusters_count is not UNSET: + field_dict["connectedClustersCount"] = connected_clusters_count + if time_coverage is not UNSET: + field_dict["timeCoverage"] = time_coverage + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.text_reuse_cluster_time_coverage import TextReuseClusterTimeCoverage + + d = src_dict.copy() + id = d.pop("id") + + lexical_overlap = d.pop("lexicalOverlap", UNSET) + + cluster_size = d.pop("clusterSize", UNSET) + + connected_clusters_count = d.pop("connectedClustersCount", UNSET) + + _time_coverage = d.pop("timeCoverage", UNSET) + time_coverage: Union[Unset, TextReuseClusterTimeCoverage] + if isinstance(_time_coverage, Unset): + time_coverage = UNSET + else: + time_coverage = TextReuseClusterTimeCoverage.from_dict(_time_coverage) + + text_reuse_cluster = cls( + id=id, + lexical_overlap=lexical_overlap, + cluster_size=cluster_size, + connected_clusters_count=connected_clusters_count, + time_coverage=time_coverage, + ) + + return text_reuse_cluster diff --git a/impresso/api_client/models/text_reuse_cluster_compound.py b/impresso/api_client/models/text_reuse_cluster_compound.py new file mode 100644 index 0000000..d41751d --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster_compound.py @@ -0,0 +1,81 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.text_reuse_cluster import TextReuseCluster + from ..models.text_reuse_cluster_details import TextReuseClusterDetails + + +T = TypeVar("T", bound="TextReuseClusterCompound") + + +@_attrs_define +class TextReuseClusterCompound: + """Text reuse cluster with details and a sample + + Attributes: + text_sample (str): + cluster (Union[Unset, TextReuseCluster]): Represents a cluster of text reuse passages + details (Union[Unset, TextReuseClusterDetails]): Extra details of the cluster + """ + + text_sample: str + cluster: Union[Unset, "TextReuseCluster"] = UNSET + details: Union[Unset, "TextReuseClusterDetails"] = UNSET + + def to_dict(self) -> Dict[str, Any]: + text_sample = self.text_sample + + cluster: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.cluster, Unset): + cluster = self.cluster.to_dict() + + details: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.details, Unset): + details = self.details.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "textSample": text_sample, + } + ) + if cluster is not UNSET: + field_dict["cluster"] = cluster + if details is not UNSET: + field_dict["details"] = details + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.text_reuse_cluster import TextReuseCluster + from ..models.text_reuse_cluster_details import TextReuseClusterDetails + + d = src_dict.copy() + text_sample = d.pop("textSample") + + _cluster = d.pop("cluster", UNSET) + cluster: Union[Unset, TextReuseCluster] + if isinstance(_cluster, Unset): + cluster = UNSET + else: + cluster = TextReuseCluster.from_dict(_cluster) + + _details = d.pop("details", UNSET) + details: Union[Unset, TextReuseClusterDetails] + if isinstance(_details, Unset): + details = UNSET + else: + details = TextReuseClusterDetails.from_dict(_details) + + text_reuse_cluster_compound = cls( + text_sample=text_sample, + cluster=cluster, + details=details, + ) + + return text_reuse_cluster_compound diff --git a/impresso/api_client/models/text_reuse_cluster_details.py b/impresso/api_client/models/text_reuse_cluster_details.py new file mode 100644 index 0000000..dad8b6e --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster_details.py @@ -0,0 +1,72 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..models.text_reuse_cluster_details_resolution import TextReuseClusterDetailsResolution +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.text_reuse_cluster_details_facets_item import TextReuseClusterDetailsFacetsItem + + +T = TypeVar("T", bound="TextReuseClusterDetails") + + +@_attrs_define +class TextReuseClusterDetails: + """Extra details of the cluster + + Attributes: + facets (List['TextReuseClusterDetailsFacetsItem']): + resolution (Union[Unset, TextReuseClusterDetailsResolution]): Resolution for the 'date' facet + """ + + facets: List["TextReuseClusterDetailsFacetsItem"] + resolution: Union[Unset, TextReuseClusterDetailsResolution] = UNSET + + def to_dict(self) -> Dict[str, Any]: + facets = [] + for facets_item_data in self.facets: + facets_item = facets_item_data.to_dict() + facets.append(facets_item) + + resolution: Union[Unset, str] = UNSET + if not isinstance(self.resolution, Unset): + resolution = self.resolution.value + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "facets": facets, + } + ) + if resolution is not UNSET: + field_dict["resolution"] = resolution + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.text_reuse_cluster_details_facets_item import TextReuseClusterDetailsFacetsItem + + d = src_dict.copy() + facets = [] + _facets = d.pop("facets") + for facets_item_data in _facets: + facets_item = TextReuseClusterDetailsFacetsItem.from_dict(facets_item_data) + + facets.append(facets_item) + + _resolution = d.pop("resolution", UNSET) + resolution: Union[Unset, TextReuseClusterDetailsResolution] + if isinstance(_resolution, Unset): + resolution = UNSET + else: + resolution = TextReuseClusterDetailsResolution(_resolution) + + text_reuse_cluster_details = cls( + facets=facets, + resolution=resolution, + ) + + return text_reuse_cluster_details diff --git a/impresso/api_client/models/text_reuse_cluster_details_facets_item.py b/impresso/api_client/models/text_reuse_cluster_details_facets_item.py new file mode 100644 index 0000000..f0dd522 --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster_details_facets_item.py @@ -0,0 +1,76 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.text_reuse_cluster_details_facets_item_buckets_item import ( + TextReuseClusterDetailsFacetsItemBucketsItem, + ) + + +T = TypeVar("T", bound="TextReuseClusterDetailsFacetsItem") + + +@_attrs_define +class TextReuseClusterDetailsFacetsItem: + """ + Attributes: + type (Union[Unset, str]): Facet type + num_buckets (Union[Unset, int]): Number of buckets + buckets (Union[Unset, List['TextReuseClusterDetailsFacetsItemBucketsItem']]): + """ + + type: Union[Unset, str] = UNSET + num_buckets: Union[Unset, int] = UNSET + buckets: Union[Unset, List["TextReuseClusterDetailsFacetsItemBucketsItem"]] = UNSET + + def to_dict(self) -> Dict[str, Any]: + type = self.type + + num_buckets = self.num_buckets + + buckets: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.buckets, Unset): + buckets = [] + for buckets_item_data in self.buckets: + buckets_item = buckets_item_data.to_dict() + buckets.append(buckets_item) + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if type is not UNSET: + field_dict["type"] = type + if num_buckets is not UNSET: + field_dict["numBuckets"] = num_buckets + if buckets is not UNSET: + field_dict["buckets"] = buckets + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.text_reuse_cluster_details_facets_item_buckets_item import ( + TextReuseClusterDetailsFacetsItemBucketsItem, + ) + + d = src_dict.copy() + type = d.pop("type", UNSET) + + num_buckets = d.pop("numBuckets", UNSET) + + buckets = [] + _buckets = d.pop("buckets", UNSET) + for buckets_item_data in _buckets or []: + buckets_item = TextReuseClusterDetailsFacetsItemBucketsItem.from_dict(buckets_item_data) + + buckets.append(buckets_item) + + text_reuse_cluster_details_facets_item = cls( + type=type, + num_buckets=num_buckets, + buckets=buckets, + ) + + return text_reuse_cluster_details_facets_item diff --git a/impresso/api_client/models/text_reuse_cluster_details_facets_item_buckets_item.py b/impresso/api_client/models/text_reuse_cluster_details_facets_item_buckets_item.py new file mode 100644 index 0000000..a43269f --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster_details_facets_item_buckets_item.py @@ -0,0 +1,43 @@ +from typing import Any, Dict, List, Type, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="TextReuseClusterDetailsFacetsItemBucketsItem") + + +@_attrs_define +class TextReuseClusterDetailsFacetsItemBucketsItem: + """TODO: define bucket fields""" + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + text_reuse_cluster_details_facets_item_buckets_item = cls() + + text_reuse_cluster_details_facets_item_buckets_item.additional_properties = d + return text_reuse_cluster_details_facets_item_buckets_item + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/text_reuse_cluster_details_resolution.py b/impresso/api_client/models/text_reuse_cluster_details_resolution.py new file mode 100644 index 0000000..d487749 --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster_details_resolution.py @@ -0,0 +1,18 @@ +from enum import Enum +from typing import Literal + + +class TextReuseClusterDetailsResolution(str, Enum): + DAY = "day" + MONTH = "month" + YEAR = "year" + + def __str__(self) -> str: + return str(self.value) + + +TextReuseClusterDetailsResolutionLiteral = Literal[ + "day", + "month", + "year", +] diff --git a/impresso/api_client/models/text_reuse_cluster_time_coverage.py b/impresso/api_client/models/text_reuse_cluster_time_coverage.py new file mode 100644 index 0000000..0bf7cba --- /dev/null +++ b/impresso/api_client/models/text_reuse_cluster_time_coverage.py @@ -0,0 +1,64 @@ +import datetime +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="TextReuseClusterTimeCoverage") + + +@_attrs_define +class TextReuseClusterTimeCoverage: + """Time window covered by documents in the cluster + + Attributes: + from_ (Union[Unset, datetime.date]): + to (Union[Unset, datetime.date]): + """ + + from_: Union[Unset, datetime.date] = UNSET + to: Union[Unset, datetime.date] = UNSET + + def to_dict(self) -> Dict[str, Any]: + from_: Union[Unset, str] = UNSET + if not isinstance(self.from_, Unset): + from_ = self.from_.isoformat() + + to: Union[Unset, str] = UNSET + if not isinstance(self.to, Unset): + to = self.to.isoformat() + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if from_ is not UNSET: + field_dict["from"] = from_ + if to is not UNSET: + field_dict["to"] = to + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + _from_ = d.pop("from", UNSET) + from_: Union[Unset, datetime.date] + if isinstance(_from_, Unset): + from_ = UNSET + else: + from_ = isoparse(_from_).date() + + _to = d.pop("to", UNSET) + to: Union[Unset, datetime.date] + if isinstance(_to, Unset): + to = UNSET + else: + to = isoparse(_to).date() + + text_reuse_cluster_time_coverage = cls( + from_=from_, + to=to, + ) + + return text_reuse_cluster_time_coverage diff --git a/impresso/api_client/models/text_reuse_passage.py b/impresso/api_client/models/text_reuse_passage.py new file mode 100644 index 0000000..2124ea8 --- /dev/null +++ b/impresso/api_client/models/text_reuse_passage.py @@ -0,0 +1,220 @@ +import datetime +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.text_reuse_passage_article_details import TextReusePassageArticleDetails + from ..models.text_reuse_passage_cluster_details import TextReusePassageClusterDetails + from ..models.text_reuse_passage_connected_clusters_item import TextReusePassageConnectedClustersItem + from ..models.text_reuse_passage_issue import TextReusePassageIssue + + +T = TypeVar("T", bound="TextReusePassage") + + +@_attrs_define +class TextReusePassage: + """Represents a passage of text that was identified as a part of a text reuse cluster + + Attributes: + id (str): ID of the text reuse passage Example: abc123. + article (TextReusePassageArticleDetails): Details of the article the passage belongs to + text_reuse_cluster (TextReusePassageClusterDetails): Details of the cluster the passage belongs to + offset_start (Union[None, int]): + offset_end (Union[None, int]): + content (str): Textual content of the passage + title (str): Title of the content item (article) where this passage was found + page_numbers (List[int]): Numbers of the pages where the passage was found + collections (List[str]): Collection IDs the passage belongs to + connected_clusters (Union[Unset, List['TextReusePassageConnectedClustersItem']]): + is_front (Union[Unset, bool]): TBD + size (Union[Unset, int]): Size of the passage + newspaper (Union[Unset, Any]): + issue (Union[Unset, TextReusePassageIssue]): Issue details + date (Union[Unset, datetime.datetime]): Date of the item (article) where this passage was found + page_regions (Union[Unset, List[str]]): Bounding box of the passage in the page + """ + + id: str + article: "TextReusePassageArticleDetails" + text_reuse_cluster: "TextReusePassageClusterDetails" + offset_start: Union[None, int] + offset_end: Union[None, int] + content: str + title: str + page_numbers: List[int] + collections: List[str] + connected_clusters: Union[Unset, List["TextReusePassageConnectedClustersItem"]] = UNSET + is_front: Union[Unset, bool] = UNSET + size: Union[Unset, int] = UNSET + newspaper: Union[Unset, Any] = UNSET + issue: Union[Unset, "TextReusePassageIssue"] = UNSET + date: Union[Unset, datetime.datetime] = UNSET + page_regions: Union[Unset, List[str]] = UNSET + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + article = self.article.to_dict() + + text_reuse_cluster = self.text_reuse_cluster.to_dict() + + offset_start: Union[None, int] + offset_start = self.offset_start + + offset_end: Union[None, int] + offset_end = self.offset_end + + content = self.content + + title = self.title + + page_numbers = self.page_numbers + + collections = self.collections + + connected_clusters: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.connected_clusters, Unset): + connected_clusters = [] + for connected_clusters_item_data in self.connected_clusters: + connected_clusters_item = connected_clusters_item_data.to_dict() + connected_clusters.append(connected_clusters_item) + + is_front = self.is_front + + size = self.size + + newspaper = self.newspaper + + issue: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.issue, Unset): + issue = self.issue.to_dict() + + date: Union[Unset, str] = UNSET + if not isinstance(self.date, Unset): + date = self.date.isoformat() + + page_regions: Union[Unset, List[str]] = UNSET + if not isinstance(self.page_regions, Unset): + page_regions = self.page_regions + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + "article": article, + "textReuseCluster": text_reuse_cluster, + "offsetStart": offset_start, + "offsetEnd": offset_end, + "content": content, + "title": title, + "pageNumbers": page_numbers, + "collections": collections, + } + ) + if connected_clusters is not UNSET: + field_dict["connectedClusters"] = connected_clusters + if is_front is not UNSET: + field_dict["isFront"] = is_front + if size is not UNSET: + field_dict["size"] = size + if newspaper is not UNSET: + field_dict["newspaper"] = newspaper + if issue is not UNSET: + field_dict["issue"] = issue + if date is not UNSET: + field_dict["date"] = date + if page_regions is not UNSET: + field_dict["pageRegions"] = page_regions + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.text_reuse_passage_article_details import TextReusePassageArticleDetails + from ..models.text_reuse_passage_cluster_details import TextReusePassageClusterDetails + from ..models.text_reuse_passage_connected_clusters_item import TextReusePassageConnectedClustersItem + from ..models.text_reuse_passage_issue import TextReusePassageIssue + + d = src_dict.copy() + id = d.pop("id") + + article = TextReusePassageArticleDetails.from_dict(d.pop("article")) + + text_reuse_cluster = TextReusePassageClusterDetails.from_dict(d.pop("textReuseCluster")) + + def _parse_offset_start(data: object) -> Union[None, int]: + if data is None: + return data + return cast(Union[None, int], data) + + offset_start = _parse_offset_start(d.pop("offsetStart")) + + def _parse_offset_end(data: object) -> Union[None, int]: + if data is None: + return data + return cast(Union[None, int], data) + + offset_end = _parse_offset_end(d.pop("offsetEnd")) + + content = d.pop("content") + + title = d.pop("title") + + page_numbers = cast(List[int], d.pop("pageNumbers")) + + collections = cast(List[str], d.pop("collections")) + + connected_clusters = [] + _connected_clusters = d.pop("connectedClusters", UNSET) + for connected_clusters_item_data in _connected_clusters or []: + connected_clusters_item = TextReusePassageConnectedClustersItem.from_dict(connected_clusters_item_data) + + connected_clusters.append(connected_clusters_item) + + is_front = d.pop("isFront", UNSET) + + size = d.pop("size", UNSET) + + newspaper = d.pop("newspaper", UNSET) + + _issue = d.pop("issue", UNSET) + issue: Union[Unset, TextReusePassageIssue] + if isinstance(_issue, Unset): + issue = UNSET + else: + issue = TextReusePassageIssue.from_dict(_issue) + + _date = d.pop("date", UNSET) + date: Union[Unset, datetime.datetime] + if isinstance(_date, Unset): + date = UNSET + else: + date = isoparse(_date) + + page_regions = cast(List[str], d.pop("pageRegions", UNSET)) + + text_reuse_passage = cls( + id=id, + article=article, + text_reuse_cluster=text_reuse_cluster, + offset_start=offset_start, + offset_end=offset_end, + content=content, + title=title, + page_numbers=page_numbers, + collections=collections, + connected_clusters=connected_clusters, + is_front=is_front, + size=size, + newspaper=newspaper, + issue=issue, + date=date, + page_regions=page_regions, + ) + + return text_reuse_passage diff --git a/impresso/api_client/models/text_reuse_passage_article_details.py b/impresso/api_client/models/text_reuse_passage_article_details.py new file mode 100644 index 0000000..1b7686e --- /dev/null +++ b/impresso/api_client/models/text_reuse_passage_article_details.py @@ -0,0 +1,39 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="TextReusePassageArticleDetails") + + +@_attrs_define +class TextReusePassageArticleDetails: + """Details of the article the passage belongs to + + Attributes: + id (str): ID of the article + """ + + id: str + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + id = d.pop("id") + + text_reuse_passage_article_details = cls( + id=id, + ) + + return text_reuse_passage_article_details diff --git a/impresso/api_client/models/text_reuse_passage_cluster_details.py b/impresso/api_client/models/text_reuse_passage_cluster_details.py new file mode 100644 index 0000000..68e47c4 --- /dev/null +++ b/impresso/api_client/models/text_reuse_passage_cluster_details.py @@ -0,0 +1,68 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="TextReusePassageClusterDetails") + + +@_attrs_define +class TextReusePassageClusterDetails: + """Details of the cluster the passage belongs to + + Attributes: + id (str): ID of the cluster + cluster_size (Union[Unset, int]): The size of the cluster + time_difference_day (Union[Unset, int]): The time difference in days between the two articles + lexical_overlap (Union[Unset, float]): The lexical overlap between the two articles + """ + + id: str + cluster_size: Union[Unset, int] = UNSET + time_difference_day: Union[Unset, int] = UNSET + lexical_overlap: Union[Unset, float] = UNSET + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + cluster_size = self.cluster_size + + time_difference_day = self.time_difference_day + + lexical_overlap = self.lexical_overlap + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + } + ) + if cluster_size is not UNSET: + field_dict["clusterSize"] = cluster_size + if time_difference_day is not UNSET: + field_dict["timeDifferenceDay"] = time_difference_day + if lexical_overlap is not UNSET: + field_dict["lexicalOverlap"] = lexical_overlap + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + id = d.pop("id") + + cluster_size = d.pop("clusterSize", UNSET) + + time_difference_day = d.pop("timeDifferenceDay", UNSET) + + lexical_overlap = d.pop("lexicalOverlap", UNSET) + + text_reuse_passage_cluster_details = cls( + id=id, + cluster_size=cluster_size, + time_difference_day=time_difference_day, + lexical_overlap=lexical_overlap, + ) + + return text_reuse_passage_cluster_details diff --git a/impresso/api_client/models/text_reuse_passage_connected_clusters_item.py b/impresso/api_client/models/text_reuse_passage_connected_clusters_item.py new file mode 100644 index 0000000..e2bdb3c --- /dev/null +++ b/impresso/api_client/models/text_reuse_passage_connected_clusters_item.py @@ -0,0 +1,39 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="TextReusePassageConnectedClustersItem") + + +@_attrs_define +class TextReusePassageConnectedClustersItem: + """Details of the connected clusters + + Attributes: + id (str): ID of the connected cluster + """ + + id: str + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + id = d.pop("id") + + text_reuse_passage_connected_clusters_item = cls( + id=id, + ) + + return text_reuse_passage_connected_clusters_item diff --git a/impresso/api_client/models/text_reuse_passage_issue.py b/impresso/api_client/models/text_reuse_passage_issue.py new file mode 100644 index 0000000..2262941 --- /dev/null +++ b/impresso/api_client/models/text_reuse_passage_issue.py @@ -0,0 +1,39 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="TextReusePassageIssue") + + +@_attrs_define +class TextReusePassageIssue: + """Issue details + + Attributes: + id (str): ID of the issue + """ + + id: str + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + id = d.pop("id") + + text_reuse_passage_issue = cls( + id=id, + ) + + return text_reuse_passage_issue diff --git a/impresso/api_client/models/topic.py b/impresso/api_client/models/topic.py new file mode 100644 index 0000000..eec7961 --- /dev/null +++ b/impresso/api_client/models/topic.py @@ -0,0 +1,177 @@ +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.topic_related_topics_item import TopicRelatedTopicsItem + from ..models.topic_word import TopicWord + + +T = TypeVar("T", bound="Topic") + + +@_attrs_define +class Topic: + """A topic (TODO) + + Attributes: + uid (str): The unique identifier of the topic + language (str): The language code of the topic + community (Union[Unset, str]): TODO + pagerank (Union[Unset, float]): TODO + degree (Union[Unset, float]): TODO + x (Union[Unset, float]): TODO + y (Union[Unset, float]): TODO + related_topics (Union[Unset, List['TopicRelatedTopicsItem']]): + count_items (Union[Unset, float]): TODO + excerpt (Union[Unset, List['TopicWord']]): TODO + words (Union[Unset, List['TopicWord']]): TODO + model (Union[Unset, str]): ID of the model used to generate the topic + """ + + uid: str + language: str + community: Union[Unset, str] = UNSET + pagerank: Union[Unset, float] = UNSET + degree: Union[Unset, float] = UNSET + x: Union[Unset, float] = UNSET + y: Union[Unset, float] = UNSET + related_topics: Union[Unset, List["TopicRelatedTopicsItem"]] = UNSET + count_items: Union[Unset, float] = UNSET + excerpt: Union[Unset, List["TopicWord"]] = UNSET + words: Union[Unset, List["TopicWord"]] = UNSET + model: Union[Unset, str] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + language = self.language + + community = self.community + + pagerank = self.pagerank + + degree = self.degree + + x = self.x + + y = self.y + + related_topics: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.related_topics, Unset): + related_topics = [] + for related_topics_item_data in self.related_topics: + related_topics_item = related_topics_item_data.to_dict() + related_topics.append(related_topics_item) + + count_items = self.count_items + + excerpt: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.excerpt, Unset): + excerpt = [] + for excerpt_item_data in self.excerpt: + excerpt_item = excerpt_item_data.to_dict() + excerpt.append(excerpt_item) + + words: Union[Unset, List[Dict[str, Any]]] = UNSET + if not isinstance(self.words, Unset): + words = [] + for words_item_data in self.words: + words_item = words_item_data.to_dict() + words.append(words_item) + + model = self.model + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "language": language, + } + ) + if community is not UNSET: + field_dict["community"] = community + if pagerank is not UNSET: + field_dict["pagerank"] = pagerank + if degree is not UNSET: + field_dict["degree"] = degree + if x is not UNSET: + field_dict["x"] = x + if y is not UNSET: + field_dict["y"] = y + if related_topics is not UNSET: + field_dict["relatedTopics"] = related_topics + if count_items is not UNSET: + field_dict["countItems"] = count_items + if excerpt is not UNSET: + field_dict["excerpt"] = excerpt + if words is not UNSET: + field_dict["words"] = words + if model is not UNSET: + field_dict["model"] = model + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.topic_related_topics_item import TopicRelatedTopicsItem + from ..models.topic_word import TopicWord + + d = src_dict.copy() + uid = d.pop("uid") + + language = d.pop("language") + + community = d.pop("community", UNSET) + + pagerank = d.pop("pagerank", UNSET) + + degree = d.pop("degree", UNSET) + + x = d.pop("x", UNSET) + + y = d.pop("y", UNSET) + + related_topics = [] + _related_topics = d.pop("relatedTopics", UNSET) + for related_topics_item_data in _related_topics or []: + related_topics_item = TopicRelatedTopicsItem.from_dict(related_topics_item_data) + + related_topics.append(related_topics_item) + + count_items = d.pop("countItems", UNSET) + + excerpt = [] + _excerpt = d.pop("excerpt", UNSET) + for excerpt_item_data in _excerpt or []: + excerpt_item = TopicWord.from_dict(excerpt_item_data) + + excerpt.append(excerpt_item) + + words = [] + _words = d.pop("words", UNSET) + for words_item_data in _words or []: + words_item = TopicWord.from_dict(words_item_data) + + words.append(words_item) + + model = d.pop("model", UNSET) + + topic = cls( + uid=uid, + language=language, + community=community, + pagerank=pagerank, + degree=degree, + x=x, + y=y, + related_topics=related_topics, + count_items=count_items, + excerpt=excerpt, + words=words, + model=model, + ) + + return topic diff --git a/impresso/api_client/models/topic_related_topics_item.py b/impresso/api_client/models/topic_related_topics_item.py new file mode 100644 index 0000000..70f2ca5 --- /dev/null +++ b/impresso/api_client/models/topic_related_topics_item.py @@ -0,0 +1,46 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="TopicRelatedTopicsItem") + + +@_attrs_define +class TopicRelatedTopicsItem: + """ + Attributes: + uid (str): The unique identifier of the related topic + w (float): TODO + """ + + uid: str + w: float + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + w = self.w + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "uid": uid, + "w": w, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + uid = d.pop("uid") + + w = d.pop("w") + + topic_related_topics_item = cls( + uid=uid, + w=w, + ) + + return topic_related_topics_item diff --git a/impresso/api_client/models/topic_word.py b/impresso/api_client/models/topic_word.py new file mode 100644 index 0000000..5aa732b --- /dev/null +++ b/impresso/api_client/models/topic_word.py @@ -0,0 +1,60 @@ +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="TopicWord") + + +@_attrs_define +class TopicWord: + """TODO + + Attributes: + w (str): Word + p (float): TODO + h (Union[Unset, List[str]]): TODO + """ + + w: str + p: float + h: Union[Unset, List[str]] = UNSET + + def to_dict(self) -> Dict[str, Any]: + w = self.w + + p = self.p + + h: Union[Unset, List[str]] = UNSET + if not isinstance(self.h, Unset): + h = self.h + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "w": w, + "p": p, + } + ) + if h is not UNSET: + field_dict["h"] = h + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + w = d.pop("w") + + p = d.pop("p") + + h = cast(List[str], d.pop("h", UNSET)) + + topic_word = cls( + w=w, + p=p, + h=h, + ) + + return topic_word diff --git a/impresso/api_client/models/update_collectable_items.py b/impresso/api_client/models/update_collectable_items.py new file mode 100644 index 0000000..0f73fe8 --- /dev/null +++ b/impresso/api_client/models/update_collectable_items.py @@ -0,0 +1,72 @@ +from typing import Any, Dict, List, Type, TypeVar, Union, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="UpdateCollectableItems") + + +@_attrs_define +class UpdateCollectableItems: + """Request to update collectible items in a collection + + Attributes: + add (Union[Unset, List[str]]): IDs of the items to add to the collection + remove (Union[Unset, List[str]]): IDs of the items to remove from the collection + """ + + add: Union[Unset, List[str]] = UNSET + remove: Union[Unset, List[str]] = UNSET + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + add: Union[Unset, List[str]] = UNSET + if not isinstance(self.add, Unset): + add = self.add + + remove: Union[Unset, List[str]] = UNSET + if not isinstance(self.remove, Unset): + remove = self.remove + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if add is not UNSET: + field_dict["add"] = add + if remove is not UNSET: + field_dict["remove"] = remove + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + add = cast(List[str], d.pop("add", UNSET)) + + remove = cast(List[str], d.pop("remove", UNSET)) + + update_collectable_items = cls( + add=add, + remove=remove, + ) + + update_collectable_items.additional_properties = d + return update_collectable_items + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/impresso/api_client/models/user.py b/impresso/api_client/models/user.py new file mode 100644 index 0000000..20d6943 --- /dev/null +++ b/impresso/api_client/models/user.py @@ -0,0 +1,95 @@ +from typing import Any, Dict, Type, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="User") + + +@_attrs_define +class User: + """User details + + Attributes: + id (int): + username (str): + firstname (str): + lastname (str): + is_staff (bool): + is_active (bool): + is_superuser (bool): + uid (str): + """ + + id: int + username: str + firstname: str + lastname: str + is_staff: bool + is_active: bool + is_superuser: bool + uid: str + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + username = self.username + + firstname = self.firstname + + lastname = self.lastname + + is_staff = self.is_staff + + is_active = self.is_active + + is_superuser = self.is_superuser + + uid = self.uid + + field_dict: Dict[str, Any] = {} + field_dict.update( + { + "id": id, + "username": username, + "firstname": firstname, + "lastname": lastname, + "isStaff": is_staff, + "isActive": is_active, + "isSuperuser": is_superuser, + "uid": uid, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + id = d.pop("id") + + username = d.pop("username") + + firstname = d.pop("firstname") + + lastname = d.pop("lastname") + + is_staff = d.pop("isStaff") + + is_active = d.pop("isActive") + + is_superuser = d.pop("isSuperuser") + + uid = d.pop("uid") + + user = cls( + id=id, + username=username, + firstname=firstname, + lastname=lastname, + is_staff=is_staff, + is_active=is_active, + is_superuser=is_superuser, + uid=uid, + ) + + return user diff --git a/impresso/api_client/models/year.py b/impresso/api_client/models/year.py new file mode 100644 index 0000000..91093a2 --- /dev/null +++ b/impresso/api_client/models/year.py @@ -0,0 +1,77 @@ +from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.year_weights import YearWeights + + +T = TypeVar("T", bound="Year") + + +@_attrs_define +class Year: + """A year (TODO) + + Attributes: + uid (Union[Unset, int]): Numeric representation of the year + values (Union[Unset, YearWeights]): Total items counts within a year + refs (Union[Unset, YearWeights]): Total items counts within a year + """ + + uid: Union[Unset, int] = UNSET + values: Union[Unset, "YearWeights"] = UNSET + refs: Union[Unset, "YearWeights"] = UNSET + + def to_dict(self) -> Dict[str, Any]: + uid = self.uid + + values: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.values, Unset): + values = self.values.to_dict() + + refs: Union[Unset, Dict[str, Any]] = UNSET + if not isinstance(self.refs, Unset): + refs = self.refs.to_dict() + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if uid is not UNSET: + field_dict["uid"] = uid + if values is not UNSET: + field_dict["values"] = values + if refs is not UNSET: + field_dict["refs"] = refs + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + from ..models.year_weights import YearWeights + + d = src_dict.copy() + uid = d.pop("uid", UNSET) + + _values = d.pop("values", UNSET) + values: Union[Unset, YearWeights] + if isinstance(_values, Unset): + values = UNSET + else: + values = YearWeights.from_dict(_values) + + _refs = d.pop("refs", UNSET) + refs: Union[Unset, YearWeights] + if isinstance(_refs, Unset): + refs = UNSET + else: + refs = YearWeights.from_dict(_refs) + + year = cls( + uid=uid, + values=values, + refs=refs, + ) + + return year diff --git a/impresso/api_client/models/year_weights.py b/impresso/api_client/models/year_weights.py new file mode 100644 index 0000000..d511912 --- /dev/null +++ b/impresso/api_client/models/year_weights.py @@ -0,0 +1,75 @@ +from typing import Any, Dict, Type, TypeVar, Union + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="YearWeights") + + +@_attrs_define +class YearWeights: + """Total items counts within a year + + Attributes: + c (Union[Unset, float]): Number of content items + a (Union[Unset, float]): Number of articles + p (Union[Unset, float]): Number of pages + i (Union[Unset, float]): Number of issues + m (Union[Unset, float]): Number of images (with or without vectors) + """ + + c: Union[Unset, float] = UNSET + a: Union[Unset, float] = UNSET + p: Union[Unset, float] = UNSET + i: Union[Unset, float] = UNSET + m: Union[Unset, float] = UNSET + + def to_dict(self) -> Dict[str, Any]: + c = self.c + + a = self.a + + p = self.p + + i = self.i + + m = self.m + + field_dict: Dict[str, Any] = {} + field_dict.update({}) + if c is not UNSET: + field_dict["c"] = c + if a is not UNSET: + field_dict["a"] = a + if p is not UNSET: + field_dict["p"] = p + if i is not UNSET: + field_dict["i"] = i + if m is not UNSET: + field_dict["m"] = m + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + c = d.pop("c", UNSET) + + a = d.pop("a", UNSET) + + p = d.pop("p", UNSET) + + i = d.pop("i", UNSET) + + m = d.pop("m", UNSET) + + year_weights = cls( + c=c, + a=a, + p=p, + i=i, + m=m, + ) + + return year_weights diff --git a/impresso/api_client/py.typed b/impresso/api_client/py.typed new file mode 100644 index 0000000..1aad327 --- /dev/null +++ b/impresso/api_client/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561 \ No newline at end of file diff --git a/impresso/api_client/types.py b/impresso/api_client/types.py new file mode 100644 index 0000000..21fac10 --- /dev/null +++ b/impresso/api_client/types.py @@ -0,0 +1,45 @@ +"""Contains some shared types for properties""" + +from http import HTTPStatus +from typing import BinaryIO, Generic, Literal, MutableMapping, Optional, Tuple, TypeVar + +from attrs import define + + +class Unset: + def __bool__(self) -> Literal[False]: + return False + + +UNSET: Unset = Unset() + +FileJsonType = Tuple[Optional[str], BinaryIO, Optional[str]] + + +@define +class File: + """Contains information for file uploads""" + + payload: BinaryIO + file_name: Optional[str] = None + mime_type: Optional[str] = None + + def to_tuple(self) -> FileJsonType: + """Return a tuple representation that httpx will accept for multipart/form-data""" + return self.file_name, self.payload, self.mime_type + + +T = TypeVar("T") + + +@define +class Response(Generic[T]): + """A response from an endpoint""" + + status_code: HTTPStatus + content: bytes + headers: MutableMapping[str, str] + parsed: Optional[T] + + +__all__ = ["File", "Response", "FileJsonType", "Unset", "UNSET"] diff --git a/impresso/api_models.py b/impresso/api_models.py new file mode 100644 index 0000000..72cfd8c --- /dev/null +++ b/impresso/api_models.py @@ -0,0 +1,943 @@ +# generated by datamodel-codegen: +# filename: http://localhost:3030/swagger.json + +from __future__ import annotations + +from datetime import date +from typing import Any, Mapping, Optional, Sequence, Union + +from pydantic import AnyUrl, AwareDatetime, BaseModel, ConfigDict, Field, RootModel +from typing_extensions import Annotated, Literal + + +class PersonItem(RootModel[Sequence[Any]]): + root: Annotated[Sequence[Any], Field(max_length=2, min_length=2)] + + +class LocationItem(RootModel[Sequence[Any]]): + root: Annotated[Sequence[Any], Field(max_length=2, min_length=2)] + + +class Mention(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + person: Optional[Sequence[PersonItem]] = None + location: Optional[Sequence[LocationItem]] = None + + +class ArticleMatch(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + fragment: Annotated[str, Field(description='TODO')] + coords: Annotated[Optional[Sequence[float]], Field(None, description='TODO')] + pageUid: Annotated[Optional[str], Field(None, description='TODO')] + iiif: Annotated[Optional[str], Field(None, description='TODO')] + + +class ArticleRegion(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + pageUid: str + coords: Sequence[float] + isEmpty: Annotated[bool, Field(description='TODO')] + iiifFragment: Annotated[Optional[str], Field(None, description='IIIF fragment URL')] + g: Annotated[Optional[Sequence[str]], Field(None, description='TODO')] + + +class AuthenticationCreateRequest(BaseModel): + model_config = ConfigDict( + extra='allow', + ) + strategy: Literal['local', 'jwt-app'] + email: Optional[str] = None + password: Optional[str] = None + accessToken: Optional[str] = None + + +class Authentication(BaseModel): + strategy: Optional[str] = None + payload: Optional[Mapping[str, Any]] = None + + +class BaseFind(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + limit: Annotated[ + int, Field(description='The number of items returned in this response') + ] + offset: Annotated[ + int, + Field( + description='Starting index of the items subset returned in this response' + ), + ] + total: Annotated[ + int, Field(description='The total number of items matching the query') + ] + info: Annotated[ + Mapping[str, Any], + Field(description='Additional information about the response.'), + ] + data: Sequence + + +class BaseUser(BaseModel): + uid: Annotated[ + str, + Field( + examples=['local-dg'], + pattern='^([a-zA-Z-]+)$', + title='unique identifier for the user', + ), + ] + username: Annotated[ + str, + Field( + examples=['daniele.guido'], + pattern='^([a-z.]+)$', + title='unique username for the user for other humans', + ), + ] + + +class CollectableItemsUpdatedResponse(BaseModel): + totalAdded: Annotated[ + int, Field(description='Total number of items added to the collection') + ] + totalRemoved: Annotated[ + int, Field(description='Total number of items removed from the collection') + ] + + +class Collection(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(max_length=50, min_length=2)] + name: Annotated[str, Field(max_length=50, min_length=2)] + description: Annotated[str, Field(max_length=500)] + status: Annotated[ + str, + Field( + examples=['PRI'], + max_length=3, + min_length=2, + title='Status of the collection', + ), + ] + creationDate: AwareDatetime + lastModifiedDate: AwareDatetime + countItems: Annotated[ + Union[int, str], Field(title='Number of items in the collection') + ] + creator: BaseUser + labels: Optional[Sequence[str]] = None + + +class Params(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[Optional[str], Field(None, description='The collection id')] + status: Annotated[ + Optional[Literal['DEL']], Field(None, description='The status of the operation') + ] + + +class Task(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + task_id: Annotated[Optional[str], Field(None, description='The ID of the task')] + creationDate: Annotated[ + Optional[str], Field(None, description='When task was created') + ] + + +class CollectionsRemoveResponse(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + params: Params + task: Annotated[Task, Field(description='Deletion task details')] + + +class Entity(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='Unique identifier of the entity')] + relevance: Annotated[ + int, Field(description='Relevance of the entity in the document') + ] + + +class Error(BaseModel): + type: Annotated[ + AnyUrl, + Field( + description='A URI reference [RFC3986] that identifies the problem type.' + ), + ] + title: Annotated[ + str, Field(description='A short, human-readable summary of the problem type.') + ] + status: Annotated[ + int, Field(description='The HTTP status code ([RFC7231], Section 6)') + ] + detail: Annotated[ + Optional[str], + Field( + None, + description='A human-readable explanation specific to this occurrence of the problem.', + ), + ] + + +class Q(RootModel[str]): + root: Annotated[str, Field(max_length=500, min_length=2)] + + +class QItem(RootModel[str]): + root: Annotated[str, Field(max_length=500, min_length=2)] + + +class Filter(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + context: Optional[Literal['include', 'exclude']] = 'include' + op: Optional[Literal['AND', 'OR']] = 'OR' + type: Annotated[ + str, + Field( + description="Possible values are in 'search.validators:eachFilterValidator.type.choices'" + ), + ] + precision: Optional[Literal['fuzzy', 'soft', 'exact', 'partial']] = 'exact' + q: Optional[Union[Q, Sequence[QItem]]] = None + daterange: Annotated[ + Optional[str], + Field( + None, + pattern='\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z TO \\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z', + ), + ] + uids: Optional[str] = None + uid: Optional[str] = None + + +class Offset(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + start: Annotated[int, Field(description='Start offset of the entity in the text')] + end: Annotated[int, Field(description='End offset of the entity in the text')] + + +class Confidence(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + ner: Annotated[ + float, Field(description='Confidence score for the named entity recognition') + ] + nel: Annotated[ + Optional[float], + Field(None, description='Confidence score for the named entity linking'), + ] + + +class ImpressoNerEntity(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[str, Field(description='ID of the entity')] + type: Annotated[ + Literal[ + 'comp.demonym', + 'comp.function', + 'comp.name', + 'comp.qualifier', + 'comp.title', + 'loc', + 'loc.add.elec', + 'loc.add.phys', + 'loc.adm.nat', + 'loc.adm.reg', + 'loc.adm.sup', + 'loc.adm.town', + 'loc.fac', + 'loc.oro', + 'loc.phys.astro', + 'loc.phys.geo', + 'loc.phys.hydro', + 'loc.unk', + 'org', + 'org.adm', + 'org.ent', + 'org.ent.pressagency', + 'pers', + 'pers.coll', + 'pers.ind', + 'pers.ind.articleauthor', + 'prod', + 'prod.doctr', + 'prod.media', + 'time', + 'time.date.abs', + 'time.hour.abs', + ], + Field(description='Type of the entity'), + ] + surfaceForm: Annotated[str, Field(description='Surface form of the entity')] + offset: Offset + isTypeNested: Annotated[ + bool, Field(description='Whether the entity type is nested') + ] + confidence: Confidence + + +class ImpressoNerRequest(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + text: Annotated[ + str, + Field( + description='Text to be processed for named entity recognition', + max_length=3999, + min_length=1, + ), + ] + + +class ImpressoNerResponse(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + modelId: Annotated[ + str, Field(description='ID of the model used for the named entity recognition') + ] + text: Annotated[ + str, Field(description='Text processed for named entity recognition') + ] + timestamp: Annotated[ + AwareDatetime, + Field(description='Timestamp of when named entity recognition was performed'), + ] + entities: Sequence[ImpressoNerEntity] + + +class NewCollection(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + name: Annotated[str, Field(max_length=50, min_length=2)] + description: Annotated[Optional[str], Field(None, max_length=500)] + status: Annotated[ + Optional[str], + Field( + None, + examples=['PRI'], + max_length=3, + min_length=2, + title='Status of the collection', + ), + ] + + +class NewspaperIssue(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='The unique identifier of the issue')] + cover: Annotated[str, Field(description='TODO')] + labels: Annotated[Sequence[str], Field(description='The labels of the issue')] + fresh: Annotated[bool, Field(description='TODO')] + accessRights: Annotated[str, Field(description='TODO: list available options')] + date: Annotated[ + Optional[AwareDatetime], Field(None, description='The date of the issue') + ] + year: Annotated[Optional[str], Field(None, description='The year of the issue')] + + +class NewspaperProperty(BaseModel): + model_config = ConfigDict( + extra='allow', + ) + name: Annotated[str, Field(description='The name of the property')] + value: Annotated[str, Field(description='The value of the property')] + label: Annotated[str, Field(description='The label of the property')] + isUrl: Annotated[ + Optional[bool], Field(None, description='Whether the value is a URL') + ] + + +class Page(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='The unique identifier of the page')] + num: Annotated[int, Field(description='The number of the page')] + issueUid: Annotated[str, Field(description='Reference to the article')] + newspaperUid: Annotated[str, Field(description='Unique ID of the newspaper')] + iiif: Annotated[str, Field(description='The IIF image file name of the page')] + iiifThumbnail: Annotated[ + str, Field(description='The IIF image thumbnail file name of the page') + ] + accessRights: Annotated[str, Field(description='The access rights code')] + labels: Annotated[Sequence[str], Field(description='Page labels')] + hasCoords: Annotated[bool, Field(description='Whether the page has coordinates')] + hasErrors: Annotated[bool, Field(description='Whether the page has errors')] + regions: Annotated[ + Sequence[Mapping[str, Any]], Field(description='Regions of the page') + ] + obfuscated: Annotated[ + Optional[bool], + Field( + None, + description='Whether the page image has been obfuscated because the user is not authorised to access it', + ), + ] + iiifFragment: Annotated[ + Optional[str], + Field(None, description='The IIIF fragment of the page, image file name'), + ] + + +class SearchFacetRangeBucket(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + count: Annotated[int, Field(description='Number of items in the bucket')] + val: Annotated[int, Field(description="Value of the 'type' element")] + lower: Annotated[Optional[int], Field(None, description='Lower bound of the range')] + upper: Annotated[Optional[int], Field(None, description='Lower bound of the range')] + + +class TimeCoverage(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + from_: Annotated[Optional[date], Field(None, alias='from')] + to: Optional[date] = None + + +class TextReuseCluster(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[ + str, + Field( + description='ID of the text reuse passage', + examples=['abc123'], + pattern='^[a-zA-Z0-9-_]+$', + title='Passage ID', + ), + ] + lexicalOverlap: Annotated[ + Optional[float], + Field( + None, + description='Percentage of overlap between passages in the cluster', + ge=0.0, + le=100.0, + ), + ] + clusterSize: Annotated[ + Optional[float], + Field(None, description='Number of passages in cluster', ge=0.0), + ] + connectedClustersCount: Annotated[ + Optional[float], Field(None, description='Number of connected clusters', ge=0.0) + ] + timeCoverage: Annotated[ + Optional[TimeCoverage], + Field(None, description='Time window covered by documents in the cluster'), + ] + + +class Facet(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + type: Annotated[Optional[str], Field(None, description='Facet type')] + numBuckets: Annotated[Optional[int], Field(None, description='Number of buckets')] + buckets: Optional[Sequence[Mapping[str, Any]]] = None + + +class TextReuseClusterDetails(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + facets: Sequence[Facet] + resolution: Annotated[ + Optional[Literal['year', 'month', 'day']], + Field(None, description="Resolution for the 'date' facet"), + ] + + +class Article1(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[str, Field(description='ID of the article', title='Article ID')] + + +class TextReuseCluster1(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[str, Field(description='ID of the cluster', title='Cluster ID')] + clusterSize: Annotated[ + Optional[int], + Field(None, description='The size of the cluster', title='Cluster size'), + ] + timeDifferenceDay: Annotated[ + Optional[int], + Field( + None, + description='The time difference in days between the two articles', + title='Time difference in days', + ), + ] + lexicalOverlap: Annotated[ + Optional[float], + Field( + None, + description='The lexical overlap between the two articles', + title='Lexical overlap', + ), + ] + + +class OffsetStart(RootModel[Optional[int]]): + root: Annotated[ + Optional[int], + Field(None, description='Offset of the passage in the article text', ge=0), + ] = None + + +class OffsetEnd(RootModel[Optional[int]]): + root: Annotated[ + Optional[int], + Field(None, description='Offset of the passage in the article text', ge=0), + ] = None + + +class ConnectedCluster(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[str, Field(description='ID of the connected cluster')] + + +class Issue(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[str, Field(description='ID of the issue')] + + +class TextReusePassage(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: Annotated[ + str, + Field( + description='ID of the text reuse passage', + examples=['abc123'], + pattern='^[a-zA-Z0-9-_@:]+$', + title='Passage ID', + ), + ] + article: Annotated[ + Article1, + Field( + description='Details of the article the passage belongs to', + title='Article details', + ), + ] + textReuseCluster: Annotated[ + TextReuseCluster1, + Field( + description='Details of the cluster the passage belongs to', + title='Cluster details', + ), + ] + offsetStart: OffsetStart + offsetEnd: OffsetEnd + content: Annotated[str, Field(description='Textual content of the passage')] + title: Annotated[ + str, + Field( + description='Title of the content item (article) where this passage was found' + ), + ] + connectedClusters: Optional[Sequence[ConnectedCluster]] = None + isFront: Annotated[Optional[bool], Field(None, description='TBD')] + size: Annotated[Optional[int], Field(None, description='Size of the passage')] + newspaper: Optional[Any] = None + issue: Annotated[Optional[Issue], Field(None, description='Issue details')] + date: Annotated[ + Optional[AwareDatetime], + Field( + None, description='Date of the item (article) where this passage was found' + ), + ] + pageRegions: Annotated[ + Optional[Sequence[str]], + Field(None, description='Bounding box of the passage in the page'), + ] + pageNumbers: Annotated[ + Sequence[int], + Field(description='Numbers of the pages where the passage was found'), + ] + collections: Annotated[ + Sequence[str], Field(description='Collection IDs the passage belongs to') + ] + + +class RelatedTopic(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='The unique identifier of the related topic')] + w: Annotated[float, Field(description='TODO')] + + +class TopicWord(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + w: Annotated[str, Field(description='Word')] + p: Annotated[float, Field(description='TODO')] + h: Annotated[Optional[Sequence[str]], Field(None, description='TODO')] + + +class UpdateCollectableItems(BaseModel): + add: Annotated[ + Optional[Sequence[str]], + Field(None, description='IDs of the items to add to the collection'), + ] + remove: Annotated[ + Optional[Sequence[str]], + Field(None, description='IDs of the items to remove from the collection'), + ] + + +class User(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + id: int + username: str + firstname: str + lastname: str + isStaff: bool + isActive: bool + isSuperuser: bool + uid: str + + +class Solr(BaseModel): + endpoints: Optional[Mapping[str, str]] = None + + +class Mysql(BaseModel): + endpoint: Optional[str] = None + + +class ApiVersion(BaseModel): + branch: Optional[str] = None + revision: Optional[str] = None + version: Optional[str] = None + + +class DocumentsDateSpan(BaseModel): + model_config = ConfigDict( + extra='allow', + ) + start: Optional[AwareDatetime] = None + end: Optional[AwareDatetime] = None + + +class Newspapers(BaseModel): + name: Optional[str] = None + + +class VersionDetails(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + solr: Solr + mysql: Mysql + version: str + apiVersion: ApiVersion + documentsDateSpan: DocumentsDateSpan + newspapers: Mapping[str, Newspapers] + features: Mapping[str, Mapping[str, Any]] + + +class Image(BaseModel): + value: str + rank: str + datatype: str + + +class WikidataEntityDetails(BaseModel): + model_config = ConfigDict( + extra='allow', + ) + id: str + type: str + labels: Annotated[ + Mapping[str, str], + Field(description='Labels of the entity. Key is the language code.'), + ] + descriptions: Annotated[ + Mapping[str, str], + Field(description='Labels of the entity. Key is the language code.'), + ] + images: Sequence[Image] + + +class YearWeights(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + c: Annotated[Optional[float], Field(None, description='Number of content items')] + a: Annotated[Optional[float], Field(None, description='Number of articles')] + p: Annotated[Optional[float], Field(None, description='Number of pages')] + i: Annotated[Optional[float], Field(None, description='Number of issues')] + m: Annotated[ + Optional[float], + Field(None, description='Number of images (with or without vectors)'), + ] + + +class AuthenticationCreateResponse(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + accessToken: str + authentication: Authentication + user: User + + +class CollectableItemGroup(BaseModel): + itemId: Annotated[ + Optional[str], Field(None, description='The id of the collectable item group') + ] + contentType: Annotated[ + Optional[Literal['A', 'E', 'P', 'I']], + Field( + None, + description='Content type of the collectable item group: (A)rticle, (E)ntities, (P)ages, (I)ssues', + ), + ] + collectionIds: Annotated[ + Optional[Sequence[str]], Field(None, description='Ids of the collections') + ] + searchQueries: Annotated[ + Optional[Sequence[str]], Field(None, description='Search queries') + ] + collections: Annotated[ + Optional[Sequence[Collection]], Field(None, description='Collection objects') + ] + latestDateAdded: Annotated[ + Optional[AwareDatetime], + Field(None, description='The latest date added to the collectable item group'), + ] + + +class EntityDetails(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='Unique identifier of the entity')] + name: Annotated[str, Field(description='Entity name')] + type: Literal['person', 'location'] + countItems: Annotated[int, Field(description='TODO')] + countMentions: Annotated[ + int, Field(description='Number of mentions of this entity in articles') + ] + wikidataId: Annotated[ + Optional[str], Field(None, description='ID of the entity in wikidata') + ] + wikidata: Optional[WikidataEntityDetails] = None + + +class Newspaper(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='The unique identifier of the newspaper')] + acronym: Annotated[str, Field(description='The acronym of the newspaper')] + labels: Annotated[Sequence[str], Field(description='The labels of the newspaper')] + languages: Annotated[ + Sequence[str], + Field(description='Language codes of the languages used in the newspaper'), + ] + properties: Annotated[ + Optional[Sequence[NewspaperProperty]], Field(None, description='TODO') + ] + included: Annotated[bool, Field(description='TODO')] + name: Annotated[str, Field(description='Title of the newspaper')] + endYear: int + startYear: int + firstIssue: Optional[NewspaperIssue] = None + lastIssue: Optional[NewspaperIssue] = None + countArticles: Annotated[ + int, Field(description='The number of articles in the newspaper') + ] + countIssues: Annotated[ + int, Field(description='The number of issues in the newspaper') + ] + countPages: Annotated[ + int, Field(description='The number of pages in the newspaper') + ] + fetched: Annotated[Optional[bool], Field(None, description='TODO')] + deltaYear: Annotated[ + int, Field(description='The number of years of the newspaper available') + ] + + +class TextReuseClusterCompound(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + cluster: Optional[TextReuseCluster] = None + textSample: str + details: Optional[TextReuseClusterDetails] = None + + +class Topic(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='The unique identifier of the topic')] + language: Annotated[str, Field(description='The language code of the topic')] + community: Annotated[Optional[str], Field(None, description='TODO')] + pagerank: Annotated[Optional[float], Field(None, description='TODO')] + degree: Annotated[Optional[float], Field(None, description='TODO')] + x: Annotated[Optional[float], Field(None, description='TODO')] + y: Annotated[Optional[float], Field(None, description='TODO')] + relatedTopics: Optional[Sequence[RelatedTopic]] = None + countItems: Annotated[Optional[float], Field(None, description='TODO')] + excerpt: Annotated[Optional[Sequence[TopicWord]], Field(None, description='TODO')] + words: Annotated[Optional[Sequence[TopicWord]], Field(None, description='TODO')] + model: Annotated[ + Optional[str], + Field(None, description='ID of the model used to generate the topic'), + ] + + +class Year(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[ + Optional[int], Field(None, description='Numeric representation of the year') + ] + values: Optional[YearWeights] = None + refs: Optional[YearWeights] = None + + +class ArticleTopic(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + topic: Optional[Topic] = None + relevance: Annotated[float, Field(description='TODO')] + topicUid: Annotated[Optional[str], Field(None, description='TODO')] + + +class FindTextReuseClustersResponse(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + clusters: Sequence[TextReuseClusterCompound] + info: Any + + +class SearchFacetBucket(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + count: Annotated[int, Field(description='Number of items in the bucket')] + val: Annotated[str, Field(description="Value of the 'type' element")] + uid: Annotated[ + Optional[str], + Field(None, description="UID of the 'type' element. Same as 'val'"), + ] + item: Annotated[ + Optional[Union[Newspaper, Collection, Entity, Topic, Year]], + Field( + None, + description='The item in the bucket. Particular objct schema depends on the facet type', + ), + ] + + +class Article(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + uid: Annotated[str, Field(description='The unique identifier of the article')] + type: Annotated[ + str, Field(description='The type of the article. NOTE: may be empty.') + ] + title: Annotated[str, Field(description='The title of the article')] + size: Annotated[int, Field(description='The size of the article in characters')] + nbPages: Annotated[int, Field(description='The number of pages in this article')] + pages: Sequence[Page] + isCC: Annotated[bool, Field(description='TODO')] + excerpt: Annotated[str, Field(description='The excerpt of the article')] + locations: Optional[Sequence[Entity]] = None + persons: Optional[Sequence[Entity]] = None + language: Annotated[ + Optional[str], Field(None, description='The language code of the article') + ] + issue: Optional[NewspaperIssue] = None + matches: Optional[Sequence[ArticleMatch]] = None + regions: Optional[Sequence[ArticleRegion]] = None + regionBreaks: Optional[Sequence[int]] = None + contentLineBreaks: Optional[Sequence[int]] = None + labels: Annotated[Sequence[Literal['article']], Field(description='TODO')] + accessRight: Literal['na', 'OpenPrivate', 'Closed', 'OpenPublic'] + isFront: Annotated[Optional[bool], Field(None, description='TODO')] + date: Optional[AwareDatetime] = None + year: Annotated[int, Field(description='The year of the article')] + country: Annotated[ + Optional[str], Field(None, description='The country code of the article') + ] + tags: Optional[Sequence[str]] = None + collections: Optional[Union[Sequence[str], Sequence[Collection]]] = None + newspaper: Optional[Newspaper] = None + dataProvider: Optional[str] = None + topics: Optional[Sequence[ArticleTopic]] = None + content: Annotated[ + Optional[str], Field(None, description='The content of the article') + ] + mentions: Optional[Sequence[Mention]] = None + v: Annotated[Optional[str], Field(None, description='TODO')] + + +class SearchFacet(BaseModel): + model_config = ConfigDict( + extra='forbid', + ) + type: Annotated[str, Field(description='The type of facet')] + numBuckets: Annotated[int, Field(description='The number of buckets in the facet')] + buckets: Union[Sequence[SearchFacetBucket], Sequence[SearchFacetRangeBucket]] + min: Annotated[Optional[Any], Field(None, description='TODO')] + max: Annotated[Optional[Any], Field(None, description='TODO')] + gap: Annotated[Optional[Any], Field(None, description='TODO')] diff --git a/impresso/client.py b/impresso/client.py new file mode 100644 index 0000000..015d45b --- /dev/null +++ b/impresso/client.py @@ -0,0 +1,125 @@ +"""Impresso Python client library.""" + +import getpass +import logging +import os +from urllib.parse import urlparse + +import httpx + +from impresso.api_client import AuthenticatedClient +from impresso.client_base import ImpressoApiResourcesBase +from impresso.config_file import DEFAULT_API_URL, ImpressoPyConfig +from impresso.util.token import get_jwt_status + +logger = logging.getLogger(__name__) + + +def _is_localhost_netloc(netloc: str) -> bool: + return netloc.startswith("localhost") or netloc.startswith("127.0.0.1") + + +DEFAULT_LOCALHOST_TOKEN_NETLOC = "dev.impresso-project.ch" + + +def _log_non_2xx(response: httpx.Response) -> None: + if response.status_code >= 400: + response.read() + logging.error( + f"Received error response ({response.status_code}): {response.text}" + ) + + +class ImpressoClient(ImpressoApiResourcesBase): + """ + Client class for the impresso Python libary. This is the context for all + interactions with the impresso API. + """ + + def __init__(self, api_url: str, api_bearer_token: str): + self._api_url = api_url + self._api_bearer_token = api_bearer_token + super().__init__( + AuthenticatedClient( + base_url=self._api_url, + token=self._api_bearer_token, + headers={ + "Accept": "application/json", + "User-Agent": "impresso-py/0.1.0", + }, + raise_on_unexpected_status=True, + httpx_args={ + "event_hooks": { + "response": [_log_non_2xx], + } + }, + ) + ) + + @property + def api_url(self) -> str: + """ + Return the Impresso Public API URL currently in use. + """ + return self._api_url + + +_PROMPT = """ +Click on the following link to access the login page: {URL} + - 🔤 Enter your email/password on this page. + - 🔑 Once logged in, a secret token will be generated for you. + - 📋 Copy this token and paste it into the input field below 👇🏼. +""" + + +def connect( + public_api_url: str | None = None, + persisted_token: bool = True, +) -> ImpressoClient: + f""" + Connect to the Impresso API and return a client object. + + Args: + public_api_url (str): The URL of the Impresso API to connect to. By default using the default URL set + in the config file (~/.impresso_py.yml) or the Impresso default URL ({DEFAULT_API_URL}). + persisted_token (bool): Whether to read and write token to the user directory + (~/.impresso_py.yml). + This is useful to avoid having to re-enter the token each time the + Jupiter notebook is restarted. + """ + + config = ImpressoPyConfig() + + api_url = public_api_url or os.getenv("IMPRESSO_API_URL") or config.default_api_url + + parsed_url = urlparse(api_url) + token_base_url_netloc = parsed_url.netloc + if _is_localhost_netloc(token_base_url_netloc): + token_base_url_netloc = DEFAULT_LOCALHOST_TOKEN_NETLOC + + token_base_url = f"https://{token_base_url_netloc}" + token_url = f"{token_base_url}/datalab/token" + + token = None + if persisted_token: + token = config.get_token(url=api_url) + + if not token: + # Show a prompt to the user with the explanations on how to get the token. + print(_PROMPT.format(URL=token_url)) + token = getpass.getpass("🔑 Enter your token: ") + token_status, _ = get_jwt_status(token) + + if token_status != "valid": + message = f"The provided token is {token_status}. Have you entered it correctly? 🤔" + print(message) + raise ValueError(message) + + if persisted_token: + config.set_token(token, api_url) + + print("🎉 You are now connected to the Impresso API! 🎉") + if api_url != DEFAULT_API_URL: + print(f"🔗 Using API: {api_url}") + + return ImpressoClient(api_url=api_url, api_bearer_token=token) diff --git a/impresso/client_base.py b/impresso/client_base.py new file mode 100644 index 0000000..8fa700d --- /dev/null +++ b/impresso/client_base.py @@ -0,0 +1,43 @@ +from impresso.api_client.client import AuthenticatedClient +from impresso.resources.articles import ArticlesResource +from impresso.resources.collections import CollectionsResource +from impresso.resources.entities import EntitiesResource +from impresso.resources.newspapers import NewspapersResource +from impresso.resources.search import SearchResource +from impresso.resources.text_reuse import TextReuseDomain +from impresso.resources.tools import ToolsResource + + +class ImpressoApiResourcesBase: + """Base class for the Impresso client that contains resources.""" + + def __init__(self, api_client: AuthenticatedClient) -> None: + self._api_client = api_client + + @property + def search(self) -> SearchResource: + return SearchResource(self._api_client) + + @property + def articles(self) -> ArticlesResource: + return ArticlesResource(self._api_client) + + @property + def text_reuse(self) -> TextReuseDomain: + return TextReuseDomain(self._api_client) + + @property + def newspapers(self) -> NewspapersResource: + return NewspapersResource(self._api_client) + + @property + def collections(self) -> CollectionsResource: + return CollectionsResource(self._api_client) + + @property + def entities(self) -> EntitiesResource: + return EntitiesResource(self._api_client) + + @property + def tools(self) -> ToolsResource: + return ToolsResource(self._api_client) diff --git a/impresso/config_file.py b/impresso/config_file.py new file mode 100644 index 0000000..830899d --- /dev/null +++ b/impresso/config_file.py @@ -0,0 +1,85 @@ +import os + +from pydantic import BaseModel, Field, ValidationError +import yaml + +from impresso.util.token import get_jwt_status + +DEFAULT_API_URL = "https://api.impresso-project.ch" + + +class ImpressoApiToken(BaseModel): + url: str + token: str + + +class ImpressoPyConfigContent(BaseModel): + """Content of the configuration file.""" + + tokens: list[ImpressoApiToken] = [] + default_api_url: str = Field( + serialization_alias="defaultApiUrl", + default=DEFAULT_API_URL, + ) + + +class ImpressoPyConfig: + """File backed configuration of the library.""" + + def __init__(self, config_file="~/.impresso_py.yml") -> None: + self._config_file = config_file + self._config = ImpressoPyConfigContent() + + filepath = os.path.expanduser(self._config_file) + if os.path.exists(filepath): + with open(filepath, "r", encoding="utf-8") as f: + try: + config = yaml.safe_load(f) + self._config = ImpressoPyConfigContent.model_validate(config) + except yaml.YAMLError as exc: + print("Error loading config file:", exc) + except ValidationError as exc: + print("Error validating config file:", exc) + + @property + def default_api_url(self) -> str: + return self._config.default_api_url + + def get_token(self, url: str | None) -> str | None: + """ + Return the token for the given API URL. + Use the default API URL if no URL is provided. + """ + the_url = url or self._config.default_api_url + token = next((t.token for t in self._config.tokens if t.url == the_url), None) + + if token is None: + return None + token_status, _ = get_jwt_status(token) + if token_status == "valid": + return token + + return None + + def set_token(self, token: str, url: str | None) -> None: + """ + Return the token for the given API URL. + Use the default API URL if no URL is provided. + """ + the_url = url or self._config.default_api_url + token_container = next( + (t for t in self._config.tokens if t.url == the_url), None + ) + + if token_container is None: + self._config.tokens.append(ImpressoApiToken(url=the_url, token=token)) + else: + token_container.token = token + + self._write_config() + + def _write_config(self) -> None: + """Write the configuration to the file.""" + filepath = os.path.expanduser(self._config_file) + with open(filepath, "w", encoding="utf-8") as f: + yaml.dump(self._config.model_dump(exclude_none=True), f) diff --git a/impresso/data_container.py b/impresso/data_container.py new file mode 100644 index 0000000..d8ca55d --- /dev/null +++ b/impresso/data_container.py @@ -0,0 +1,98 @@ +from typing import Any, Generic, TypeVar +from pydantic import BaseModel +from pandas import DataFrame + +IT = TypeVar("IT") +T = TypeVar("T", bound=BaseModel) + + +class DataContainer(Generic[IT, T]): + """Response of a resource call""" + + def __init__( + self, + data: IT, + pydantic_model: type[T], + web_app_search_result_url: str | None = None, + ): + if data is None or getattr(data, "to_dict") is None: + raise ValueError(f"Unexpected data object: {data}") + self._data = data + self._pydantic_model = pydantic_model + self._web_app_search_result_url = web_app_search_result_url + + def _repr_html_(self): + df_repr = self.df.head(3).to_html(notebook=True) + response_type = self.__class__.__name__.replace("DataContainer", "").replace( + "Container", "" + ) + preview_img = self._get_preview_image_() + + items = [ + f"

{response_type} result

", + f"
Contains {self.size} items " + + ( + f"({self.offset} - {self.offset + self.size}) " + if self.size > 0 and self.size < self.total + else "" + ) + + f"of {self.total} total items.
", + "
", + ( + f'See this result in the Impresso App.' + if self.url + else None + ), + "

Data preview:

", + df_repr, + ( + f'' + if preview_img + else None + ), + ] + + return "\n".join([item for item in items if item]) + + def _get_preview_image_(self) -> str | None: + return None + + @property + def raw(self) -> dict[str, Any]: + """Return the data as a python dictionary.""" + return getattr(self._data, "to_dict")() + + @property + def pydantic(self) -> T: + """Return the data as a pydantic model.""" + return self._pydantic_model.model_validate(self.raw) + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + return DataFrame.from_dict(self._data) # type: ignore + + @property + def total(self) -> int: + """Total number of results.""" + return self.raw.get("total", 0) + + @property + def limit(self) -> int: + """Page size.""" + return self.raw.get("limit", 0) + + @property + def offset(self) -> int: + """Page offset.""" + return self.raw.get("offset", 0) + + @property + def size(self) -> int: + """Current page size.""" + return len(self.raw.get("data", [])) + + @property + def url(self) -> str | None: + """A URL of the result set in the Impresso web app.""" + return self._web_app_search_result_url diff --git a/impresso/echo.py b/impresso/echo.py index 7c03b6a..8779a6b 100644 --- a/impresso/echo.py +++ b/impresso/echo.py @@ -1,2 +1,3 @@ -def echo(message): +def echo(message: str): + """Echo a message.""" return f"Echo: {message}" diff --git a/impresso/protobuf/__init__.py b/impresso/protobuf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/protobuf/query_pb2.py b/impresso/protobuf/query_pb2.py new file mode 100644 index 0000000..eb0613f --- /dev/null +++ b/impresso/protobuf/query_pb2.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: query.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bquery.proto\x12\x0eimpresso.query\"%\n\tDateRange\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x12\x12\n\n\x02to\x18\x02 \x01(\x12\"\x89\x02\n\x06\x46ilter\x12.\n\x07\x63ontext\x18\x01 \x01(\x0e\x32\x1d.impresso.query.FilterContext\x12*\n\x02op\x18\x02 \x01(\x0e\x32\x1e.impresso.query.FilterOperator\x12(\n\x04type\x18\x03 \x01(\x0e\x32\x1a.impresso.query.FilterType\x12\x32\n\tprecision\x18\x04 \x01(\x0e\x32\x1f.impresso.query.FilterPrecision\x12\t\n\x01q\x18\x05 \x03(\t\x12,\n\tdaterange\x18\x06 \x01(\x0b\x32\x19.impresso.query.DateRange\x12\x0c\n\x04uids\x18\x07 \x03(\t\"d\n\x0bSearchQuery\x12\'\n\x07\x66ilters\x18\x01 \x03(\x0b\x32\x16.impresso.query.Filter\x12,\n\x08group_by\x18\x02 \x01(\x0e\x32\x1a.impresso.query.GroupValue\"\x86\x03\n\x1e\x43ollectionRecommenderParameter\x12R\n\x03key\x18\x01 \x01(\x0e\x32\x45.impresso.query.CollectionRecommenderParameter.RecommenderParameterId\x12\x14\n\x0cstring_value\x18\x02 \x01(\t\x12\x14\n\x0cnumber_value\x18\x03 \x01(\x11\x12\x12\n\nbool_value\x18\x04 \x01(\x08\"\xcf\x01\n\x16RecommenderParameterId\x12\x12\n\x0eID_UNSPECIFIED\x10\x00\x12\x11\n\rID_COUNT_TYPE\x10\x01\x12\x16\n\x12ID_MIN_OCCURRENCES\x10\x02\x12\x15\n\x11ID_NUMBER_TO_KEEP\x10\x03\x12\x1d\n\x19ID_REMOVE_FULLY_MENTIONED\x10\x04\x12\x1a\n\x16ID_NORMALIZE_MAX_SCORE\x10\x05\x12\r\n\tID_MARGIN\x10\x06\x12\x15\n\x11ID_SCALING_FACTOR\x10\x07\"\xc1\x02\n\x15\x43ollectionRecommender\x12\x43\n\x04type\x18\x01 \x01(\x0e\x32\x35.impresso.query.CollectionRecommender.RecommenderType\x12\x0e\n\x06weight\x18\x02 \x01(\x11\x12\x42\n\nparameters\x18\x03 \x03(\x0b\x32..impresso.query.CollectionRecommenderParameter\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\"~\n\x0fRecommenderType\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x13\n\x0fTYPE_TIME_RANGE\x10\x01\x12\x11\n\rTYPE_ENTITIES\x10\x02\x12\x0f\n\x0bTYPE_TOPICS\x10\x03\x12\x1c\n\x18TYPE_TEXT_REUSE_CLUSTERS\x10\x04\"]\n\x1e\x43ollectionRecommendersSettings\x12;\n\x0crecommenders\x18\x01 \x03(\x0b\x32%.impresso.query.CollectionRecommender*R\n\rFilterContext\x12\x17\n\x13\x43ONTEXT_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x43ONTEXT_INCLUDE\x10\x01\x12\x13\n\x0f\x43ONTEXT_EXCLUDE\x10\x02*M\n\x0e\x46ilterOperator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x10\n\x0cOPERATOR_AND\x10\x01\x12\x0f\n\x0bOPERATOR_OR\x10\x02*\xc0\x05\n\nFilterType\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0c\n\x08TYPE_UID\x10\x01\x12\x1a\n\x16TYPE_HAS_TEXT_CONTENTS\x10\x02\x12\x0e\n\nTYPE_TITLE\x10\x03\x12\x11\n\rTYPE_IS_FRONT\x10\x04\x12\r\n\tTYPE_PAGE\x10\x05\x12\x0e\n\nTYPE_ISSUE\x10\x06\x12\x0f\n\x0bTYPE_STRING\x10\x07\x12\x0f\n\x0bTYPE_ENTITY\x10\x08\x12\x12\n\x0eTYPE_NEWSPAPER\x10\t\x12\x12\n\x0eTYPE_DATERANGE\x10\n\x12\r\n\tTYPE_YEAR\x10\x0b\x12\x11\n\rTYPE_LANGUAGE\x10\x0c\x12\r\n\tTYPE_TYPE\x10\r\x12\x0e\n\nTYPE_REGEX\x10\x0e\x12\x10\n\x0cTYPE_MENTION\x10\x0f\x12\x0f\n\x0bTYPE_PERSON\x10\x10\x12\x11\n\rTYPE_LOCATION\x10\x11\x12\x0e\n\nTYPE_TOPIC\x10\x12\x12\x13\n\x0fTYPE_COLLECTION\x10\x13\x12\x14\n\x10TYPE_OCR_QUALITY\x10\x14\x12\x17\n\x13TYPE_CONTENT_LENGTH\x10\x15\x12\x10\n\x0cTYPE_COUNTRY\x10\x16\x12\x15\n\x11TYPE_ACCESS_RIGHT\x10\x17\x12\x10\n\x0cTYPE_PARTNER\x10\x18\x12\x0e\n\nTYPE_MONTH\x10\x19\x12 \n\x1cTYPE_TEXT_REUSE_CLUSTER_SIZE\x10\x1a\x12+\n\'TYPE_TEXT_REUSE_CLUSTER_LEXICAL_OVERLAP\x10\x1b\x12%\n!TYPE_TEXT_REUSE_CLUSTER_DAY_DELTA\x10\x1c\x12\x1b\n\x17TYPE_TEXT_REUSE_CLUSTER\x10\x1d\x12\x19\n\x15TYPE_MENTION_FUNCTION\x10\x1e\x12\x0c\n\x08TYPE_NAG\x10\x1f\x12\x14\n\x10TYPE_WIKIDATA_ID\x10 *\x81\x01\n\x0f\x46ilterPrecision\x12\x19\n\x15PRECISION_UNSPECIFIED\x10\x00\x12\x13\n\x0fPRECISION_EXACT\x10\x01\x12\x15\n\x11PRECISION_PARTIAL\x10\x02\x12\x13\n\x0fPRECISION_FUZZY\x10\x03\x12\x12\n\x0ePRECISION_SOFT\x10\x04*A\n\nGroupValue\x12\x1a\n\x16GROUPVALUE_UNSPECIFIED\x10\x00\x12\x17\n\x13GROUPVALUE_ARTICLES\x10\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'query_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_FILTERCONTEXT']._serialized_start=1252 + _globals['_FILTERCONTEXT']._serialized_end=1334 + _globals['_FILTEROPERATOR']._serialized_start=1336 + _globals['_FILTEROPERATOR']._serialized_end=1413 + _globals['_FILTERTYPE']._serialized_start=1416 + _globals['_FILTERTYPE']._serialized_end=2120 + _globals['_FILTERPRECISION']._serialized_start=2123 + _globals['_FILTERPRECISION']._serialized_end=2252 + _globals['_GROUPVALUE']._serialized_start=2254 + _globals['_GROUPVALUE']._serialized_end=2319 + _globals['_DATERANGE']._serialized_start=31 + _globals['_DATERANGE']._serialized_end=68 + _globals['_FILTER']._serialized_start=71 + _globals['_FILTER']._serialized_end=336 + _globals['_SEARCHQUERY']._serialized_start=338 + _globals['_SEARCHQUERY']._serialized_end=438 + _globals['_COLLECTIONRECOMMENDERPARAMETER']._serialized_start=441 + _globals['_COLLECTIONRECOMMENDERPARAMETER']._serialized_end=831 + _globals['_COLLECTIONRECOMMENDERPARAMETER_RECOMMENDERPARAMETERID']._serialized_start=624 + _globals['_COLLECTIONRECOMMENDERPARAMETER_RECOMMENDERPARAMETERID']._serialized_end=831 + _globals['_COLLECTIONRECOMMENDER']._serialized_start=834 + _globals['_COLLECTIONRECOMMENDER']._serialized_end=1155 + _globals['_COLLECTIONRECOMMENDER_RECOMMENDERTYPE']._serialized_start=1029 + _globals['_COLLECTIONRECOMMENDER_RECOMMENDERTYPE']._serialized_end=1155 + _globals['_COLLECTIONRECOMMENDERSSETTINGS']._serialized_start=1157 + _globals['_COLLECTIONRECOMMENDERSSETTINGS']._serialized_end=1250 +# @@protoc_insertion_point(module_scope) diff --git a/impresso/protobuf/query_pb2.pyi b/impresso/protobuf/query_pb2.pyi new file mode 100644 index 0000000..1de5e3f --- /dev/null +++ b/impresso/protobuf/query_pb2.pyi @@ -0,0 +1,207 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class FilterContext(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CONTEXT_UNSPECIFIED: _ClassVar[FilterContext] + CONTEXT_INCLUDE: _ClassVar[FilterContext] + CONTEXT_EXCLUDE: _ClassVar[FilterContext] + +class FilterOperator(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + OPERATOR_UNSPECIFIED: _ClassVar[FilterOperator] + OPERATOR_AND: _ClassVar[FilterOperator] + OPERATOR_OR: _ClassVar[FilterOperator] + +class FilterType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + TYPE_UNSPECIFIED: _ClassVar[FilterType] + TYPE_UID: _ClassVar[FilterType] + TYPE_HAS_TEXT_CONTENTS: _ClassVar[FilterType] + TYPE_TITLE: _ClassVar[FilterType] + TYPE_IS_FRONT: _ClassVar[FilterType] + TYPE_PAGE: _ClassVar[FilterType] + TYPE_ISSUE: _ClassVar[FilterType] + TYPE_STRING: _ClassVar[FilterType] + TYPE_ENTITY: _ClassVar[FilterType] + TYPE_NEWSPAPER: _ClassVar[FilterType] + TYPE_DATERANGE: _ClassVar[FilterType] + TYPE_YEAR: _ClassVar[FilterType] + TYPE_LANGUAGE: _ClassVar[FilterType] + TYPE_TYPE: _ClassVar[FilterType] + TYPE_REGEX: _ClassVar[FilterType] + TYPE_MENTION: _ClassVar[FilterType] + TYPE_PERSON: _ClassVar[FilterType] + TYPE_LOCATION: _ClassVar[FilterType] + TYPE_TOPIC: _ClassVar[FilterType] + TYPE_COLLECTION: _ClassVar[FilterType] + TYPE_OCR_QUALITY: _ClassVar[FilterType] + TYPE_CONTENT_LENGTH: _ClassVar[FilterType] + TYPE_COUNTRY: _ClassVar[FilterType] + TYPE_ACCESS_RIGHT: _ClassVar[FilterType] + TYPE_PARTNER: _ClassVar[FilterType] + TYPE_MONTH: _ClassVar[FilterType] + TYPE_TEXT_REUSE_CLUSTER_SIZE: _ClassVar[FilterType] + TYPE_TEXT_REUSE_CLUSTER_LEXICAL_OVERLAP: _ClassVar[FilterType] + TYPE_TEXT_REUSE_CLUSTER_DAY_DELTA: _ClassVar[FilterType] + TYPE_TEXT_REUSE_CLUSTER: _ClassVar[FilterType] + TYPE_MENTION_FUNCTION: _ClassVar[FilterType] + TYPE_NAG: _ClassVar[FilterType] + TYPE_WIKIDATA_ID: _ClassVar[FilterType] + +class FilterPrecision(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + PRECISION_UNSPECIFIED: _ClassVar[FilterPrecision] + PRECISION_EXACT: _ClassVar[FilterPrecision] + PRECISION_PARTIAL: _ClassVar[FilterPrecision] + PRECISION_FUZZY: _ClassVar[FilterPrecision] + PRECISION_SOFT: _ClassVar[FilterPrecision] + +class GroupValue(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + GROUPVALUE_UNSPECIFIED: _ClassVar[GroupValue] + GROUPVALUE_ARTICLES: _ClassVar[GroupValue] +CONTEXT_UNSPECIFIED: FilterContext +CONTEXT_INCLUDE: FilterContext +CONTEXT_EXCLUDE: FilterContext +OPERATOR_UNSPECIFIED: FilterOperator +OPERATOR_AND: FilterOperator +OPERATOR_OR: FilterOperator +TYPE_UNSPECIFIED: FilterType +TYPE_UID: FilterType +TYPE_HAS_TEXT_CONTENTS: FilterType +TYPE_TITLE: FilterType +TYPE_IS_FRONT: FilterType +TYPE_PAGE: FilterType +TYPE_ISSUE: FilterType +TYPE_STRING: FilterType +TYPE_ENTITY: FilterType +TYPE_NEWSPAPER: FilterType +TYPE_DATERANGE: FilterType +TYPE_YEAR: FilterType +TYPE_LANGUAGE: FilterType +TYPE_TYPE: FilterType +TYPE_REGEX: FilterType +TYPE_MENTION: FilterType +TYPE_PERSON: FilterType +TYPE_LOCATION: FilterType +TYPE_TOPIC: FilterType +TYPE_COLLECTION: FilterType +TYPE_OCR_QUALITY: FilterType +TYPE_CONTENT_LENGTH: FilterType +TYPE_COUNTRY: FilterType +TYPE_ACCESS_RIGHT: FilterType +TYPE_PARTNER: FilterType +TYPE_MONTH: FilterType +TYPE_TEXT_REUSE_CLUSTER_SIZE: FilterType +TYPE_TEXT_REUSE_CLUSTER_LEXICAL_OVERLAP: FilterType +TYPE_TEXT_REUSE_CLUSTER_DAY_DELTA: FilterType +TYPE_TEXT_REUSE_CLUSTER: FilterType +TYPE_MENTION_FUNCTION: FilterType +TYPE_NAG: FilterType +TYPE_WIKIDATA_ID: FilterType +PRECISION_UNSPECIFIED: FilterPrecision +PRECISION_EXACT: FilterPrecision +PRECISION_PARTIAL: FilterPrecision +PRECISION_FUZZY: FilterPrecision +PRECISION_SOFT: FilterPrecision +GROUPVALUE_UNSPECIFIED: GroupValue +GROUPVALUE_ARTICLES: GroupValue + +class DateRange(_message.Message): + __slots__ = ("to",) + FROM_FIELD_NUMBER: _ClassVar[int] + TO_FIELD_NUMBER: _ClassVar[int] + to: int + def __init__(self, to: _Optional[int] = ..., **kwargs) -> None: ... + +class Filter(_message.Message): + __slots__ = ("context", "op", "type", "precision", "q", "daterange", "uids") + CONTEXT_FIELD_NUMBER: _ClassVar[int] + OP_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + PRECISION_FIELD_NUMBER: _ClassVar[int] + Q_FIELD_NUMBER: _ClassVar[int] + DATERANGE_FIELD_NUMBER: _ClassVar[int] + UIDS_FIELD_NUMBER: _ClassVar[int] + context: FilterContext + op: FilterOperator + type: FilterType + precision: FilterPrecision + q: _containers.RepeatedScalarFieldContainer[str] + daterange: DateRange + uids: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, context: _Optional[_Union[FilterContext, str]] = ..., op: _Optional[_Union[FilterOperator, str]] = ..., type: _Optional[_Union[FilterType, str]] = ..., precision: _Optional[_Union[FilterPrecision, str]] = ..., q: _Optional[_Iterable[str]] = ..., daterange: _Optional[_Union[DateRange, _Mapping]] = ..., uids: _Optional[_Iterable[str]] = ...) -> None: ... + +class SearchQuery(_message.Message): + __slots__ = ("filters", "group_by") + FILTERS_FIELD_NUMBER: _ClassVar[int] + GROUP_BY_FIELD_NUMBER: _ClassVar[int] + filters: _containers.RepeatedCompositeFieldContainer[Filter] + group_by: GroupValue + def __init__(self, filters: _Optional[_Iterable[_Union[Filter, _Mapping]]] = ..., group_by: _Optional[_Union[GroupValue, str]] = ...) -> None: ... + +class CollectionRecommenderParameter(_message.Message): + __slots__ = ("key", "string_value", "number_value", "bool_value") + class RecommenderParameterId(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + ID_UNSPECIFIED: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_COUNT_TYPE: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_MIN_OCCURRENCES: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_NUMBER_TO_KEEP: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_REMOVE_FULLY_MENTIONED: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_NORMALIZE_MAX_SCORE: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_MARGIN: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_SCALING_FACTOR: _ClassVar[CollectionRecommenderParameter.RecommenderParameterId] + ID_UNSPECIFIED: CollectionRecommenderParameter.RecommenderParameterId + ID_COUNT_TYPE: CollectionRecommenderParameter.RecommenderParameterId + ID_MIN_OCCURRENCES: CollectionRecommenderParameter.RecommenderParameterId + ID_NUMBER_TO_KEEP: CollectionRecommenderParameter.RecommenderParameterId + ID_REMOVE_FULLY_MENTIONED: CollectionRecommenderParameter.RecommenderParameterId + ID_NORMALIZE_MAX_SCORE: CollectionRecommenderParameter.RecommenderParameterId + ID_MARGIN: CollectionRecommenderParameter.RecommenderParameterId + ID_SCALING_FACTOR: CollectionRecommenderParameter.RecommenderParameterId + KEY_FIELD_NUMBER: _ClassVar[int] + STRING_VALUE_FIELD_NUMBER: _ClassVar[int] + NUMBER_VALUE_FIELD_NUMBER: _ClassVar[int] + BOOL_VALUE_FIELD_NUMBER: _ClassVar[int] + key: CollectionRecommenderParameter.RecommenderParameterId + string_value: str + number_value: int + bool_value: bool + def __init__(self, key: _Optional[_Union[CollectionRecommenderParameter.RecommenderParameterId, str]] = ..., string_value: _Optional[str] = ..., number_value: _Optional[int] = ..., bool_value: bool = ...) -> None: ... + +class CollectionRecommender(_message.Message): + __slots__ = ("type", "weight", "parameters", "enabled") + class RecommenderType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + TYPE_UNSPECIFIED: _ClassVar[CollectionRecommender.RecommenderType] + TYPE_TIME_RANGE: _ClassVar[CollectionRecommender.RecommenderType] + TYPE_ENTITIES: _ClassVar[CollectionRecommender.RecommenderType] + TYPE_TOPICS: _ClassVar[CollectionRecommender.RecommenderType] + TYPE_TEXT_REUSE_CLUSTERS: _ClassVar[CollectionRecommender.RecommenderType] + TYPE_UNSPECIFIED: CollectionRecommender.RecommenderType + TYPE_TIME_RANGE: CollectionRecommender.RecommenderType + TYPE_ENTITIES: CollectionRecommender.RecommenderType + TYPE_TOPICS: CollectionRecommender.RecommenderType + TYPE_TEXT_REUSE_CLUSTERS: CollectionRecommender.RecommenderType + TYPE_FIELD_NUMBER: _ClassVar[int] + WEIGHT_FIELD_NUMBER: _ClassVar[int] + PARAMETERS_FIELD_NUMBER: _ClassVar[int] + ENABLED_FIELD_NUMBER: _ClassVar[int] + type: CollectionRecommender.RecommenderType + weight: int + parameters: _containers.RepeatedCompositeFieldContainer[CollectionRecommenderParameter] + enabled: bool + def __init__(self, type: _Optional[_Union[CollectionRecommender.RecommenderType, str]] = ..., weight: _Optional[int] = ..., parameters: _Optional[_Iterable[_Union[CollectionRecommenderParameter, _Mapping]]] = ..., enabled: bool = ...) -> None: ... + +class CollectionRecommendersSettings(_message.Message): + __slots__ = ("recommenders",) + RECOMMENDERS_FIELD_NUMBER: _ClassVar[int] + recommenders: _containers.RepeatedCompositeFieldContainer[CollectionRecommender] + def __init__(self, recommenders: _Optional[_Iterable[_Union[CollectionRecommender, _Mapping]]] = ...) -> None: ... diff --git a/impresso/resources/__init__.py b/impresso/resources/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/resources/articles.py b/impresso/resources/articles.py new file mode 100644 index 0000000..3e78f17 --- /dev/null +++ b/impresso/resources/articles.py @@ -0,0 +1,103 @@ +from typing import Any, Union + +from pandas import DataFrame, json_normalize + +from impresso.api_client.api.articles import find_articles, get_article +from impresso.api_client.models.find_articles_order_by import ( + FindArticlesOrderBy, + FindArticlesOrderByLiteral, +) +from impresso.api_client.models.find_articles_resolve import ( + FindArticlesResolve, + FindArticlesResolveLiteral, +) +from impresso.api_client.types import UNSET, Unset +from impresso.api_models import Article, BaseFind +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.util.error import raise_for_error +from impresso.util.py import get_enum_from_literal + + +class ArticlesResponseSchema(BaseFind): + """Schema for the articles response.""" + + data: list[Article] + + +class ArticlesDataContainer(DataContainer): + """Response of an articles call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + return json_normalize(self._data.to_dict()["data"]).set_index("uid") + + +class ArticleDataContainer(DataContainer): + """Response of a get article call.""" + + @property + def raw(self) -> dict[str, Any]: + """Return the data as a python dictionary.""" + return self._data.to_dict() + + @property + def pydantic(self) -> Article: + """Return the data as a pydantic model.""" + return self._pydantic_model.model_validate(self.raw) + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + return json_normalize([self.raw]) + + @property + def size(self) -> int: + """Current page size.""" + data = self._data.to_dict() + if len(data): + return 1 + return 0 + + @property + def total(self) -> int: + """Total number of results.""" + return self.size + + +class ArticlesResource(Resource): + """Get articles from the impresso database.""" + + name = "articles" + + def find( + self, + resolve: Union[Unset, FindArticlesResolveLiteral] = UNSET, + order_by: Union[Unset, FindArticlesOrderByLiteral] = UNSET, + limit: Union[Unset, int] = UNSET, + offset: Union[Unset, int] = UNSET, + ): + result = find_articles.sync( + client=self._api_client, + resolve=get_enum_from_literal(resolve, FindArticlesResolve), + order_by=get_enum_from_literal(order_by, FindArticlesOrderBy), + limit=limit, + offset=offset, + ) + raise_for_error(result) + return ArticlesDataContainer(result, ArticlesResponseSchema) + + def get(self, id: str): + result = get_article.sync(client=self._api_client, id=id) + raise_for_error(result) + + id_parts = id.split("-") + issue_id = "-".join(id_parts[:-1]) + article_id = id_parts[-1] + + return ArticleDataContainer( + result, + Article, + f"{self._get_web_app_base_url()}/issue/{issue_id}/view?articleId={article_id}", + ) diff --git a/impresso/resources/base.py b/impresso/resources/base.py new file mode 100644 index 0000000..fdf724d --- /dev/null +++ b/impresso/resources/base.py @@ -0,0 +1,16 @@ +from impresso.api_client.client import AuthenticatedClient + + +class Resource: + """Base for all API backed resources.""" + + name: str + + def __init__(self, api_client: AuthenticatedClient): + self._api_client = api_client + + def _get_web_app_base_url(self) -> str: + return "https://dev.impresso-project.ch/app" + + +DEFAULT_PAGE_SIZE = 100 diff --git a/impresso/resources/collections.py b/impresso/resources/collections.py new file mode 100644 index 0000000..dfc7ea2 --- /dev/null +++ b/impresso/resources/collections.py @@ -0,0 +1,186 @@ +from pandas import DataFrame, json_normalize +from impresso.api_client.api.collections import ( + find_collections, + get_collection, + patch_collections_collection_id_items, +) +from impresso.api_client.models.find_collections_order_by import ( + FindCollectionsOrderBy, + FindCollectionsOrderByLiteral, +) +from impresso.api_client.models.update_collectable_items import UpdateCollectableItems +from impresso.api_client.types import UNSET +from impresso.api_models import BaseFind, Collection +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.resources.search import SearchDataContainer, SearchResource +from impresso.util.error import raise_for_error +from impresso.util.py import get_enum_from_literal + + +class FindCollectionsSchema(BaseFind): + """Schema for the find collections response.""" + + data: list[Collection] + + +class FindCollectionsContainer(DataContainer): + """Response of a find call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["data"] + if len(data): + return json_normalize(self._data.to_dict()["data"]).set_index("uid") + return DataFrame() + + +class GetCollectionContainer(DataContainer): + """Response of a get call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict() + if len(data): + return json_normalize([self._data.to_dict()]).set_index("uid") + return DataFrame() + + @property + def size(self) -> int: + """Current page size.""" + data = self._data.to_dict() + if len(data): + return 1 + return 0 + + @property + def total(self) -> int: + """Total number of results.""" + return self.size + + +class CollectionsResource(Resource): + """Work with collections""" + + name = "collections" + + def find( + self, + q: str | None = None, + order_by: FindCollectionsOrderByLiteral | None = None, + limit: int | None = None, + offset: int | None = None, + ) -> FindCollectionsContainer: + """Find collections.""" + + result = find_collections.sync( + client=self._api_client, + q=q if q is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, FindCollectionsOrderBy) # type: ignore + if order_by is not None + else FindCollectionsOrderBy.VALUE_0 + ), + limit=limit if limit is not None else UNSET, + offset=offset if offset is not None else UNSET, + ) + raise_for_error(result) + return FindCollectionsContainer( + result, + FindCollectionsSchema, + web_app_search_result_url=_build_web_app_find_collections_url( + base_url=self._get_web_app_base_url(), + q=q, + order_by=order_by, + ), + ) + + def get(self, id: str) -> GetCollectionContainer: + """Get collection by ID.""" + + result = get_collection.sync( + client=self._api_client, + id=id, + ) + raise_for_error(result) + return GetCollectionContainer( + result, + FindCollectionsSchema, + web_app_search_result_url=_build_web_app_get_collection_url( + base_url=self._get_web_app_base_url(), + collection_id=id, + ), + ) + + def items( + self, + collection_id: str, + limit: int | None = None, + offset: int | None = None, + ) -> SearchDataContainer: + """Return all items in a collection.""" + search_resource = SearchResource(self._api_client) + return search_resource.find( + collection_id=collection_id, limit=limit, offset=offset + ) + + def add_items(self, collection_id: str, item_ids: list[str]) -> None: + """ + Add items to a collection by their IDs. + + **NOTE**: Items are not added immediately. + This operation may take up to a few minutes + to complete and reflect in the collection. + """ + result = patch_collections_collection_id_items.sync( + client=self._api_client, + collection_id=collection_id, + body=UpdateCollectableItems( + add=item_ids, + remove=UNSET, + ), + ) + raise_for_error(result) + + def remove_items(self, collection_id: str, item_ids: list[str]) -> None: + """ + Remove items from a collection by their IDs. + + **NOTE**: Items are not added immediately. + This operation may take up to a few minutes + to complete and reflect in the collection. + """ + result = patch_collections_collection_id_items.sync( + client=self._api_client, + collection_id=collection_id, + body=UpdateCollectableItems( + remove=item_ids, + add=UNSET, + ), + ) + raise_for_error(result) + + +def _build_web_app_find_collections_url( + base_url: str, + q: str | None = None, + order_by: FindCollectionsOrderByLiteral | None = None, +) -> str: + query_params = { + "orderBy": order_by, + "q": q, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + url = f"{base_url}/collections?{query_string}" + return f"{url}?{query_string}" if query_string else url + + +def _build_web_app_get_collection_url( + base_url: str, + collection_id: str, +) -> str: + return f"{base_url}/collections/{collection_id}" diff --git a/impresso/resources/entities.py b/impresso/resources/entities.py new file mode 100644 index 0000000..62c34e7 --- /dev/null +++ b/impresso/resources/entities.py @@ -0,0 +1,144 @@ +from typing import Literal + +from pandas import DataFrame, json_normalize + +from impresso.api_client.api.entities import find_entities, get_entity +from impresso.api_client.models.find_entities_order_by import ( + FindEntitiesOrderBy, + FindEntitiesOrderByLiteral, +) +from impresso.api_client.types import UNSET +from impresso.api_models import BaseFind, EntityDetails, Filter +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.structures import AND, OR +from impresso.util.error import raise_for_error +from impresso.util.filters import and_or_filter, filters_as_protobuf +from impresso.util.py import get_enum_from_literal + + +class FindEntitiesSchema(BaseFind): + """Schema for the find entities response.""" + + data: list[EntityDetails] + + +class FindEntitiesContainer(DataContainer): + """Response of a find call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["data"] + if len(data): + return json_normalize(self._data.to_dict()["data"]).set_index("uid") + return DataFrame() + + +class GetEntityContainer(DataContainer): + """Response of a get call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict() + if len(data): + return json_normalize([self._data.to_dict()]).set_index("uid") + return DataFrame() + + +EntityType = Literal["person", "location"] + + +class EntitiesResource(Resource): + """Work with entities""" + + name = "entities" + + def find( + self, + q: str | None = None, + wikidata_id: str | AND[str] | OR[str] | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + entity_type: EntityType | AND[EntityType] | OR[EntityType] | None = None, + order_by: FindEntitiesOrderByLiteral | None = None, + load_wikidata: bool = False, + limit: int | None = None, + offset: int | None = None, + ) -> FindEntitiesContainer: + """Find entities.""" + + filters: list[Filter] = [] + if entity_type is not None: + filters.extend(and_or_filter(entity_type, "type")) # type: ignore + if wikidata_id is not None: + filters.extend(and_or_filter(wikidata_id, "wikidata_id")) + if entity_id is not None: + filters.extend(and_or_filter(entity_id, "uid")) + + filters_pb = filters_as_protobuf(filters or []) + + result = find_entities.sync( + client=self._api_client, + q=q if q is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, FindEntitiesOrderBy) + if order_by is not None + else UNSET + ), + limit=limit if limit is not None else UNSET, + offset=offset if offset is not None else UNSET, + filters=filters_pb if filters_pb else UNSET, + resolve=load_wikidata, + ) + raise_for_error(result) + return FindEntitiesContainer( + result, + FindEntitiesSchema, + web_app_search_result_url=( + _build_web_app_find_entities_url( + base_url=self._get_web_app_base_url(), + q=q, + ) + if wikidata_id is None and entity_type is None + else None + ), + ) + + def get(self, id: str) -> GetEntityContainer: + """Get entity by ID.""" + + result = get_entity.sync( + client=self._api_client, + id=id, + ) + raise_for_error(result) + return GetEntityContainer( + result, + FindEntitiesSchema, + web_app_search_result_url=_build_web_app_get_entity_url( + base_url=self._get_web_app_base_url(), + id=id, + ), + ) + + +def _build_web_app_find_entities_url( + base_url: str, + q: str | None = None, +) -> str: + query_params = { + "q": q, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + url = f"{base_url}/entities" + return f"{url}?{query_string}" if query_string else url + + +def _build_web_app_get_entity_url( + base_url: str, + id: str, +) -> str: + return f"{base_url}/entities/{id}" diff --git a/impresso/resources/newspapers.py b/impresso/resources/newspapers.py new file mode 100644 index 0000000..0c95d5b --- /dev/null +++ b/impresso/resources/newspapers.py @@ -0,0 +1,83 @@ +from pandas import DataFrame, json_normalize + +from impresso.api_client.api.newspapers import find_newspapers +from impresso.api_client.models.find_newspapers_order_by import ( + FindNewspapersOrderBy, + FindNewspapersOrderByLiteral, +) +from impresso.api_client.types import UNSET +from impresso.api_models import BaseFind, Newspaper +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.util.error import raise_for_error +from impresso.util.py import get_enum_from_literal + + +class FindNewspapersSchema(BaseFind): + """Schema for the find newspapers response.""" + + data: list[Newspaper] + + +class FindNewspapersContainer(DataContainer): + """Response of a search call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["data"] + if len(data): + return json_normalize(self._data.to_dict()["data"]).set_index("uid") + return DataFrame() + + +class NewspapersResource(Resource): + """Search newspapers""" + + name = "newspapers" + + def find( + self, + q: str | None = None, + order_by: FindNewspapersOrderByLiteral | None = None, + limit: int | None = None, + offset: int | None = None, + ) -> FindNewspapersContainer: + + result = find_newspapers.sync( + client=self._api_client, + q=q if q is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, FindNewspapersOrderBy) + if order_by is not None + else UNSET + ), + limit=limit if limit is not None else UNSET, + offset=offset if offset is not None else UNSET, + ) + raise_for_error(result) + return FindNewspapersContainer( + result, + FindNewspapersSchema, + web_app_search_result_url=_build_web_app_newspapers_url( + base_url=self._get_web_app_base_url(), + q=q, + order_by=order_by, + ), + ) + + +def _build_web_app_newspapers_url( + base_url: str, + q: str | None = None, + order_by: FindNewspapersOrderByLiteral | None = None, +) -> str: + query_params = { + "orderBy": order_by, + "q": q, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + url = f"{base_url}/newspapers" + return f"{url}?{query_string}" if query_string else url diff --git a/impresso/resources/search.py b/impresso/resources/search.py new file mode 100644 index 0000000..8fffa58 --- /dev/null +++ b/impresso/resources/search.py @@ -0,0 +1,416 @@ +from typing import Any +import matplotlib.pyplot as plt +import io +import base64 + +from pandas import DataFrame, json_normalize + +from impresso.api_client.api.search import search +from impresso.api_client.api.search_facets import get_search_facet +from impresso.api_client.models.article_access_right import ArticleAccessRightLiteral +from impresso.api_client.models.get_search_facet_id import ( + GetSearchFacetId, + GetSearchFacetIdLiteral, +) +from impresso.api_client.models.get_search_facet_order_by import ( + GetSearchFacetOrderBy, + GetSearchFacetOrderByLiteral, +) +from impresso.api_client.models.search_group_by import SearchGroupBy +from impresso.api_client.models.search_order_by import ( + SearchOrderBy, + SearchOrderByLiteral, +) +from impresso.api_client.types import UNSET, Unset +from impresso.api_models import Article, BaseFind, Filter, Q, SearchFacet +from impresso.data_container import IT, DataContainer, T +from impresso.resources.base import DEFAULT_PAGE_SIZE, Resource +from impresso.structures import AND, OR, DateRange +from impresso.util.error import raise_for_error +from impresso.util.filters import and_or_filter, filters_as_protobuf +from impresso.util.py import get_enum_from_literal, get_enum_from_literal_required + + +class SearchResponseSchema(BaseFind): + """Schema for the articles response.""" + + data: list[Article] + + +class SearchDataContainer(DataContainer): + """Response of a search call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["data"] + if len(data): + return json_normalize(self._data.to_dict()["data"]).set_index("uid") + return DataFrame() + + +class FacetDataContainer(DataContainer): + """Response of a get facet call.""" + + def __init__( + self, + data: IT, + pydantic_model: type[T], + limit: int | None, + offset: int | None, + web_app_search_result_url: str, + ): + super().__init__(data, pydantic_model, web_app_search_result_url) + self._limit = limit + self._offset = offset + + @property + def raw(self) -> dict[str, Any]: + """Return the data as a python dictionary.""" + return self._data.to_dict() + + @property + def pydantic(self) -> SearchFacet: + """Return the data as a pydantic model.""" + return self._pydantic_model.model_validate(self.raw) + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + if len(self.raw["buckets"]) == 0: + return DataFrame() + return json_normalize(self.raw["buckets"]).set_index("val") + + @property + def size(self) -> int: + """Current page size.""" + return len(self.raw.get("buckets", [])) + + @property + def total(self) -> int: + """Total number of results.""" + return self.raw.get("numBuckets", 0) + + @property + def limit(self) -> int: + """Page size.""" + return self._limit or len(self.raw["buckets"]) + + @property + def offset(self) -> int: + """Page offset.""" + return self._offset or 0 + + def _get_preview_image_(self) -> str | None: + if self.size == 0: + return None + return render_dataframe_chart_base64( + self.df.index[:].values, self.df["count"].values + ) + + +class SearchResource(Resource): + """Search articles in the impresso database.""" + + name = "search" + + def find( + self, + q: str | AND[str] | OR[str] | None = None, + order_by: SearchOrderByLiteral | None = None, + limit: int | None = None, + offset: int | None = None, + with_text_contents: bool | None = False, + title: str | AND[str] | OR[str] | None = None, + front_page: bool | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + newspaper_id: str | OR[str] | None = None, + date_range: DateRange | None = None, + language: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + country: str | OR[str] | None = None, + access_rights: ( + ArticleAccessRightLiteral | OR[ArticleAccessRightLiteral] | None + ) = None, + partner_id: str | OR[str] | None = None, + text_reuse_cluster_id: str | OR[str] | None = None, + ) -> SearchDataContainer: + """ + Search for articles in Impresso. + + Args: + q: Search term. + order_by: Order by aspect. + limit: Number of results to return. + offset: Number of results to skip. + + with_text_contents: Return only articles with text contents. + title: Return only articles that have this term or all/any of the terms in the title. + front_page: Return only articles that were on the front page. + entity_id: Return only articles that mention this entity or all/any of the entities. + date_range: Return only articles that were published in this date range. + language: Return only articles that are in this language or all/any of the languages. + mention: Return only articles that mention an entity with this term or all/any of entities with the terms. + topic_id: Return only articles that are about this topic or all/any of the topics. + collection_id: Return only articles that are in this collection or all/any of the collections. + country: Return only articles that are from this country or all/any of the countries. + access_rights: Return only articles with this access right or all/any of the access rights. + partner_id: Return only articles that are from this partner or all/any of the partners. + text_reuse_cluster_id: Return only articles that are in this text reuse cluster or all/any of the clusters. + + Returns: + _type_: _description_ + """ + + filters = self._build_filters( + string=q, + with_text_contents=with_text_contents, + title=title, + front_page=front_page, + entity_id=entity_id, + newspaper_id=newspaper_id, + date_range=date_range, + language=language, + mention=mention, + topic_id=topic_id, + collection_id=collection_id, + country=country, + access_rights=access_rights, + partner_id=partner_id, + text_reuse_cluster_id=text_reuse_cluster_id, + ) + + filters_pb = filters_as_protobuf(filters or []) + + result = search.sync( + client=self._api_client, + q=UNSET, + order_by=( + get_enum_from_literal(order_by, SearchOrderBy) + if order_by is not None + else UNSET + ), + group_by=get_enum_from_literal_required("articles", SearchGroupBy), + filters=filters_pb if filters_pb else UNSET, + limit=limit if limit is not None else DEFAULT_PAGE_SIZE, + offset=offset if offset is not None else UNSET, + ) + raise_for_error(result) + return SearchDataContainer( + result, + SearchResponseSchema, + _build_web_app_search_url( + f"{self._get_web_app_base_url()}/search", + order_by=order_by, + filters=filters_pb, + limit=limit, + offset=offset, + ), + ) + + def facet( + self, + facet: GetSearchFacetIdLiteral, + q: str | AND[str] | OR[str] | None = None, + order_by: GetSearchFacetOrderByLiteral | None = "value", + limit: int | None = None, + offset: int | None = None, + with_text_contents: bool | None = False, + title: str | AND[str] | OR[str] | None = None, + front_page: bool | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + newspaper_id: str | OR[str] | None = None, + date_range: DateRange | None = None, + language: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + country: str | OR[str] | None = None, + access_rights: ( + ArticleAccessRightLiteral | OR[ArticleAccessRightLiteral] | None + ) = None, + partner_id: str | OR[str] | None = None, + text_reuse_cluster_id: str | OR[str] | None = None, + ) -> FacetDataContainer: + + facet_id = get_enum_from_literal(facet, GetSearchFacetId) + if isinstance(facet_id, Unset): + raise ValueError(f"{facet} is not a valid value") + + filters = self._build_filters( + string=q, + with_text_contents=with_text_contents, + title=title, + front_page=front_page, + entity_id=entity_id, + newspaper_id=newspaper_id, + date_range=date_range, + language=language, + mention=mention, + topic_id=topic_id, + collection_id=collection_id, + country=country, + access_rights=access_rights, + partner_id=partner_id, + text_reuse_cluster_id=text_reuse_cluster_id, + ) + + filters_pb = filters_as_protobuf(filters or []) + + result = get_search_facet.sync( + client=self._api_client, + id=facet_id, + filters=filters_pb if filters_pb else UNSET, + offset=offset if offset is not None else UNSET, + limit=limit if limit is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, GetSearchFacetOrderBy) + if order_by is not None + else UNSET + ), + ) + raise_for_error(result) + return FacetDataContainer( + result, + SearchFacet, + limit=limit, + offset=offset, + web_app_search_result_url=_build_web_app_facet_url( + f"{self._get_web_app_base_url()}/search", + facet=facet, + filters=filters_pb, + limit=limit, + offset=offset, + ), + ) + + def _build_filters( + self, + string: str | AND[str] | OR[str] | None, + with_text_contents: bool | None = False, + title: str | AND[str] | OR[str] | None = None, + front_page: bool | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + newspaper_id: str | OR[str] | None = None, + date_range: DateRange | None = None, + language: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + country: str | OR[str] | None = None, + access_rights: ( + ArticleAccessRightLiteral | OR[ArticleAccessRightLiteral] | None + ) = None, + partner_id: str | OR[str] | None = None, + text_reuse_cluster_id: str | OR[str] | None = None, + ) -> list[Filter]: + filters: list[Filter] = [] + if string: + filters.extend(and_or_filter(string, "string")) + if with_text_contents: + filters.append(Filter(type="has_text_contents", daterange=None)) + if title is not None: + filters.extend(and_or_filter(title, "title")) + if front_page: + filters.append(Filter(type="is_front", daterange=None)) + if entity_id is not None: + filters.extend(and_or_filter(entity_id, "entity")) + if newspaper_id is not None: + filters.extend(and_or_filter(newspaper_id, "newspaper")) + if date_range is not None: + filters.append( + Filter( + type="daterange", + q=Q(DateRange._as_filter_value(date_range)), + context="exclude" if date_range.inverted else "include", + daterange=None, + ) + ) + if language is not None: + filters.extend(and_or_filter(language, "language")) + if mention is not None: + filters.extend(and_or_filter(mention, "mention")) + if topic_id is not None: + filters.extend(and_or_filter(topic_id, "topic")) + if collection_id is not None: + filters.extend(and_or_filter(collection_id, "collection")) + if country is not None: + filters.extend(and_or_filter(country, "country")) + if access_rights is not None: + filters.extend(and_or_filter(access_rights, "access_right")) # type: ignore + if partner_id is not None: + filters.extend(and_or_filter(partner_id, "partner")) + if text_reuse_cluster_id is not None: + filters.extend(and_or_filter(text_reuse_cluster_id, "text_reuse_cluster")) + + return filters + + +def _build_web_app_search_url( + base_url: str, + order_by: SearchOrderByLiteral | None = None, + filters: str | None = None, + limit: int | None = None, + offset: int | None = None, +) -> str: + page = offset // limit if limit is not None and offset is not None else 0 + query_params = { + "orderBy": order_by, + "sq": filters, + "p": page + 1, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + return f"{base_url}?{query_string}" if query_string else base_url + + +def _build_web_app_facet_url( + base_url: str, + facet: str, + filters: str | None = None, + limit: int | None = None, + offset: int | None = None, +) -> str: + page = offset // limit if limit is not None and offset is not None else 0 + query_params = { + "index": "search", + "facet": "type", + "domain": facet, + "sq": filters, + "p": page + 1, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + return f"{base_url}?{query_string}" if query_string else base_url + + +def render_dataframe_chart_base64(x, y) -> str: + plt.figure(figsize=(12, 1)) + + if len(x) < 50: + plt.bar(x, y) + else: + plt.plot(x, y) + + # Remove axes, labels, and legend + plt.axis("off") + # plt.legend().remove() + + # Save the plot to a bytes buffer with a transparent background + buffer = io.BytesIO() + plt.savefig( + buffer, format="png", bbox_inches="tight", pad_inches=0.1, transparent=True + ) + buffer.seek(0) + + # Encode the bytes as base64 + image_base64 = base64.b64encode(buffer.getvalue()).decode("utf-8") + + # Close the plot to free up memory + plt.close() + + return image_base64 diff --git a/impresso/resources/text_reuse/__init__.py b/impresso/resources/text_reuse/__init__.py new file mode 100644 index 0000000..a50634d --- /dev/null +++ b/impresso/resources/text_reuse/__init__.py @@ -0,0 +1,18 @@ +from impresso.api_client.client import AuthenticatedClient +from impresso.resources.text_reuse.clusters import TextReuseClustersResource +from impresso.resources.text_reuse.passages import TextReusePassagesResource + + +class TextReuseDomain: + """Container for text reuse resources.""" + + def __init__(self, api_client: AuthenticatedClient) -> None: + self._api_client = api_client + + @property + def clusters(self) -> TextReuseClustersResource: + return TextReuseClustersResource(self._api_client) + + @property + def passages(self) -> TextReusePassagesResource: + return TextReusePassagesResource(self._api_client) diff --git a/impresso/resources/text_reuse/clusters.py b/impresso/resources/text_reuse/clusters.py new file mode 100644 index 0000000..888ed9d --- /dev/null +++ b/impresso/resources/text_reuse/clusters.py @@ -0,0 +1,348 @@ +from pandas import DataFrame, json_normalize + +from impresso.api_client.api.search_facets import get_tr_clusters_facet +from impresso.api_client.api.text_reuse_clusters import find_text_reuse_clusters +from impresso.api_client.models.find_text_reuse_clusters_order_by import ( + FindTextReuseClustersOrderBy, + FindTextReuseClustersOrderByLiteral, +) +from impresso.api_client.models.get_tr_clusters_facet_id import ( + GetTrClustersFacetId, + GetTrClustersFacetIdLiteral, +) +from impresso.api_client.models.get_tr_clusters_facet_order_by import ( + GetTrClustersFacetOrderBy, + GetTrClustersFacetOrderByLiteral, +) +from impresso.api_client.types import UNSET, Unset +from impresso.api_models import ( + BaseFind, + Filter, + Q, + SearchFacet, + TextReuseClusterCompound, +) +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.resources.search import FacetDataContainer +from impresso.structures import AND, OR, DateRange +from impresso.util.error import raise_for_error +from impresso.util.filters import and_or_filter, filters_as_protobuf +from impresso.util.py import get_enum_from_literal + + +class FindTextReuseClusterResponseSchema(BaseFind): + """Schema for the text reuse clusters response.""" + + data: list[TextReuseClusterCompound] + + +class FindTextReuseClustersContainer(DataContainer): + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["clusters"] + if len(data): + return json_normalize(data).set_index("cluster.id") + return DataFrame() + + @property + def pydantic(self): + """Return the data as a pydantic model.""" + remapped_raw = { + "data": self.raw.get("clusters", []), + "info": self.raw.get("info", {}), + "total": self.total, + "limit": self.limit, + "offset": self.offset, + } + return self._pydantic_model.model_validate(remapped_raw) + + @property + def size(self) -> int: + """Current page size.""" + return len(self.raw.get("clusters", [])) + + @property + def total(self) -> int: + """Total number of results.""" + return self.raw.get("info", {}).get("total", 0) + + @property + def limit(self) -> int: + """Page size.""" + return self.raw.get("info", {}).get("limit", 0) + + @property + def offset(self) -> int: + """Page offset.""" + return self.raw.get("info", {}).get("offset", 0) + + +Range = tuple[int, int] + + +class TextReuseClustersResource(Resource): + """Text reuse clusters resource.""" + + name = "textReuseClusters" + + def find( + self, + text: str | None = None, + title: str | AND[str] | OR[str] | None = None, + order_by: FindTextReuseClustersOrderByLiteral | None = None, + cluster_size: Range | AND[Range] | OR[Range] | None = None, + lexical_overlap: Range | AND[Range] | OR[Range] | None = None, + day_delta: Range | AND[Range] | OR[Range] | None = None, + date_range: DateRange | None = None, + newspaper_id: str | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + limit: int | None = None, + offset: int | None = None, + front_page: bool | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + language: str | OR[str] | None = None, + country: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + ) -> FindTextReuseClustersContainer: + + filters = _build_filters( + text=text, + cluster_size=cluster_size, + title=title, + lexical_overlap=lexical_overlap, + day_delta=day_delta, + date_range=date_range, + newspaper_id=newspaper_id, + collection_id=collection_id, + front_page=front_page, + topic_id=topic_id, + language=language, + country=country, + mention=mention, + entity_id=entity_id, + ) + filters_pb = filters_as_protobuf(filters or []) + + result = find_text_reuse_clusters.sync( + client=self._api_client, + limit=limit if limit is not None else UNSET, + offset=offset if offset is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, FindTextReuseClustersOrderBy) + if order_by is not None + else UNSET + ), + filters=filters_pb if filters_pb else UNSET, + ) + raise_for_error(result) + return FindTextReuseClustersContainer( + result, + FindTextReuseClusterResponseSchema, + web_app_search_result_url=_build_web_app_find_clusters_url( + base_url=self._get_web_app_base_url(), + filters=filters_pb, + limit=limit, + offset=offset, + order_by=order_by, + ), + ) + + def facet( + self, + facet: GetTrClustersFacetIdLiteral, + order_by: GetTrClustersFacetOrderByLiteral | None = "value", + limit: int | None = None, + offset: int | None = None, + cluster_size: Range | AND[Range] | OR[Range] | None = None, + date_range: DateRange | None = None, + newspaper_id: str | OR[str] | None = None, + lexical_overlap: Range | AND[Range] | OR[Range] | None = None, + day_delta: Range | AND[Range] | OR[Range] | None = None, + ) -> FacetDataContainer: + facet_id = get_enum_from_literal(facet, GetTrClustersFacetId) + if isinstance(facet_id, Unset): + raise ValueError(f"{facet} is not a valid value") + + filters = _build_cluster_facet_filters( + cluster_size=cluster_size, + lexical_overlap=lexical_overlap, + day_delta=day_delta, + date_range=date_range, + newspaper_id=newspaper_id, + ) + + filters_pb = filters_as_protobuf(filters or []) + + result = get_tr_clusters_facet.sync( + client=self._api_client, + id=facet_id, + filters=filters_pb if filters_pb else UNSET, + offset=offset if offset is not None else UNSET, + limit=limit if limit is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, GetTrClustersFacetOrderBy) + if order_by is not None + else UNSET + ), + ) + raise_for_error(result) + return FacetDataContainer( + result, + SearchFacet, + limit=limit, + offset=offset, + web_app_search_result_url=_build_web_app_find_clusters_url( + base_url=self._get_web_app_base_url(), + filters=filters_pb, + limit=limit, + offset=offset, + order_by=order_by, + ), + ) + + +def _build_cluster_facet_filters( + cluster_size: Range | AND[Range] | OR[Range] | None = None, + date_range: DateRange | None = None, + newspaper_id: str | OR[str] | None = None, + lexical_overlap: Range | AND[Range] | OR[Range] | None = None, + day_delta: Range | AND[Range] | OR[Range] | None = None, +) -> list[Filter]: + """Build text reuse clusters facet filters.""" + + filters: list[Filter] = [] + if cluster_size is not None: + filters.extend( + and_or_filter( + cluster_size, + "text_reuse_cluster_size", + lambda r: f"{r[0]} TO {r[1]}", + ) + ) + if date_range is not None: + filters.append( + Filter( + type="daterange", + q=Q(DateRange._as_filter_value(date_range)), + context="exclude" if date_range.inverted else "include", + daterange=None, + ) + ) + if newspaper_id is not None: + filters.extend(and_or_filter(newspaper_id, "newspaper")) + if lexical_overlap is not None: + filters.extend( + and_or_filter( + lexical_overlap, + "text_reuse_cluster_lexical_overlap", + lambda r: f"{r[0]} TO {r[1]}", + ) + ) + if day_delta is not None: + filters.extend( + and_or_filter( + day_delta, + "text_reuse_cluster_day_delta", + lambda r: f"{r[0]} TO {r[1]}", + ) + ) + return filters + + +def _build_filters( + text: str | None = None, + cluster_size: Range | AND[Range] | OR[Range] | None = None, + title: str | AND[str] | OR[str] | None = None, + lexical_overlap: Range | AND[Range] | OR[Range] | None = None, + day_delta: Range | AND[Range] | OR[Range] | None = None, + date_range: DateRange | None = None, + newspaper_id: str | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + front_page: bool | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + language: str | OR[str] | None = None, + country: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + entity_id: str | AND[str] | OR[str] | None = None, +) -> list[Filter]: + """Build text reuse clusters filters.""" + + filters: list[Filter] = [] + if text is not None: + filters.extend(and_or_filter(text, "string")) + if cluster_size is not None: + filters.extend( + and_or_filter( + cluster_size, + "text_reuse_cluster_size", + lambda r: f"{r[0]} TO {r[1]}", + ) + ) + if title is not None: + filters.extend(and_or_filter(title, "title")) + if lexical_overlap is not None: + filters.extend( + and_or_filter( + lexical_overlap, + "text_reuse_cluster_lexical_overlap", + lambda r: f"{r[0]} TO {r[1]}", + ) + ) + if day_delta is not None: + filters.extend( + and_or_filter( + day_delta, + "text_reuse_cluster_day_delta", + lambda r: f"{r[0]} TO {r[1]}", + ) + ) + if date_range is not None: + filters.append( + Filter( + type="daterange", + q=Q(DateRange._as_filter_value(date_range)), + context="exclude" if date_range.inverted else "include", + daterange=None, + ) + ) + if newspaper_id is not None: + filters.extend(and_or_filter(newspaper_id, "newspaper")) + if collection_id is not None: + filters.extend(and_or_filter(collection_id, "collection")) + if front_page: + filters.append(Filter(type="is_front", daterange=None)) + if topic_id is not None: + filters.extend(and_or_filter(topic_id, "topic")) + if language is not None: + filters.extend(and_or_filter(language, "language")) + if country is not None: + filters.extend(and_or_filter(country, "country")) + if mention is not None: + filters.extend(and_or_filter(mention, "mention")) + if entity_id is not None: + filters.extend(and_or_filter(entity_id, "entity")) + + return filters + + +def _build_web_app_find_clusters_url( + base_url: str, + filters=str | None, + limit=int | None, + offset=int | None, + order_by=GetTrClustersFacetOrderByLiteral | None, +) -> str: + page = offset // limit if limit is not None and offset is not None else 0 + query_params = { + "orderBy": order_by, + "sq": filters, + "p": page + 1, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + url = f"{base_url}/text-reuse/clusters" + return f"{url}?{query_string}" if query_string else url diff --git a/impresso/resources/text_reuse/passages.py b/impresso/resources/text_reuse/passages.py new file mode 100644 index 0000000..9ee0804 --- /dev/null +++ b/impresso/resources/text_reuse/passages.py @@ -0,0 +1,206 @@ +from pandas import DataFrame, json_normalize + +from impresso.api_client.api.search_facets import get_tr_passages_facet +from impresso.api_client.api.text_reuse_passages import find_text_reuse_passages +from impresso.api_client.models.find_text_reuse_passages_order_by import ( + FindTextReusePassagesOrderBy, + FindTextReusePassagesOrderByLiteral, +) +from impresso.api_client.models.get_tr_passages_facet_id import ( + GetTrPassagesFacetId, + GetTrPassagesFacetIdLiteral, +) +from impresso.api_client.models.get_tr_passages_facet_order_by import ( + GetTrPassagesFacetOrderBy, +) +from impresso.api_client.types import UNSET, Unset +from impresso.api_models import BaseFind, SearchFacet, TextReusePassage +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.resources.search import FacetDataContainer +from impresso.resources.text_reuse.clusters import Range, _build_filters +from impresso.structures import AND, OR, DateRange +from impresso.util.error import raise_for_error +from impresso.util.filters import and_or_filter, filters_as_protobuf +from impresso.util.py import get_enum_from_literal + + +class FindTextReusePassageResponseSchema(BaseFind): + """Schema for the text reuse passage response.""" + + data: list[TextReusePassage] + + +class FindTextReusePassagesContainer(DataContainer): + """Response of a find text reuse passages call.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["data"] + if len(data): + return json_normalize(self._data.to_dict()["data"]).set_index("id") + return DataFrame() + + +class TextReusePassagesResource(Resource): + """Text reuse passages resource.""" + + name = "textReusePassages" + + def find( + self, + text: str | None = None, + limit: int | None = None, + offset: int | None = None, + order_by: FindTextReusePassagesOrderByLiteral | None = None, + cluster_size: Range | AND[Range] | OR[Range] | None = None, + title: str | AND[str] | OR[str] | None = None, + lexical_overlap: Range | AND[Range] | OR[Range] | None = None, + day_delta: Range | AND[Range] | OR[Range] | None = None, + date_range: DateRange | None = None, + newspaper_id: str | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + front_page: bool | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + language: str | OR[str] | None = None, + country: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + ) -> FindTextReusePassagesContainer: + # reusing build filters from clusters - they are the same + filters = _build_filters( + cluster_size=cluster_size, + title=title, + lexical_overlap=lexical_overlap, + day_delta=day_delta, + date_range=date_range, + newspaper_id=newspaper_id, + collection_id=collection_id, + front_page=front_page, + topic_id=topic_id, + language=language, + country=country, + mention=mention, + entity_id=entity_id, + ) + if text is not None: + filters.extend(and_or_filter(text, "string")) + filters_pb = filters_as_protobuf(filters or []) + + result = find_text_reuse_passages.sync( + client=self._api_client, + limit=limit if limit is not None else UNSET, + offset=offset if offset is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, FindTextReusePassagesOrderBy) + if order_by is not None + else UNSET + ), + filters=filters_pb if filters_pb else UNSET, + ) + raise_for_error(result) + return FindTextReusePassagesContainer( + result, + FindTextReusePassageResponseSchema, + web_app_search_result_url=_build_web_app_find_passages_url( + base_url=self._get_web_app_base_url(), + filters=filters_pb, + limit=limit, + offset=offset, + order_by=order_by, + ), + ) + + def facet( + self, + facet: GetTrPassagesFacetIdLiteral, + text: str | None = None, + limit: int | None = None, + offset: int | None = None, + order_by: FindTextReusePassagesOrderByLiteral | None = None, + cluster_size: Range | AND[Range] | OR[Range] | None = None, + title: str | AND[str] | OR[str] | None = None, + lexical_overlap: Range | AND[Range] | OR[Range] | None = None, + day_delta: Range | AND[Range] | OR[Range] | None = None, + date_range: DateRange | None = None, + newspaper_id: str | OR[str] | None = None, + collection_id: str | OR[str] | None = None, + front_page: bool | None = None, + topic_id: str | AND[str] | OR[str] | None = None, + language: str | OR[str] | None = None, + country: str | OR[str] | None = None, + mention: str | AND[str] | OR[str] | None = None, + entity_id: str | AND[str] | OR[str] | None = None, + ) -> FacetDataContainer: + facet_id = get_enum_from_literal(facet, GetTrPassagesFacetId) + if isinstance(facet_id, Unset): + raise ValueError(f"{facet} is not a valid value") + + filters = _build_filters( + cluster_size=cluster_size, + title=title, + lexical_overlap=lexical_overlap, + day_delta=day_delta, + date_range=date_range, + newspaper_id=newspaper_id, + collection_id=collection_id, + front_page=front_page, + topic_id=topic_id, + language=language, + country=country, + mention=mention, + entity_id=entity_id, + ) + + if text is not None: + filters.extend(and_or_filter(text, "string")) + + filters_pb = filters_as_protobuf(filters or []) + + result = get_tr_passages_facet.sync( + client=self._api_client, + id=facet_id, + filters=filters_pb if filters_pb else UNSET, + offset=offset if offset is not None else UNSET, + limit=limit if limit is not None else UNSET, + order_by=( + get_enum_from_literal(order_by, GetTrPassagesFacetOrderBy) + if order_by is not None + else get_enum_from_literal("value", GetTrPassagesFacetOrderBy) + ), + ) + raise_for_error(result) + return FacetDataContainer( + result, + SearchFacet, + limit=limit, + offset=offset, + web_app_search_result_url=_build_web_app_find_passages_url( + base_url=self._get_web_app_base_url(), + filters=filters_pb, + limit=limit, + offset=offset, + order_by=order_by, + ), + ) + + +def _build_web_app_find_passages_url( + base_url: str, + filters=str | None, + limit=int | None, + offset=int | None, + order_by=FindTextReusePassagesOrderBy | None, +) -> str: + page = offset // limit if limit is not None and offset is not None else 0 + query_params = { + "sort": order_by, + "sq": filters, + "p": page + 1, + } + query_string = "&".join( + f"{key}={value}" for key, value in query_params.items() if value is not None + ) + url = f"{base_url}/text-reuse/passages" + return f"{url}?{query_string}" if query_string else url diff --git a/impresso/resources/tools.py b/impresso/resources/tools.py new file mode 100644 index 0000000..880c629 --- /dev/null +++ b/impresso/resources/tools.py @@ -0,0 +1,74 @@ +from pandas import DataFrame, json_normalize +from impresso.api_client.api.tools import perform_ner +from impresso.api_client.models.impresso_named_entity_recognition_request import ( + ImpressoNamedEntityRecognitionRequest, +) +from impresso.api_models import ImpressoNerResponse +from impresso.data_container import DataContainer +from impresso.resources.base import Resource +from impresso.util.error import raise_for_error + + +class ImpressoNerSchema(ImpressoNerResponse): + """Schema for the find entities response.""" + + pass + + +class NerContainer(DataContainer): + """Name entity recognition result container.""" + + @property + def df(self) -> DataFrame: + """Return the data as a pandas dataframe.""" + data = self._data.to_dict()["entities"] + if len(data): + return json_normalize(self._data.to_dict()["entities"]).set_index("id") + return DataFrame() + + @property + def total(self) -> int: + """Total number of results.""" + return len(self.raw.get("entities", [])) + + @property + def limit(self) -> int: + """Page size.""" + return len(self.raw.get("entities", [])) + + @property + def offset(self) -> int: + """Page offset.""" + return 0 + + @property + def size(self) -> int: + """Current page size.""" + return len(self.raw.get("entities", [])) + + +class ToolsResource(Resource): + """Various helper tools""" + + name = "tools" + + def ner(self, text: str) -> NerContainer: + """Named Entity Recognition + + Args: + text (str): Text to process + + Returns: + NerContainer: List of named entities + """ + result = perform_ner.sync( + client=self._api_client, + body=ImpressoNamedEntityRecognitionRequest(text=text), + ) + raise_for_error(result) + + return NerContainer( + result, + ImpressoNerSchema, + web_app_search_result_url=None, + ) diff --git a/impresso/structures.py b/impresso/structures.py new file mode 100644 index 0000000..e09a2d3 --- /dev/null +++ b/impresso/structures.py @@ -0,0 +1,205 @@ +import datetime +from collections.abc import Sequence as ABCSequence +from typing import ( + Any, + Generic, + Iterable, + Literal, + Sequence, + TypeGuard, + TypeVar, + Union, + cast, +) + +T = TypeVar("T") + + +def _is_string_like_sequence(obj: Any) -> TypeGuard[Sequence[str]]: + return ( + isinstance(obj, ABCSequence) + and not isinstance(obj, str) + and all(isinstance(item, str) for item in obj) + ) + + +class TermSet(set[T], Generic[T]): + + def __init__(self, items: Union[Sequence[T], T], *args: T): + if _is_string_like_sequence(items): + _items = items + elif isinstance(items, str): + _items = [items] + list(args) # type:ignore + else: + raise ValueError(f"{items.__class__} is not supported") + + super().__init__(cast(Iterable[T], _items)) + self.inverted = False + self.chain: list[TermSet] = [] + self._precision = "exact" + + def __invert__(self): + new_instance = AND(list(self)) + new_instance.inverted = not self.inverted + new_instance.chain = self.chain + return new_instance + + def __and__(self, other: Any) -> "TermSet[T]": + if not isinstance(other, TermSet): + raise ValueError(f"{other.__class__} is not supported") + klass = other.__class__ + new_instance = klass(list(other)) + new_instance.chain = other.chain + [self] + new_instance.chain.extend(self.chain) + new_instance.inverted = other.inverted + return new_instance + + @property + def op(self) -> Literal["AND", "OR"]: + return getattr(self, "_op") + + @property + def precision(self) -> Literal["fuzzy", "soft", "exact", "partial"]: + return getattr(self, "_precision", "exact") + + +class AND(TermSet[T], Generic[T]): + """ + Used in filters to specify that all the terms must be present in the result. + + Example: + + ``` + AND(["apple", "banana"]) + AND("apple") + AND("apple", "banana") + # Negate: + ~AND("apple", "banana") + ``` + + """ + + def __init__(self, items: Union[Sequence[T], T], *args: T): + super().__init__(items, *args) + self._op = "AND" + + +class OR(TermSet[T], Generic[T]): + """ + Used in filters to specify that any of the terms must be present in the result. + + + Example: + + ``` + OR(["apple", "banana"]) + OR("apple") + OR("apple", "banana") + # Negate: + ~OR("apple", "banana") + ``` + + """ + + def __init__(self, items: Union[Sequence[T], T], *args: T): + super().__init__(items, *args) + self._op = "OR" + + +def _as_term_set(val: TermSet[T] | str) -> TermSet[T]: + if isinstance(val, str): + return AND(cast(T, val)) + return val + + +def Fuzzy(ts: TermSet[T] | str) -> TermSet[T]: + s = _as_term_set(ts) + s._precision = "fuzzy" + return s + + +def Soft(ts: TermSet[T] | str) -> TermSet[T]: + s = _as_term_set(ts) + s._precision = "soft" + return s + + +def Exact(ts: TermSet[T] | str) -> TermSet[T]: + s = _as_term_set(ts) + s._precision = "exact" + return s + + +def Partial(ts: TermSet[T] | str) -> TermSet[T]: + s = _as_term_set(ts) + s._precision = "partial" + return s + + +class DateRange: + """ + Date range. + + Example: + + ``` + DateRange(datetime.date(1900, 1, 1), datetime.date(2000, 12, 31)) + + # Everything until 2000 + DateRange(None, datetime.date(2000, 12, 31)) + + # Everything since 1900 + DateRange(datetime.date(1900, 12, 31), None) + + ``` + + """ + + def __init__( + self, start: datetime.date | str | None, end: datetime.date | str | None + ): + self.start = datetime.date.min if start is None else DateRange._as_date(start) + self.end = datetime.date.max if end is None else DateRange._as_date(end) + self.inverted = False + + def __invert__(self): + new_instance = DateRange(self.start, self.end) + new_instance.inverted = not self.inverted + return new_instance + + @staticmethod + def _as_filter_value(v: "DateRange") -> str: + return f"{v.start.isoformat()}T00:00:00Z TO {v.end.isoformat()}T00:00:00Z" + + @staticmethod + def _as_date(value: datetime.date | str) -> datetime.date: + if isinstance(value, str): + return datetime.date.fromisoformat(value) + return value + + +class NumericRange: + """ + Date range. + + Example: + + ``` + NumericRange(1, 10) + ``` + + """ + + def __init__(self, start: int, end: int): + self.start = start + self.end = end + self.inverted = False + + def __invert__(self): + new_instance = NumericRange(self.start, self.end) + new_instance.inverted = not self.inverted + return new_instance + + @staticmethod + def _as_filter_value(v: "NumericRange") -> str: + return f"{v.start} TO {v.end}" diff --git a/impresso/util/__init__.py b/impresso/util/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/impresso/util/error.py b/impresso/util/error.py new file mode 100644 index 0000000..e55c47e --- /dev/null +++ b/impresso/util/error.py @@ -0,0 +1,27 @@ +from typing import TypeVar + +from impresso.api_client.models.error import Error as ApiError +from impresso.api_models import Error + +IT = TypeVar("IT") + + +class ImpressoError(Exception): + """Impresso API Exception""" + + def __init__(self, error: Error): + self.error = error + super().__init__(str(self.error)) + + def __str__(self): + return str(self.error) + + +def raise_for_error(result: ApiError | IT) -> IT: + """Raise an Impresso API Exception if the result is an error.""" + + if isinstance(result, ApiError): + error = Error.model_validate(result.to_dict()) + raise ImpressoError(error) + else: + return result diff --git a/impresso/util/filters.py b/impresso/util/filters.py new file mode 100644 index 0000000..74bd27b --- /dev/null +++ b/impresso/util/filters.py @@ -0,0 +1,127 @@ +import base64 +import datetime +from typing import Callable, List, TypeVar + +from impresso.api_models import Q, Filter, QItem +from impresso.protobuf import query_pb2 as pb +from impresso.structures import AND, OR, TermSet + + +def filters_as_protobuf(filters: List[Filter]) -> str | None: + """ + Convert a list of filters to a protobuf string. + """ + if filters is None or len(filters) == 0: + return None + + pb_filters = [_to_pb_filter(f) for f in filters] + q = pb.SearchQuery(filters=pb_filters) + return base64.b64encode(q.SerializeToString()).decode("utf-8") + + +def _to_pb_filter(filter: Filter) -> pb.Filter: + """ + Convert a Filter to a protobuf Filter. + """ + filter_dict = filter.model_dump( + exclude_defaults=True, exclude_none=True, exclude_unset=True + ) + + pb_filter = pb.Filter() + + context = filter_dict.get("context") + if context is not None: + pb_filter.context = _to_pb_filter_context(context) + + op = filter_dict.get("op") + if op is not None: + pb_filter.op = _to_pb_filter_operator(op) + + filter_type = filter_dict.get("type") + if filter_type is not None: + pb_filter.type = _to_pb_filter_type(filter_type) + + precision = filter_dict.get("precision") + if precision is not None: + pb_filter.precision = _to_pb_filter_precision(precision) + + q = filter_dict.get("q") + if q is not None: + pb_filter.q.extend([q] if isinstance(q, str) else q) + + daterange = filter_dict.get("daterange") + if daterange is not None: + daterange_from, daterange_to = daterange.split(" TO ") + if daterange_from is not None and daterange_to is not None: + _from = int(datetime.datetime.fromisoformat(daterange_from).timestamp()) + _to = int(datetime.datetime.fromisoformat(daterange_to).timestamp()) + + pb_filter.daterange = _to_pb_filter_daterange(_from, _to) + + return pb_filter + + +def _to_pb_filter_context(context: str) -> pb.FilterContext: + v = getattr(pb.FilterContext, "CONTEXT_" + context.upper()) + if v is None: + raise ValueError(f"Invalid filter context: {context}") + return v + + +def _to_pb_filter_operator(op: str) -> pb.FilterOperator: + v = getattr(pb.FilterOperator, "OPERATOR_" + op.upper()) + if v is None: + raise ValueError(f"Invalid filter operator: {op}") + return v + + +def _to_pb_filter_type(type: str) -> pb.FilterType: + v = getattr(pb.FilterType, "TYPE_" + type.upper()) + if v is None: + raise ValueError(f"Invalid filter type: {type}") + return v + + +def _to_pb_filter_precision(p: str) -> pb.FilterPrecision: + v = getattr(pb.FilterPrecision, "PRECISION_" + p.upper()) + if v is None: + raise ValueError(f"Invalid filter precision: {p}") + return v + + +def _to_pb_filter_daterange(from_: int, to: int) -> pb.DateRange: + return pb.DateRange(to=to, **{"from": from_}) + + +T = TypeVar("T") + + +def and_or_filter( + item: T | AND[T] | OR[T], + type: str, + converter: Callable[[T], str] = lambda x: str(x), +) -> list[Filter]: + if isinstance(item, TermSet): + filter = Filter( + type=type, + q=list([QItem(converter(i)) for i in item]), + op=item.op, + context="exclude" if item.inverted else "include", + precision=item.precision, + daterange=None, + ) + chain_filters = [ + Filter( + type=type, + q=list([QItem(converter(i)) for i in chain_item]), + op=chain_item.op, + context="exclude" if chain_item.inverted else "include", + daterange=None, + ) + for chain_item in item.chain + ] + return [filter] + chain_filters + else: + return [ + Filter(type=type, q=Q(converter(item)), daterange=None, precision="exact") + ] diff --git a/impresso/util/py.py b/impresso/util/py.py new file mode 100644 index 0000000..f60918f --- /dev/null +++ b/impresso/util/py.py @@ -0,0 +1,28 @@ +from enum import Enum +from typing import TypeVar + +from impresso.api_client.types import Unset + +V = TypeVar("V", bound=str | int) +E = TypeVar("E", bound=Enum) + + +def get_enum_from_literal(value: V | Unset, enum: type[E]) -> E | Unset: + if isinstance(value, Unset): + return value + + for member in enum: + if member.value == value: + return member + raise ValueError(f"{value} is not a valid member of {enum}") + + +def get_enum_from_literal_required(value: V | Unset, enum: type[E]) -> E: + if isinstance(value, Unset): + raise ValueError(f"{value} is required") + return value + + for member in enum: + if member.value == value: + return member + raise ValueError(f"{value} is not a valid member of {enum}") diff --git a/impresso/util/token.py b/impresso/util/token.py new file mode 100644 index 0000000..2523879 --- /dev/null +++ b/impresso/util/token.py @@ -0,0 +1,24 @@ +"""JWT utilities.""" + +from typing import Literal +import jwt + + +def get_jwt_status( + token: str, +) -> tuple[Literal["valid", "expired", "invalid"], dict | None]: + """ + Validate a JWT token. + """ + try: + decoded_token = jwt.decode( + token, + options={"verify_signature": False, "verify_exp": True, "verify_iat": True}, + ) + return "valid", decoded_token + except jwt.ExpiredSignatureError: + # Signature has expired + return "expired", None + except jwt.InvalidTokenError: + # Token is invalid + return "invalid", None diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..08492db --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1808 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "argcomplete" +version = "3.5.0" +description = "Bash tab completion for argparse" +optional = false +python-versions = ">=3.8" +files = [ + {file = "argcomplete-3.5.0-py3-none-any.whl", hash = "sha256:d4bcf3ff544f51e16e54228a7ac7f486ed70ebf2ecfe49a63a91171c76bf029b"}, + {file = "argcomplete-3.5.0.tar.gz", hash = "sha256:4349400469dccfb7950bb60334a680c58d88699bff6159df61251878dc6bf74b"}, +] + +[package.extras] +test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "black" +version = "24.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, + {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, + {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, + {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, + {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, + {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, + {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, + {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, + {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, + {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, + {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, + {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, + {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, + {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, + {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, + {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, + {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, + {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, + {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, + {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, + {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, + {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "contourpy" +version = "1.3.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "datamodel-code-generator" +version = "0.25.6" +description = "Datamodel Code Generator" +optional = false +python-versions = "<4.0,>=3.7" +files = [ + {file = "datamodel_code_generator-0.25.6-py3-none-any.whl", hash = "sha256:adbdb485a713a7035d7260c28d3f280e598b0eb3170d2361cb92431a44c4d154"}, + {file = "datamodel_code_generator-0.25.6.tar.gz", hash = "sha256:466f56de876947b73d4a4cd0c947ce37f63f68f2f6c0ce1477045d1e6e495da5"}, +] + +[package.dependencies] +argcomplete = ">=1.10,<4.0" +black = ">=19.10b0" +genson = ">=1.2.1,<2.0" +inflect = ">=4.1.0,<6.0" +isort = ">=4.3.21,<6.0" +jinja2 = ">=2.10.1,<4.0" +packaging = "*" +pydantic = [ + {version = ">=1.10.0,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, + {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""}, + {version = ">=1.9.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, +] +pyyaml = ">=6.0.1" +toml = {version = ">=0.10.0,<1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +debug = ["PySnooper (>=0.4.1,<2.0.0)"] +graphql = ["graphql-core (>=3.2.3,<4.0.0)"] +http = ["httpx"] +validation = ["openapi-spec-validator (>=0.2.8,<0.7.0)", "prance (>=0.18.2)"] + +[[package]] +name = "dnspython" +version = "2.6.1" +description = "DNS toolkit" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, + {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=41)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=0.9.25)"] +idna = ["idna (>=3.6)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] + +[[package]] +name = "email-validator" +version = "2.2.0" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, + {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "flake8" +version = "7.0.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, + {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "fonttools" +version = "4.53.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, + {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, + {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, + {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, + {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, + {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, + {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, + {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, + {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, + {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, + {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, + {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, + {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "genson" +version = "1.3.0" +description = "GenSON is a powerful, user-friendly JSON Schema generator." +optional = false +python-versions = "*" +files = [ + {file = "genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7"}, + {file = "genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37"}, +] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "idna" +version = "3.8" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, +] + +[[package]] +name = "inflect" +version = "5.6.2" +description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles; convert numbers to words" +optional = false +python-versions = ">=3.7" +files = [ + {file = "inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238"}, + {file = "inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9"}, +] + +[package.extras] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pygments", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.8" +files = [ + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "matplotlib" +version = "3.9.2" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mypy" +version = "1.9.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, + {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, + {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, + {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, + {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, + {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, + {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, + {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, + {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, + {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, + {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, + {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, + {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, + {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, + {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, + {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, + {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, + {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "numpy" +version = "2.1.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, + {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, + {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, + {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, + {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, + {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, + {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, + {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, + {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, + {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, + {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, + {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, + {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, + {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, + {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, + {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, + {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, + {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, + {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, + {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, + {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, + {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, + {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, + {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, + {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, + {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, + {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, + {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, + {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, + {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, + {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, + {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, + {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, +] + +[[package]] +name = "openapi-python-client" +version = "0.21.1" +description = "Generate modern Python clients from OpenAPI" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [] +develop = false + +[package.dependencies] +attrs = ">=21.3.0" +colorama = {version = ">=0.4.3", markers = "sys_platform == \"win32\""} +httpx = ">=0.20.0,<0.28.0" +jinja2 = ">=3.0.0,<4.0.0" +pydantic = ">=2.1.1,<3.0.0" +python-dateutil = ">=2.8.1,<3.0.0" +ruamel-yaml = ">=0.18.6,<0.19.0" +ruff = ">=0.2,<0.5" +shellingham = ">=1.3.2,<2.0.0" +typer = ">0.6,<0.13" +typing-extensions = ">=4.8.0,<5.0.0" + +[package.source] +type = "git" +url = "https://github.com/theorm/openapi-python-client.git#name=openapi-python-client" +reference = "develop" +resolved_reference = "b9ca6d25ec7b4565472ab3d2c7886eaa334dc62c" + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "pandas" +version = "2.2.2" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pandas-stubs" +version = "2.2.2.240807" +description = "Type annotations for pandas" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas_stubs-2.2.2.240807-py3-none-any.whl", hash = "sha256:893919ad82be4275f0d07bb47a95d08bae580d3fdea308a7acfcb3f02e76186e"}, + {file = "pandas_stubs-2.2.2.240807.tar.gz", hash = "sha256:64a559725a57a449f46225fbafc422520b7410bff9252b661a225b5559192a93"}, +] + +[package.dependencies] +numpy = ">=1.23.5" +types-pytz = ">=2022.1.1" + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pillow" +version = "10.4.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "protobuf" +version = "5.28.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-5.28.0-cp310-abi3-win32.whl", hash = "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0"}, + {file = "protobuf-5.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6"}, + {file = "protobuf-5.28.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681"}, + {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd"}, + {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd"}, + {file = "protobuf-5.28.0-cp38-cp38-win32.whl", hash = "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8"}, + {file = "protobuf-5.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5"}, + {file = "protobuf-5.28.0-cp39-cp39-win32.whl", hash = "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b"}, + {file = "protobuf-5.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de"}, + {file = "protobuf-5.28.0-py3-none-any.whl", hash = "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0"}, + {file = "protobuf-5.28.0.tar.gz", hash = "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add"}, +] + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pydantic" +version = "2.9.0" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.9.0-py3-none-any.whl", hash = "sha256:f66a7073abd93214a20c5f7b32d56843137a7a2e70d02111f3be287035c45370"}, + {file = "pydantic-2.9.0.tar.gz", hash = "sha256:c7a8a9fdf7d100afa49647eae340e2d23efa382466a8d177efcd1381e9be5598"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} +pydantic-core = "2.23.2" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] +tzdata = {version = "*", markers = "python_version >= \"3.9\""} + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.23.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.23.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7d0324a35ab436c9d768753cbc3c47a865a2cbc0757066cb864747baa61f6ece"}, + {file = "pydantic_core-2.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:276ae78153a94b664e700ac362587c73b84399bd1145e135287513442e7dfbc7"}, + {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:964c7aa318da542cdcc60d4a648377ffe1a2ef0eb1e996026c7f74507b720a78"}, + {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1cf842265a3a820ebc6388b963ead065f5ce8f2068ac4e1c713ef77a67b71f7c"}, + {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae90b9e50fe1bd115b24785e962b51130340408156d34d67b5f8f3fa6540938e"}, + {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ae65fdfb8a841556b52935dfd4c3f79132dc5253b12c0061b96415208f4d622"}, + {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8aa40f6ca803f95b1c1c5aeaee6237b9e879e4dfb46ad713229a63651a95fb"}, + {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c53100c8ee5a1e102766abde2158077d8c374bee0639201f11d3032e3555dfbc"}, + {file = "pydantic_core-2.23.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6b9dd6aa03c812017411734e496c44fef29b43dba1e3dd1fa7361bbacfc1354"}, + {file = "pydantic_core-2.23.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b18cf68255a476b927910c6873d9ed00da692bb293c5b10b282bd48a0afe3ae2"}, + {file = "pydantic_core-2.23.2-cp310-none-win32.whl", hash = "sha256:e460475719721d59cd54a350c1f71c797c763212c836bf48585478c5514d2854"}, + {file = "pydantic_core-2.23.2-cp310-none-win_amd64.whl", hash = "sha256:5f3cf3721eaf8741cffaf092487f1ca80831202ce91672776b02b875580e174a"}, + {file = "pydantic_core-2.23.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7ce8e26b86a91e305858e018afc7a6e932f17428b1eaa60154bd1f7ee888b5f8"}, + {file = "pydantic_core-2.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e9b24cca4037a561422bf5dc52b38d390fb61f7bfff64053ce1b72f6938e6b2"}, + {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:753294d42fb072aa1775bfe1a2ba1012427376718fa4c72de52005a3d2a22178"}, + {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:257d6a410a0d8aeb50b4283dea39bb79b14303e0fab0f2b9d617701331ed1515"}, + {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8319e0bd6a7b45ad76166cc3d5d6a36c97d0c82a196f478c3ee5346566eebfd"}, + {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a05c0240f6c711eb381ac392de987ee974fa9336071fb697768dfdb151345ce"}, + {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d5b0ff3218858859910295df6953d7bafac3a48d5cd18f4e3ed9999efd2245f"}, + {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:96ef39add33ff58cd4c112cbac076726b96b98bb8f1e7f7595288dcfb2f10b57"}, + {file = "pydantic_core-2.23.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0102e49ac7d2df3379ef8d658d3bc59d3d769b0bdb17da189b75efa861fc07b4"}, + {file = "pydantic_core-2.23.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a6612c2a844043e4d10a8324c54cdff0042c558eef30bd705770793d70b224aa"}, + {file = "pydantic_core-2.23.2-cp311-none-win32.whl", hash = "sha256:caffda619099cfd4f63d48462f6aadbecee3ad9603b4b88b60cb821c1b258576"}, + {file = "pydantic_core-2.23.2-cp311-none-win_amd64.whl", hash = "sha256:6f80fba4af0cb1d2344869d56430e304a51396b70d46b91a55ed4959993c0589"}, + {file = "pydantic_core-2.23.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c83c64d05ffbbe12d4e8498ab72bdb05bcc1026340a4a597dc647a13c1605ec"}, + {file = "pydantic_core-2.23.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6294907eaaccf71c076abdd1c7954e272efa39bb043161b4b8aa1cd76a16ce43"}, + {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a801c5e1e13272e0909c520708122496647d1279d252c9e6e07dac216accc41"}, + {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc0c316fba3ce72ac3ab7902a888b9dc4979162d320823679da270c2d9ad0cad"}, + {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b06c5d4e8701ac2ba99a2ef835e4e1b187d41095a9c619c5b185c9068ed2a49"}, + {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82764c0bd697159fe9947ad59b6db6d7329e88505c8f98990eb07e84cc0a5d81"}, + {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b1a195efd347ede8bcf723e932300292eb13a9d2a3c1f84eb8f37cbbc905b7f"}, + {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7efb12e5071ad8d5b547487bdad489fbd4a5a35a0fc36a1941517a6ad7f23e0"}, + {file = "pydantic_core-2.23.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5dd0ec5f514ed40e49bf961d49cf1bc2c72e9b50f29a163b2cc9030c6742aa73"}, + {file = "pydantic_core-2.23.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:820f6ee5c06bc868335e3b6e42d7ef41f50dfb3ea32fbd523ab679d10d8741c0"}, + {file = "pydantic_core-2.23.2-cp312-none-win32.whl", hash = "sha256:3713dc093d5048bfaedbba7a8dbc53e74c44a140d45ede020dc347dda18daf3f"}, + {file = "pydantic_core-2.23.2-cp312-none-win_amd64.whl", hash = "sha256:e1895e949f8849bc2757c0dbac28422a04be031204df46a56ab34bcf98507342"}, + {file = "pydantic_core-2.23.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:da43cbe593e3c87d07108d0ebd73771dc414488f1f91ed2e204b0370b94b37ac"}, + {file = "pydantic_core-2.23.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:64d094ea1aa97c6ded4748d40886076a931a8bf6f61b6e43e4a1041769c39dd2"}, + {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:084414ffe9a85a52940b49631321d636dadf3576c30259607b75516d131fecd0"}, + {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:043ef8469f72609c4c3a5e06a07a1f713d53df4d53112c6d49207c0bd3c3bd9b"}, + {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3649bd3ae6a8ebea7dc381afb7f3c6db237fc7cebd05c8ac36ca8a4187b03b30"}, + {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6db09153d8438425e98cdc9a289c5fade04a5d2128faff8f227c459da21b9703"}, + {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5668b3173bb0b2e65020b60d83f5910a7224027232c9f5dc05a71a1deac9f960"}, + {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c7b81beaf7c7ebde978377dc53679c6cba0e946426fc7ade54251dfe24a7604"}, + {file = "pydantic_core-2.23.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:ae579143826c6f05a361d9546446c432a165ecf1c0b720bbfd81152645cb897d"}, + {file = "pydantic_core-2.23.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:19f1352fe4b248cae22a89268720fc74e83f008057a652894f08fa931e77dced"}, + {file = "pydantic_core-2.23.2-cp313-none-win32.whl", hash = "sha256:e1a79ad49f346aa1a2921f31e8dbbab4d64484823e813a002679eaa46cba39e1"}, + {file = "pydantic_core-2.23.2-cp313-none-win_amd64.whl", hash = "sha256:582871902e1902b3c8e9b2c347f32a792a07094110c1bca6c2ea89b90150caac"}, + {file = "pydantic_core-2.23.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:743e5811b0c377eb830150d675b0847a74a44d4ad5ab8845923d5b3a756d8100"}, + {file = "pydantic_core-2.23.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6650a7bbe17a2717167e3e23c186849bae5cef35d38949549f1c116031b2b3aa"}, + {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56e6a12ec8d7679f41b3750ffa426d22b44ef97be226a9bab00a03365f217b2b"}, + {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810ca06cca91de9107718dc83d9ac4d2e86efd6c02cba49a190abcaf33fb0472"}, + {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:785e7f517ebb9890813d31cb5d328fa5eda825bb205065cde760b3150e4de1f7"}, + {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ef71ec876fcc4d3bbf2ae81961959e8d62f8d74a83d116668409c224012e3af"}, + {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50ac34835c6a4a0d456b5db559b82047403c4317b3bc73b3455fefdbdc54b0a"}, + {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16b25a4a120a2bb7dab51b81e3d9f3cde4f9a4456566c403ed29ac81bf49744f"}, + {file = "pydantic_core-2.23.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:41ae8537ad371ec018e3c5da0eb3f3e40ee1011eb9be1da7f965357c4623c501"}, + {file = "pydantic_core-2.23.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07049ec9306ec64e955b2e7c40c8d77dd78ea89adb97a2013d0b6e055c5ee4c5"}, + {file = "pydantic_core-2.23.2-cp38-none-win32.whl", hash = "sha256:086c5db95157dc84c63ff9d96ebb8856f47ce113c86b61065a066f8efbe80acf"}, + {file = "pydantic_core-2.23.2-cp38-none-win_amd64.whl", hash = "sha256:67b6655311b00581914aba481729971b88bb8bc7996206590700a3ac85e457b8"}, + {file = "pydantic_core-2.23.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:358331e21a897151e54d58e08d0219acf98ebb14c567267a87e971f3d2a3be59"}, + {file = "pydantic_core-2.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c4d9f15ffe68bcd3898b0ad7233af01b15c57d91cd1667f8d868e0eacbfe3f87"}, + {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0123655fedacf035ab10c23450163c2f65a4174f2bb034b188240a6cf06bb123"}, + {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e6e3ccebdbd6e53474b0bb7ab8b88e83c0cfe91484b25e058e581348ee5a01a5"}, + {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc535cb898ef88333cf317777ecdfe0faac1c2a3187ef7eb061b6f7ecf7e6bae"}, + {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aab9e522efff3993a9e98ab14263d4e20211e62da088298089a03056980a3e69"}, + {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05b366fb8fe3d8683b11ac35fa08947d7b92be78ec64e3277d03bd7f9b7cda79"}, + {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7568f682c06f10f30ef643a1e8eec4afeecdafde5c4af1b574c6df079e96f96c"}, + {file = "pydantic_core-2.23.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cdd02a08205dc90238669f082747612cb3c82bd2c717adc60f9b9ecadb540f80"}, + {file = "pydantic_core-2.23.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a2ab4f410f4b886de53b6bddf5dd6f337915a29dd9f22f20f3099659536b2f6"}, + {file = "pydantic_core-2.23.2-cp39-none-win32.whl", hash = "sha256:0448b81c3dfcde439551bb04a9f41d7627f676b12701865c8a2574bcea034437"}, + {file = "pydantic_core-2.23.2-cp39-none-win_amd64.whl", hash = "sha256:4cebb9794f67266d65e7e4cbe5dcf063e29fc7b81c79dc9475bd476d9534150e"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e758d271ed0286d146cf7c04c539a5169a888dd0b57026be621547e756af55bc"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f477d26183e94eaafc60b983ab25af2a809a1b48ce4debb57b343f671b7a90b6"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da3131ef2b940b99106f29dfbc30d9505643f766704e14c5d5e504e6a480c35e"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329a721253c7e4cbd7aad4a377745fbcc0607f9d72a3cc2102dd40519be75ed2"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7706e15cdbf42f8fab1e6425247dfa98f4a6f8c63746c995d6a2017f78e619ae"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e64ffaf8f6e17ca15eb48344d86a7a741454526f3a3fa56bc493ad9d7ec63936"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dd59638025160056687d598b054b64a79183f8065eae0d3f5ca523cde9943940"}, + {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:12625e69b1199e94b0ae1c9a95d000484ce9f0182f9965a26572f054b1537e44"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5d813fd871b3d5c3005157622ee102e8908ad6011ec915a18bd8fde673c4360e"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1eb37f7d6a8001c0f86dc8ff2ee8d08291a536d76e49e78cda8587bb54d8b329"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce7eaf9a98680b4312b7cebcdd9352531c43db00fca586115845df388f3c465"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f087879f1ffde024dd2788a30d55acd67959dcf6c431e9d3682d1c491a0eb474"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ce883906810b4c3bd90e0ada1f9e808d9ecf1c5f0b60c6b8831d6100bcc7dd6"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a8031074a397a5925d06b590121f8339d34a5a74cfe6970f8a1124eb8b83f4ac"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23af245b8f2f4ee9e2c99cb3f93d0e22fb5c16df3f2f643f5a8da5caff12a653"}, + {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c57e493a0faea1e4c38f860d6862ba6832723396c884fbf938ff5e9b224200e2"}, + {file = "pydantic_core-2.23.2.tar.gz", hash = "sha256:95d6bf449a1ac81de562d65d180af5d8c19672793c81877a2eda8fde5d08f2fd"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pygments" +version = "2.18.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjwt" +version = "2.9.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, + {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pyparsing" +version = "3.1.4" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "8.1.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, + {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "rich" +version = "13.8.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, + {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "ruff" +version = "0.4.10" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, + {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, + {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, + {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, + {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, + {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typer" +version = "0.12.5" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.7" +files = [ + {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, + {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + +[[package]] +name = "types-protobuf" +version = "5.27.0.20240626" +description = "Typing stubs for protobuf" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-protobuf-5.27.0.20240626.tar.gz", hash = "sha256:683ba14043bade6785e3f937a7498f243b37881a91ac8d81b9202ecf8b191e9c"}, + {file = "types_protobuf-5.27.0.20240626-py3-none-any.whl", hash = "sha256:688e8f7e8d9295db26bc560df01fb731b27a25b77cbe4c1ce945647f7024f5c1"}, +] + +[[package]] +name = "types-pytz" +version = "2024.1.0.20240417" +description = "Typing stubs for pytz" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-pytz-2024.1.0.20240417.tar.gz", hash = "sha256:6810c8a1f68f21fdf0f4f374a432487c77645a0ac0b31de4bf4690cf21ad3981"}, + {file = "types_pytz-2024.1.0.20240417-py3-none-any.whl", hash = "sha256:8335d443310e2db7b74e007414e74c4f53b67452c0cb0d228ca359ccfba59659"}, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.20240808" +description = "Typing stubs for PyYAML" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-PyYAML-6.0.12.20240808.tar.gz", hash = "sha256:b8f76ddbd7f65440a8bda5526a9607e4c7a322dc2f8e1a8c405644f9a6f4b9af"}, + {file = "types_PyYAML-6.0.12.20240808-py3-none-any.whl", hash = "sha256:deda34c5c655265fc517b546c902aa6eed2ef8d3e921e4765fe606fe2afe8d35"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10.0 || ^3.11.0" +content-hash = "bff0e3b8e4b655e830ab5b4c4d3887b465b3ceb0b248cb532217d795bf6f0603" diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 0000000..ab1033b --- /dev/null +++ b/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true diff --git a/pyproject.toml b/pyproject.toml index db25aa6..055e58f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,44 +1,66 @@ -[build-system] -requires = ["setuptools>=69.1.0"] -build-backend = "setuptools.build_meta" - -[project] -name = "impresso" -authors = [ - { name="Daniele Guido", email="daniele.guido@uni.lu"} +[tool.poetry] +authors = ["Daniele Guido "] +classifiers = [ + "Programming Language :: Python :: 3", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", ] description = "A Python package to explore the impresso API" -readme = "README.md" -requires-python = ">=3.8" -classifiers = [ - "Programming Language :: Python :: 3", - "Intended Audience :: Developers", - "Intended Audience :: Science/Research", - "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", - "Operating System :: OS Independent", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", +documentation = "https://impresso-py.readthedocs.io/en/latest/" +homepage = "https://github.com/impresso/impresso-py" +name = "impresso" +packages = [ + {include = "impresso", from = "."}, ] +readme = "README.md" +repository = "https://github.com/impresso/impresso-py" +version = "0.1.0" -dynamic = ["version"] +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/python-poetry/poetry/issues" +Endpoint = "https://dev.impresso-project.ch/api/public" +Issues = "https://github.com/impresso/impresso-py/issues" -dependencies = [ - "python-socketio", - "requests", - "black" -] +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry-core"] -[project.urls] -Homepage = "https://github.com/impresso/impresso-py" -Documentaton = "https://impresso-py.readthedocs.io/en/latest/" -Issues = "https://github.com/impresso/impresso-py/issues" -Endpoint = "https://dev.impresso-project.ch/api/public" +[virtualenvs] +in-project = true + +[tool.poetry.dependencies] +PyJWT = "^2.8.0" +attrs = "^23.2.0" +httpx = "^0.27.0" +matplotlib = "^3.7.0" +pandas = "^2.1.0" +pandas-stubs = "^2.2.1.240316" +protobuf = "^5.27.2" +pydantic = "^2.6.4" +python = "^3.10.0 || ^3.11.0" +python-dateutil = "^2.8.0" +types-PyYAML = "^6.0.12.20240311" +types-protobuf = "^5.27.0.20240626" + +[tool.poetry.dev-dependencies] +black = "24.3.0" +datamodel-code-generator = "0.25.6" +flake8 = "7.0.0" +mypy = "1.9.0" +# openapi-python-client = "0.19.1" +# Waiting for a PR to be accepted. Meanwhile update with: +openapi-python-client = {git = "https://github.com/theorm/openapi-python-client.git#name=openapi-python-client", branch = "develop"} +pytest = "8.1.1" -[tool.setuptools.dynamic] -version = {attr = "impresso.__version__"} +[tool.mypy] +exclude = ["impresso/api_client", "impresso/protobuf"] -[tool.setuptools.packages.find] -include = ["impresso", "impresso.*"] -namespaces = false \ No newline at end of file +[tool.poetry.scripts] +generate-client = "scripts.scripts:generate_api_client" +generate-protobuf = "scripts.scripts:generate_protobuf" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 58b2c1a..0000000 --- a/requirements.txt +++ /dev/null @@ -1,34 +0,0 @@ --i https://pypi.org/simple -bidict==0.23.1; python_version >= '3.8' -black==24.2.0; python_version >= '3.8' -certifi==2024.2.2; python_version >= '3.6' -charset-normalizer==3.3.2; python_full_version >= '3.7.0' -click==8.1.7; python_version >= '3.7' -docutils==0.20.1; python_version >= '3.7' -h11==0.14.0; python_version >= '3.7' -idna==3.6; python_version >= '3.5' -importlib-metadata==7.0.1; python_version >= '3.8' -jaraco.classes==3.3.1; python_version >= '3.8' -keyring==24.3.0; python_version >= '3.8' -markdown-it-py==3.0.0; python_version >= '3.8' -mdurl==0.1.2; python_version >= '3.7' -more-itertools==10.2.0; python_version >= '3.8' -mypy-extensions==1.0.0; python_version >= '3.5' -nh3==0.2.15 -packaging==23.2; python_version >= '3.7' -pathspec==0.12.1; python_version >= '3.8' -pkginfo==1.9.6; python_version >= '3.6' -platformdirs==4.2.0; python_version >= '3.8' -pygments==2.17.2; python_version >= '3.7' -python-engineio==4.9.0; python_version >= '3.6' -python-socketio==5.11.1; python_version >= '3.8' -readme-renderer==42.0; python_version >= '3.8' -requests==2.31.0; python_version >= '3.7' -requests-toolbelt==1.0.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -rfc3986==2.0.0; python_version >= '3.7' -rich==13.7.0; python_full_version >= '3.7.0' -simple-websocket==1.0.0; python_version >= '3.6' -twine==5.0.0; python_version >= '3.8' -urllib3==2.2.1; python_version >= '3.8' -wsproto==1.2.0; python_full_version >= '3.7.0' -zipp==3.17.0; python_version >= '3.8' diff --git a/scripts/__init__.py b/scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/generate_data_models.sh b/scripts/generate_data_models.sh new file mode 100755 index 0000000..6283295 --- /dev/null +++ b/scripts/generate_data_models.sh @@ -0,0 +1,10 @@ +poetry run datamodel-codegen \ + --url http://localhost:3030/swagger.json \ + --input-file-type openapi \ + --output impresso/api_models.py \ + --disable-timestamp \ + --field-constraints \ + --enum-field-as-literal all \ + --use-annotated \ + --use-generic-container-types \ + --output-model-type pydantic_v2.BaseModel \ No newline at end of file diff --git a/scripts/generate_openapi_client.sh b/scripts/generate_openapi_client.sh new file mode 100755 index 0000000..495f27d --- /dev/null +++ b/scripts/generate_openapi_client.sh @@ -0,0 +1,11 @@ +rm -rf tmp/generated +mkdir -p tmp/generated +pushd . +cd tmp/generated +poetry run openapi-python-client \ + generate \ + --url http://localhost:3030/swagger.json \ + --config ../../.apigen.yml +popd +rm -rf impresso/api_client +mv tmp/generated/impresso/api_client impresso/ \ No newline at end of file diff --git a/scripts/generate_protobuf.sh b/scripts/generate_protobuf.sh new file mode 100755 index 0000000..8cc3f63 --- /dev/null +++ b/scripts/generate_protobuf.sh @@ -0,0 +1,8 @@ +cd tmp +rm query.proto +wget https://raw.githubusercontent.com/impresso/impresso-jscommons/master/proto/query.proto +rm -rf ../impresso/protobuf +mkdir -p ../impresso/protobuf +touch ../impresso/protobuf/__init__.py +protoc --python_out=../impresso/protobuf --pyi_out=../impresso/protobuf query.proto +cd .. \ No newline at end of file diff --git a/scripts/scripts.py b/scripts/scripts.py new file mode 100644 index 0000000..adc95c4 --- /dev/null +++ b/scripts/scripts.py @@ -0,0 +1,22 @@ +import subprocess + + +def _run(bash_script): + return subprocess.call(bash_script, shell=True) + + +def generate_openapi_client(): + return _run("./scripts/generate_openapi_client.sh") + + +def generate_data_models(): + return _run("./scripts/generate_data_models.sh") + + +def generate_api_client(): + generate_openapi_client() + generate_data_models() + + +def generate_protobuf(): + return _run("./scripts/generate_protobuf.sh") diff --git a/setup.py b/setup.py deleted file mode 100644 index b908cbe..0000000 --- a/setup.py +++ /dev/null @@ -1,3 +0,0 @@ -import setuptools - -setuptools.setup() diff --git a/tests/impresso/__ini__.py b/tests/impresso/__ini__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/impresso/test_structures.py b/tests/impresso/test_structures.py new file mode 100644 index 0000000..67fd45c --- /dev/null +++ b/tests/impresso/test_structures.py @@ -0,0 +1,13 @@ +from impresso.structures import AND, OR + + +def test_and_or_chain(): + a = AND("apple", "banana") + b = OR("one", "two") + c = AND("red", "green") + + abc = a & b & c + + print(abc, abc.chain) + assert abc.chain == [b, a] + assert set(abc) == set(c) diff --git a/tests/test_echo.py b/tests/test_echo.py index d5bb8d1..d92aa5b 100644 --- a/tests/test_echo.py +++ b/tests/test_echo.py @@ -1,5 +1,5 @@ import unittest -from impresso import echo +from impresso.echo import echo class TestEcho(unittest.TestCase):