Как добавить статическую папку в мой пользовательский модуль Odoo? - PullRequest
0 голосов
/ 09 декабря 2018

Как добавить статическую папку, , которая содержит файлы wsdl и xsd, необходимые для некоторого клиента SOAP , и связанный с ней путь к моему пользовательскому модулю Odoo 11?

------------ Обновление ---------

Я создал статическую папку в моем модуле с папкой src внутри, которая содержит нужные мне файлы.Необходимо получить доступ к этим файлам с моего контроллера, какой правильный полный путь?Должен ли я добавить путь в любом месте перед его использованием?

Это мой контроллер, где я пытаюсь использовать файлы:

Проверьте путь, данный клиенту (zeep_test / static / src/uhud/Uhud.wsdl)

from zeep import Client, Settings, xsd
import datetime
from odoo import http
from lxml.etree import tostring

class WaseelCrm(http.Controller):
   @http.route('/test/zeep', type='json', methods=['POST'], auth="public", website=True, csrf=False)
   def test_zeep(self):
       settings = Settings(strict=False, xml_huge_tree=True)
       client = Client('zeep_test/static/src/uhud/Uhud.wsdl', settings=settings)

       factory = client.type_factory('ns0')

       transaction = factory.TransactionCT('1.1', 'NEW', None, None, 'REQUEST')
       user = factory.UserCT('admin', 'admin', 'Ahmed Yasser')
       interaction = factory.InteractionCT(None, 102, 2260, 101)

       timestamp = datetime.datetime.combine(datetime.datetime.now(), datetime.time(10, 23))

       cmh = factory.MessageHeaderCT(transaction, interaction, user, timestamp)

       member = factory.MemberCT('0020693108', '20693101', '158')
       visitInfo = factory.visitInfoCT(timestamp, 7, 'NEW')
       eligibilityRequest = factory.EligibilitySubmissionRequestCT(member, visitInfo)

       with client.settings(raw_response=False):
           response = client.service.submitSchema(CommonMessageHeader=cmh,
                                                  EligibilitySubmissionRequest=eligibilityRequest)

       return response

Здесь эти файлы существуют Путь к папке

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Спасибо за обновление вопроса с более конкретными деталями и кодом.Вы пытаетесь получить доступ к wsdl из кода Python Odoo, а не извне, как статический http-контент, публикуемый Odoo.

Я вижу, что у вас есть четыре возможных способа решить эту проблему:

  1. Получите доступ к wsdl с относительным путем и измените свой код, чтобы сделать это возможным.Это предпочтительный способ.Этот код работает в контроллерах или в коде python в любом другом каталоге на один уровень ниже корневого каталога модуля.

    wsdlpath = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../zeep_test/static/src/uhud/Uhud.wsdl')
    client = Client(wsdlpath, settings=settings)
    
  2. Доступ к wsdl по абсолютному пути.Обновите свой код, чтобы включить полный абсолютный путь в вызове клиента Zeep.В этом варианте вам нужно жестко закодировать ваш абсолютный путь.Это работает, но не хорошо.

    client = Client('/mnt/extra-addons/zeep_test/static/src/uhud/Uhud.wsdl', settings=settings)
    
  3. Доступ к wsdl через службу Odoo http с адресом http.В этом решении вам нужно жестко закодировать ваш адрес Odoo так, как его видит ваш сервер Odoo.

    client = Client('http://localhost:8069/zeep_test/static/src/uhud/Uhud.wsdl', settings=settings)
    
  4. Доступ к wsdl напрямую от поставщика услуг SOAP.Для этого вам нужно иметь доступ к wsdl от поставщика услуг.Таким образом, вам не потребуется локальный wsdl.

    client = Client('https://serviceprovider.com/xx/yy/Uhud.wsdl', settings=settings)
    

В настоящее время ваш wsdl находится в общедоступной статической папке.Вы действительно хотите опубликовать это в своем Odoo?Я бы не стал публиковать это, если у вас нет такого намерения.Если вы ссылаетесь на этот файл из своего кода с внутренним адресом (случаи 1 и 2), вам не нужно его публиковать.

0 голосов
/ 09 декабря 2018

Вы можете собрать модуль Odoo и включить ваши статические wsdl и xsd в папку модулей с именем static.Вы можете найти дополнительную информацию и помощь для создания модуля из этих ресурсов:

При создании модуля, если вы не можете найти ответы на ваши конкретные задачи по программированию из справочных ресурсов Odoo, рассмотрите вопрос здесь, в Переполнение стека.Для вопросов переполнения стека, пожалуйста, предоставьте точный и воспроизводимый код с вопросом, чтобы люди могли помочь вам лучше всего.Инструкции по хорошим вопросам можно найти по адресу https://stackoverflow.com/help/how-to-ask. Добро пожаловать в Stack Overflow, Zatar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...