Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][REF] l10n_br_stock: Carregando os Dados de Demonstração pelo post_init_hook #3606

Open
wants to merge 2 commits into
base: 16.0
Choose a base branch
from

Conversation

mbcosta
Copy link
Contributor

@mbcosta mbcosta commented Feb 4, 2025

Load demo data by post init hook.

Alterações do PR:

  • Carregando os Dados de Demonstração pelo post_init_hook, alteração simples mas necessária porque ao instalar duas vezes o modulo, como o CI faz em alguns PRs, por exemplo o PR de migração do l10n_br_delivery o noupdate=1 dos XML parece ser ignorado e acaba retornando um Warning

https://github.com/OCA/l10n-brazil/actions/runs/13035384911/job/36364402057?pr=3571#step:9:260

2025-01-29 16:08:51,161 701 WARNING odoo odoo.modules.loading: Module l10n_br_stock demo data failed to install, installed without demo data 
Traceback (most recent call last):
  File "/opt/odoo/odoo/tools/convert.py", line 698, in _tag_root
    f(rec)
  File "/opt/odoo/odoo/tools/convert.py", line 599, in _tag_record
    record = model._load_records([data], self.mode == 'update')
  File "/opt/odoo/odoo/models.py", line 4412, in _load_records
    data['record']._load_records_write(data['values'])
  File "/opt/odoo/addons/stock/models/stock_quant.py", line 307, in _load_records_write
    return super(StockQuant, self.with_context(inventory_mode=True))._load_records_write(values)
  File "/opt/odoo/odoo/models.py", line 4343, in _load_records_write
    self.write(values)
  File "/opt/odoo/addons/stock/models/stock_quant.py", line 351, in write
    raise UserError(_("Quant's editing is restricted, you can't do this operation."))
odoo.exceptions.UserError: Quant's editing is restricted, you can't do this operation.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/odoo/odoo/modules/loading.py", line 90, in load_demo
    load_data(cr, idref, mode, kind='demo', package=package)
  File "/opt/odoo/odoo/modules/loading.py", line 72, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
  File "/opt/odoo/odoo/tools/convert.py", line 763, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate)
  File "/opt/odoo/odoo/tools/convert.py", line 829, in convert_xml_import
    obj.parse(doc.getroot())
  File "/opt/odoo/odoo/tools/convert.py", line 749, in parse
    self._tag_root(de)
  File "/opt/odoo/odoo/tools/convert.py", line 711, in _tag_root
    raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (
odoo.tools.convert.ParseError: while parsing /opt/odoo-venv/lib/python3.10/site-packages/odoo/addons/l10n_br_stock/demo/stock_inventory_demo.xml:9, somewhere inside
<record id="stock_inventory_sn_1" model="stock.quant">
            <field name="product_id" ref="product.product_product_24"/>
            <field name="inventory_quantity">16.0</field>
            <field name="location_id" model="stock.location" eval="obj().env.ref('l10n_br_stock.wh_empresa_simples_nacional').lot_stock_id.id"/>
        </record>

Isso acontece porque o módulo já foi instalado antes no Initialize test db
https://github.com/OCA/l10n-brazil/actions/runs/13035384911/job/36364402057?pr=3571#step:8:969

image

Carregando dessa forma o erro não acontece.

  • Ao rodar o pre-commit alguns arquivos foram alterados e aproveitei para fazer algo simples que é incluir as Empresas no CONTIBUTORS.md o que tem sido feito em outros módulos.

Revendo o módulo surgiram algumas questões o arquivo l10n_br_stock/init.py e o l10n_br_stock/models/init.py estão com o Cabeçalho de Licença, o que está sendo removido em outros PRs porém eu não removi porque o l10n_br_stock/manifest.py está sem o cabeçalho, o @renatonlima consta como autor com data de 2009 em um dos init mas ele não está no README, isso está certo? O Cabeçalho de Licença deveria ser movido dos arquivos init para o manifest? Isso é algo que pode ser visto em outro PR especifico ou se acreditarem que pode ser resolvido aqui posso ver de incluir essa alteração.

cc @OCA/local-brazil-maintainers

Copy link
Member

@rvalyi rvalyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ver meu comentário abaixo.

Alem disso teria que ver se não teria como minimizar a quantitdade de arquivos de demo carregado pelo hook. Ver se não teria como carregar o maximo pelo XML de demo e depois alterar minimamente o que teria que ser alterado pelo hook (idealmente com Python sem carregar arquivo XML). Ou seja se for possivel alterar menos coisas no XML de demo mas manter no manifest na medida do possivel e completar com Python o que faltar.

Pois os arquivos de demo XML bem ou mal são um sistema padrão do Odoo que todo mundo conhece. Eh um pouco chato sair totalmente dele para ir nesses hooks... (aumenta a barreira de entrada da localização e francamente ela já ta muito alta...)
Alem disso normalmente tem um check padrão da OCA que esses arquivos da pasta demo estão sendo usados no manifest no .pylintrc-mandatory que eu tive que desabilitar no repo:
1c072ec#diff-28b25500282c29149fccf139833b6435b868cef97f63ecebeeda840ad1ba910aR71

E finalmente eu tou fazendo o contrario disso aqui neste PR pro modulo l10n_br_fiscal:
#3567

Eu acertei esse fds e vou logo fazer um push la...

cc @mbcosta @renatonlima @marcelsavegnago @antoniospneto



def post_init_hook(cr, registry):
if not tools.config["without_demo"]:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

esse without_demo é generico demais e esta sendo removido até no Odoo master.
Seria melhor fazer essa maneira https://github.com/OCA/account-invoicing/blob/14.0/sale_stock_picking_invoicing/models/res_company.py#L19 apenas olhar se o campo demo vale True pro modulo.

@rvalyi
Copy link
Member

rvalyi commented Feb 13, 2025

FYI o mesmo tipo de questionamento que os caras da Odoo tem e umas técnicas que usam com esses tais de _post_load_demo_data por exemplo:
odoo/odoo#197588
https://github.com/odoo/odoo/blob/25feb5b11c2df401580b65e0108145863fcf8987/addons%2Fl10n_ar_withholding%2F__init__.py#L34

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants