From 34c0c58cf992e4429a42c089588fe3d8d62c6057 Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Wed, 11 Sep 2024 14:36:06 +0200 Subject: [PATCH 1/8] Add prefilter option to context reference property Implemented a method to set prefilters on the context reference property and created a new ContextgroupFilter class. Updated relevant imports and code sections to support this functionality. --- CHANGELOG.rst | 5 ++ pykechain/models/property_reference.py | 17 ++++ pykechain/models/value_filter.py | 106 +++++++++++++++++++++---- 3 files changed, 111 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 081041148..cf5e69b46 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ Change Log ========== +UNRELEASED +---------- +* :star: Add the possibility to add a prefilter option to the context reference property. It will be stored in the prefilter section of the value options of a the reference property. + + v4.13.0 (15AUG24) ---------- * :star: Added the option not to include PDF's inline inside the PDF. The PDF will return a zip with the PDF and all attachments that cannot be put inline inside an attachment folder. (#1448) diff --git a/pykechain/models/property_reference.py b/pykechain/models/property_reference.py index 937aed59a..0f69a1973 100644 --- a/pykechain/models/property_reference.py +++ b/pykechain/models/property_reference.py @@ -226,6 +226,23 @@ class ContextReferencesProperty(_ReferencePropertyInScope): REFERENCED_CLASS = Context + def set_prefilters( + self, + prefilters: List[ScopeFilter] = None, + clear: Optional[bool] = False, + ) -> None: + """ + Set pre-filters on the scope reference property. + + :param prefilters: list of Scope Filter objects + :type prefilters: list + :param clear: whether all existing pre-filters should be cleared. (default = False) + :type clear: bool + + :return: None + """ + pass + def _retrieve_objects(self, **kwargs) -> List[Context]: """ Retrieve a list of Contexts. diff --git a/pykechain/models/value_filter.py b/pykechain/models/value_filter.py index e7f781515..d6353cb80 100644 --- a/pykechain/models/value_filter.py +++ b/pykechain/models/value_filter.py @@ -3,8 +3,15 @@ import warnings from abc import abstractmethod from typing import Any, Dict, List, Optional, Union - -from pykechain.enums import Category, FilterType, PropertyType, ScopeStatus +from urllib.parse import unquote + +from pykechain.enums import ( + Category, + ContextGroup, + FilterType, + PropertyType, + ScopeStatus, +) from pykechain.exceptions import IllegalArgumentError, NotFoundError from pykechain.models.input_checks import ( check_base, @@ -75,7 +82,7 @@ def __init__( self.id = property_model_id if isinstance(value, str): - self.value = urllib.parse.unquote(value) + self.value = unquote(value) else: self.value = value self.type = filter_type @@ -113,19 +120,17 @@ def validate(self, part_model: "Part") -> None: if prop.category != Category.MODEL: raise IllegalArgumentError( - 'Property value filters can only be set on Property models, received "{}".'.format( - prop - ) + f'Property value filters can only be set on Property models, received "{prop}".' ) else: property_type = prop.type if ( property_type in ( - PropertyType.BOOLEAN_VALUE, - PropertyType.REFERENCES_VALUE, - PropertyType.ACTIVITY_REFERENCES_VALUE, - ) + PropertyType.BOOLEAN_VALUE, + PropertyType.REFERENCES_VALUE, + PropertyType.ACTIVITY_REFERENCES_VALUE, + ) and self.type != FilterType.EXACT ): warnings.warn( @@ -190,9 +195,11 @@ def validate(self, part_model: "Part") -> None: @classmethod def parse_options(cls, options: Dict) -> List["PropertyValueFilter"]: """ - Convert the dict & string-based definition of a property value filter to a list of PropertyValueFilter objects. + Convert the dict & string-based definition of a property value filter to a list of + PropertyValueFilter objects. - :param options: options dict from a multi-reference property or meta dict from a filtered grid widget. + :param options: options dict from a multi-reference property or meta dict from a filtered + grid widget. :return: list of PropertyValueFilter objects :rtype list """ @@ -235,7 +242,8 @@ class ScopeFilter(BaseFilter): :ivar tag: string """ - # map between KE-chain field and Pykechain attribute, and whether the filter is stored as a list (cs-string) + # map between KE-chain field and Pykechain attribute, and whether the filter is stored as a + # list (cs-string) MAP = [ ("name__icontains", "name", False), ("status__in", "status", False), @@ -325,9 +333,10 @@ def __repr__(self): @classmethod def parse_options(cls, options: Dict) -> List["ScopeFilter"]: """ - Convert the dict & string-based definition of a scope filter to a list of ScopeFilter objects. + Convert the dict & string-based definition of a scope filter to a list of ScopeFilter obj. - :param options: options dict from a scope reference property or meta dict from a scopes widget. + :param options: options dict from a scope reference property or meta dict from a scopes + widget. :return: list of ScopeFilter objects :rtype list """ @@ -377,8 +386,8 @@ def write_options(cls, filters: List) -> Dict: if filter_value is not None: if is_list: - # creata a string with commaseparted prefilters, the first item directly and - # consequent items with a , + # creata a string with commaseparted prefilters, the first item directly + # and consequent items with a , # TODO: refactor to create a list and then join them with a ',' if field not in prefilters: prefilters[field] = filter_value @@ -394,3 +403,66 @@ def write_options(cls, filters: List) -> Dict: prefilters.update(f.extra_filter) return options + + +class ContextgroupFilter(BaseFilter): + """A representation object for a ContextGroup filter. + + There can only be a single context_group prefilter. So no lists involved. + + :ivar value: the value of the context_group filter, containing a + ContextGroup enumeration + """ + + def __init__( + self, + context_group: Union[str, ContextGroup], + ): + """Create ContextgroupFilter instance. + + :var context_group: the value of the context_group filter, containing a + ContextGroup enumeration + """ + check_enum(context_group, ContextGroup, "context_group") + self.value: ContextGroup = context_group + + @classmethod + def parse_options(cls, options: Dict) -> "ContextgroupFilter": + """ + Convert the dict definition of a context_group filter to a list of ContextgroupFilter obj. + + The value_options of the context reference properties looks like: + + ``` + { + "prefilters": { + "context_group": "DISCIPLINE" + }, + } + ``` + + :param options: options dict from a scope reference property or meta dict from a scopes + widget. + :return: list of ScopeFilter objects + :rtype list + """ + filters_dict = options.get(MetaWidget.PREFILTERS, {}) + for field, value in filters_dict.items(): + if field == "context_group": + return cls(context_group=value) + + @classmethod + def write_options(cls, filter: "ContextgroupFilter") -> Dict: + """ + Convert the list of Filter objects to a dict. + + :param filters: List of BaseFilter objects + :returns options dict to be used to update the options dict of a property + """ + prefilters = dict() + options = {MetaWidget.PREFILTERS: prefilters} + + if filter.value in ContextGroup: + prefilters.update({"context_group": str(filter.value)}) + + return options From 482cb911f7fb359323ea006a09c0ab79a2749147 Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Wed, 11 Sep 2024 14:38:43 +0200 Subject: [PATCH 2/8] Fix indentation in value_filter.py Correct the indentation of property type checks to enhance code readability and maintain consistency. This change ensures proper alignment and structure in the conditional statements. --- pykechain/models/value_filter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pykechain/models/value_filter.py b/pykechain/models/value_filter.py index d6353cb80..dd38fd2d8 100644 --- a/pykechain/models/value_filter.py +++ b/pykechain/models/value_filter.py @@ -127,10 +127,10 @@ def validate(self, part_model: "Part") -> None: if ( property_type in ( - PropertyType.BOOLEAN_VALUE, - PropertyType.REFERENCES_VALUE, - PropertyType.ACTIVITY_REFERENCES_VALUE, - ) + PropertyType.BOOLEAN_VALUE, + PropertyType.REFERENCES_VALUE, + PropertyType.ACTIVITY_REFERENCES_VALUE, + ) and self.type != FilterType.EXACT ): warnings.warn( From d0598cb419ddd17983c87d1e44682014718ae0d7 Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Mon, 16 Sep 2024 10:56:11 +0200 Subject: [PATCH 3/8] Add prefilters to ContextReferencesProperty Implemented `set_prefilters` method in `ContextReferencesProperty` to support clearing and setting the `context_group` prefilter. Added corresponding unit tests to ensure proper functionality and to handle edge cases, including invalid inputs. --- pykechain/models/property_reference.py | 29 ++++++++-- pykechain/models/widgets/helpers.py | 1 + ...filters.test_set_prefilters_no_params.json | 1 + ...ilters.test_set_prefilters_with_clear.json | 1 + ...prefilters_with_invalid_context_group.json | 1 + ...s.test_set_prefilters_with_prefilters.json | 1 + ...t_prefilters_with_valid_context_group.json | 1 + tests/test_properties.py | 56 ++++++++++++++++++- 8 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_no_params.json create mode 100644 tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_clear.json create mode 100644 tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_invalid_context_group.json create mode 100644 tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_prefilters.json create mode 100644 tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_valid_context_group.json diff --git a/pykechain/models/property_reference.py b/pykechain/models/property_reference.py index b5622e599..a8f838a18 100644 --- a/pykechain/models/property_reference.py +++ b/pykechain/models/property_reference.py @@ -3,6 +3,7 @@ from pykechain.defaults import PARTS_BATCH_LIMIT from pykechain.enums import ( + ContextGroup, ScopeReferenceColumns, StoredFileCategory, StoredFileClassification, @@ -15,6 +16,7 @@ ) from pykechain.models.context import Context from pykechain.models.form import Form +from pykechain.models.input_checks import check_enum from pykechain.models.stored_file import StoredFile from pykechain.models.value_filter import ScopeFilter from pykechain.models.workflow import Status @@ -228,20 +230,35 @@ class ContextReferencesProperty(_ReferencePropertyInScope): def set_prefilters( self, - prefilters: List[ScopeFilter] = None, + prefilters: Optional = None, clear: Optional[bool] = False, + context_group: Optional[ContextGroup] = None, ) -> None: """ - Set pre-filters on the scope reference property. + Set pre-filters on the Context reference property. - :param prefilters: list of Scope Filter objects - :type prefilters: list + On the Context only a context_group prefilter can be set to a single ContextGroup. + + :param prefilters: Not used :param clear: whether all existing pre-filters should be cleared. (default = False) - :type clear: bool + :param context_group: An optional ContextGroup to prefilter on. One single prefilter is + allowed. :return: None """ - pass + prefilters_dict = self._options.get("prefilters", dict()) + if prefilters: + raise IllegalArgumentError( + f"`prefilters` argument is unused. Use `context_group` instead." + ) + if clear: + prefilters_dict = dict() + if context_group: + context_group = check_enum(context_group, ContextGroup, "context_group") + prefilters_dict = {"context_group": context_group} + + if context_group or clear: + self._options.update({"prefilters": prefilters_dict}) def _retrieve_objects(self, **kwargs) -> List[Context]: """ diff --git a/pykechain/models/widgets/helpers.py b/pykechain/models/widgets/helpers.py index fd48f829c..cd30a6e01 100644 --- a/pykechain/models/widgets/helpers.py +++ b/pykechain/models/widgets/helpers.py @@ -412,6 +412,7 @@ def _check_prefilters( :raises IllegalArgumentError: when the type of the input is provided incorrect. """ if isinstance(prefilters, dict): + from pykechain.models import Property property_models: List[Property, str] = prefilters.get( MetaWidget.PROPERTY_MODELS, [] ) # noqa diff --git a/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_no_params.json b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_no_params.json new file mode 100644 index 000000000..bf60d89b4 --- /dev/null +++ b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_no_params.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA7VVwW7kNgz9FcPXRoEky7I9p20Xe9hD26DJ7qFFMKBleqLGtgxZnt1BMP9eypNMPEi37WF7MGBS5OMjKT8/pcbNQ0g34iod8Cu9DHPXXaWjx7118/Rie5zmLpD5x1Nqm3ST1k3eGARgkOXIVFFzVrUmZ2WRK8FbBbluU8KEHin6J/uIyY13f6IJaURrIwQ52Xh2hqV8+hyVzBM2SXBJwCkkN4dHNA9ghwSGJhnn6SGxYTl9wKSzvSVqV+kUIETK6Y/v7z5+/kAeAwF3zh/I9+n2w2/b2/e/3ix+j3TSbCFWlFxUTHAm5R0vN1xvVHldFirP8t8pdB6bdajMGM+YyO+E2uTlRqlrzrmueAwNsIsTWhoj8yubjBuRBfA7DOk9EYz21o3BuoEin1K3R+9tg7f01ODTTQvdhHFAtIAJB2roFEpj9+EwxlmaeQqu/2jcEBtxQ2t3Eaqx09jBYfHH2ZqD6SKLlf9n10QAj7u5o2LHI1E6of0Ce7tbalGp+2NcBvRb22xP+zvdgR77Gv3rHZClpvFM6J+XPM0j+r2dnH9dPL3ZaQsm2D2Zwc/UHPZgu/PZCfXcefTAALtL1wr6GYScHUJzkX28OhHLLmjFC/QC+X14nRmsab3GfZOXesMrmq+kPpGV3JH7n9jBu/p66C45ngn9y+j+A8fq7fBi7P+60b+nFaFfWIm3F+1ydLcr1zfpPbh4E6aA/ofR9hmLzb0jDVqU5dq4/vvzv49Sugja1g6ti1/XolM+bKOsvHxazYwXNuXsSADO8vvF+ce2c1+23jlCigLMBW+05oqp3NRMlUaxUuUF01mb81JqUGV7UkDo3G6V2LSoSKk5U5WWTLUVsEqVghVYywZKUSgJlAjjuErKashKhYrJohCUxDkDqsJqWbZC51nDpU4X3s1MvfakNN0psypLVQmpmKhUxZQm9awQJBOqqlQNpKgcVpl2oOkMBk/JoHmRoapZXgmgTkVGFYv4qwEtoJaQmWzV5KpsrbVQJhdM5jllSqxYmcmSKSF1gSJroChWmZdlK07AWAmGpdCUwoHVhggIrelnoXJoZZYe749/ASxW3Ws+BwAA", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:46 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "recorded_at": "2024-09-16T08:55:44"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA82WbW/iOBDHvwrK6xr5MXZ4h1q6V6kPp5bu6XqqkOOHxSokXHB6i6p+950AKbTlFlbVnfoqmfHYM/bvn4mfElPWRUx65Cgp3Hd4KerJ5CiZVe4xlPW8tSs3rycRzL+ekmCTXuIwEZI5ixTDCnFBMNLUW8RTbpixFmusElhTTx1E/zF2bpI0y3iw/llb1s1NFWYxlAV4wWF0dN/KagHWxdXJ4LxxTfR8HnyAoVXY79dXJ7fHQxiaQkVhNgkmxGbG3eD6anTRv/yzmVU5WMqONGwooZhkCOqjdIhVD6c9nnWVyKSSdxBaz+zeUIVJEzo35cyNltvPrbDGaY00Ew5xmWOUeSOQkoIT7LkWqYcZM125Iq6mOK4xlzpF8MSIE3jLteNIMqoN9SnLrGt2VVo3Wc5oSUDSKga3dfgpc4IqkyGrjESc5wTlubUoAyCO5JJqzDaHfxLgGV31cv5243iHYJ1uMYqLWTP59PyqPxx97Z/fDn4ZUFlZSNLDcMhFeJHWo57UblQuc8Kenp7XrqTHGe2SQ+BJznG6Ax6lCMRI8JDQHpU9gbsyk1LRuxWKFsRh0v112m/RlXWc1VBZrGr3fLRmBxMUZh4UoLIc2DGHtNIGcccp9blMNd9idzMrH4B8S27emnu5nV1+kBo5lBo+hFgmeUoOJpZ9KmLWu5wK6VGaYyCmrUFZCgBTq2RqqeeGiA2x6zDtXMAWq6A3Ha8KUzTdOPfSO/6tf/0xfPRQfEnf6qkuYqinhzTOjBLOxeEk089EMlPSZZrkUCaFtbBVSDnGEfGe2YwInRm7ITkMlesMx8E8FG6++QYjuFHccv8fPZQdinM1vh8jTzHe9UHuCBWYyk+FkROpUsUVyhmGtawWKHfQR73PmU2xgj8g32A8bi441aJT+g7ovPbaxLpyLzjNahiVHr0e3ov15uzyy/lgdDM4Hxx/EC//Od7GEQBTWa0uAY/rCir3dw1qtKfBTezXNqbJWBY+fGuE8XzfLmfGZTDLW0RyC7mc7dxEqLVR8GmlC9Ps+Yur4BAW8HYW9WSR3DenBHfBOdxi9LoayF+t8+d1jGVx/SpiO/vuADjzsTMPefkdkkOBe8TbNBaBcLpsLLQnWJdJIVL6Lz3oTahiXKrPJF4hNQOB5ijHxiPevGmNLYIfjGeUZ9oxvS3eWQBSrfQ6oZjHNatWvk0AagPQVsBrAW9ZzacQx+5l1f/i+iBaRS8fOzL+5BpI32uAI5wtfy6sJ4Bt2hVMEpHt0sD7UC6Z+hQN7P6t/fwDDTJq2YANAAA=", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:46 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:44"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "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", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:47 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:45"}, {"request": {"body": {"encoding": "utf-8", "string": "{\"name\": \"__Test context ref property @ 2024-09-16 10:55:45.033141\", \"part_id\": \"e4a047a6-4a00-41a6-bae4-732ac2f639de\", \"description\": \"Description of test ref property\", \"property_type\": \"CONTEXT_REFERENCES_VALUE\", \"value\": null, \"unit\": \"no unit\", \"value_options\": {}}"}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["270"], "Content-Type": ["application/json"]}, "method": "POST", "uri": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "response": {"body": {"encoding": "utf-8", "string": "{\"results\":[{\"id\":\"8399377c-c344-46b5-9e19-2ad7d78adf88\",\"name\":\"__Test context ref property @ 2024-09-16 10:55:45.033141\",\"ref\":\"test-context-ref-property-2024-09-16-105545033141\",\"description\":\"Description of test ref property\",\"property_type\":\"CONTEXT_REFERENCES_VALUE\",\"category\":\"MODEL\",\"order\":8,\"unit\":\"no unit\",\"value_options\":{},\"value\":[],\"created_at\":\"2024-09-16T08:55:47.250621Z\",\"updated_at\":\"2024-09-16T08:55:47.262915Z\",\"part_id\":\"e4a047a6-4a00-41a6-bae4-732ac2f639de\",\"scope_id\":\"bd5dceaa-a35e-47b0-9fc5-875410f4a56f\",\"model_id\":null,\"output\":true}]}"}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:47 GMT"], "Content-Type": ["application/json"], "Content-Length": ["566"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["POST, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 201, "message": "Created"}, "url": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "recorded_at": "2024-09-16T08:55:45"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["0"]}, "method": "DELETE", "uri": "/api/v3/properties/8399377c-c344-46b5-9e19-2ad7d78adf88.json"}, "response": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:48 GMT"], "Content-Type": ["application/json"], "Content-Length": ["14"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["GET, PUT, PATCH, DELETE, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 204, "message": "No Content"}, "url": "/api/v3/properties/8399377c-c344-46b5-9e19-2ad7d78adf88.json"}, "recorded_at": "2024-09-16T08:55:46"}], "recorded_with": "betamax/0.9.0"} \ No newline at end of file diff --git a/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_clear.json b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_clear.json new file mode 100644 index 000000000..c740a14ea --- /dev/null +++ b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_clear.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA7VVwW7kNgz9FcPXRoEky7I9p20Xe9hD26DJ7qFFMKBleqLGtgxZnt1BMP9eypNMPEi37WF7MGBS5OMjKT8/pcbNQ0g34iod8Cu9DHPXXaWjx7118/Rie5zmLpD5x1Nqm3ST1k3eGARgkOXIVFFzVrUmZ2WRK8FbBbluU8KEHin6J/uIyY13f6IJaURrIwQ52Xh2hqV8+hyVzBM2SXBJwCkkN4dHNA9ghwSGJhnn6SGxYTl9wKSzvSVqV+kUIETK6Y/v7z5+/kAeAwF3zh/I9+n2w2/b2/e/3ix+j3TSbCFWlFxUTHAm5R0vN1xvVHldFirP8t8pdB6bdajMGM+YyO+E2uTlRqlrzrmueAwNsIsTWhoj8yubjBuRBfA7DOk9EYz21o3BuoEin1K3R+9tg7f01ODTTQvdhHFAtIAJB2roFEpj9+EwxlmaeQqu/2jcEBtxQ2t3Eaqx09jBYfHH2ZqD6SKLlf9n10QAj7u5o2LHI1E6of0Ce7tbalGp+2NcBvRb22xP+zvdgR77Gv3rHZClpvFM6J+XPM0j+r2dnH9dPL3ZaQsm2D2Zwc/UHPZgu/PZCfXcefTAALtL1wr6GYScHUJzkX28OhHLLmjFC/QC+X14nRmsab3GfZOXesMrmq+kPpGV3JH7n9jBu/p66C45ngn9y+j+A8fq7fBi7P+60b+nFaFfWIm3F+1ydLcr1zfpPbh4E6aA/ofR9hmLzb0jDVqU5dq4/vvzv49Sugja1g6ti1/XolM+bKOsvHxazYwXNuXsSADO8vvF+ce2c1+23jlCigLMBW+05oqp3NRMlUaxUuUF01mb81JqUGV7UkDo3G6V2LSoSKk5U5WWTLUVsEqVghVYywZKUSgJlAjjuErKashKhYrJohCUxDkDqsJqWbZC51nDpU4X3s1MvfakNN0psypLVQmpmKhUxZQm9awQJBOqqlQNpKgcVpl2oOkMBk/JoHmRoapZXgmgTkVGFYv4qwEtoJaQmWzV5KpsrbVQJhdM5jllSqxYmcmSKSF1gSJroChWmZdlK07AWAmGpdCUwoHVhggIrelnoXJoZZYe749/ASxW3Ws+BwAA", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:48 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "recorded_at": "2024-09-16T08:55:46"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA82WbW/iOBDHvwrK6xr5MXZ4h1q6V6kPp5bu6XqqkOOHxSokXHB6i6p+950AKbTlFlbVnfoqmfHYM/bvn4mfElPWRUx65Cgp3Hd4KerJ5CiZVe4xlPW8tSs3rycRzL+ekmCTXuIwEZI5ixTDCnFBMNLUW8RTbpixFmusElhTTx1E/zF2bpI0y3iw/llb1s1NFWYxlAV4wWF0dN/KagHWxdXJ4LxxTfR8HnyAoVXY79dXJ7fHQxiaQkVhNgkmxGbG3eD6anTRv/yzmVU5WMqONGwooZhkCOqjdIhVD6c9nnWVyKSSdxBaz+zeUIVJEzo35cyNltvPrbDGaY00Ew5xmWOUeSOQkoIT7LkWqYcZM125Iq6mOK4xlzpF8MSIE3jLteNIMqoN9SnLrGt2VVo3Wc5oSUDSKga3dfgpc4IqkyGrjESc5wTlubUoAyCO5JJqzDaHfxLgGV31cv5243iHYJ1uMYqLWTP59PyqPxx97Z/fDn4ZUFlZSNLDcMhFeJHWo57UblQuc8Kenp7XrqTHGe2SQ+BJznG6Ax6lCMRI8JDQHpU9gbsyk1LRuxWKFsRh0v112m/RlXWc1VBZrGr3fLRmBxMUZh4UoLIc2DGHtNIGcccp9blMNd9idzMrH4B8S27emnu5nV1+kBo5lBo+hFgmeUoOJpZ9KmLWu5wK6VGaYyCmrUFZCgBTq2RqqeeGiA2x6zDtXMAWq6A3Ha8KUzTdOPfSO/6tf/0xfPRQfEnf6qkuYqinhzTOjBLOxeEk089EMlPSZZrkUCaFtbBVSDnGEfGe2YwInRm7ITkMlesMx8E8FG6++QYjuFHccv8fPZQdinM1vh8jTzHe9UHuCBWYyk+FkROpUsUVyhmGtawWKHfQR73PmU2xgj8g32A8bi441aJT+g7ovPbaxLpyLzjNahiVHr0e3ov15uzyy/lgdDM4Hxx/EC//Od7GEQBTWa0uAY/rCir3dw1qtKfBTezXNqbJWBY+fGuE8XzfLmfGZTDLW0RyC7mc7dxEqLVR8GmlC9Ps+Yur4BAW8HYW9WSR3DenBHfBOdxi9LoayF+t8+d1jGVx/SpiO/vuADjzsTMPefkdkkOBe8TbNBaBcLpsLLQnWJdJIVL6Lz3oTahiXKrPJF4hNQOB5ijHxiPevGmNLYIfjGeUZ9oxvS3eWQBSrfQ6oZjHNatWvk0AagPQVsBrAW9ZzacQx+5l1f/i+iBaRS8fOzL+5BpI32uAI5wtfy6sJ4Bt2hVMEpHt0sD7UC6Z+hQN7P6t/fwDDTJq2YANAAA=", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:48 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:46"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "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", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:49 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:47"}, {"request": {"body": {"encoding": "utf-8", "string": "{\"name\": \"__Test context ref property @ 2024-09-16 10:55:47.078729\", \"part_id\": \"e4a047a6-4a00-41a6-bae4-732ac2f639de\", \"description\": \"Description of test ref property\", \"property_type\": \"CONTEXT_REFERENCES_VALUE\", \"value\": null, \"unit\": \"no unit\", \"value_options\": {}}"}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["270"], "Content-Type": ["application/json"]}, "method": "POST", "uri": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "response": {"body": {"encoding": "utf-8", "string": "{\"results\":[{\"id\":\"3781f936-7aa8-40e7-a24f-e014241d15ca\",\"name\":\"__Test context ref property @ 2024-09-16 10:55:47.078729\",\"ref\":\"test-context-ref-property-2024-09-16-105547078729\",\"description\":\"Description of test ref property\",\"property_type\":\"CONTEXT_REFERENCES_VALUE\",\"category\":\"MODEL\",\"order\":8,\"unit\":\"no unit\",\"value_options\":{},\"value\":[],\"created_at\":\"2024-09-16T08:55:49.294076Z\",\"updated_at\":\"2024-09-16T08:55:49.304622Z\",\"part_id\":\"e4a047a6-4a00-41a6-bae4-732ac2f639de\",\"scope_id\":\"bd5dceaa-a35e-47b0-9fc5-875410f4a56f\",\"model_id\":null,\"output\":true}]}"}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:49 GMT"], "Content-Type": ["application/json"], "Content-Length": ["566"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["POST, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 201, "message": "Created"}, "url": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "recorded_at": "2024-09-16T08:55:47"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["0"]}, "method": "DELETE", "uri": "/api/v3/properties/3781f936-7aa8-40e7-a24f-e014241d15ca.json"}, "response": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:49 GMT"], "Content-Type": ["application/json"], "Content-Length": ["14"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["GET, PUT, PATCH, DELETE, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 204, "message": "No Content"}, "url": "/api/v3/properties/3781f936-7aa8-40e7-a24f-e014241d15ca.json"}, "recorded_at": "2024-09-16T08:55:47"}], "recorded_with": "betamax/0.9.0"} \ No newline at end of file diff --git a/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_invalid_context_group.json b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_invalid_context_group.json new file mode 100644 index 000000000..98d3e290f --- /dev/null +++ b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_invalid_context_group.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA7VVwW7kNgz9FcPXRoEky7I9p20Xe9hD26DJ7qFFMKBleqLGtgxZnt1BMP9eypNMPEi37WF7MGBS5OMjKT8/pcbNQ0g34iod8Cu9DHPXXaWjx7118/Rie5zmLpD5x1Nqm3ST1k3eGARgkOXIVFFzVrUmZ2WRK8FbBbluU8KEHin6J/uIyY13f6IJaURrIwQ52Xh2hqV8+hyVzBM2SXBJwCkkN4dHNA9ghwSGJhnn6SGxYTl9wKSzvSVqV+kUIETK6Y/v7z5+/kAeAwF3zh/I9+n2w2/b2/e/3ix+j3TSbCFWlFxUTHAm5R0vN1xvVHldFirP8t8pdB6bdajMGM+YyO+E2uTlRqlrzrmueAwNsIsTWhoj8yubjBuRBfA7DOk9EYz21o3BuoEin1K3R+9tg7f01ODTTQvdhHFAtIAJB2roFEpj9+EwxlmaeQqu/2jcEBtxQ2t3Eaqx09jBYfHH2ZqD6SKLlf9n10QAj7u5o2LHI1E6of0Ce7tbalGp+2NcBvRb22xP+zvdgR77Gv3rHZClpvFM6J+XPM0j+r2dnH9dPL3ZaQsm2D2Zwc/UHPZgu/PZCfXcefTAALtL1wr6GYScHUJzkX28OhHLLmjFC/QC+X14nRmsab3GfZOXesMrmq+kPpGV3JH7n9jBu/p66C45ngn9y+j+A8fq7fBi7P+60b+nFaFfWIm3F+1ydLcr1zfpPbh4E6aA/ofR9hmLzb0jDVqU5dq4/vvzv49Sugja1g6ti1/XolM+bKOsvHxazYwXNuXsSADO8vvF+ce2c1+23jlCigLMBW+05oqp3NRMlUaxUuUF01mb81JqUGV7UkDo3G6V2LSoSKk5U5WWTLUVsEqVghVYywZKUSgJlAjjuErKashKhYrJohCUxDkDqsJqWbZC51nDpU4X3s1MvfakNN0psypLVQmpmKhUxZQm9awQJBOqqlQNpKgcVpl2oOkMBk/JoHmRoapZXgmgTkVGFYv4qwEtoJaQmWzV5KpsrbVQJhdM5jllSqxYmcmSKSF1gSJroChWmZdlK07AWAmGpdCUwoHVhggIrelnoXJoZZYe749/ASxW3Ws+BwAA", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:50 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "recorded_at": "2024-09-16T08:55:48"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA82WbW/iOBDHvwrK6xr5MXZ4h1q6V6kPp5bu6XqqkOOHxSokXHB6i6p+950AKbTlFlbVnfoqmfHYM/bvn4mfElPWRUx65Cgp3Hd4KerJ5CiZVe4xlPW8tSs3rycRzL+ekmCTXuIwEZI5ixTDCnFBMNLUW8RTbpixFmusElhTTx1E/zF2bpI0y3iw/llb1s1NFWYxlAV4wWF0dN/KagHWxdXJ4LxxTfR8HnyAoVXY79dXJ7fHQxiaQkVhNgkmxGbG3eD6anTRv/yzmVU5WMqONGwooZhkCOqjdIhVD6c9nnWVyKSSdxBaz+zeUIVJEzo35cyNltvPrbDGaY00Ew5xmWOUeSOQkoIT7LkWqYcZM125Iq6mOK4xlzpF8MSIE3jLteNIMqoN9SnLrGt2VVo3Wc5oSUDSKga3dfgpc4IqkyGrjESc5wTlubUoAyCO5JJqzDaHfxLgGV31cv5243iHYJ1uMYqLWTP59PyqPxx97Z/fDn4ZUFlZSNLDcMhFeJHWo57UblQuc8Kenp7XrqTHGe2SQ+BJznG6Ax6lCMRI8JDQHpU9gbsyk1LRuxWKFsRh0v112m/RlXWc1VBZrGr3fLRmBxMUZh4UoLIc2DGHtNIGcccp9blMNd9idzMrH4B8S27emnu5nV1+kBo5lBo+hFgmeUoOJpZ9KmLWu5wK6VGaYyCmrUFZCgBTq2RqqeeGiA2x6zDtXMAWq6A3Ha8KUzTdOPfSO/6tf/0xfPRQfEnf6qkuYqinhzTOjBLOxeEk089EMlPSZZrkUCaFtbBVSDnGEfGe2YwInRm7ITkMlesMx8E8FG6++QYjuFHccv8fPZQdinM1vh8jTzHe9UHuCBWYyk+FkROpUsUVyhmGtawWKHfQR73PmU2xgj8g32A8bi441aJT+g7ovPbaxLpyLzjNahiVHr0e3ov15uzyy/lgdDM4Hxx/EC//Od7GEQBTWa0uAY/rCir3dw1qtKfBTezXNqbJWBY+fGuE8XzfLmfGZTDLW0RyC7mc7dxEqLVR8GmlC9Ps+Yur4BAW8HYW9WSR3DenBHfBOdxi9LoayF+t8+d1jGVx/SpiO/vuADjzsTMPefkdkkOBe8TbNBaBcLpsLLQnWJdJIVL6Lz3oTahiXKrPJF4hNQOB5ijHxiPevGmNLYIfjGeUZ9oxvS3eWQBSrfQ6oZjHNatWvk0AagPQVsBrAW9ZzacQx+5l1f/i+iBaRS8fOzL+5BpI32uAI5wtfy6sJ4Bt2hVMEpHt0sD7UC6Z+hQN7P6t/fwDDTJq2YANAAA=", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:50 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:48"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "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", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:50 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:48"}, {"request": {"body": {"encoding": "utf-8", "string": "{\"name\": \"__Test context ref property @ 2024-09-16 10:55:48.819643\", \"part_id\": \"e4a047a6-4a00-41a6-bae4-732ac2f639de\", \"description\": \"Description of test ref property\", \"property_type\": \"CONTEXT_REFERENCES_VALUE\", \"value\": null, \"unit\": \"no unit\", \"value_options\": {}}"}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["270"], "Content-Type": ["application/json"]}, "method": "POST", "uri": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "response": {"body": {"encoding": "utf-8", "string": "{\"results\":[{\"id\":\"2e41e890-323c-4bb6-9f80-a0ae4e0f25d0\",\"name\":\"__Test context ref property @ 2024-09-16 10:55:48.819643\",\"ref\":\"test-context-ref-property-2024-09-16-105548819643\",\"description\":\"Description of test ref property\",\"property_type\":\"CONTEXT_REFERENCES_VALUE\",\"category\":\"MODEL\",\"order\":8,\"unit\":\"no unit\",\"value_options\":{},\"value\":[],\"created_at\":\"2024-09-16T08:55:51.035346Z\",\"updated_at\":\"2024-09-16T08:55:51.044670Z\",\"part_id\":\"e4a047a6-4a00-41a6-bae4-732ac2f639de\",\"scope_id\":\"bd5dceaa-a35e-47b0-9fc5-875410f4a56f\",\"model_id\":null,\"output\":true}]}"}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:51 GMT"], "Content-Type": ["application/json"], "Content-Length": ["566"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["POST, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 201, "message": "Created"}, "url": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "recorded_at": "2024-09-16T08:55:49"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["0"]}, "method": "DELETE", "uri": "/api/v3/properties/2e41e890-323c-4bb6-9f80-a0ae4e0f25d0.json"}, "response": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:51 GMT"], "Content-Type": ["application/json"], "Content-Length": ["14"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["GET, PUT, PATCH, DELETE, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 204, "message": "No Content"}, "url": "/api/v3/properties/2e41e890-323c-4bb6-9f80-a0ae4e0f25d0.json"}, "recorded_at": "2024-09-16T08:55:49"}], "recorded_with": "betamax/0.9.0"} \ No newline at end of file diff --git a/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_prefilters.json b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_prefilters.json new file mode 100644 index 000000000..8b70fefb6 --- /dev/null +++ b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_prefilters.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA7VVwW7kNgz9FcPXRoEky7I9p20Xe9hD26DJ7qFFMKBleqLGtgxZnt1BMP9eypNMPEi37WF7MGBS5OMjKT8/pcbNQ0g34iod8Cu9DHPXXaWjx7118/Rie5zmLpD5x1Nqm3ST1k3eGARgkOXIVFFzVrUmZ2WRK8FbBbluU8KEHin6J/uIyY13f6IJaURrIwQ52Xh2hqV8+hyVzBM2SXBJwCkkN4dHNA9ghwSGJhnn6SGxYTl9wKSzvSVqV+kUIETK6Y/v7z5+/kAeAwF3zh/I9+n2w2/b2/e/3ix+j3TSbCFWlFxUTHAm5R0vN1xvVHldFirP8t8pdB6bdajMGM+YyO+E2uTlRqlrzrmueAwNsIsTWhoj8yubjBuRBfA7DOk9EYz21o3BuoEin1K3R+9tg7f01ODTTQvdhHFAtIAJB2roFEpj9+EwxlmaeQqu/2jcEBtxQ2t3Eaqx09jBYfHH2ZqD6SKLlf9n10QAj7u5o2LHI1E6of0Ce7tbalGp+2NcBvRb22xP+zvdgR77Gv3rHZClpvFM6J+XPM0j+r2dnH9dPL3ZaQsm2D2Zwc/UHPZgu/PZCfXcefTAALtL1wr6GYScHUJzkX28OhHLLmjFC/QC+X14nRmsab3GfZOXesMrmq+kPpGV3JH7n9jBu/p66C45ngn9y+j+A8fq7fBi7P+60b+nFaFfWIm3F+1ydLcr1zfpPbh4E6aA/ofR9hmLzb0jDVqU5dq4/vvzv49Sugja1g6ti1/XolM+bKOsvHxazYwXNuXsSADO8vvF+ce2c1+23jlCigLMBW+05oqp3NRMlUaxUuUF01mb81JqUGV7UkDo3G6V2LSoSKk5U5WWTLUVsEqVghVYywZKUSgJlAjjuErKashKhYrJohCUxDkDqsJqWbZC51nDpU4X3s1MvfakNN0psypLVQmpmKhUxZQm9awQJBOqqlQNpKgcVpl2oOkMBk/JoHmRoapZXgmgTkVGFYv4qwEtoJaQmWzV5KpsrbVQJhdM5jllSqxYmcmSKSF1gSJroChWmZdlK07AWAmGpdCUwoHVhggIrelnoXJoZZYe749/ASxW3Ws+BwAA", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:51 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "recorded_at": "2024-09-16T08:55:49"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA82WbW/iOBDHvwrK6xr5MXZ4h1q6V6kPp5bu6XqqkOOHxSokXHB6i6p+950AKbTlFlbVnfoqmfHYM/bvn4mfElPWRUx65Cgp3Hd4KerJ5CiZVe4xlPW8tSs3rycRzL+ekmCTXuIwEZI5ixTDCnFBMNLUW8RTbpixFmusElhTTx1E/zF2bpI0y3iw/llb1s1NFWYxlAV4wWF0dN/KagHWxdXJ4LxxTfR8HnyAoVXY79dXJ7fHQxiaQkVhNgkmxGbG3eD6anTRv/yzmVU5WMqONGwooZhkCOqjdIhVD6c9nnWVyKSSdxBaz+zeUIVJEzo35cyNltvPrbDGaY00Ew5xmWOUeSOQkoIT7LkWqYcZM125Iq6mOK4xlzpF8MSIE3jLteNIMqoN9SnLrGt2VVo3Wc5oSUDSKga3dfgpc4IqkyGrjESc5wTlubUoAyCO5JJqzDaHfxLgGV31cv5243iHYJ1uMYqLWTP59PyqPxx97Z/fDn4ZUFlZSNLDcMhFeJHWo57UblQuc8Kenp7XrqTHGe2SQ+BJznG6Ax6lCMRI8JDQHpU9gbsyk1LRuxWKFsRh0v112m/RlXWc1VBZrGr3fLRmBxMUZh4UoLIc2DGHtNIGcccp9blMNd9idzMrH4B8S27emnu5nV1+kBo5lBo+hFgmeUoOJpZ9KmLWu5wK6VGaYyCmrUFZCgBTq2RqqeeGiA2x6zDtXMAWq6A3Ha8KUzTdOPfSO/6tf/0xfPRQfEnf6qkuYqinhzTOjBLOxeEk089EMlPSZZrkUCaFtbBVSDnGEfGe2YwInRm7ITkMlesMx8E8FG6++QYjuFHccv8fPZQdinM1vh8jTzHe9UHuCBWYyk+FkROpUsUVyhmGtawWKHfQR73PmU2xgj8g32A8bi441aJT+g7ovPbaxLpyLzjNahiVHr0e3ov15uzyy/lgdDM4Hxx/EC//Od7GEQBTWa0uAY/rCir3dw1qtKfBTezXNqbJWBY+fGuE8XzfLmfGZTDLW0RyC7mc7dxEqLVR8GmlC9Ps+Yur4BAW8HYW9WSR3DenBHfBOdxi9LoayF+t8+d1jGVx/SpiO/vuADjzsTMPefkdkkOBe8TbNBaBcLpsLLQnWJdJIVL6Lz3oTahiXKrPJF4hNQOB5ijHxiPevGmNLYIfjGeUZ9oxvS3eWQBSrfQ6oZjHNatWvk0AagPQVsBrAW9ZzacQx+5l1f/i+iBaRS8fOzL+5BpI32uAI5wtfy6sJ4Bt2hVMEpHt0sD7UC6Z+hQN7P6t/fwDDTJq2YANAAA=", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:52 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:49"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA92ZWW8bNxCA/0ohoH0KLd6HAKNQbCUO6iOwlcZNEQg8hvY2urq7ap0a/u+dlXW4iVsrsIEaetBqZ3gN5yOHHOm6FSezcd3qsBetMVzhy3g2HL5oTUv4o5jMqqVcQjUb1ij+et0qUqvTAumpNF4T/KZEMnwLHiQxgvvIsxYuQQv79CPA2i+LT41UQkYh3AoJqlgW07qYjFGJiuhruJiUn1E6OtnvHTaqoa+qIhdYdFvt7enJ/ru9PhaN0J5iOixiUTctPvROTwZH3eNfmlYlYFdp4HE6LU6ZI4wSzvvUdqjuSLfDtNVGfsCqs2l6uKqdV63iZAqD+eRDUimC98QLBUSaQInLURFrlGQ0S690xhZTX8K4vm3irJWOcUmYk45ITQVx4Dlh0jkZPKec+mZWkwTDeYslBxy0rAu443ochUKgmUQdIpHZU+IDz8RYSp2mTCiV165/Db6sVr6/WEhfOX8x0OdB/XnaNHtz3B/83D181/tmMJMyQdnqUHTuuFgtqD/8cAaDyXxEnMv1zUK1LH+QGWeUSXUPM04JRT/yPuMdYTuC7jjl1C0zJLDw/4br9dshf0lsMqunM7SsLmdw82KBjEVFlbWRCJMTmpAiwQXBCC4uz10E5WJaI+tPaj/87hKKi8t6Ra5ulGSlfBDgq8OT7iMRsqdGKHHOm207roSg7jkhzECzoNISDkEQCcISF4IlljEw3iNEE9YI3xaxnpXrmDddyQ+C6/b73b2Do95jNyB/anpWOck2o+co1n5O9GxOITJBCRhmiRQpEdx6jEQjrRCaSwC9prd/h9GSYPqH7kGK/d75I/mJJ+YnuGTWbMRPID3xrAJoBGs0tUAc15nI6CQJAdDwZDzykxzNW/PrXU2LshhffNfMc0UQFlqy0D7IcL/b7/XfHPUex1E+NUd0tdqQI54v/FlFUUiMWzzuSM4+4N1Fa+J1ZMRJqlmkxhlq1hzfQ6iKOwT/XMkPsjt8c/zT47ipJ+aGM6TSbcQN3SqEeU7cRIgaaGDEezYfXRFvuSMmKEoDFZ6HO/HzzA/hxxW1CqVNkL08OTnsdY8fR00/NTVphL7v2nlPVcWMZc+JWlDcBscTphqKYV8Rkw6F92UWUgjCW8ciW1Orios1s/n7g8jO3rw+7vbfnT4yRJr/hoY2YT5aYS7lFypMhcqFCWjp2C/uVnEyzmg4tlhrO/Ppdcdpv4n6Nzcf10vg+q61p71XvdPe8V5v/z6Tz/ZO3s5LcjGctzw/RO1lXU+rTrvtR5XYScVFgVf0CcIbV1MfodqJk1H7E0QyglR4gs5L7WkxEqSGqm4PBlXxF66nQbuqJyWkpueqXQ02WQDtPIiM+8QYnoM0YUIpkXIA7QlGDptyUkHG1F65YYB5kiQU1ywbMFwKglBN6svZKIx9MSQcL7ZXzYMYuvPb9OLHc9Id/UW6Q3ROUV+OdrvvzyQ5OOrukbODLlf6h9sKe2g3Yin8cHf/hNKfX5r++Xsjj1//tHd+ZPe+56+acaljGl8bL+HX/OH/rOSghN9n6IlFXw2f3WV13FVKKf5hUTY/0KHa1ZQuNGc4M0gH4HEBVbuXk1U3Z8sp7yYhrfJM6yCijh4wftkgkjAgsvJCMqWjtdmIzFxOnFIVgjc8cikoY6E5h7YKMsPSq+axTZCltpg7RwWWGpNcstJrmp3zEgL1IuCpG6IB5ryHjOjBZsYT1sW1waiJCPn8bLsoU4RMt4mxMzaFrAQXDTcRcKNmBTJgTuCyizwIqX020USEjPudojd5tgkDADVqvpGPtgmxlvQKP9uEWIicfNAMOLcSkXIKXHjc1mCMzxFQTFakGDAu52wh8ujwHpUzF1y75JqTGe8Oc0iPRf0/Ad4KjphwUma5TNYEabiXHDHhMevAgzPgbFDWcS84WI9nLVhlvNNJcyOpTfOb7VZFY8HpFX62aatGhYkEhlmhMGN3RpoUMCQzDSkmhBOtp9wAlcEHqakJGKMxflshAo9BZdbCC/jtbzobOPof2cm/e3yZQn3DfzPLTGaZQt18lQwuR+lT15GsI8QO3hm1Fff9B3G3quhQs6O5k5Y/h2Tw45fyzd/7LHCM9RsAAA==", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:52 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:50"}, {"request": {"body": {"encoding": "utf-8", "string": "{\"name\": \"__Test context ref property @ 2024-09-16 10:55:50.559987\", \"part_id\": \"e4a047a6-4a00-41a6-bae4-732ac2f639de\", \"description\": \"Description of test ref property\", \"property_type\": \"CONTEXT_REFERENCES_VALUE\", \"value\": null, \"unit\": \"no unit\", \"value_options\": {}}"}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["270"], "Content-Type": ["application/json"]}, "method": "POST", "uri": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "response": {"body": {"encoding": "utf-8", "string": "{\"results\":[{\"id\":\"fb056108-af67-4ca5-8bd7-45550de1ba2e\",\"name\":\"__Test context ref property @ 2024-09-16 10:55:50.559987\",\"ref\":\"test-context-ref-property-2024-09-16-105550559987\",\"description\":\"Description of test ref property\",\"property_type\":\"CONTEXT_REFERENCES_VALUE\",\"category\":\"MODEL\",\"order\":8,\"unit\":\"no unit\",\"value_options\":{},\"value\":[],\"created_at\":\"2024-09-16T08:55:52.777032Z\",\"updated_at\":\"2024-09-16T08:55:52.787655Z\",\"part_id\":\"e4a047a6-4a00-41a6-bae4-732ac2f639de\",\"scope_id\":\"bd5dceaa-a35e-47b0-9fc5-875410f4a56f\",\"model_id\":null,\"output\":true}]}"}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:53 GMT"], "Content-Type": ["application/json"], "Content-Length": ["566"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["POST, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 201, "message": "Created"}, "url": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "recorded_at": "2024-09-16T08:55:51"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["0"]}, "method": "DELETE", "uri": "/api/v3/properties/fb056108-af67-4ca5-8bd7-45550de1ba2e.json"}, "response": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:53 GMT"], "Content-Type": ["application/json"], "Content-Length": ["14"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["GET, PUT, PATCH, DELETE, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 204, "message": "No Content"}, "url": "/api/v3/properties/fb056108-af67-4ca5-8bd7-45550de1ba2e.json"}, "recorded_at": "2024-09-16T08:55:51"}], "recorded_with": "betamax/0.9.0"} \ No newline at end of file diff --git a/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_valid_context_group.json b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_valid_context_group.json new file mode 100644 index 000000000..d78ad007d --- /dev/null +++ b/tests/cassettes/TestPropertiesContextReferencesPropertyPrefilters.test_set_prefilters_with_valid_context_group.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA7VVwW7kNgz9FcPXRoEky7I9p20Xe9hD26DJ7qFFMKBleqLGtgxZnt1BMP9eypNMPEi37WF7MGBS5OMjKT8/pcbNQ0g34iod8Cu9DHPXXaWjx7118/Rie5zmLpD5x1Nqm3ST1k3eGARgkOXIVFFzVrUmZ2WRK8FbBbluU8KEHin6J/uIyY13f6IJaURrIwQ52Xh2hqV8+hyVzBM2SXBJwCkkN4dHNA9ghwSGJhnn6SGxYTl9wKSzvSVqV+kUIETK6Y/v7z5+/kAeAwF3zh/I9+n2w2/b2/e/3ix+j3TSbCFWlFxUTHAm5R0vN1xvVHldFirP8t8pdB6bdajMGM+YyO+E2uTlRqlrzrmueAwNsIsTWhoj8yubjBuRBfA7DOk9EYz21o3BuoEin1K3R+9tg7f01ODTTQvdhHFAtIAJB2roFEpj9+EwxlmaeQqu/2jcEBtxQ2t3Eaqx09jBYfHH2ZqD6SKLlf9n10QAj7u5o2LHI1E6of0Ce7tbalGp+2NcBvRb22xP+zvdgR77Gv3rHZClpvFM6J+XPM0j+r2dnH9dPL3ZaQsm2D2Zwc/UHPZgu/PZCfXcefTAALtL1wr6GYScHUJzkX28OhHLLmjFC/QC+X14nRmsab3GfZOXesMrmq+kPpGV3JH7n9jBu/p66C45ngn9y+j+A8fq7fBi7P+60b+nFaFfWIm3F+1ydLcr1zfpPbh4E6aA/ofR9hmLzb0jDVqU5dq4/vvzv49Sugja1g6ti1/XolM+bKOsvHxazYwXNuXsSADO8vvF+ce2c1+23jlCigLMBW+05oqp3NRMlUaxUuUF01mb81JqUGV7UkDo3G6V2LSoSKk5U5WWTLUVsEqVghVYywZKUSgJlAjjuErKashKhYrJohCUxDkDqsJqWbZC51nDpU4X3s1MvfakNN0psypLVQmpmKhUxZQm9awQJBOqqlQNpKgcVpl2oOkMBk/JoHmRoapZXgmgTkVGFYv4qwEtoJaQmWzV5KpsrbVQJhdM5jllSqxYmcmSKSF1gSJroChWmZdlK07AWAmGpdCUwoHVhggIrelnoXJoZZYe749/ASxW3Ws+BwAA", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:53 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/scopes.json?status=ACTIVE&name=Bike+Project&fields=id%2Cname%2Cref%2Ctext%2Ccreated_at%2Cupdated_at%2Cstart_date%2Cdue_date%2Cstatus%2Ccategory%2Cprogress%2Cmembers%2Cteam%2Ctags%2Cscope_options%2Cteam_id_name%2Cworkflow_root_id%2Ccatalog_root_id%2Capp_root_id%2Cproduct_model_id%2Cproduct_instance_id%2Ccatalog_model_id%2Ccatalog_instance_id%2Cproject_info&limit=2"}, "recorded_at": "2024-09-16T08:55:51"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA82WbW/iOBDHvwrK6xr5MXZ4h1q6V6kPp5bu6XqqkOOHxSokXHB6i6p+950AKbTlFlbVnfoqmfHYM/bvn4mfElPWRUx65Cgp3Hd4KerJ5CiZVe4xlPW8tSs3rycRzL+ekmCTXuIwEZI5ixTDCnFBMNLUW8RTbpixFmusElhTTx1E/zF2bpI0y3iw/llb1s1NFWYxlAV4wWF0dN/KagHWxdXJ4LxxTfR8HnyAoVXY79dXJ7fHQxiaQkVhNgkmxGbG3eD6anTRv/yzmVU5WMqONGwooZhkCOqjdIhVD6c9nnWVyKSSdxBaz+zeUIVJEzo35cyNltvPrbDGaY00Ew5xmWOUeSOQkoIT7LkWqYcZM125Iq6mOK4xlzpF8MSIE3jLteNIMqoN9SnLrGt2VVo3Wc5oSUDSKga3dfgpc4IqkyGrjESc5wTlubUoAyCO5JJqzDaHfxLgGV31cv5243iHYJ1uMYqLWTP59PyqPxx97Z/fDn4ZUFlZSNLDcMhFeJHWo57UblQuc8Kenp7XrqTHGe2SQ+BJznG6Ax6lCMRI8JDQHpU9gbsyk1LRuxWKFsRh0v112m/RlXWc1VBZrGr3fLRmBxMUZh4UoLIc2DGHtNIGcccp9blMNd9idzMrH4B8S27emnu5nV1+kBo5lBo+hFgmeUoOJpZ9KmLWu5wK6VGaYyCmrUFZCgBTq2RqqeeGiA2x6zDtXMAWq6A3Ha8KUzTdOPfSO/6tf/0xfPRQfEnf6qkuYqinhzTOjBLOxeEk089EMlPSZZrkUCaFtbBVSDnGEfGe2YwInRm7ITkMlesMx8E8FG6++QYjuFHccv8fPZQdinM1vh8jTzHe9UHuCBWYyk+FkROpUsUVyhmGtawWKHfQR73PmU2xgj8g32A8bi441aJT+g7ovPbaxLpyLzjNahiVHr0e3ov15uzyy/lgdDM4Hxx/EC//Od7GEQBTWa0uAY/rCir3dw1qtKfBTezXNqbJWBY+fGuE8XzfLmfGZTDLW0RyC7mc7dxEqLVR8GmlC9Ps+Yur4BAW8HYW9WSR3DenBHfBOdxi9LoayF+t8+d1jGVx/SpiO/vuADjzsTMPefkdkkOBe8TbNBaBcLpsLLQnWJdJIVL6Lz3oTahiXKrPJF4hNQOB5ijHxiPevGmNLYIfjGeUZ9oxvS3eWQBSrfQ6oZjHNatWvk0AagPQVsBrAW9ZzacQx+5l1f/i+iBaRS8fOzL+5BpI32uAI5wtfy6sJ4Bt2hVMEpHt0sD7UC6Z+hQN7P6t/fwDDTJq2YANAAA=", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:54 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Wheel&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:51"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "]}, "method": "GET", "uri": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "response": {"body": {"encoding": "utf-8", "base64_string": "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", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:54 GMT"], "Content-Type": ["application/json"], "Transfer-Encoding": ["chunked"], "Connection": ["keep-alive"], "Vary": ["Accept-Encoding", "Accept, Accept-Language, Cookie"], "allow": ["GET, POST, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"], "Content-Encoding": ["gzip"]}, "status": {"code": 200, "message": "OK"}, "url": "/api/v3/parts.json?name=Bike&category=MODEL&limit=2&scope_id=bd5dceaa-a35e-47b0-9fc5-875410f4a56f&fields=id%2Cname%2Cref%2Cdescription%2Ccreated_at%2Cupdated_at%2Cproperties%2Ccategory%2Cclassification%2Cparent_id%2Cmultiplicity%2Cvalue_options%2Cproperty_type%2Cvalue%2Coutput%2Corder%2Cpart_id%2Cscope_id%2Cmodel_id%2Cproxy_source_id_name%2Cunit"}, "recorded_at": "2024-09-16T08:55:52"}, {"request": {"body": {"encoding": "utf-8", "string": "{\"name\": \"__Test context ref property @ 2024-09-16 10:55:52.508936\", \"part_id\": \"e4a047a6-4a00-41a6-bae4-732ac2f639de\", \"description\": \"Description of test ref property\", \"property_type\": \"CONTEXT_REFERENCES_VALUE\", \"value\": null, \"unit\": \"no unit\", \"value_options\": {}}"}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["270"], "Content-Type": ["application/json"]}, "method": "POST", "uri": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "response": {"body": {"encoding": "utf-8", "string": "{\"results\":[{\"id\":\"eada96c7-5399-40dd-9d2a-afe114ad763c\",\"name\":\"__Test context ref property @ 2024-09-16 10:55:52.508936\",\"ref\":\"test-context-ref-property-2024-09-16-105552508936\",\"description\":\"Description of test ref property\",\"property_type\":\"CONTEXT_REFERENCES_VALUE\",\"category\":\"MODEL\",\"order\":8,\"unit\":\"no unit\",\"value_options\":{},\"value\":[],\"created_at\":\"2024-09-16T08:55:54.721738Z\",\"updated_at\":\"2024-09-16T08:55:54.733418Z\",\"part_id\":\"e4a047a6-4a00-41a6-bae4-732ac2f639de\",\"scope_id\":\"bd5dceaa-a35e-47b0-9fc5-875410f4a56f\",\"model_id\":null,\"output\":true}]}"}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:54 GMT"], "Content-Type": ["application/json"], "Content-Length": ["566"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["POST, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 201, "message": "Created"}, "url": "/api/v3/properties/create_model?fields=id%2Cname%2Cref%2Ccreated_at%2Cupdated_at%2Cmodel_id%2Cpart_id%2Corder%2Cscope_id%2Ccategory%2Cproperty_type%2Cvalue%2Cvalue_options%2Coutput%2Cdescription%2Cunit"}, "recorded_at": "2024-09-16T08:55:52"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["python-requests/2.32.3"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["*/*"], "Connection": ["keep-alive"], "X-Requested-With": ["XMLHttpRequest"], "PyKechain-Version": ["4.13.0"], "Authorization": ["Token "], "Content-Length": ["0"]}, "method": "DELETE", "uri": "/api/v3/properties/eada96c7-5399-40dd-9d2a-afe114ad763c.json"}, "response": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"Server": ["nginx"], "Date": ["Mon, 16 Sep 2024 08:55:55 GMT"], "Content-Type": ["application/json"], "Content-Length": ["14"], "Connection": ["keep-alive"], "vary": ["Accept, Accept-Language, Cookie"], "allow": ["GET, PUT, PATCH, DELETE, HEAD, OPTIONS"], "x-frame-options": ["SAMEORIGIN"], "content-language": ["en", "En"], "strict-transport-security": ["max-age=15768000; includeSubDomains"], "x-content-type-options": ["nosniff"], "referrer-policy": ["same-origin"], "cross-origin-opener-policy": ["same-origin"], "Ke-Chain": ["3"]}, "status": {"code": 204, "message": "No Content"}, "url": "/api/v3/properties/eada96c7-5399-40dd-9d2a-afe114ad763c.json"}, "recorded_at": "2024-09-16T08:55:53"}], "recorded_with": "betamax/0.9.0"} \ No newline at end of file diff --git a/tests/test_properties.py b/tests/test_properties.py index 79e138490..01eec1d8d 100644 --- a/tests/test_properties.py +++ b/tests/test_properties.py @@ -3,11 +3,12 @@ from pykechain.enums import ( Category, ContextGroup, + ContextType, Multiplicity, PropertyType, ) from pykechain.exceptions import APIError, IllegalArgumentError, NotFoundError -from pykechain.models import Property +from pykechain.models import ContextReferencesProperty, Property from pykechain.models.validators import SingleReferenceValidator from tests.classes import TestBetamax @@ -559,3 +560,56 @@ def test_copy_reference_property_with_options(self): # tearDown copied_ref_property.delete() + + +class TestPropertiesContextReferencesPropertyPrefilters(TestBetamax): + def setUp(self): + super().setUp() + + self.wheel_model = self.project.model("Wheel") + self.bike = self.project.model("Bike") + + self.context_references_property = self.bike.add_property( + name=f"__Test context ref property @ {datetime.now()}", + property_type=PropertyType.CONTEXT_REFERENCES_VALUE, + description="Description of test ref property", + unit="no unit", + ) + + def tearDown(self): + self.context_references_property.delete() + super().tearDown() + + def test_set_prefilters_no_params(self): + self.context_references_property.set_prefilters() + self.assertEqual( + self.context_references_property._options.get("prefilters", {}), {} + ) + + def test_set_prefilters_with_prefilters(self): + with self.assertRaises(IllegalArgumentError): + self.context_references_property.set_prefilters( + prefilters={"something": "test"} + ) + + def test_set_prefilters_with_clear(self): + self.context_references_property._options["prefilters"] = { + "context_group": ContextGroup.ASSET + } + self.context_references_property.set_prefilters(clear=True) + self.assertEqual( + self.context_references_property._options.get("prefilters", {}), {} + ) + + def test_set_prefilters_with_valid_context_group(self): + self.context_references_property.set_prefilters( + context_group=ContextGroup.ASSET + ) + filter_option = self.context_references_property._options.get( + "prefilters", {} + ).get("context_group") + self.assertEqual(filter_option, ContextGroup.ASSET) + + def test_set_prefilters_with_invalid_context_group(self): + with self.assertRaises(IllegalArgumentError): + self.context_references_property.set_prefilters(context_group="invalid") From df8d0e5890f22193024b0c04b6181dfa675c5a02 Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Mon, 16 Sep 2024 12:12:55 +0200 Subject: [PATCH 4/8] Remove unnecessary f-string in error message Refactor the exception raise to eliminate the unnecessary f-string formatting since no variables are being interpolated. This cleanup simplifies the code and ensures better readability. --- pykechain/models/property_reference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pykechain/models/property_reference.py b/pykechain/models/property_reference.py index a8f838a18..5d4684fe1 100644 --- a/pykechain/models/property_reference.py +++ b/pykechain/models/property_reference.py @@ -249,7 +249,7 @@ def set_prefilters( prefilters_dict = self._options.get("prefilters", dict()) if prefilters: raise IllegalArgumentError( - f"`prefilters` argument is unused. Use `context_group` instead." + "`prefilters` argument is unused. Use `context_group` instead." ) if clear: prefilters_dict = dict() From 374e537e18fe358da521c59379fbdb2f876e9eec Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Mon, 16 Sep 2024 12:15:48 +0200 Subject: [PATCH 5/8] Remove ContextGroup filtering and fix typos Deleted the ContextGroupFilter class including its methods and references to the ContextGroup enum. Corrected typos in comments for clarity. --- pykechain/models/value_filter.py | 74 +++----------------------------- 1 file changed, 5 insertions(+), 69 deletions(-) diff --git a/pykechain/models/value_filter.py b/pykechain/models/value_filter.py index dd38fd2d8..fe8687bf0 100644 --- a/pykechain/models/value_filter.py +++ b/pykechain/models/value_filter.py @@ -7,7 +7,6 @@ from pykechain.enums import ( Category, - ContextGroup, FilterType, PropertyType, ScopeStatus, @@ -127,10 +126,10 @@ def validate(self, part_model: "Part") -> None: if ( property_type in ( - PropertyType.BOOLEAN_VALUE, - PropertyType.REFERENCES_VALUE, - PropertyType.ACTIVITY_REFERENCES_VALUE, - ) + PropertyType.BOOLEAN_VALUE, + PropertyType.REFERENCES_VALUE, + PropertyType.ACTIVITY_REFERENCES_VALUE, + ) and self.type != FilterType.EXACT ): warnings.warn( @@ -386,7 +385,7 @@ def write_options(cls, filters: List) -> Dict: if filter_value is not None: if is_list: - # creata a string with commaseparted prefilters, the first item directly + # create a string with comma separted prefilters, the first item directly # and consequent items with a , # TODO: refactor to create a list and then join them with a ',' if field not in prefilters: @@ -403,66 +402,3 @@ def write_options(cls, filters: List) -> Dict: prefilters.update(f.extra_filter) return options - - -class ContextgroupFilter(BaseFilter): - """A representation object for a ContextGroup filter. - - There can only be a single context_group prefilter. So no lists involved. - - :ivar value: the value of the context_group filter, containing a - ContextGroup enumeration - """ - - def __init__( - self, - context_group: Union[str, ContextGroup], - ): - """Create ContextgroupFilter instance. - - :var context_group: the value of the context_group filter, containing a - ContextGroup enumeration - """ - check_enum(context_group, ContextGroup, "context_group") - self.value: ContextGroup = context_group - - @classmethod - def parse_options(cls, options: Dict) -> "ContextgroupFilter": - """ - Convert the dict definition of a context_group filter to a list of ContextgroupFilter obj. - - The value_options of the context reference properties looks like: - - ``` - { - "prefilters": { - "context_group": "DISCIPLINE" - }, - } - ``` - - :param options: options dict from a scope reference property or meta dict from a scopes - widget. - :return: list of ScopeFilter objects - :rtype list - """ - filters_dict = options.get(MetaWidget.PREFILTERS, {}) - for field, value in filters_dict.items(): - if field == "context_group": - return cls(context_group=value) - - @classmethod - def write_options(cls, filter: "ContextgroupFilter") -> Dict: - """ - Convert the list of Filter objects to a dict. - - :param filters: List of BaseFilter objects - :returns options dict to be used to update the options dict of a property - """ - prefilters = dict() - options = {MetaWidget.PREFILTERS: prefilters} - - if filter.value in ContextGroup: - prefilters.update({"context_group": str(filter.value)}) - - return options From e26242da8d028652f7122858fbd4ee0f0b270a92 Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Mon, 16 Sep 2024 12:24:34 +0200 Subject: [PATCH 6/8] Fix indentation in property type filtration Adjusted indentation to ensure that property types in the filter are correctly and clearly aligned. This enhances readability and maintains consistency in the code formatting structure. --- pykechain/models/value_filter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pykechain/models/value_filter.py b/pykechain/models/value_filter.py index fe8687bf0..7e254e326 100644 --- a/pykechain/models/value_filter.py +++ b/pykechain/models/value_filter.py @@ -126,10 +126,10 @@ def validate(self, part_model: "Part") -> None: if ( property_type in ( - PropertyType.BOOLEAN_VALUE, - PropertyType.REFERENCES_VALUE, - PropertyType.ACTIVITY_REFERENCES_VALUE, - ) + PropertyType.BOOLEAN_VALUE, + PropertyType.REFERENCES_VALUE, + PropertyType.ACTIVITY_REFERENCES_VALUE, + ) and self.type != FilterType.EXACT ): warnings.warn( From 25d5568e4449be9844d99feca93a4a5a90d593cb Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Mon, 16 Sep 2024 12:29:30 +0200 Subject: [PATCH 7/8] Refactor docstring to improve clarity Simplified the docstring of `parse_options` method for better readability. Changed the description to be more concise and removed unnecessary line breaks. --- pykechain/models/value_filter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pykechain/models/value_filter.py b/pykechain/models/value_filter.py index 7e254e326..bb9c391db 100644 --- a/pykechain/models/value_filter.py +++ b/pykechain/models/value_filter.py @@ -194,8 +194,7 @@ def validate(self, part_model: "Part") -> None: @classmethod def parse_options(cls, options: Dict) -> List["PropertyValueFilter"]: """ - Convert the dict & string-based definition of a property value filter to a list of - PropertyValueFilter objects. + Convert dict and string filters to PropertyValueFilter objects. :param options: options dict from a multi-reference property or meta dict from a filtered grid widget. From 33ac4f6ddabe8e0314628a67fe46557196ea7b3d Mon Sep 17 00:00:00 2001 From: Jochem Berends Date: Mon, 16 Sep 2024 12:59:31 +0200 Subject: [PATCH 8/8] Remove unused import in test_properties.py Removed the import of `ContextType` and `ContextReferencesProperty` from `test_properties.py` as they were unused. This change reduces unnecessary code clutter and improves maintainability of the test suite. --- tests/test_properties.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_properties.py b/tests/test_properties.py index 01eec1d8d..a951c71bf 100644 --- a/tests/test_properties.py +++ b/tests/test_properties.py @@ -3,12 +3,11 @@ from pykechain.enums import ( Category, ContextGroup, - ContextType, Multiplicity, PropertyType, ) from pykechain.exceptions import APIError, IllegalArgumentError, NotFoundError -from pykechain.models import ContextReferencesProperty, Property +from pykechain.models import Property from pykechain.models.validators import SingleReferenceValidator from tests.classes import TestBetamax