Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def get_final_approvements(content_type, field):
final_states = StateService.get_final_states(content_type, field)
return Approvement.objects.filter(meta__transition__destination_state__in=final_states, meta__transition__direction=FORWARD)
if not approvement_pks:
approvement_pks = []
index += 1
current_states = list(current_states.values_list('pk', flat=True)) if current_states else [getattr(workflow_object, field)]
next_approvements = Approvement.objects.filter(workflow_object=workflow_object, field=field, meta__transition__source_state__in=current_states)
if next_approvements.exists() and not next_approvements.filter(pk__in=approvement_pks).exists() and (not limit or index < limit):
approvements = ApprovementService.get_next_approvements(
workflow_object,
field,
approvement_pks=approvement_pks + list(next_approvements.values_list('pk', flat=True)),
current_states=State.objects.filter(pk__in=next_approvements.values_list('meta__transition__destination_state', flat=True)),
index=index,
limit=limit
)
else:
approvements = Approvement.objects.filter(pk__in=approvement_pks)
return approvements
def get_next_approvements(workflow_object, field, approvement_pks=None, current_states=None, index=0, limit=None):
if not approvement_pks:
approvement_pks = []
index += 1
current_states = list(current_states.values_list('pk', flat=True)) if current_states else [getattr(workflow_object, field)]
next_approvements = Approvement.objects.filter(workflow_object=workflow_object, field=field, meta__transition__source_state__in=current_states)
if next_approvements.exists() and not next_approvements.filter(pk__in=approvement_pks).exists() and (not limit or index < limit):
approvements = ApprovementService.get_next_approvements(
workflow_object,
field,
approvement_pks=approvement_pks + list(next_approvements.values_list('pk', flat=True)),
current_states=State.objects.filter(pk__in=next_approvements.values_list('meta__transition__destination_state', flat=True)),
index=index,
limit=limit
)
else:
approvements = Approvement.objects.filter(pk__in=approvement_pks)
return approvements
if destination_state:
approvements = approvements.filter(meta__transition__destination_state=destination_state)
return approvements
def authorize_approvements(approvements):
return approvements.filter(
(
(Q(transactioner__isnull=True) | Q(transactioner=user)) &
(Q(permissions__isnull=True) | Q(permissions__in=user.user_permissions.all())) &
(Q(groups__isnull=True) | Q(groups__in=user.groups.all()))
)
)
approvements = Approvement.objects.filter(
workflow_object=workflow_object,
field=field,
meta__transition__source_state__in=source_states,
status=PENDING,
enabled=True
)
suitable_approvements = get_approvement(approvements.filter(skip=False))
if user and not god_mod:
suitable_approvements = authorize_approvements(suitable_approvements)
skipped_approvements = get_approvement(approvements.filter(skip=True))
if skipped_approvements:
source_state_pks = list(skipped_approvements.values_list('meta__transition__destination_state', flat=True))
suitable_approvements = suitable_approvements | ApprovementService.get_approvements_object_waiting_for_approval(workflow_object, field, State.objects.filter(pk__in=source_state_pks),
def has_user_any_action(content_type, field, user):
"""
:param content_type_id:
:param field_id:
:param user_id:
:return: Boolean value indicates whether the user has any role for the content type and field are sent. Any elements existence
accepted, rejected or pending for the user, means the user in active for the content type and field.
"""
approvements = Approvement.objects.filter(Q(transactioner=user) | Q(permissions__in=user.user_permissions.all()) | Q(groups__in=user.groups.all())).filter(content_type=content_type,
field=field)
return approvements.count() != 0
def get_initial_approvements(content_type, field):
initial_state = StateService.get_initial_state(content_type, field)
return Approvement.objects.filter(meta__transition__source_state=initial_state, meta__transition__direction=FORWARD)