need_install() recibió un argumento de palabra clave inesperado 'force'

Preguntas sobre el servidor WAPT / Solicitudes y ayuda relacionadas con el servidor WAPT
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
Bloqueado
Floflobel
Mensajes: 135
Inscripciones: 15 Oct 2015 - 17:32 horas.

17 de mayo de 2016 - 16:32

Buen día,

Modifiqué todos mis paquetes para mejorarlos y estoy encontrando este error en bastantes máquinas:

Código: Seleccionar todo

need_install() got an unexpected keyword argument 'force'
Vi en otro hilo que había un parche disponible en el repositorio Git. Pero confieso que no entendía cómo aplicarlo.
He reemplazado las líneas correctas. ¿Pero necesito recompilar el proyecto y enviar el archivo a todas las máquinas?

Gracias,
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

17 de mayo de 2016 - 23:09

A primera vista, no creo que el parche solucione esto. ¿

Podrías revisar la estructura del paquete para entender el problema?

Además, ¿qué versión del cliente WAPT estás usando?

Si el problema reside en las nuevas funciones `install_exe_if_needed` y `install_msi_if_needed`,
significaría, si no me equivoco, que el argumento `force` proporcionado al comando `need_install` se está interpretando erróneamente:

https://github.com/tranquilit/WAPT/blob ... s.py#L3407

Simon
Floflobel
Mensajes: 135
Inscripciones: 15 Oct 2015 - 17:32 horas.

18 de mayo de 2016 - 10:24

Buen día,

Los distintos clientes que experimentan este problema tienen la versión 1.3.5.0. Si no es así, fuerzo la actualización.
Aquí está uno de los paquetes con el error:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
import urllib

from setuphelpers import *

uninstallkey = []

# Name of the software
namesoftware='soft'

# Uninstall register key
# For OS 64bits and Software 32bits version : HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
# For OS 32 bits or 64bits (and Software 64bits version) : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
ukey='{00000000000000}'

# Version of software
version='3.19'

# Unzip folder define in Winrar
foldertmp='C:\Temp'

# Name of execute file
execfile='soft.exe'

# Insert the silent parameters
silentparameters='/install /silent /norestart'

# Link to download the software
downloadlink='http://repo/exe/soft.exe'

# Name of installation files
downloadfilename='soft.exe'


def install():
    print(foldertmp + '\\' + execfile)
    if need_install(ukey,min_version=version,force=False):
        if isfile(foldertmp + '\\' + execfile):
            print('Installation files are already present - Installing ' + namesoftware)
            install_exe_if_needed(foldertmp + '\\' + execfile, silentflags=silentparameters, key=ukey, min_version=version, accept_returncodes=[0], timeout=600)
            #remove_tree(foldertmp)
        else:
            print('Download and unzip ' + namesoftware)
            os.mkdir(foldertmp)
            urllib.urlretrieve (downloadlink, foldertmp + '\\' + execfile)
			#wget(downloadlink,downloadfilename)
            #run(downloadfilename)
            print('Installing ' + namesoftware)
            install_exe_if_needed(foldertmp + '\\' + execfile, silentflags=silentparameters, key=ukey, min_version=version, accept_returncodes=[0], timeout=600)
            #remove_tree(foldertmp)
    else:
        print('The software is already installed in this version or newer version')
Error: TypeError: need_install() obtuvo un argumento de palabra clave inesperado 'force'

Reemplacé el nombre y la clave Ukey porque es software propietario. Pero el error persiste en varios paquetes.
Utilizo install_exe_if_needed y install_msi_if_needed.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

18 de mayo de 2016 - 11:12

No sé si esto solucionará tu problema, pero yo lo haría más así:

Código: Seleccionar todo

    
    import inspect
    caller_globals = inspect.stack()[1][0].f_globals
    WAPT = caller_globals.get('WAPT',None)
    force = WAPT and WAPT.options.force
    if need_install(ukey,min_version=version,force=force):
Esto permite que la opción --force funcione para su paquete (estoy usando el ejemplo de setuphelper nuevamente) aquí:
https://github.com/tranquilit/WAPT/blob ... s.py#L3351

Simón
Floflobel
Mensajes: 135
Inscripciones: 15 Oct 2015 - 17:32 horas.

18 de mayo de 2016 - 11:44

Código: Seleccionar todo

install_exe_if_needed(foldertmp + '\\' + execfile, silentflags=silentparameters, key=ukey, min_version=version, accept_returncodes=[0], timeout=600, force=force)
¿Entonces solo agrego fuerza=fuerza? ¿Y no cambio nada más?
¿O debería utilizar need_install?

Atentamente,
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

18 de mayo de 2016 - 12:03

Más como esto:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
import urllib

from setuphelpers import *

uninstallkey = []

# Name of the software
namesoftware='soft'

# Uninstall register key
# For OS 64bits and Software 32bits version : HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
# For OS 32 bits or 64bits (and Software 64bits version) : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
ukey='{00000000000000}'

# Version of software
version='3.19'

# Unzip folder define in Winrar
foldertmp='C:\Temp'

# Name of execute file
execfile='soft.exe'

# Insert the silent parameters
silentparameters='/install /silent /norestart'

# Link to download the software
downloadlink='http://repo/exe/soft.exe'

# Name of installation files
downloadfilename='soft.exe'


def install():
    print(foldertmp + '\\' + execfile)
    import inspect
    caller_globals = inspect.stack()[1][0].f_globals
    WAPT = caller_globals.get('WAPT',None)
    force = WAPT and WAPT.options.force
    if need_install(ukey,min_version=version,force=force):
        if isfile(foldertmp + '\\' + execfile):
            print('Installation files are already present - Installing ' + namesoftware)
            install_exe_if_needed(foldertmp + '\\' + execfile, silentflags=silentparameters, key=ukey, min_version=version, accept_returncodes=[0], timeout=600)
            #remove_tree(foldertmp)
        else:
            print('Download and unzip ' + namesoftware)
            os.mkdir(foldertmp)
            urllib.urlretrieve (downloadlink, foldertmp + '\\' + execfile)
         #wget(downloadlink,downloadfilename)
            #run(downloadfilename)
            print('Installing ' + namesoftware)
            install_exe_if_needed(foldertmp + '\\' + execfile, silentflags=silentparameters, key=ukey, min_version=version, accept_returncodes=[0], timeout=600)
            #remove_tree(foldertmp)
    else:
        print('The software is already installed in this version or newer version')
Tengo serias dudas de que sea así, pero en fin...
Floflobel
Mensajes: 135
Inscripciones: 15 Oct 2015 - 17:32 horas.

18 de mayo de 2016 - 12:26

Acabo de ejecutar la prueba y no ha cambiado nada con estas líneas adicionales.
Me temo que tendremos que esperar a que alguien del equipo de desarrollo nos responda.

De todos modos, gracias por tu ayuda.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

18 de mayo de 2016 - 13:14

Mmm, sí, disculpa, no veo el problema. :?

¿Sucede en todos ellos?

¿Se instaló mediante el servicio o la línea de comandos?
Floflobel
Mensajes: 135
Inscripciones: 15 Oct 2015 - 17:32 horas.

18 de mayo de 2016 - 16:13

Esto ocurre de forma aleatoria... en paquetes con la misma estructura.
No todas las máquinas se ven afectadas, pero es probable que suceda gradualmente.

La instalación se realiza mediante WAPT-EXIT, así que gracias al agente.

¿Sabes cómo puedo contactar con un desarrollador?
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

18 de mayo de 2016 - 17:07

Suelen publicar aquí regularmente o en la lista de correo.
De lo contrario, puedes enviarles un ticket de soporte directamente.

Creo que entiendo tu problema.

El mensaje de error dice que la función `need_install` no entiende por qué le estás pasando el parámetro `force`.

Estoy casi seguro de que tu cliente es la versión 1.2.3.3 (o inferior).

Aquí está la función `need_install` en la versión 1.2.3.3:
https://github.com/tranquilit/WAPT/blob ... s.py#L3002

Y en la última versión:
https://github.com/tranquilit/WAPT/blob ... s.py#L3116

Deberías comprobar en el cliente WAPT (en la máquina que no funciona) si la función `need_install` en setuphelper se parece a lo que te envié arriba.

A veces las actualizaciones del cliente WAPT no funcionan correctamente; el paquete aparece como instalado, pero el cliente WAPT no es la última versión.

Avísame, pero estoy casi seguro de que ese es el problema.

Simon
Bloqueado