Python клиент 1С-Бром

Python клиент 1С-Бром

Категория проекта: Ожидает модерации
Клиент расширения 1С для Python

Работа через прокси

Нужно установить переменные окружения:

Публизация базы 1С

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/root" ib="Srvr=&quot;server&quot;;Ref=&quot;base&quot;;">
    <ws enable="true"
        pointEnableCommon="false"
        publishExtensionsByDefault="false">
        <point
                name="brom_api"
                alias="brom"
                enable="true"
                reuseSessions="dontuse"
                sessionMaxAge="20">
            <accessTokenAuthentication>
                <accessTokenRecepientName>gateway</accessTokenRecepientName>
                <issuers>
                    <issuer name="ssl"
                            authenticationClaimName="sub"
                            authenticationUserPropertyName="name"
                            keyInformation="base46(secret)"/>
                </issuers>
            </accessTokenAuthentication>
        </point>
    </ws>
    <httpServices publishExtensionsByDefault="false">
        <service name="lk"
                 rootUrl="lk"
                 enable="true"
                 reuseSessions="dontuse"
                 sessionMaxAge="20"
                 poolSize="10"
                 poolTimeout="5">
            <accessTokenAuthentication>
                <accessTokenRecepientName>lk</accessTokenRecepientName>
                <issuers>
                    <issuer name="ssl"
                            authenticationClaimName="sub"
                            authenticationUserPropertyName="name"
                            keyInformation="base64(secret)"/>
                </issuers>
            </accessTokenAuthentication>
        </service>
    </httpServices>
    <standardOdata enable="true"
                   reuseSessions="dontuse"
                   sessionMaxAge="20"
                   poolSize="10"
                   poolTimeout="5"/>
    <analytics enable="false"/>
    <accessTokenAuthentication>
        <accessTokenRecepientName>gateway</accessTokenRecepientName>
        <issuers>
            <issuer name="ssl"
                    authenticationClaimName="sub"
                    authenticationUserPropertyName="name"
                    keyInformation="base64(secret)"/>
        </issuers>
    </accessTokenAuthentication>
</point>

aiobrom

быстрое погружение:

# импортируем бром
from aiobrom import BromClient
# создаем клиента
cl = BromClient(
        wsdl=r'http://10.0.122.127:8088/processing/ws/brom?wsdl',
        auth=BasicAuth(username=r'brom', password=r'123456aA'))
# эти креды будут использованны только для загрузки wsdl
# описыаем функцию, вызывающую удаленный код
T = tuple[None, dict[str, str]] # сокращение типа, в данном случае, возвращаемое функцией значение
@cl.decorator_code(r'Результат=Параметр')
def super_code(цена: int, товар: str) -> T | Awaitable[T]: ...
del T # уничтожаем сокращение
# параметры передаются на сервер в виде Массив[2], [0] - args: Массив, [1] - kwargs: Структура
# для вызова сервера нужно установить креды доступа
cl.auth.set(BasicAuth(username=r'brom', password=r'123456aA'))
# можно начинать делать запросы

with cl.sync_mode: # - в синронном варианте
    res = super_code(34.5, 'Батон дачный')

async def run(): # - в асинронном варианте
    res = await super_code(34.5, 'Батон дачный')
anyio.run(run())

еще больше примеров ...

from datetime import date
from typing import Awaitable

from asyncer import runnify
from httpx import BasicAuth

from aiobrom import BromClient
from aiobrom._model import collection

with BromClient(
        wsdl=r'http://10.0.122.127:8088/processing/ws/brom?wsdl',
        auth=BasicAuth(username=r'brom', password=r'123456aA')).sync_mode as cl:
    token = cl.auth.set(BasicAuth(username=r'brom', password=r'123456aA'))
    res_sync = cl.debug_echo(
        {'Результат = Параметр'},
        324.3434, ('dsfsdf', 3434), {343: 'dsdfsdf'},
        {'343': 'dsdfsdf'}, {'Наименование': 343}, Имя="Антон",
        Фамилия=collection(r'Справочник.Проекты')())

# @formatter:off
T = tuple[None, dict[str, str]]
@cl.decorator_echo
def echo(param1: str) -> T | Awaitable[T]: ...
del T
# @formatter:on

# @formatter:off
T = tuple[None, dict[str, str]]
@cl.decorator_code(r'Результат=Параметр')
def code(param1: str) -> T | Awaitable[T]: ...
del T
# @formatter:on

# @formatter:off
T = tuple[None, dict[str, str]]
@cl.decorator_method(None, r'ВызватьИсключение')
def method(text:str) -> T | Awaitable[T]: ...
del T
# @formatter:on

with cl.sync_mode:
    wr0 = echo(param1=243234)
    wr1 = code(param1='243234')
    #wr2 = method('Test')

    pass


@runnify
async def main():
    wr = await echo(param1=243234)
    return await cl.execute_code(
        'Результат = Параметр',
        324.3434, 'dsfsdf', date.today(), Имя="Антон",
        Фамилия=collection(r'Справочник.Проекты')())


res_async = main()