Skip to main content

ORM for 1C REST OData

Project description

from OData1C.odata import ODataOData1C - ORM для обмена данными с системами учета компании "1С"

OData1C работает через HTTP REST сервис 1С. REST 1С использует протокол OData версии 3. REST интерфейс использует возможности протокола OData лишь частично. В свою очередь в OData1C реализована поддержка только основных возможностей REST OData 1C. OData1C использует Pydantic для сериализации, десериализации и валидации.

Установка

pip install odata-1c

Зависимости

Python >= 3.11 Pydantic >= 2.9 Requests >= 2.32

Использование

from src.http import Connection, auth
from src.models import OdataModel
from src.odata import OData
from pydantic import Field, UUID1


class MeasureUnitModel(OdataModel):
    uid: UUID1 = Field(alias='Ref_Key', exclude=True)
    name: str = Field(alias='Description', max_length=6)


class NomenclatureModel(OdataModel):
    uid: UUID1 = Field(alias='Ref_Key', exclude=True)
    code: str = Field(alias='Code', max_length=12)
    name: str = Field(alias='Description', max_length=200)
    measure_unit: MeasureUnitModel = Field(alias='ЕдиницаИзмерения')

    nested_models = {
        'measure_unit': MeasureUnitModel
    }


class NomenclatureOdata(OData):
    database = 'erp_dev'
    entity_model = NomenclatureModel
    entity_name = 'Catalog_Номенклатура'


with Connection('my1c.domain.ru',
                'http',
                auth.HTTPBasicAuth('user', 'pass')) as conn:
    nomenclatures: list[OdataModel] = (NomenclatureOdata
                                       .manager(conn)
                                       .expand('measure_unit')
                                       .filter(code__in=['00-123', '00-456'])
                                       .all())

class http.Connection

Класс http.Connection предоставляет интерфейс для отправки http запросов. Экземпляр класса может быть создан непосредственно. Или используя синтаксис контекстного менеджера. Конструктор класса принимает параметры: host - доменное имя или ip-адрес сервера 1С, protocol - используемый протокол, authentication - аутентификация, connection_timeout - таймаут соединения в секундах, read_timeout - таймаут получения данных. http.Connection использует библиотеку Requests.

with Connection('my1c.domain.ru',
                'http',
                HTTPBasicAuth('user', 'pass')) as conn:
conn = Connection('my1c.domain.ru',
                  'http',
                  HTTPBasicAuth('user', 'pass'))

class models.OdataModel

Класс models.OdataModel наследуется от класса pydantic.Basemodel. Ваши модели данных должны наследоваться от этого класса. Вы можете использовать обширные возможности Pydantic для валидации данных.

models.OdataModel.nested_models

Атрибут nested_models используется для оптимизации запросов OData. Представляет собой словарь ключи которого - строки с именами полей содержащих вложенные модели, значения - вложенные модели.

class MyModel(OdataModel):
    ...
    nested_models = {
        'measure_unit': MyNestedModel
    }

class odata.Odata

Наследуйтесь от класса odata.Odata для описания сущности 1С.

class FooOdata(OData):
    database = 'my1cdb'     # Имя БД 1С
    entity_model = MyModel  # Класс модели данных 
    entity_name='bar'       # Имя сущности в 1С

method manager Принимает экземпляр класса http.Connection. Возвращает экземпляр odata.Manager.

class.ODataManager Экземпляр класса создается через метод FooOdata.manager().

method all() Выполняет запрос, возвращает список валидных объектов сущности. Если один из объектов не валиден будет вызвано исключение pydantic.ValidationError. Это поведение можно изменить передав параметр ignor_invalid=True. В этом случае невалидные объекты будут игнорироваться, атрибут validation_errors менеджера будет содержать список ошибок валидации. Исключение не будет вызвано.

method get() Выполняет запрос. Возвращает один объект по его GUID. При ошибке валидации будет вызвано исключение pydantic.ValidationError.

method update() Выполняет запрос patch для объекта по его GUID. Принимает аргумент data - объект модели данных или словарь с обновляемыми данными.

method post_document() Выполняет запрос на проведение документа по его GUID. Принимает аргумент operational_mode - оперативный режим проведения документа.

method unpost_document() Выполняет запрос отмены проведения документа.

method filter() Запрос не выполняет. Устанавливает параметры фильтрации. Принимает ключевые аргументы - lookups в стиле DjangoORM или позиционные аргументы экземпляров Odata.Q().

Lookup имеет формат field__operator__annotation, где: field - имя поля модели данных; operator - оператор eq, ne, gt, ge, lt, le или in, если не указан используется eq; annotation - аннотация guid или datetime

Примеры:

filter(foo='abc')
filter(bar__gt=100)
filter(uid_1c__in__guid=[...])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyodata1c-0.0.1.tar.gz (12.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

PyOdata1C-0.0.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

PyOData1C-0.0.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file pyodata1c-0.0.1.tar.gz.

File metadata

  • Download URL: pyodata1c-0.0.1.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for pyodata1c-0.0.1.tar.gz
Algorithm Hash digest
SHA256 9a684e52a3153bba4f28964904282ea2fab9f830bb5b40ef01fa82ede33c362e
MD5 53cfb0d034e85c75b5a18e0567fe84a9
BLAKE2b-256 ad74aba2fd30ed05a622e6ee7a5c55641bee4bb236bdb58d3e6425e898375586

See more details on using hashes here.

File details

Details for the file PyOdata1C-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: PyOdata1C-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for PyOdata1C-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ada230dd3333adbd2a7e94798069bbff29228e408cfcf1d7469a956ec0b8ec82
MD5 29406d9e6acecec9a2ea88dfd0375573
BLAKE2b-256 1928cee403945398cc8084d22fb803fb86c00dc7cd3dfbe3c44c8c9941880321

See more details on using hashes here.

File details

Details for the file PyOData1C-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: PyOData1C-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for PyOData1C-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1c839e564f192391c77c633f8626689b2d330a6702ef2d0fde9dca959513ef5c
MD5 6f4c92e5b881f4bb4acc3b28f5f1195c
BLAKE2b-256 969ba3d754fe762f304ebcdc2e1cc4a74e1a8da23e523598a02544baad067b3c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page