Commit 42bc460a authored by Klaus Wölfel's avatar Klaus Wölfel Committed by Klaus Wölfel

composition: Allow to define default models

Models with workflow state "default" are only considered in composition if no
other valid model is defined. This allows to implement "ingest anything"
policy in wendelin.
parent 0152f86b
...@@ -53,29 +53,36 @@ def _getEffectiveModel(self, start_date, stop_date): ...@@ -53,29 +53,36 @@ def _getEffectiveModel(self, start_date, stop_date):
if not reference: if not reference:
return self return self
query_list = [ def get_model_list(excluded_validation_state_list):
Query(reference=reference), query_list = [Query(reference=reference),
Query(portal_type=self.getPortalType()), Query(portal_type=self.getPortalType()),
Query(validation_state=( Query(validation_state=excluded_validation_state_list,
'validated', operator='NOT')]
# XXX published is used in erp5_advanced_commerce if start_date is not None:
'published', query_list.append(ComplexQuery(Query(effective_date=None),
)), Query(effective_date=start_date,
]
if start_date is not None:
query_list.append(ComplexQuery(Query(effective_date=None),
Query(effective_date=start_date,
range='<='), range='<='),
logical_operator='OR')) logical_operator='OR'))
if stop_date is not None: if stop_date is not None:
query_list.append(ComplexQuery(Query(expiration_date=None), query_list.append(ComplexQuery(Query(expiration_date=None),
Query(expiration_date=stop_date, Query(expiration_date=stop_date,
range='>'), range='>'),
logical_operator='OR')) logical_operator='OR'))
model_list = self.getPortalObject().portal_catalog.unrestrictedSearchResults( # XXX What to do the catalog returns nothing (either because 'self' was just
query=ComplexQuery(logical_operator='AND', *query_list), # created and not yet indexed, or because it was invalidated) ?
sort_on=(('version', 'descending'),)) # For the moment, we return self if self is invalidated and we raise otherwise.
# This way, if this happens in activity it may succeed when activity is retried.
return self.getPortalObject().portal_catalog.unrestrictedSearchResults(
query=ComplexQuery(logical_operator='AND', *query_list),
sort_on=(('version', 'descending'),))
# Only include default model if no other valid model found
model_list = get_model_list(
excluded_validation_state_list=('deleted', 'invalidated', 'default'))
if not model_list:
model_list = get_model_list(
excluded_validation_state_list=('deleted', 'invalidated'))
if not model_list: if not model_list:
# The raise below also make the activity retried for cases where the model would # The raise below also make the activity retried for cases where the model would
# not be indexed yet. # not be indexed yet.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment