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