perxis.extensions.actions
Модуль содержит вспомогательные функции для работы с экшнами
1""" 2 Модуль содержит вспомогательные функции для работы с экшнами 3""" 4 5 6import copy 7 8from google.protobuf.struct_pb2 import Struct 9from perxis.items import items_pb2 10 11 12ACTIONS_COLLECTION_ID = "space_actions" 13 14 15def process_action_id(action_id: str) -> str: 16 """ 17 Функция для преобразования идентификатора действия чтобы в дальнейшем его можно было 18 использовать в Servicer. Примеры преобразований: 19 - some-action -> some_action 20 - some other action -> some_other_action 21 22 Arguments: 23 action_id (str): идентификатор действия 24 25 Returns: 26 str: обработанный идентификатор действия 27 """ 28 action_id = action_id.lower().replace("-", "_").replace(" ", "_") 29 30 return action_id 31 32 33def make_action_dict( 34 extension_id: str, 35 action_id: str, 36 name: str, 37 kind: int, 38 **kwargs, 39) -> dict: 40 """ 41 Функция для создания dict нужной структуры. В дальнейшем он идёт в свойство data item'а 42 43 Arguments: 44 extension_id (str): идентификатор расширения 45 action_id (str): идентификатор действия 46 name (str): название action'а 47 kind (str): область действия action'а согласно [документации](https://docs.perxis.ru/docs/api/extension/#actionkind) 48 kwargs: любые доп. параметры согласно [документации](https://docs.perxis.ru/docs/api/extension/#action) 49 Returns: 50 dict 51 """ 52 action_id = process_action_id(action_id) 53 54 return { 55 "id": action_id, 56 "action": f"grpc:///{extension_id}/{action_id}", 57 "name": name, 58 "kind": kind, 59 **kwargs, 60 } 61 62 63def make_action_struct(data: dict) -> Struct: 64 """ 65 Вспомогательная функция для создания объекта Struct на основании данных из dict 66 67 Arguments: 68 data (dict) 69 Returns: 70 google.protobuf.struct_pb2.Struct 71 """ 72 struct = Struct() 73 struct.update(data) 74 75 return struct 76 77 78def make_action_item(space_id: str, env_id: str, data: dict) -> items_pb2.Item: 79 """ 80 Функция для создания items_pb2.Item с данными action'а 81 82 Arguments: 83 space_id (str): идентификатор пространства в котором будет создан action 84 env_id (str): идентификатор окружения в котором будет создан action 85 data (dict): данные action'а 86 87 Returns: 88 items_pb2.Item 89 """ 90 91 copied_data = copy.deepcopy(data) 92 action_id = copied_data.pop("id") 93 94 struct = make_action_struct(data) 95 96 return items_pb2.Item( 97 id=action_id, 98 space_id=space_id, 99 env_id=env_id, 100 collection_id=ACTIONS_COLLECTION_ID, 101 data=struct 102 )
ACTIONS_COLLECTION_ID =
'space_actions'
def
process_action_id(action_id: str) -> str:
16def process_action_id(action_id: str) -> str: 17 """ 18 Функция для преобразования идентификатора действия чтобы в дальнейшем его можно было 19 использовать в Servicer. Примеры преобразований: 20 - some-action -> some_action 21 - some other action -> some_other_action 22 23 Arguments: 24 action_id (str): идентификатор действия 25 26 Returns: 27 str: обработанный идентификатор действия 28 """ 29 action_id = action_id.lower().replace("-", "_").replace(" ", "_") 30 31 return action_id
Функция для преобразования идентификатора действия чтобы в дальнейшем его можно было использовать в Servicer. Примеры преобразований:
- some-action -> some_action
- some other action -> some_other_action
Arguments:
- action_id (str): идентификатор действия
Returns:
str: обработанный идентификатор действия
def
make_action_dict( extension_id: str, action_id: str, name: str, kind: int, **kwargs) -> dict:
34def make_action_dict( 35 extension_id: str, 36 action_id: str, 37 name: str, 38 kind: int, 39 **kwargs, 40) -> dict: 41 """ 42 Функция для создания dict нужной структуры. В дальнейшем он идёт в свойство data item'а 43 44 Arguments: 45 extension_id (str): идентификатор расширения 46 action_id (str): идентификатор действия 47 name (str): название action'а 48 kind (str): область действия action'а согласно [документации](https://docs.perxis.ru/docs/api/extension/#actionkind) 49 kwargs: любые доп. параметры согласно [документации](https://docs.perxis.ru/docs/api/extension/#action) 50 Returns: 51 dict 52 """ 53 action_id = process_action_id(action_id) 54 55 return { 56 "id": action_id, 57 "action": f"grpc:///{extension_id}/{action_id}", 58 "name": name, 59 "kind": kind, 60 **kwargs, 61 }
Функция для создания dict нужной структуры. В дальнейшем он идёт в свойство data item'а
Arguments:
- extension_id (str): идентификатор расширения
- action_id (str): идентификатор действия
- name (str): название action'а
- kind (str): область действия action'а согласно документации
- kwargs: любые доп. параметры согласно документации
Returns:
dict
def
make_action_struct(data: dict) -> google.protobuf.struct_pb2.Struct:
64def make_action_struct(data: dict) -> Struct: 65 """ 66 Вспомогательная функция для создания объекта Struct на основании данных из dict 67 68 Arguments: 69 data (dict) 70 Returns: 71 google.protobuf.struct_pb2.Struct 72 """ 73 struct = Struct() 74 struct.update(data) 75 76 return struct
Вспомогательная функция для создания объекта Struct на основании данных из dict
Arguments:
- data (dict)
Returns:
google.protobuf.struct_pb2.Struct
def
make_action_item(space_id: str, env_id: str, data: dict) -> items.items_pb2.Item:
79def make_action_item(space_id: str, env_id: str, data: dict) -> items_pb2.Item: 80 """ 81 Функция для создания items_pb2.Item с данными action'а 82 83 Arguments: 84 space_id (str): идентификатор пространства в котором будет создан action 85 env_id (str): идентификатор окружения в котором будет создан action 86 data (dict): данные action'а 87 88 Returns: 89 items_pb2.Item 90 """ 91 92 copied_data = copy.deepcopy(data) 93 action_id = copied_data.pop("id") 94 95 struct = make_action_struct(data) 96 97 return items_pb2.Item( 98 id=action_id, 99 space_id=space_id, 100 env_id=env_id, 101 collection_id=ACTIONS_COLLECTION_ID, 102 data=struct 103 )
Функция для создания items_pb2.Item с данными action'а
Arguments:
- space_id (str): идентификатор пространства в котором будет создан action
- env_id (str): идентификатор окружения в котором будет создан action
- data (dict): данные action'а
Returns:
items_pb2.Item