From 4caa209335498c68dac5ecc03eb8eef30b90a20e Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Thu, 4 Apr 2024 18:30:28 +0200 Subject: [PATCH 01/19] Bump version to 1.3 (#211) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fd3a0fe8..b98ba835 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] # Check https://python-poetry.org/docs/pyproject/ for all available sections name = "ansys-grantami-recordlists" -version = "1.2.dev0" +version = "1.3.dev0" description = "A python wrapper for the Granta MI RecordLists API" license = "MIT" authors = ["ANSYS, Inc. "] From 92f34b636be579a521d297f8c0af78d4c89d25eb Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Fri, 5 Apr 2024 17:04:38 -0400 Subject: [PATCH 02/19] Increase timeout --- .github/scripts/check_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/check_server.py b/.github/scripts/check_server.py index 500035ae..0b2b7988 100644 --- a/.github/scripts/check_server.py +++ b/.github/scripts/check_server.py @@ -12,7 +12,7 @@ logger = logging.getLogger() MAX_ATTEMPTS = 30 -WAIT_TIME = 5 +WAIT_TIME = 15 def block_until_server_is_ok(func): From 7300e6b7292cbe2c420f8320bf5f852bdeaab746 Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Tue, 9 Apr 2024 08:44:21 -0400 Subject: [PATCH 03/19] Add versionadded directive (#213) --- src/ansys/grantami/recordlists/_connection.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ansys/grantami/recordlists/_connection.py b/src/ansys/grantami/recordlists/_connection.py index 42841f5f..40d0cab0 100644 --- a/src/ansys/grantami/recordlists/_connection.py +++ b/src/ansys/grantami/recordlists/_connection.py @@ -205,6 +205,8 @@ def get_resolvable_list_items( If an item cannot be resolved, it will not be returned. Performs multiple HTTP requests against the Granta MI Server API. + .. versionadded:: 1.2 + Parameters ---------- record_list : RecordList From 40f734e042f4d7e93588ebc9056717bd58f4b259 Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Wed, 10 Apr 2024 09:09:12 -0400 Subject: [PATCH 04/19] Add codecov token (#217) --- .github/workflows/ci_cd.yml | 2 ++ .github/workflows/server_checks.yml | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index cf01f78b..654f7d43 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -120,6 +120,8 @@ jobs: - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 if: ${{ matrix.python-version == env.MAIN_PYTHON_VERSION && matrix.os == 'ubuntu-latest' && !startsWith( github.event.pull_request.head.ref, 'dependabot/') }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: files: .cov/xml flags: unittests diff --git a/.github/workflows/server_checks.yml b/.github/workflows/server_checks.yml index 83423b46..4397938c 100644 --- a/.github/workflows/server_checks.yml +++ b/.github/workflows/server_checks.yml @@ -35,6 +35,9 @@ on: AZURE_VM_NAME: required: true + CODECOV_TOKEN: + required: true + TEST_SERVER_URL: required: true @@ -133,6 +136,8 @@ jobs: - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 if: ${{ matrix.os == 'ubuntu-latest' }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: files: .cov/xml flags: integration From 064ce1224a0ee496be661deb931d8f14da966744 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 18:03:13 -0400 Subject: [PATCH 05/19] Bump ansys-sphinx-theme from 0.15.1 to 0.15.2 (#215) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9d5154cb..4c69263e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -64,13 +64,13 @@ oidc = ["keyring (>=22,<25)", "requests_auth (>=6,<8)"] [[package]] name = "ansys-sphinx-theme" -version = "0.15.1" +version = "0.15.2" description = "A theme devised by ANSYS, Inc. for Sphinx documentation." optional = false python-versions = "<4,>=3.9" files = [ - {file = "ansys_sphinx_theme-0.15.1-py3-none-any.whl", hash = "sha256:5e94ab526f3e8cb3c12494b7eebc6967a7cabfd7b966943dc830be3fd87ddcd8"}, - {file = "ansys_sphinx_theme-0.15.1.tar.gz", hash = "sha256:005a410e84e26114013abc584d54acf9f6cce8ac8812047110867ab3b387108c"}, + {file = "ansys_sphinx_theme-0.15.2-py3-none-any.whl", hash = "sha256:302a3b2ecb8e7632f9f52492746adacff85dbf8cd46922510c4ae4c5019f8d79"}, + {file = "ansys_sphinx_theme-0.15.2.tar.gz", hash = "sha256:09a1ba8385f0981f6952a2c42788563aa9bbb1554289ba1e62e0bc0f44b8d3b5"}, ] [package.dependencies] From e6c30359c5d71872493280e83a9134957381f236 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 10:19:14 +0100 Subject: [PATCH 06/19] Bump idna from 3.6 to 3.7 (#220) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4c69263e..49e863f3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -663,13 +663,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] From 747d454eaf99f2325431fc023efb7d0f88a3c50e Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Fri, 12 Apr 2024 11:09:19 -0400 Subject: [PATCH 07/19] Resolve items per database (#219) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/ansys/grantami/recordlists/_connection.py | 43 ++++-- tests/test_item_resolver.py | 124 ++++++++++++++++++ 2 files changed, 155 insertions(+), 12 deletions(-) create mode 100644 tests/test_item_resolver.py diff --git a/src/ansys/grantami/recordlists/_connection.py b/src/ansys/grantami/recordlists/_connection.py index 40d0cab0..279d1171 100644 --- a/src/ansys/grantami/recordlists/_connection.py +++ b/src/ansys/grantami/recordlists/_connection.py @@ -20,8 +20,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +from collections import defaultdict import concurrent.futures -from typing import Dict, List, Optional, Tuple, Union +from typing import List, Optional, Tuple, Union from ansys.grantami.serverapi_openapi import api, models # type: ignore[import] from ansys.openapi.common import ( # type: ignore[import] @@ -608,7 +609,6 @@ def __init__(self, client: ApiClient, read_mode: bool) -> None: self._record_histories_api = api.RecordsRecordHistoriesApi(client) self._record_versions_api = api.RecordsRecordVersionsApi(client) self._db_schema_api = api.SchemaDatabasesApi(client) - self._db_map: Dict[str, str] = {} self._read_mode = read_mode def get_resolvable_items(self, all_items: List[RecordListItem]) -> List[RecordListItem]: @@ -627,10 +627,10 @@ def get_resolvable_items(self, all_items: List[RecordListItem]) -> List[RecordLi resolvable_items The items which could be resolved on the server. """ - self._db_map = self._get_db_map() + db_map = self._get_db_map() with concurrent.futures.ThreadPoolExecutor(max_workers=self._max_requests) as executor: resolvable_test_futures = { - executor.submit(self._is_item_resolvable, i): i for i in all_items + executor.submit(self._is_item_resolvable, i, db_map): i for i in all_items } resolvable_items = [ resolvable_test_futures[f] @@ -639,13 +639,34 @@ def get_resolvable_items(self, all_items: List[RecordListItem]) -> List[RecordLi ] return resolvable_items - def _get_db_map(self) -> Dict[str, str]: + def _get_db_map(self) -> defaultdict[str, List[str]]: dbs = self._db_schema_api.get_all_databases() - return {db.guid: db.key for db in dbs.databases} - - def _is_item_resolvable(self, item: RecordListItem) -> bool: + db_map: defaultdict[str, List[str]] = defaultdict(list) + for db in dbs.databases: + db_map[db.guid].append(db.key) + return db_map + + def _is_item_resolvable( + self, item: RecordListItem, db_map: defaultdict[str, List[str]] + ) -> bool: """Test if a specific item is resolvable. + Returns + ------- + bool + True if the item can be resolved in any database with the correct GUID, False otherwise. + """ + if item.database_guid not in db_map: + return False + for db_key in db_map[item.database_guid]: + if self._is_item_resolvable_in_db(item, db_key): + return True + return False + + def _is_item_resolvable_in_db(self, item: RecordListItem, db_key: str) -> bool: + """ + Test if a specific item is resolvable in a database. + If the item has a record version and record guid, attempt to resolve the record version directly. @@ -659,12 +680,10 @@ def _is_item_resolvable(self, item: RecordListItem) -> bool: bool True if the item can be resolved, False otherwise. """ - if item.database_guid not in self._db_map: - return False try: if item.record_version is not None and item.record_guid is not None: self._record_versions_api.get_record_version( - database_key=self._db_map[item.database_guid], + database_key=db_key, table_guid=item.table_guid, record_history_guid=item.record_history_guid, record_version_guid=item.record_guid, @@ -672,7 +691,7 @@ def _is_item_resolvable(self, item: RecordListItem) -> bool: ) else: history_info = self._record_histories_api.get_record_history( - database_key=self._db_map[item.database_guid], + database_key=db_key, record_history_guid=item.record_history_guid, mode="read" if self._read_mode else None, ) diff --git a/tests/test_item_resolver.py b/tests/test_item_resolver.py new file mode 100644 index 00000000..4a2b604c --- /dev/null +++ b/tests/test_item_resolver.py @@ -0,0 +1,124 @@ +# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates. +# SPDX-License-Identifier: MIT +# +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from unittest.mock import Mock +from uuid import uuid4 + +from ansys.grantami.serverapi_openapi import ( + GrantaServerApiDatabaseStatus, + GrantaServerApiSchemaDatabasesInfo, + GrantaServerApiSchemaSlimEntitiesSlimDatabase, +) +from ansys.openapi.common import ApiClient +import pytest + +from ansys.grantami.recordlists import RecordListItem +from ansys.grantami.recordlists._connection import _ItemResolver + + +@pytest.fixture +def client(): + yield Mock(spec=ApiClient) + + +@pytest.fixture() +def item_resolver(client): + resolver = _ItemResolver(client, False) + yield resolver + + +def test_map_lists_dbs_with_identical_guids(item_resolver, monkeypatch, client): + duplicate_guid = uuid4().hex + database_api = item_resolver._db_schema_api + monkeypatch.setattr( + database_api, + "get_all_databases", + lambda: GrantaServerApiSchemaDatabasesInfo( + databases=[ + GrantaServerApiSchemaSlimEntitiesSlimDatabase( + guid=duplicate_guid, + is_locked=False, + is_read_only=False, + key="DB_KEY_1", + name="DB_1", + status=GrantaServerApiDatabaseStatus.OK, + ), + GrantaServerApiSchemaSlimEntitiesSlimDatabase( + guid=duplicate_guid, + is_locked=False, + is_read_only=False, + key="DB_KEY_2", + name="DB_2", + status=GrantaServerApiDatabaseStatus.OK, + ), + ] + ), + ) + db_map = item_resolver._get_db_map() + assert duplicate_guid in db_map + assert db_map[duplicate_guid] == ["DB_KEY_1", "DB_KEY_2"] + + +@pytest.fixture +def item_1(): + yield RecordListItem( + "DB_GUID", + "TABLE_GUID_1", + "HISTORY_GUID_1", + ) + + +@pytest.fixture +def item_2(): + yield RecordListItem( + "DB_GUID", + "TABLE_GUID_2", + "HISTORY_GUID_2", + ) + + +def test_items_are_resolved_in_all_dbs_with_matched_guid( + item_resolver, monkeypatch, item_1, item_2 +): + monkeypatch.setattr(item_resolver, "_get_db_map", lambda: {"DB_GUID": ["DB_KEY_1", "DB_KEY_2"]}) + mock_resolve_item_in_db = Mock(return_value=False) + monkeypatch.setattr(item_resolver, "_is_item_resolvable_in_db", mock_resolve_item_in_db) + + resolved_items = item_resolver.get_resolvable_items([item_1, item_2]) + assert mock_resolve_item_in_db.call_count == 4 + assert mock_resolve_item_in_db.call_args_list == [ + ((item_1, "DB_KEY_1"),), + ((item_1, "DB_KEY_2"),), + ((item_2, "DB_KEY_1"),), + ((item_2, "DB_KEY_2"),), + ] + assert resolved_items == [] + + +def test_resolver_exits_early_if_item_is_matched(item_resolver, item_1, monkeypatch): + monkeypatch.setattr(item_resolver, "_get_db_map", lambda: {"DB_GUID": ["DB_KEY_1", "DB_KEY_2"]}) + mock_resolve_item_in_db = Mock(return_value=True) + monkeypatch.setattr(item_resolver, "_is_item_resolvable_in_db", mock_resolve_item_in_db) + + resolved_items = item_resolver.get_resolvable_items([item_1]) + mock_resolve_item_in_db.assert_called_once_with(item_1, "DB_KEY_1") + assert resolved_items == [item_1] From 178f38e988d5d365f569c5687f29f23c2c69bfaa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 12:09:09 -0400 Subject: [PATCH 08/19] [pre-commit.ci] pre-commit autoupdate (#214) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Andy Grigg --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f985b7a9..fedbc056 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: args: ["--ignore-words", "doc/styles/Vocab/ANSYS/accept.txt", "--skip", "poetry.lock"] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: check-yaml - id: debug-statements @@ -50,7 +50,7 @@ repos: additional_dependencies: ["mypy==1.0.1"] - repo: https://github.com/ansys/pre-commit-hooks - rev: v0.2.8 + rev: v0.2.9 hooks: - id: add-license-headers args: From 5802d745833ff28fdfae81d9a0e8a806777bd163 Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Tue, 16 Apr 2024 06:27:04 -0400 Subject: [PATCH 09/19] CI - skip vm management if active runs (#223) --- .github/workflows/server_checks.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/server_checks.yml b/.github/workflows/server_checks.yml index 4397938c..56e680ba 100644 --- a/.github/workflows/server_checks.yml +++ b/.github/workflows/server_checks.yml @@ -197,11 +197,15 @@ jobs: path: doc/_build/latex/*.pdf retention-days: 7 + check_workflow_runs: + needs: doc-build + uses: ansys/grantami-bomanalytics/.github/workflows/check-concurrent-workflows.yml@main + stop-vm: name: "Stop Azure VM" runs-on: ubuntu-latest - needs: doc-build - if: ${{ always() && !(inputs.skip-vm-management)}} + needs: check_workflow_runs + if: always() && !cancelled() && !(inputs.skip-vm-management) && needs.check_workflow_runs.outputs.active-runs != 'true' steps: - uses: azure/CLI@v2 with: From 6177c405c09de4224095946923b2ed107cc25458 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 12:58:29 +0100 Subject: [PATCH 10/19] [pre-commit.ci] pre-commit autoupdate (#222) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Doug Addy --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fedbc056..b1dca1dc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,7 +4,7 @@ ci: repos: - repo: https://github.com/psf/black - rev: 24.3.0 + rev: 24.4.0 hooks: - id: black From 627ee5a987d1957443cea6adff03bf52f6dbacc9 Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Tue, 16 Apr 2024 08:09:09 -0400 Subject: [PATCH 11/19] Add additional include_items tests (#221) --- tests/integration/conftest.py | 20 +++-- tests/integration/test_integration.py | 104 +++++++++++++++++++------- 2 files changed, 92 insertions(+), 32 deletions(-) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 7ce8d6cd..ec5714c2 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -21,10 +21,10 @@ # SOFTWARE. import os -from typing import Dict, List +from typing import List import uuid -from ansys.grantami.serverapi_openapi.api import SchemaDatabasesApi, SearchApi +from ansys.grantami.serverapi_openapi.api import SchemaDatabasesApi, SchemaTablesApi, SearchApi from ansys.grantami.serverapi_openapi.models import ( GrantaServerApiSearchDiscreteTextValuesDatumCriterion, GrantaServerApiSearchRecordPropertyCriterion, @@ -150,15 +150,21 @@ def new_list_with_many_unresolvable_items( @pytest.fixture(scope="session") -def db_key_to_guid_map(admin_client) -> Dict[str, str]: - """Provides a map between database key and database guid.""" +def training_database_guid(admin_client) -> str: schema_api = SchemaDatabasesApi(admin_client) dbs = schema_api.get_all_databases() - return {db.key: db.guid for db in dbs.databases} + return next(db.guid for db in dbs.databases if db.key == DB_KEY) @pytest.fixture(scope="session") -def resolvable_items(admin_client, db_key_to_guid_map) -> List[RecordListItem]: +def design_data_table_guid(admin_client) -> str: + table_api = SchemaTablesApi(admin_client) + table_response = table_api.get_tables(database_key=DB_KEY) + return next(table.guid for table in table_response.tables if table.name == TABLE_NAME) + + +@pytest.fixture(scope="session") +def resolvable_items(admin_client, training_database_guid) -> List[RecordListItem]: """Get all records in the MI_Training database and use them to create a list of RecordListItems which can be added to a list.""" search_api = SearchApi(admin_client) @@ -176,7 +182,7 @@ def resolvable_items(admin_client, db_key_to_guid_map) -> List[RecordListItem]: ) return [ RecordListItem( - db_key_to_guid_map[result.database_key], + training_database_guid, result.table_guid, result.record_history_guid, ) diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index ee326946..2409a8c1 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -720,11 +720,11 @@ def list_b(self, admin_client, list_name): admin_client.delete_list(created_list) @pytest.fixture(scope="class") - def list_c(self, admin_client, list_name, list_b, unresolvable_item): + def list_c(self, admin_client, list_name, list_b, resolvable_items): """A revision of list B with a known name and items.""" created_list = admin_client.revise_list(list_b) admin_client.update_list(created_list, name=list_name + self._name_suffix_C) - admin_client.add_items_to_list(created_list, [unresolvable_item]) + admin_client.add_items_to_list(created_list, resolvable_items) yield created_list admin_client.delete_list(created_list) @@ -769,42 +769,92 @@ def test_search_revision(self, admin_client, list_name, list_c): assert len(results) == 1 assert results[0].record_list.identifier == list_c.identifier - def test_search_by_database(self, admin_client, list_name, unresolvable_item, list_c): + @pytest.mark.parametrize("include_items", [True, False]) + def test_search_by_database( + self, + include_items, + admin_client, + list_name, + resolvable_items, + list_c, + training_database_guid, + ): criteria = SearchCriterion( name_contains=list_name, - contains_records_in_databases=[unresolvable_item.database_guid], + contains_records_in_databases=[training_database_guid], ) - results = admin_client.search_for_lists(criteria) + results = admin_client.search_for_lists(criteria, include_items=include_items) assert len(results) == 1 - assert results[0].record_list.identifier == list_c.identifier + for result in results: + assert result.record_list.identifier == list_c.identifier + if include_items: + assert len(result.items) == len(resolvable_items) + else: + assert result.items is None - def test_search_by_multiple_databases(self, admin_client, list_name, unresolvable_item, list_c): + @pytest.mark.parametrize("include_items", [True, False]) + def test_search_by_multiple_databases( + self, + include_items, + admin_client, + list_name, + resolvable_items, + list_c, + training_database_guid, + ): # List of databases = Is in one OR the other criteria = SearchCriterion( name_contains=list_name, - contains_records_in_databases=[unresolvable_item.database_guid, str(uuid.uuid4())], + contains_records_in_databases=[training_database_guid, str(uuid.uuid4())], ) - results = admin_client.search_for_lists(criteria) + results = admin_client.search_for_lists(criteria, include_items=include_items) assert len(results) == 1 - assert results[0].record_list.identifier == list_c.identifier + for result in results: + assert result.record_list.identifier == list_c.identifier + if include_items: + assert len(result.items) == len(resolvable_items) + else: + assert result.items is None - def test_search_by_table(self, admin_client, list_name, unresolvable_item, list_c): + @pytest.mark.parametrize("include_items", [True, False]) + def test_search_by_table( + self, + include_items, + admin_client, + list_name, + resolvable_items, + list_c, + design_data_table_guid, + ): criteria = SearchCriterion( name_contains=list_name, - contains_records_in_tables=[unresolvable_item.table_guid], + contains_records_in_tables=[design_data_table_guid], ) - results = admin_client.search_for_lists(criteria) + results = admin_client.search_for_lists(criteria, include_items=include_items) assert len(results) == 1 - assert results[0].record_list.identifier == list_c.identifier + for result in results: + assert result.record_list.identifier == list_c.identifier + if include_items: + assert len(result.items) == len(resolvable_items) + else: + assert result.items is None - def test_search_by_record(self, admin_client, list_name, unresolvable_item, list_c): + @pytest.mark.parametrize("include_items", [True, False]) + def test_search_by_record( + self, include_items, admin_client, list_name, resolvable_items, list_c + ): + record_history_guid = resolvable_items[0].record_history_guid criteria = SearchCriterion( name_contains=list_name, - contains_records=[unresolvable_item.record_history_guid], + contains_records=[record_history_guid], ) - results = admin_client.search_for_lists(criteria) + results = admin_client.search_for_lists(criteria, include_items=include_items) assert len(results) == 1 assert results[0].record_list.identifier == list_c.identifier + if include_items: + assert len(results[0].items) == len(resolvable_items) + else: + assert results[0].items is None def test_search_role_is_none(self, admin_client, list_name): criteria = SearchCriterion(user_role=UserRole.NONE) @@ -873,18 +923,22 @@ def test_boolean_match_any_and_all( ids = {result.record_list.identifier for result in results} assert {list_a.identifier, list_b.identifier} == ids - @pytest.mark.parametrize("include_items", [True, False]) - def test_include_items_flag(self, admin_client, list_c, include_items, unresolvable_item): + def test_search_result_contains_correct_items(self, admin_client, list_c, resolvable_items): results = admin_client.search_for_lists( SearchCriterion(name_contains=self._name_suffix_C), - include_items=include_items, + include_items=True, ) - # First check we got the expected result assert len(results) == 1 result = results[0] assert result.record_list.identifier == list_c.identifier # Check the result does have the expected items - if include_items: - assert result.items == [unresolvable_item] - else: - assert result.items is None + check_count = 0 + for result_item in result.items: + for input_item in resolvable_items: + if result_item.record_history_guid == input_item.record_history_guid: + assert result_item.database_guid == input_item.database_guid + assert result_item.table_guid == input_item.table_guid + assert result_item.record_guid == input_item.record_guid + assert result_item.record_version == input_item.record_version + check_count += 1 + assert check_count == len(result.items) == len(resolvable_items) From 8df550baeb3a3c01cad7735a2cfecbfb564190aa Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Thu, 18 Apr 2024 10:13:49 -0400 Subject: [PATCH 12/19] Update labelling workflow (#231) --- .github/dependabot.yml | 1 + .github/labeler.yml | 10 ++++++++++ .github/release.yml | 3 +++ .github/workflows/label.yml | 34 +--------------------------------- 4 files changed, 15 insertions(+), 33 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ea873458..0f5ccdfa 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,3 +15,4 @@ updates: interval: "daily" labels: - "maintenance" + - "dependencies" diff --git a/.github/labeler.yml b/.github/labeler.yml index 70a44a1d..14bba772 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,9 +1,19 @@ documentation: - changed-files: - any-glob-to-any-file: ['doc/source/**/*', 'examples/**/*'] +- head-branch: ['^doc/', '^docs/'] + maintenance: - changed-files: - any-glob-to-any-file: ['.github/**/*', '.flake8', 'pyproject.toml'] +- head-branch: ['^maint/', '^ci/', '^no-ci/'] + +enhancement: +- head-branch: ['^feat/'] + +bug: +- head-branch: ['^fix/', '^patch/'] + dependencies: - changed-files: - any-glob-to-any-file: ['poetry.lock'] diff --git a/.github/release.yml b/.github/release.yml index f29c0a57..d0e6e3b9 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -6,6 +6,9 @@ changelog: - title: "Features" labels: - enhancement + - title: "Bug fixes" + labels: + - bug - title: "Documentation" labels: - documentation diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml index 870c63f7..3cfc274d 100644 --- a/.github/workflows/label.yml +++ b/.github/workflows/label.yml @@ -30,41 +30,11 @@ jobs: runs-on: ubuntu-latest steps: - # Label based on modified files - - name: Label based on changed files + - name: Label based on changed files and branch name uses: actions/labeler@v5 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - # Label based on branch name - - uses: actions-ecosystem/action-add-labels@v1 - if: | - startsWith(github.event.pull_request.head.ref, 'doc') || - startsWith(github.event.pull_request.head.ref, 'docs') - with: - labels: documentation - - - uses: actions-ecosystem/action-add-labels@v1 - if: | - startsWith(github.event.pull_request.head.ref, 'maint') || - startsWith(github.event.pull_request.head.ref, 'no-ci') || - startsWith(github.event.pull_request.head.ref, 'ci') - with: - labels: maintenance - - - uses: actions-ecosystem/action-add-labels@v1 - if: startsWith(github.event.pull_request.head.ref, 'feat') - with: - labels: | - enhancement - - - uses: actions-ecosystem/action-add-labels@v1 - if: | - startsWith(github.event.pull_request.head.ref, 'fix') || - startsWith(github.event.pull_request.head.ref, 'patch') - with: - labels: bug - commenter: runs-on: ubuntu-latest steps: @@ -79,6 +49,4 @@ jobs: - [bug](https://github.com/ansys/grantami-recordlists/pulls?q=label%3Abug+) - [documentation](https://github.com/ansys/grantami-recordlists/pulls?q=label%3Adocumentation+) - [enhancement](https://github.com/ansys/grantami-recordlists/pulls?q=label%3Aenhancement+) - - [good first issue](https://github.com/ansys/grantami-recordlists/pulls?q=label%3Agood+first+issue) - [maintenance](https://github.com/ansys/grantami-recordlists/pulls?q=label%3Amaintenance+) - - [release](https://github.com/ansys/grantami-recordlists/pulls?q=label%3Arelease+) From 27548f842aba5cfc6152e1f338a8e4c70ae9995a Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Thu, 18 Apr 2024 11:41:19 -0400 Subject: [PATCH 13/19] Use PyGranta workflow to check for active runs (#233) --- .github/workflows/server_checks.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/server_checks.yml b/.github/workflows/server_checks.yml index 56e680ba..23118754 100644 --- a/.github/workflows/server_checks.yml +++ b/.github/workflows/server_checks.yml @@ -198,8 +198,9 @@ jobs: retention-days: 7 check_workflow_runs: + name: Check if there are active workflow runs needs: doc-build - uses: ansys/grantami-bomanalytics/.github/workflows/check-concurrent-workflows.yml@main + uses: ansys/pygranta/.github/workflows/check-concurrent-workflows.yml@main stop-vm: name: "Stop Azure VM" From 7a2a0ea26353333e44e9d11dc3534e8587905b74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:46:01 -0400 Subject: [PATCH 14/19] Bump sphinx from 7.2.6 to 7.3.6 (#228) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andy Grigg --- poetry.lock | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 49e863f3..a06a3b1a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1984,20 +1984,20 @@ files = [ [[package]] name = "sphinx" -version = "7.2.6" +version = "7.3.6" description = "Python documentation generator" optional = false python-versions = ">=3.9" files = [ - {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, - {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, + {file = "sphinx-7.3.6-py3-none-any.whl", hash = "sha256:d6c09acd42094fcd96a9299c1b32b2dafe82d667fdd6e532e5978443ad074c2a"}, + {file = "sphinx-7.3.6.tar.gz", hash = "sha256:fc9f3d13fed5c9a0e677d368090e209899ce5d0081eb552b657e2923e57517f0"}, ] [package.dependencies] -alabaster = ">=0.7,<0.8" +alabaster = ">=0.7.14,<0.8.0" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" +docutils = ">=0.18.1,<0.22" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -2011,11 +2011,12 @@ sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] +lint = ["flake8 (>=3.5.0)", "importlib_metadata", "mypy (==1.9.0)", "pytest (>=6.0)", "ruff (==0.3.7)", "sphinx-lint", "tomli", "types-docutils", "types-requests"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools (>=67.0)"] [[package]] name = "sphinx-copybutton" From c921ea5d8792adf17e866288a6d5730d043d88da Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Fri, 19 Apr 2024 17:05:26 -0400 Subject: [PATCH 15/19] Update ansys actions (#235) --- .github/workflows/ci_cd.yml | 16 ++++++++-------- .pre-commit-config.yaml | 2 +- doc/.vale.ini | 2 ++ doc/styles/.gitignore | 4 ++-- .../vocabularies}/ANSYS/accept.txt | 0 .../vocabularies}/ANSYS/reject.txt | 0 6 files changed, 13 insertions(+), 11 deletions(-) rename doc/styles/{Vocab => config/vocabularies}/ANSYS/accept.txt (100%) rename doc/styles/{Vocab => config/vocabularies}/ANSYS/reject.txt (100%) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 654f7d43..fe5b16ee 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -24,7 +24,7 @@ jobs: name: "Code style" runs-on: ubuntu-latest steps: - - uses: ansys/actions/code-style@v5 + - uses: ansys/actions/code-style@v6 with: python-version: ${{ env.MAIN_PYTHON_VERSION }} @@ -32,7 +32,7 @@ jobs: name: "Documentation style" runs-on: ubuntu-latest steps: - - uses: ansys/actions/doc-style@v5 + - uses: ansys/actions/doc-style@v6 with: token: ${{ secrets.GITHUB_TOKEN }} vale-version: "2.29.6" @@ -78,7 +78,7 @@ jobs: os: [ubuntu-latest, windows-latest] python-version: ['3.9', '3.10', '3.11', '3.12'] steps: - - uses: ansys/actions/build-wheelhouse@v5 + - uses: ansys/actions/build-wheelhouse@v6 with: library-name: ${{ env.LIBRARY_NAME }} operating-system: ${{ matrix.os }} @@ -132,7 +132,7 @@ jobs: runs-on: ubuntu-latest needs: [ doc-build, tests ] steps: - - uses: ansys/actions/build-library@v5 + - uses: ansys/actions/build-library@v6 with: library-name: ${{ env.LIBRARY_NAME }} python-version: ${{ env.MAIN_PYTHON_VERSION }} @@ -153,7 +153,7 @@ jobs: needs: [server-checks] if: github.event_name == 'push' && !contains(github.ref, 'refs/tags') steps: - - uses: ansys/actions/doc-deploy-dev@v5 + - uses: ansys/actions/doc-deploy-dev@v6 with: cname: ${{ env.DOCUMENTATION_CNAME }} token: ${{ secrets.GITHUB_TOKEN }} @@ -165,14 +165,14 @@ jobs: needs: [build-library, server-checks] if: github.event_name == 'push' && contains(github.ref, 'refs/tags') steps: - - uses: ansys/actions/release-pypi-public@v5 + - uses: ansys/actions/release-pypi-public@v6 name: "Release to public PyPI" with: library-name: ${{ env.LIBRARY_NAME }} twine-username: "__token__" twine-token: ${{ secrets.PYPI_TOKEN }} - - uses: ansys/actions/release-github@v5 + - uses: ansys/actions/release-github@v6 name: "Release to GitHub" with: library-name: ${{ env.LIBRARY_NAME }} @@ -183,7 +183,7 @@ jobs: needs: release if: github.event_name == 'push' && contains(github.ref, 'refs/tags') steps: - - uses: ansys/actions/doc-deploy-stable@v5 + - uses: ansys/actions/doc-deploy-stable@v6 with: cname: ${{ env.DOCUMENTATION_CNAME }} token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b1dca1dc..97ea6584 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: rev: v2.2.6 hooks: - id: codespell - args: ["--ignore-words", "doc/styles/Vocab/ANSYS/accept.txt", "--skip", "poetry.lock"] + args: ["--ignore-words", "doc/styles/config/vocabularies/ANSYS/accept.txt", "--skip", "poetry.lock"] - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 diff --git a/doc/.vale.ini b/doc/.vale.ini index 4f0b6709..9071ecda 100644 --- a/doc/.vale.ini +++ b/doc/.vale.ini @@ -26,3 +26,5 @@ Vocab = ANSYS # Apply the following styles BasedOnStyles = Vale, Google + +Vale.Terms = NO diff --git a/doc/styles/.gitignore b/doc/styles/.gitignore index 080f12aa..62d72f2c 100644 --- a/doc/styles/.gitignore +++ b/doc/styles/.gitignore @@ -1,4 +1,4 @@ * -!Vocab -!Vocab/** +!config +!config/** !.gitignore \ No newline at end of file diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/config/vocabularies/ANSYS/accept.txt similarity index 100% rename from doc/styles/Vocab/ANSYS/accept.txt rename to doc/styles/config/vocabularies/ANSYS/accept.txt diff --git a/doc/styles/Vocab/ANSYS/reject.txt b/doc/styles/config/vocabularies/ANSYS/reject.txt similarity index 100% rename from doc/styles/Vocab/ANSYS/reject.txt rename to doc/styles/config/vocabularies/ANSYS/reject.txt From f03c8cbbd7ee86e62d53a5573af95ffc890c1828 Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Mon, 22 Apr 2024 03:00:00 -0400 Subject: [PATCH 16/19] Upgrade codecov (#237) --- .github/workflows/ci_cd.yml | 2 +- .github/workflows/server_checks.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index fe5b16ee..e04216d8 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -118,7 +118,7 @@ jobs: retention-days: 7 - name: "Upload coverage to Codecov" - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 if: ${{ matrix.python-version == env.MAIN_PYTHON_VERSION && matrix.os == 'ubuntu-latest' && !startsWith( github.event.pull_request.head.ref, 'dependabot/') }} env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/server_checks.yml b/.github/workflows/server_checks.yml index 23118754..6d265c5d 100644 --- a/.github/workflows/server_checks.yml +++ b/.github/workflows/server_checks.yml @@ -134,7 +134,7 @@ jobs: retention-days: 7 - name: "Upload coverage to Codecov" - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 if: ${{ matrix.os == 'ubuntu-latest' }} env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} From 9bc4008b487e88c615216ff942f621b1b967a7c7 Mon Sep 17 00:00:00 2001 From: Andy Grigg Date: Mon, 22 Apr 2024 03:41:23 -0400 Subject: [PATCH 17/19] Update serverapi-openapi to 3.0.0b0 (#234) Co-authored-by: Ludovic Steinbach --- poetry.lock | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index a06a3b1a..25226534 100644 --- a/poetry.lock +++ b/poetry.lock @@ -27,12 +27,12 @@ files = [ [[package]] name = "ansys-grantami-serverapi-openapi" -version = "3.0.0a3" +version = "3.0.0b0" description = "Autogenerated client library for the Granta MI Server API." optional = false python-versions = "<4.0.0,>=3.9.0" files = [ - {file = "ansys_grantami_serverapi_openapi-3.0.0a3-py3-none-any.whl", hash = "sha256:77c99dd0a5b475fa661cbf3de7bbf2cf18fee399662fbbd5c67e481c77fc0e68"}, + {file = "ansys_grantami_serverapi_openapi-3.0.0b0-py3-none-any.whl", hash = "sha256:9ac91dd1cd0f8ad356d455c9ad93fb5fc8d14cbcd2e68fc41aff54706180d297"}, ] [package.dependencies] @@ -2380,4 +2380,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "136d5a482f8a6c9fa8420284fb97c2f1c5ab360f801e2d1c8ffea26560236ddf" +content-hash = "d24b10a4da69fca8e4268a8d0302e70e56f6995109089dd10b2673dc71308e15" diff --git a/pyproject.toml b/pyproject.toml index b98ba835..fdd8bf2c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ packages = [ [tool.poetry.dependencies] python = ">=3.9,<4.0" ansys-openapi-common = "^2.0.0" -ansys-grantami-serverapi-openapi = "3.0.0a3" +ansys-grantami-serverapi-openapi = "3.0.0b0" requests = "^2.26" # Optional documentation dependencies From a90066a504883c4d724ea72248a486a9b579eb42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 09:57:12 +0200 Subject: [PATCH 18/19] Bump sphinx from 7.3.6 to 7.3.7 (#239) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 25226534..6c32faa6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1984,13 +1984,13 @@ files = [ [[package]] name = "sphinx" -version = "7.3.6" +version = "7.3.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" files = [ - {file = "sphinx-7.3.6-py3-none-any.whl", hash = "sha256:d6c09acd42094fcd96a9299c1b32b2dafe82d667fdd6e532e5978443ad074c2a"}, - {file = "sphinx-7.3.6.tar.gz", hash = "sha256:fc9f3d13fed5c9a0e677d368090e209899ce5d0081eb552b657e2923e57517f0"}, + {file = "sphinx-7.3.7-py3-none-any.whl", hash = "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3"}, + {file = "sphinx-7.3.7.tar.gz", hash = "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"}, ] [package.dependencies] From 66b5ef3a076821391393a93f9a36df2efceca565 Mon Sep 17 00:00:00 2001 From: Ludovic Steinbach Date: Mon, 22 Apr 2024 16:41:58 +0200 Subject: [PATCH 19/19] Set version and classifier --- poetry.lock | 1 - pyproject.toml | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6c32faa6..7a3a6ed6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1599,7 +1599,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, diff --git a/pyproject.toml b/pyproject.toml index fabc1014..3a5e6cd8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] # Check https://python-poetry.org/docs/pyproject/ for all available sections name = "ansys-grantami-recordlists" -version = "1.2.0a0" +version = "1.2.0b0" description = "A python wrapper for the Granta MI RecordLists API" license = "MIT" authors = ["ANSYS, Inc. "] @@ -14,7 +14,7 @@ readme = "README.rst" repository = "https://github.com/ansys/grantami-recordlists" documentation = "https://recordlists.grantami.docs.pyansys.com" classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10",