"""This file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license. """ import logging # noqa: I001 from typing import Optional from pydantic import BaseModel, ConfigDict import rules logger = logging.getLogger(__name__) class AllPermissions(BaseModel): model_config = ConfigDict(protected_namespaces=('__.*__', '_.*')) organizations_create: str = 'organizations.create' organizations_view: str = 'organizations.view' organizations_change: str = 'organizations.change' organizations_delete: str = 'organizations.delete' organizations_invite: str = 'organizations.invite' projects_create: str = 'projects.create' projects_view: str = 'projects.view' projects_change: str = 'projects.change' projects_delete: str = 'projects.delete' projects_reset_cache: str = 'projects.reset_cache' tasks_create: str = 'tasks.create' tasks_view: str = 'tasks.view' tasks_change: str = 'tasks.change' tasks_delete: str = 'tasks.delete' views_reset: str = 'views.reset' annotations_create: str = 'annotations.create' annotations_view: str = 'annotations.view' annotations_change: str = 'annotations.change' annotations_delete: str = 'annotations.delete' actions_perform: str = 'actions.perform' predictions_any: str = 'predictions.any' avatar_any: str = 'avatar.any' labels_create: str = 'labels.create' labels_view: str = 'labels.view' labels_change: str = 'labels.change' labels_delete: str = 'labels.delete' models_create: str = 'models.create' models_view: str = 'models.view' models_change: str = 'models.change' models_delete: str = 'models.delete' model_provider_connection_create: str = 'model_provider_connection.create' model_provider_connection_view: str = 'model_provider_connection.view' model_provider_connection_change: str = 'model_provider_connection.change' model_provider_connection_delete: str = 'model_provider_connection.delete' webhooks_view: str = 'webhooks.view' webhooks_change: str = 'webhooks.change' users_token_any: str = 'users.token.any' storages_view: str = 'storages.view' storages_change: str = 'storages.change' storages_sync: str = 'storages.sync' views_view: str = 'views.view' views_create: str = 'views.create' views_change: str = 'views.change' views_delete: str = 'views.delete' all_permissions = AllPermissions() class ViewClassPermission(BaseModel): GET: Optional[str] = None PATCH: Optional[str] = None PUT: Optional[str] = None DELETE: Optional[str] = None POST: Optional[str] = None def make_perm(name, pred, overwrite=False): if rules.perm_exists(name): if overwrite: rules.remove_perm(name) else: return rules.add_perm(name, pred) for _, permission_name in all_permissions: make_perm(permission_name, rules.is_authenticated)