General

¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

0

InvalidTextRepresentation: invalid input syntax for type json [OpenUpgrade 14 CE > 15 CE]

Hola,



Estoy intentando migrar una base de datos de Odoo 14 a Odoo 15 utilizando OpenUpgrade V15, el problema contra el que me estoy enfrentando es que cuando ejecuto la migración me da un fallo en el script del modulo base  ("openupgrade_scripts/scripts/base/15.0.1.3/pre-migration.py) y no se identificar si el fallo es cosa de mi base de datos,un bug de como el código intenta convertir el campo o es la configuracion de mi entorno, el error en cuestión es este:


2024-07-05 07:32:40,222 12482 ERROR CAPEL_14 odoo.sql_db: bad query: UPDATE res_company SET report_footer = NULL WHERE report_footer = ''

ERROR: invalid input syntax for type json

LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''

                                                                     ^

DETAIL:  The input string ended unexpectedly.

CONTEXT:  JSON data, line 1:

2024-07-05 07:32:40,222 12482 ERROR CAPEL_14 OpenUpgrade: base: error in migration script /opt/odoo15/odoo/custom-addons/openupgrade_scripts/scripts/base/15.0.1.3/pre-migration.py: invalid input syntax for type json

LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''

                                                                     ^

DETAIL:  The input string ended unexpectedly.

CONTEXT:  JSON data, line 1:


2024-07-05 07:32:40,223 12482 ERROR CAPEL_14 OpenUpgrade: invalid input syntax for type json

LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''

                                                                                                                                  ^

DETAIL:  The input string ended unexpectedly.

CONTEXT:  JSON data, line 1:

Traceback (most recent call last):  File "/opt/odoo15/odoo/venv/lib/python3.9/site-packages/openupgradelib/openupgrade.py", line 2292, in wrapped_function

    func(

  File "/opt/odoo15/odoo/custom-addons/openupgrade_scripts/scripts/base/15.0.1.3/pre-migration.py", line 80, in migrate

    openupgrade.convert_field_to_html(

  File "/opt/odoo15/odoo/venv/lib/python3.9/site-packages/openupgradelib/openupgrade.py", line 2471, in convert_field_to_html

    cr.execute(  # pylint: disable=E8103

  File "", line 2, in execute

  File "/opt/odoo15/odoo/odoo/sql_db.py", line 90, in check

    return f(self, *args, **kwargs)

  File "/opt/odoo15/odoo/odoo/sql_db.py", line 311, in execute

    res = self._obj.execute(query, params)

psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type json

LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''

                                                                     ^

La funcion que falla seria esta 


@openupgrade.migrate(use_env=False)

def migrate(cr, version):

    """

    Don't request an env for the base pre-migration as flushing the env in

    odoo/modules/registry.py will break on the 'base' module not yet having

    been instantiated.

    """

    if "openupgrade_framework" not in tools.config["server_wide_modules"]:

        logging.error(

            "openupgrade_framework is not preloaded. You are highly "

            "recommended to run the Odoo with --load=openupgrade_framework "

            "when migrating your database."

        )

    openupgrade.rename_xmlids(cr, rename_xmlids_l10n_ec)

    openupgrade.rename_xmlids(cr, rename_xmlids_mail)

    openupgrade.update_module_names(cr, renamed_modules.items())

    openupgrade.update_module_names(cr, merged_modules.items(), merge_modules=True)

    openupgrade.clean_transient_models(cr)

    openupgrade.convert_field_to_html(

        cr, "res_company", "report_footer", "report_footer"

    )

    openupgrade.convert_field_to_html(

        cr, "res_company", "report_header", "report_header"

    )

    openupgrade.convert_field_to_html(

        cr, "res_partner", "comment", "comment", verbose=False

    )


Eh probado añadir antes la query que falla este trozo de codigo modificandola para que no me de fallo:

cr.execute("""

        UPDATE res_company 

        SET report_footer = NULL 

        WHERE report_footer::text = '""';

    ​""")


Y sigue dando el mismo error...

Probe a avanzar y solucionarlo despues comentando la parte de:


openupgrade.convert_field_to_html(

        cr, "res_company", "report_footer", "report_footer"

    )


Pero mas adelante en la migración me vuelve a dar el fallo del formato json, así que creo que no es la solución.


Eh comprobado haciendo un SELECT en postgres para comprobar si tengo alguno de esos campos vacíos y obtengo esto:


Si lo hago tal cual quiere hacer el scrip me da le mismo fallo que cuando intenta actualizar:


CAPEL_14=# SELECT * FROM res_company WHERE report_footer = '';

ERROR:  invalid input syntax for type json

LINE 1: SELECT * FROM res_company WHERE report_footer = '';

                                                        ​          ^

DETAIL:  The input string ended unexpectedly.

CONTEXT:  JSON data, line 1:


Si lo hago con '""' no me encuentra nada:


SELECT * FROM res_company WHERE report_footer = '""';

(0 rows)


Eh probado a cambiar el tipo de la columna directamente:


ALTER TABLE res_company ALTER COLUMN report_footer SET DATA TYPE text USING report_footer::text;


Y ya no me da el error, el problema es que mas adelante me da este fallo:


File "/opt/odoo15/odoo/custom-addons/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_ui_view.py", line 17, in _check_xml

    return View._check_xml._original_method(self)

  File "/opt/odoo15/odoo/odoo/addons/base/models/ir_ui_view.py", line 430, in _check_xml

    combined_arch = view._get_combined_arch()

  File "/opt/odoo15/odoo/odoo/addons/base/models/ir_ui_view.py", line 993, in _get_combined_arch

    arch = root.with_prefetch(tree_views._prefetch_ids)._combine(hierarchy)

  File "/opt/odoo15/odoo/odoo/addons/base/models/ir_ui_view.py", line 911, in _combine

    combined_arch = etree.fromstring(self.arch)

  File "src/lxml/etree.pyx", line 3237, in lxml.etree.fromstring

  File "src/lxml/parser.pxi", line 1896, in lxml.etree._parseMemoryDocument

  File "src/lxml/parser.pxi", line 1777, in lxml.etree._parseDoc

  File "src/lxml/parser.pxi", line 1082, in lxml.etree._BaseParser._parseUnicodeDoc

  File "src/lxml/parser.pxi", line 615, in lxml.etree._ParserContext._handleParseResultDoc

  File "src/lxml/parser.pxi", line 725, in lxml.etree._handleParseResult

  File "src/lxml/parser.pxi", line 654, in lxml.etree._raiseParseError

  File "", line 1

lml.etree.XMLSyntaxError: Document is empty, line 1, column 1


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


Traceback (most recent call last):

  File "/opt/odoo15/odoo/odoo/modules/registry.py", line 87, in new

    odoo.modules.load_modules(registry, force_demo, status, update_module)

  File "/opt/odoo15/odoo/odoo/modules/loading.py", line 415, in load_modules

    loaded_modules, processed_modules = load_module_graph(

  File "/opt/odoo15/odoo/odoo/modules/loading.py", line 222, in load_module_graph

    load_data(cr, idref, mode, kind='data', package=package)

  File "/opt/odoo15/odoo/odoo/modules/loading.py", line 69, in load_data

    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)

  File "/opt/odoo15/odoo/odoo/tools/convert.py", line 748, in convert_file

    convert_xml_import(cr, module, fp, idref, mode, noupdate)

  File "/opt/odoo15/odoo/odoo/tools/convert.py", line 814, in convert_xml_import

    obj.parse(doc.getroot())

  File "/opt/odoo15/odoo/odoo/tools/convert.py", line 734, in parse

    self._tag_root(de)

  File "/opt/odoo15/odoo/odoo/tools/convert.py", line 683, in _tag_root

    f(rec)

  File "/opt/odoo15/odoo/odoo/tools/convert.py", line 696, in _tag_root

    raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (

odoo.tools.convert.ParseError: while parsing /opt/odoo15/odoo/odoo/addons/base/data/ir_module_category_data.xml:134, somewhere inside

record model="ir.module.category" id="module_category_extra"

            field name="name">Other Extra Rights

            field name="sequence">102

        /record


        2024-07-05 11:16:05,009 15068 CRITICAL CAPEL_14 odoo.service.server: Failed to initialize database `CAPEL_14`.


Que creo que tiene algo que ver porque cuando intento buscar una vista en ir.module.category que este vacia me da el mismo error invalid input syntax for type json


Ya no se como seguir, os dejo un poco mas de informacion:


La BBDD V14 no tiene modulos personalizados salvo los originales y los de la OCA.

Hice una instalación limpia en un servidor nuevo Debian 11 de un Odoo15CE, con phyton 3.9.2

Restaure la BBDD V14 en el Odoo15 y puse la carpeta de filestore en /opt/odoo15/.local/share/Odoo/filestore/CAPEL_14

En un venv instale los requiremets y la libreria de openupgrade con el siguiente enlace

pip install git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib

Configure el archivo .conf

Y estoy iniciando el servicio con el siguiente comando:

/opt/odoo15/odoo/venv/bin/python3 /opt/odoo15/odoo/odoo-bin -c odoo14_15.conf --database=CAPEL_14 --upgrade-path=/opt/odoo15/odoo/custom-addons/openupgrade_scripts/scripts --load=base,web,openupgrade_framework --update all --stop-after-init


La migracion Inicia y hace varias cosas antes de dar el fallo, si comento la linea que me da fallo sigue, pero mas adelante me empieza a dar fallos en los modulos originales diciendome el mismo fallo de que ERROR:  invalid input syntax for type json.


Y si voy a los modulos originales y me pongo a comentar esas vistas que me da fallo pues va siguiendo la migracion pero estoy 99% seguro de que esto solo hace que se genere mas errores, y todo parte de una raiz que esta mal, que creo que es la del json.


Cualquier pista que me podais dar, o documentacion seria de gran ayuda y estaria muy agradecido.



Un saludo y gracias de antemano.

Avatar
Descartar
1 Respuesta
1
Mejor respuesta

Buenas, 

Ya lo solucione, por si le sirve a alguien el problema era del entorno en si, el problema era que descargue los módulos de la OCA utilizando un código .sh y este me descargaba los módulos dentro de carpetas con el nombre del repositorio. lo solucione añadiendo la ruta de los repositorios en el archivo .conf y ya se me ejecuto todo sin problemas.

Un error muy tonto, espero que le sirva de ayuda a alguien.


Un saludo y gracias.

Avatar
Descartar

Su respuesta

Intente dar una respuesta sustancial. Si desea hacer un comentario sobre la pregunta o la respuesta, utilice la herramienta de comentarios. Recuerde que siempre puede revisar sus respuestas , no es necesario responder dos veces a la misma pregunta. No olvide votar , ayuda a seleccionar las mejores preguntas y respuestas