perxis.extensions.item_models

Модуль содержит классы для работы с item'ами в расширениях

  1"""
  2Модуль содержит классы для работы с item'ами в расширениях
  3"""
  4
  5
  6import abc
  7from typing import TypedDict, NotRequired
  8
  9from google.protobuf.struct_pb2 import Struct
 10
 11from perxis.extensions.item_rules import AbstractRule, IfCollectionExists, IfExtensionInstalled
 12
 13
 14class DataSourceData(TypedDict):
 15    """
 16        Маппинг для объекта data элементов коллекции web_datasources
 17    """
 18    query: NotRequired[str]
 19    content_type: NotRequired[str]
 20    exclude: NotRequired[bool]
 21    with_update: NotRequired[bool]
 22    with_delete: NotRequired[bool]
 23
 24
 25class SyncPolicyData(TypedDict):
 26    """
 27        Маппинг для объекта data элементов коллекции hoop_item_sync_policies
 28    """
 29
 30    key: NotRequired[str]
 31    export_view: NotRequired[bool]
 32    remove_collection: NotRequired[bool]
 33    deny_publish: NotRequired[bool]
 34    deny_delete: NotRequired[bool]
 35    deny_create: NotRequired[bool]
 36    deny_read: NotRequired[bool]
 37    hidden: NotRequired[bool]
 38    with_update: NotRequired[bool]
 39    with_delete: NotRequired[bool]
 40
 41
 42class AbstractItem(metaclass=abc.ABCMeta):
 43    """
 44        Абстрактный класс для item'а. Нужен для определения общих свойств без реализации какого
 45        то конкретного конструктора.
 46
 47        Attributes:
 48            collection_id (str): идентификатор коллекции
 49            data (dict): данные item'а
 50            rules (list[AbstractRule]): список правил применения item'а
 51            identifier_field (str): поле по которому будет производиться поиск элемента в perxis
 52            with_update (bool): указание возможности обновления элемента при установке или удалении расширения
 53             в случае если он уже существует в perxis
 54            with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
 55             удалении расширения
 56    """
 57
 58    collection_id: str
 59    data: dict
 60
 61    rules: list[AbstractRule]
 62    identifier_field: str = "id"
 63    with_update: bool
 64    with_delete: bool
 65
 66    @property
 67    def identifier(self):
 68        """
 69            Метод для получения значения идентификатора элемента из данных
 70
 71            Returns:
 72                  str
 73        """
 74        return self.data[self.identifier_field]
 75
 76    @property
 77    def struct(self) -> Struct:
 78        """
 79            Метод для преобразования данных элемента из dict в Struct
 80
 81            Returns:
 82                  Struct
 83        """
 84
 85        s = Struct()
 86        s.update(self.data)
 87
 88        return s
 89
 90    async def all_rules_is_satisfied(self, space_id: str, env_id: str) -> bool:
 91        """
 92            Метод для проверки применимости всех правил item'а для указанных пространства и окружения.
 93            Возвращает True в случае если все указанные для item'а правила вернули True
 94
 95            Arguments:
 96                  space_id (str): идентификатор пространства
 97                  env_id (str): идентификатор окружения
 98            Returns:
 99                  bool
100        """
101
102        return all(
103            [
104                await rule(item=self, space_id=space_id, env_id=env_id)
105                for rule
106                in self.rules
107            ]
108        )
109
110    def merge_data(self, data_from_perxis: dict) -> Struct:
111        """
112            Метод для слияния данных из perxis и расширения. Нужен для того чтобы не затирать те поля
113            что были заполнены в базе данных но отсутствуют в item'е расширения. В приоритете данные расширения, если что-то
114            из них было вручную изменено в perxis - значение будет затёрто
115
116            Пример.
117            ```
118                # Данные в perxis
119                {
120                    "a": 1,
121                    "b": 2,
122                    "c": 3,
123                }
124
125                # Данные в расширении
126                {
127                    "b": 1,
128                    "c": 3,
129                }
130
131                # Итоговый результат
132                {
133                    "a": 1,
134                    "b": 1,
135                    "c": 3,
136                }
137            ```
138        """
139
140        s = Struct()
141        s.update({
142            **data_from_perxis,
143            **self.data,
144        })
145
146        return s
147
148
149class Item(AbstractItem):
150    """
151        Общий класс для любого Item
152    """
153
154    def __init__(
155        self,
156        collection_id: str,
157        data: dict,
158        with_update: bool = True,
159        with_delete: bool = True,
160        identifier_field: str = "id",
161        rules: list[AbstractRule] | None = None
162    ):
163        """
164            Arguments:
165                collection_id (str): идентификатор коллекции
166                data (dict): данные item'а
167                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
168                 в случае если он уже существует в perxis
169                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
170                 удалении расширения
171                rules (list[AbstractRule]): список правил применения item'а
172                identifier_field (str): поле по которому будет производиться поиск элемента в perxis
173        """
174
175        self.collection_id = collection_id
176        self.data = data
177        self.identifier_field = identifier_field
178        self.rules = rules or []
179        self.with_update = with_update
180        self.with_delete = with_delete
181
182
183class DataSourceItem(AbstractItem):
184    """
185        Класс для системной коллекции web_datasources. По умолчанию имеет указание проверки
186        наличия коллекции в rules
187    """
188
189    def __init__(
190        self,
191        collection_id: str,
192        rules: list[AbstractRule] | None = None,
193        query: str = "",
194        content_type: str = "",
195        exclude: bool = False,
196        with_update: bool = True,
197        with_delete: bool = True,
198    ):
199        """
200            Arguments:
201                collection_id (str): Идентификатор коллекции для выгрузки данных
202                query (str): Фильтр по данным
203                content_type (str): Настройки типа данных
204                exclude (bool): Не выгружать источник в каталог данных
205                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
206                 в случае если он уже существует в perxis
207                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
208                 удалении расширения
209                rules (list[AbstractRule]): список правил применения item'а
210        """
211
212        self.collection_id = "web_datasources"
213        self.rules = rules or [IfCollectionExists()]
214        self.data = {
215            "id": collection_id,
216            "collection": collection_id,
217            "query": query,
218            "content_type": content_type,
219            "exclude": exclude,
220        }
221
222        self.with_update = with_update
223        self.with_delete = with_delete
224
225
226class SyncPolicyItem(AbstractItem):
227    """
228        Класс для коллекции hoop_item_sync_policies расширения perxishoop. По умолчанию item имеет
229        правило для проверки установленного расширения perxishoop. В качестве идентификатора записи
230        используется поле `collection`
231    """
232    identifier_field = "collection"
233
234    def __init__(
235        self,
236        collection_id: str,
237        name: str = "",
238        key: str = "id",
239        export_view: bool = False,
240        remove_collection: bool = False,
241        deny_publish: bool = False,
242        deny_delete: bool = False,
243        deny_create: bool = False,
244        deny_read: bool = False,
245        hidden: bool = False,
246        rules: list[AbstractRule] | None = None,
247        with_update: bool = False,
248        with_delete: bool = False,
249    ):
250        """
251            Arguments:
252                collection_id (str): Идентификатор коллекции для выгрузки данных
253                name (str): Название
254                key (str): Ключ для синхронизации
255                export_view (bool): Создать отображение коллекции
256                remove_collection (bool): Удалить коллекцию
257                deny_publish (bool): Запретить операции с публикацией элементов ведущего пространства
258                deny_delete (bool): Запретить удаление элементов ведущего пространства
259                deny_create (bool): Запретить создавать новые элементы
260                deny_read (bool): Запретить чтение элементов
261                hidden (bool): Скрыть коллекцию
262
263                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
264                 в случае если он уже существует в perxis
265                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
266                 удалении расширения
267                rules (list[AbstractRule]): список правил применения item'а
268        """
269
270        self.collection_id = "hoop_item_sync_policies"
271        self.rules = rules or [IfExtensionInstalled("perxishoop")]
272
273        self.data = {
274            "name": name or f"Коллекция {collection_id}",
275            "collection": collection_id,
276            "key": key,
277            "export_view": export_view,
278            "remove_collection": remove_collection,
279            "deny_publish": deny_publish,
280            "deny_delete": deny_delete,
281            "deny_create": deny_create,
282            "deny_read": deny_read,
283            "hidden": hidden,
284        }
285
286        self.with_update = with_update
287        self.with_delete = with_delete
class DataSourceData(typing.TypedDict):
15class DataSourceData(TypedDict):
16    """
17        Маппинг для объекта data элементов коллекции web_datasources
18    """
19    query: NotRequired[str]
20    content_type: NotRequired[str]
21    exclude: NotRequired[bool]
22    with_update: NotRequired[bool]
23    with_delete: NotRequired[bool]

Маппинг для объекта data элементов коллекции web_datasources

query: NotRequired[str]
content_type: NotRequired[str]
exclude: NotRequired[bool]
with_update: NotRequired[bool]
with_delete: NotRequired[bool]
class SyncPolicyData(typing.TypedDict):
26class SyncPolicyData(TypedDict):
27    """
28        Маппинг для объекта data элементов коллекции hoop_item_sync_policies
29    """
30
31    key: NotRequired[str]
32    export_view: NotRequired[bool]
33    remove_collection: NotRequired[bool]
34    deny_publish: NotRequired[bool]
35    deny_delete: NotRequired[bool]
36    deny_create: NotRequired[bool]
37    deny_read: NotRequired[bool]
38    hidden: NotRequired[bool]
39    with_update: NotRequired[bool]
40    with_delete: NotRequired[bool]

Маппинг для объекта data элементов коллекции hoop_item_sync_policies

key: NotRequired[str]
export_view: NotRequired[bool]
remove_collection: NotRequired[bool]
deny_publish: NotRequired[bool]
deny_delete: NotRequired[bool]
deny_create: NotRequired[bool]
deny_read: NotRequired[bool]
hidden: NotRequired[bool]
with_update: NotRequired[bool]
with_delete: NotRequired[bool]
class AbstractItem:
 43class AbstractItem(metaclass=abc.ABCMeta):
 44    """
 45        Абстрактный класс для item'а. Нужен для определения общих свойств без реализации какого
 46        то конкретного конструктора.
 47
 48        Attributes:
 49            collection_id (str): идентификатор коллекции
 50            data (dict): данные item'а
 51            rules (list[AbstractRule]): список правил применения item'а
 52            identifier_field (str): поле по которому будет производиться поиск элемента в perxis
 53            with_update (bool): указание возможности обновления элемента при установке или удалении расширения
 54             в случае если он уже существует в perxis
 55            with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
 56             удалении расширения
 57    """
 58
 59    collection_id: str
 60    data: dict
 61
 62    rules: list[AbstractRule]
 63    identifier_field: str = "id"
 64    with_update: bool
 65    with_delete: bool
 66
 67    @property
 68    def identifier(self):
 69        """
 70            Метод для получения значения идентификатора элемента из данных
 71
 72            Returns:
 73                  str
 74        """
 75        return self.data[self.identifier_field]
 76
 77    @property
 78    def struct(self) -> Struct:
 79        """
 80            Метод для преобразования данных элемента из dict в Struct
 81
 82            Returns:
 83                  Struct
 84        """
 85
 86        s = Struct()
 87        s.update(self.data)
 88
 89        return s
 90
 91    async def all_rules_is_satisfied(self, space_id: str, env_id: str) -> bool:
 92        """
 93            Метод для проверки применимости всех правил item'а для указанных пространства и окружения.
 94            Возвращает True в случае если все указанные для item'а правила вернули True
 95
 96            Arguments:
 97                  space_id (str): идентификатор пространства
 98                  env_id (str): идентификатор окружения
 99            Returns:
100                  bool
101        """
102
103        return all(
104            [
105                await rule(item=self, space_id=space_id, env_id=env_id)
106                for rule
107                in self.rules
108            ]
109        )
110
111    def merge_data(self, data_from_perxis: dict) -> Struct:
112        """
113            Метод для слияния данных из perxis и расширения. Нужен для того чтобы не затирать те поля
114            что были заполнены в базе данных но отсутствуют в item'е расширения. В приоритете данные расширения, если что-то
115            из них было вручную изменено в perxis - значение будет затёрто
116
117            Пример.
118            ```
119                # Данные в perxis
120                {
121                    "a": 1,
122                    "b": 2,
123                    "c": 3,
124                }
125
126                # Данные в расширении
127                {
128                    "b": 1,
129                    "c": 3,
130                }
131
132                # Итоговый результат
133                {
134                    "a": 1,
135                    "b": 1,
136                    "c": 3,
137                }
138            ```
139        """
140
141        s = Struct()
142        s.update({
143            **data_from_perxis,
144            **self.data,
145        })
146
147        return s

Абстрактный класс для item'а. Нужен для определения общих свойств без реализации какого то конкретного конструктора.

Attributes:
  • collection_id (str): идентификатор коллекции
  • data (dict): данные item'а
  • rules (list[AbstractRule]): список правил применения item'а
  • identifier_field (str): поле по которому будет производиться поиск элемента в perxis
  • with_update (bool): указание возможности обновления элемента при установке или удалении расширения в случае если он уже существует в perxis
  • with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при удалении расширения
collection_id: str
data: dict
identifier_field: str = 'id'
with_update: bool
with_delete: bool
identifier
67    @property
68    def identifier(self):
69        """
70            Метод для получения значения идентификатора элемента из данных
71
72            Returns:
73                  str
74        """
75        return self.data[self.identifier_field]

Метод для получения значения идентификатора элемента из данных

Returns:

str

struct: google.protobuf.struct_pb2.Struct
77    @property
78    def struct(self) -> Struct:
79        """
80            Метод для преобразования данных элемента из dict в Struct
81
82            Returns:
83                  Struct
84        """
85
86        s = Struct()
87        s.update(self.data)
88
89        return s

Метод для преобразования данных элемента из dict в Struct

Returns:

Struct

async def all_rules_is_satisfied(self, space_id: str, env_id: str) -> bool:
 91    async def all_rules_is_satisfied(self, space_id: str, env_id: str) -> bool:
 92        """
 93            Метод для проверки применимости всех правил item'а для указанных пространства и окружения.
 94            Возвращает True в случае если все указанные для item'а правила вернули True
 95
 96            Arguments:
 97                  space_id (str): идентификатор пространства
 98                  env_id (str): идентификатор окружения
 99            Returns:
100                  bool
101        """
102
103        return all(
104            [
105                await rule(item=self, space_id=space_id, env_id=env_id)
106                for rule
107                in self.rules
108            ]
109        )

Метод для проверки применимости всех правил item'а для указанных пространства и окружения. Возвращает True в случае если все указанные для item'а правила вернули True

Arguments:
  • space_id (str): идентификатор пространства
  • env_id (str): идентификатор окружения
Returns:

bool

def merge_data(self, data_from_perxis: dict) -> google.protobuf.struct_pb2.Struct:
111    def merge_data(self, data_from_perxis: dict) -> Struct:
112        """
113            Метод для слияния данных из perxis и расширения. Нужен для того чтобы не затирать те поля
114            что были заполнены в базе данных но отсутствуют в item'е расширения. В приоритете данные расширения, если что-то
115            из них было вручную изменено в perxis - значение будет затёрто
116
117            Пример.
118            ```
119                # Данные в perxis
120                {
121                    "a": 1,
122                    "b": 2,
123                    "c": 3,
124                }
125
126                # Данные в расширении
127                {
128                    "b": 1,
129                    "c": 3,
130                }
131
132                # Итоговый результат
133                {
134                    "a": 1,
135                    "b": 1,
136                    "c": 3,
137                }
138            ```
139        """
140
141        s = Struct()
142        s.update({
143            **data_from_perxis,
144            **self.data,
145        })
146
147        return s

Метод для слияния данных из perxis и расширения. Нужен для того чтобы не затирать те поля что были заполнены в базе данных но отсутствуют в item'е расширения. В приоритете данные расширения, если что-то из них было вручную изменено в perxis - значение будет затёрто

Пример.

    # Данные в perxis
    {
        "a": 1,
        "b": 2,
        "c": 3,
    }

    # Данные в расширении
    {
        "b": 1,
        "c": 3,
    }

    # Итоговый результат
    {
        "a": 1,
        "b": 1,
        "c": 3,
    }
class Item(AbstractItem):
150class Item(AbstractItem):
151    """
152        Общий класс для любого Item
153    """
154
155    def __init__(
156        self,
157        collection_id: str,
158        data: dict,
159        with_update: bool = True,
160        with_delete: bool = True,
161        identifier_field: str = "id",
162        rules: list[AbstractRule] | None = None
163    ):
164        """
165            Arguments:
166                collection_id (str): идентификатор коллекции
167                data (dict): данные item'а
168                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
169                 в случае если он уже существует в perxis
170                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
171                 удалении расширения
172                rules (list[AbstractRule]): список правил применения item'а
173                identifier_field (str): поле по которому будет производиться поиск элемента в perxis
174        """
175
176        self.collection_id = collection_id
177        self.data = data
178        self.identifier_field = identifier_field
179        self.rules = rules or []
180        self.with_update = with_update
181        self.with_delete = with_delete

Общий класс для любого Item

Item( collection_id: str, data: dict, with_update: bool = True, with_delete: bool = True, identifier_field: str = 'id', rules: list[perxis.extensions.item_rules.AbstractRule] | None = None)
155    def __init__(
156        self,
157        collection_id: str,
158        data: dict,
159        with_update: bool = True,
160        with_delete: bool = True,
161        identifier_field: str = "id",
162        rules: list[AbstractRule] | None = None
163    ):
164        """
165            Arguments:
166                collection_id (str): идентификатор коллекции
167                data (dict): данные item'а
168                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
169                 в случае если он уже существует в perxis
170                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
171                 удалении расширения
172                rules (list[AbstractRule]): список правил применения item'а
173                identifier_field (str): поле по которому будет производиться поиск элемента в perxis
174        """
175
176        self.collection_id = collection_id
177        self.data = data
178        self.identifier_field = identifier_field
179        self.rules = rules or []
180        self.with_update = with_update
181        self.with_delete = with_delete
Arguments:
  • collection_id (str): идентификатор коллекции
  • data (dict): данные item'а
  • with_update (bool): указание возможности обновления элемента при установке или удалении расширения в случае если он уже существует в perxis
  • with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при удалении расширения
  • rules (list[AbstractRule]): список правил применения item'а
  • identifier_field (str): поле по которому будет производиться поиск элемента в perxis
collection_id
data
identifier_field = 'id'
rules
with_update
with_delete
class DataSourceItem(AbstractItem):
184class DataSourceItem(AbstractItem):
185    """
186        Класс для системной коллекции web_datasources. По умолчанию имеет указание проверки
187        наличия коллекции в rules
188    """
189
190    def __init__(
191        self,
192        collection_id: str,
193        rules: list[AbstractRule] | None = None,
194        query: str = "",
195        content_type: str = "",
196        exclude: bool = False,
197        with_update: bool = True,
198        with_delete: bool = True,
199    ):
200        """
201            Arguments:
202                collection_id (str): Идентификатор коллекции для выгрузки данных
203                query (str): Фильтр по данным
204                content_type (str): Настройки типа данных
205                exclude (bool): Не выгружать источник в каталог данных
206                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
207                 в случае если он уже существует в perxis
208                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
209                 удалении расширения
210                rules (list[AbstractRule]): список правил применения item'а
211        """
212
213        self.collection_id = "web_datasources"
214        self.rules = rules or [IfCollectionExists()]
215        self.data = {
216            "id": collection_id,
217            "collection": collection_id,
218            "query": query,
219            "content_type": content_type,
220            "exclude": exclude,
221        }
222
223        self.with_update = with_update
224        self.with_delete = with_delete

Класс для системной коллекции web_datasources. По умолчанию имеет указание проверки наличия коллекции в rules

DataSourceItem( collection_id: str, rules: list[perxis.extensions.item_rules.AbstractRule] | None = None, query: str = '', content_type: str = '', exclude: bool = False, with_update: bool = True, with_delete: bool = True)
190    def __init__(
191        self,
192        collection_id: str,
193        rules: list[AbstractRule] | None = None,
194        query: str = "",
195        content_type: str = "",
196        exclude: bool = False,
197        with_update: bool = True,
198        with_delete: bool = True,
199    ):
200        """
201            Arguments:
202                collection_id (str): Идентификатор коллекции для выгрузки данных
203                query (str): Фильтр по данным
204                content_type (str): Настройки типа данных
205                exclude (bool): Не выгружать источник в каталог данных
206                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
207                 в случае если он уже существует в perxis
208                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
209                 удалении расширения
210                rules (list[AbstractRule]): список правил применения item'а
211        """
212
213        self.collection_id = "web_datasources"
214        self.rules = rules or [IfCollectionExists()]
215        self.data = {
216            "id": collection_id,
217            "collection": collection_id,
218            "query": query,
219            "content_type": content_type,
220            "exclude": exclude,
221        }
222
223        self.with_update = with_update
224        self.with_delete = with_delete
Arguments:
  • collection_id (str): Идентификатор коллекции для выгрузки данных
  • query (str): Фильтр по данным
  • content_type (str): Настройки типа данных
  • exclude (bool): Не выгружать источник в каталог данных
  • with_update (bool): указание возможности обновления элемента при установке или удалении расширения в случае если он уже существует в perxis
  • with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при удалении расширения
  • rules (list[AbstractRule]): список правил применения item'а
collection_id
rules
data
with_update
with_delete
class SyncPolicyItem(AbstractItem):
227class SyncPolicyItem(AbstractItem):
228    """
229        Класс для коллекции hoop_item_sync_policies расширения perxishoop. По умолчанию item имеет
230        правило для проверки установленного расширения perxishoop. В качестве идентификатора записи
231        используется поле `collection`
232    """
233    identifier_field = "collection"
234
235    def __init__(
236        self,
237        collection_id: str,
238        name: str = "",
239        key: str = "id",
240        export_view: bool = False,
241        remove_collection: bool = False,
242        deny_publish: bool = False,
243        deny_delete: bool = False,
244        deny_create: bool = False,
245        deny_read: bool = False,
246        hidden: bool = False,
247        rules: list[AbstractRule] | None = None,
248        with_update: bool = False,
249        with_delete: bool = False,
250    ):
251        """
252            Arguments:
253                collection_id (str): Идентификатор коллекции для выгрузки данных
254                name (str): Название
255                key (str): Ключ для синхронизации
256                export_view (bool): Создать отображение коллекции
257                remove_collection (bool): Удалить коллекцию
258                deny_publish (bool): Запретить операции с публикацией элементов ведущего пространства
259                deny_delete (bool): Запретить удаление элементов ведущего пространства
260                deny_create (bool): Запретить создавать новые элементы
261                deny_read (bool): Запретить чтение элементов
262                hidden (bool): Скрыть коллекцию
263
264                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
265                 в случае если он уже существует в perxis
266                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
267                 удалении расширения
268                rules (list[AbstractRule]): список правил применения item'а
269        """
270
271        self.collection_id = "hoop_item_sync_policies"
272        self.rules = rules or [IfExtensionInstalled("perxishoop")]
273
274        self.data = {
275            "name": name or f"Коллекция {collection_id}",
276            "collection": collection_id,
277            "key": key,
278            "export_view": export_view,
279            "remove_collection": remove_collection,
280            "deny_publish": deny_publish,
281            "deny_delete": deny_delete,
282            "deny_create": deny_create,
283            "deny_read": deny_read,
284            "hidden": hidden,
285        }
286
287        self.with_update = with_update
288        self.with_delete = with_delete

Класс для коллекции hoop_item_sync_policies расширения perxishoop. По умолчанию item имеет правило для проверки установленного расширения perxishoop. В качестве идентификатора записи используется поле collection

SyncPolicyItem( collection_id: str, name: str = '', key: str = 'id', export_view: bool = False, remove_collection: bool = False, deny_publish: bool = False, deny_delete: bool = False, deny_create: bool = False, deny_read: bool = False, hidden: bool = False, rules: list[perxis.extensions.item_rules.AbstractRule] | None = None, with_update: bool = False, with_delete: bool = False)
235    def __init__(
236        self,
237        collection_id: str,
238        name: str = "",
239        key: str = "id",
240        export_view: bool = False,
241        remove_collection: bool = False,
242        deny_publish: bool = False,
243        deny_delete: bool = False,
244        deny_create: bool = False,
245        deny_read: bool = False,
246        hidden: bool = False,
247        rules: list[AbstractRule] | None = None,
248        with_update: bool = False,
249        with_delete: bool = False,
250    ):
251        """
252            Arguments:
253                collection_id (str): Идентификатор коллекции для выгрузки данных
254                name (str): Название
255                key (str): Ключ для синхронизации
256                export_view (bool): Создать отображение коллекции
257                remove_collection (bool): Удалить коллекцию
258                deny_publish (bool): Запретить операции с публикацией элементов ведущего пространства
259                deny_delete (bool): Запретить удаление элементов ведущего пространства
260                deny_create (bool): Запретить создавать новые элементы
261                deny_read (bool): Запретить чтение элементов
262                hidden (bool): Скрыть коллекцию
263
264                with_update (bool): указание возможности обновления элемента при установке или удалении расширения
265                 в случае если он уже существует в perxis
266                with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при
267                 удалении расширения
268                rules (list[AbstractRule]): список правил применения item'а
269        """
270
271        self.collection_id = "hoop_item_sync_policies"
272        self.rules = rules or [IfExtensionInstalled("perxishoop")]
273
274        self.data = {
275            "name": name or f"Коллекция {collection_id}",
276            "collection": collection_id,
277            "key": key,
278            "export_view": export_view,
279            "remove_collection": remove_collection,
280            "deny_publish": deny_publish,
281            "deny_delete": deny_delete,
282            "deny_create": deny_create,
283            "deny_read": deny_read,
284            "hidden": hidden,
285        }
286
287        self.with_update = with_update
288        self.with_delete = with_delete
Arguments:
  • collection_id (str): Идентификатор коллекции для выгрузки данных
  • name (str): Название
  • key (str): Ключ для синхронизации
  • export_view (bool): Создать отображение коллекции
  • remove_collection (bool): Удалить коллекцию
  • deny_publish (bool): Запретить операции с публикацией элементов ведущего пространства
  • deny_delete (bool): Запретить удаление элементов ведущего пространства
  • deny_create (bool): Запретить создавать новые элементы
  • deny_read (bool): Запретить чтение элементов
  • hidden (bool): Скрыть коллекцию
  • with_update (bool): указание возможности обновления элемента при установке или удалении расширения в случае если он уже существует в perxis
  • with_delete (bool): указание возможности удаления элемента в случае если он существует в perxis при удалении расширения
  • rules (list[AbstractRule]): список правил применения item'а
identifier_field = 'collection'
collection_id
rules
data
with_update
with_delete