diff --git a/doc/content/es/calc/_index.md b/doc/content/es/calc/_index.md index a9c1069..8e09b8b 100644 --- a/doc/content/es/calc/_index.md +++ b/doc/content/es/calc/_index.md @@ -1,6 +1,6 @@ +++ title = "Calc" -weight = 5 +weight = 6 +++ #### Trabajar con Calc diff --git a/doc/content/es/dialog/_index.md b/doc/content/es/dialog/_index.md index 7934e68..0360246 100644 --- a/doc/content/es/dialog/_index.md +++ b/doc/content/es/dialog/_index.md @@ -1,6 +1,6 @@ +++ title = "Cuadros de diálogo" -weight = 6 +weight = 20 +++ #### Trabajar con cuadros de diálogo diff --git a/doc/content/es/documents/_index.md b/doc/content/es/documents/_index.md new file mode 100644 index 0000000..68b5b6b --- /dev/null +++ b/doc/content/es/documents/_index.md @@ -0,0 +1,12 @@ ++++ +title = "Documentos" +weight = 5 ++++ + +#### Trabajar con Documentos + +### active + + +```python +``` diff --git a/doc/content/es/tools/macros/_index.md b/doc/content/es/tools/macros/_index.md new file mode 100644 index 0000000..1cd0c2d --- /dev/null +++ b/doc/content/es/tools/macros/_index.md @@ -0,0 +1,65 @@ ++++ +title = "Ejecutar macros" +weight = 6 ++++ + +Ejecutar cualquier macro, de forma predeterminada se llaman a las macros en Python localizadas en el perfil de usuario. + +```python +import easymacro as app + + +def mostrar_info(): + app.msgbox(app.INFO_DEBUG) + return + + +def main(args=None): + macro = { + 'library': 'test', + 'name': 'mostrar_info', + } + app.macro.call(macro) + return +``` + +Ejecutar una macro compartida en LibreOffice Macros. + +```python +macro = { + 'library': 'HelloWorld', + 'name': 'HelloWorldPython', + 'location': 'share', +} +app.macro.call(macro) +``` + +Ejecutar una macro Basic. + +```vb +Sub mostrar_info() + MsgBox "Mejor usa Python :)" +End Sub +``` + +```python +macro = { + 'language': 'Basic', + 'library': 'Standard', + 'module': 'Module1', + 'name': 'mostrar_info', +} +app.macro.call(macro) +``` + +Cualquier macro se puede ejecutar en otro hilo. + +```python +app.macro.call(macro, True) +``` + + +Más información en: [Scripting Framework URI Specification][1] + + +[1]: https://wiki.documentfoundation.org/Documentation/DevGuide/Scripting_Framework#Scripting_Framework_URI_Specification diff --git a/doc/content/es/tools/threads/_index.md b/doc/content/es/tools/threads/_index.md new file mode 100644 index 0000000..b78ac01 --- /dev/null +++ b/doc/content/es/tools/threads/_index.md @@ -0,0 +1,50 @@ ++++ +title = "Hilos" +weight = 5 ++++ + +#### Ejecutar macros en otros hilos. + +Las macros se ejecutan en un hilo que bloquea cualquier otro proceso dentro de la aplicación. + +Si ejecutas la siguiente macro `main`, nota que no puedes hacer algo más dentro de LibreOffice durante los 5 segundos que dura el proceso. + +```python +import easymacro as app + + +def hacer_pausa(segundos): + app.sleep(segundos) + app.debug('He terminado') + return + +def main(): + hacer_pausa(5) + app.msgbox('Fin...') + return +``` + +Hasta que aparece el cuadro de mensaje con la palabra `Fin` y lo cierras, el usuario puede seguir usando la aplicación. + +### run_in_thread + +Ahora ejecutamos la macro en otro hilo, "decorando" cualquier macro con `run_in_thread` + +```python +@app.run_in_thread +def hacer_pausa(segundos): + app.sleep(segundos) + app.debug('He terminado') + return + +def main(): + hacer_pausa(5) + app.msgbox('Fin...') + return +``` + +Nota que ahora el mensaje aparece inmediatamente y no tras los 5 segundos. + +{{% notice warning %}} +Ponga mucha atención en **no ejecutar macros en otros hilo** que dependen de algo suceptible de ser cambiado o interceptado por el usuario, por ejemplo, la celda activa. +{{% /notice %}} diff --git a/doc/content/es/tools/timer/_index.md b/doc/content/es/tools/timer/_index.md new file mode 100644 index 0000000..6d32858 --- /dev/null +++ b/doc/content/es/tools/timer/_index.md @@ -0,0 +1,116 @@ ++++ +title = "Timer" +weight = 7 ++++ + +El `timer` siempre se ejecuta en otro hilo. + +### once + +Ejecutar macro una sola vez en X segundos. + + +```python +import easymacro as app + + +NOMBRE = 'reloj' + + +def mostrar_hora(): + app.debug(app.dates.now_time) + return + + +def iniciar_conteo(): + segundos = 5 + macro = { + 'library': 'test', + 'name': 'mostrar_hora', + } + app.timer.once(NOMBRE, segundos, macro) + return + + +def main(args=None): + iniciar_conteo() + return +``` + +### cancel + +Cancelar ejecución, antes del tiempo establecido. + +```python +def main(args=None): + iniciar_conteo() + app.sleep(3) + detener_conteo() + return + +def detener_conteo(): + app.timer.cancel(NOMBRE) + return +``` + +``` +16/08/2022 21:18:50 - INFO - Event: "reloj", started... execute in 60 seconds +16/08/2022 21:18:55 - INFO - Cancel event: "reloj", ok... +``` + +### start + +Ejecutar macro cada X segundos. + +```python +NOMBRE = 'reloj' + + +def mostrar_hora(): + app.debug(app.dates.now_time) + return + + +def iniciar_reloj(): + segundos = 1 + macro = { + 'library': 'test', + 'name': 'mostrar_hora', + } + app.timer.start(NOMBRE, segundos, macro) + return + +def main(args=None): + iniciar_reloj() + return +``` + +### stop + +Detener timer. + +```python +def detener_reloj(): + app.timer.stop(NOMBRE) + return +``` + +``` +16/08/2022 21:25:37 - INFO - Timer 'reloj' started, execute macro: 'mostrar_hora' +16/08/2022 21:25:38 - DEBUG - 21:25:38 +16/08/2022 21:25:39 - DEBUG - 21:25:39 +... +16/08/2022 21:25:47 - DEBUG - 21:25:47 +16/08/2022 21:25:48 - DEBUG - 21:25:48 +16/08/2022 21:25:48 - INFO - Timer stopped... +``` + + +{{% notice tip %}} +Asegurese siempre de establecer un nombre único para cada timer. +{{% /notice %}} + + +{{% notice warning %}} +Asegurese siempre de ejecutar macros que NO bloqueen la interfaz del usuario. +{{% /notice %}} diff --git a/doc/content/es/tools/url/_index.md b/doc/content/es/tools/url/_index.md new file mode 100644 index 0000000..776a1a6 --- /dev/null +++ b/doc/content/es/tools/url/_index.md @@ -0,0 +1,42 @@ ++++ +title = "URL" +weight = 8 ++++ + +### get + +Método `get`. + +```python +def prueba_get(): + + url = 'https://api.ipify.org' + respuesta = app.url.get(url) + if respuesta.status_code == 200: + mi_ip = respuesta.body.decode() + app.debug(f'IP: {mi_ip}') + else: + app.debug(respuesta.status_code) + + return +``` + +``` +16/08/2022 22:14:13 - DEBUG - IP: 199.203.174.159 +``` + +Respuestas en formato json. + +```python +def prueba_get(): + + url = 'https://api.ipify.org/?format=json' + respuesta = app.url.get(url) + if respuesta.status_code == 200: + datos = respuesta.json() + app.debug(f'IP: {datos["ip"]}') + else: + app.debug(respuesta.status_code) + + return +``` diff --git a/doc/content/es/tools/utils/_index.md b/doc/content/es/tools/utils/_index.md new file mode 100644 index 0000000..23d975b --- /dev/null +++ b/doc/content/es/tools/utils/_index.md @@ -0,0 +1,198 @@ ++++ +title = "Utilidades" +weight = 9 ++++ + +### dict_to_property + +Convertir diccionarios en PropertyValue + + +```python +datos = { + 'Hidden': True, + 'Password': 'letmein', +} +propiedades = app.dict_to_property(datos) + +app.msgbox(propiedades) +``` + + +### data_to_dict + +Convertir `PropertyValue` en diccionarios + +```python +datos = app.data_to_dict(propiedades) +app.msgbox(datos) +``` + +Convertir `tuplas` a diccionario. + +```python +tupla_de_tuplas = ( + ('Hidden', True), + ('Password', 'letmein'), +) +datos = app.data_to_dict(tupla_de_tuplas) +app.msgbox(datos) +``` + +Convertir `listas` a diccionario. + +```python +lista_de_listas = [ + ['Hidden', True], + ['Password', 'letmein'], +] +datos = app.data_to_dict(lista_de_listas) +app.msgbox(datos) +``` + +### sleep + +Hacer una pausa de X segundos. + +```python +app.sleep(5) +``` + +### render + +Reemplazar variables en cadenas de texto. + +```python +plantilla = """Hola $nombre + +Te envío este archivo: $archivo + +Saludos cordiales +""" + +datos = { + 'nombre': 'Ingrid Bergman', + 'archivo': 'carta_de_amor.odt' +} + +resultado = app.render(plantilla, datos) + +app.msgbox(resultado) +``` + +### run + +Ejecutar un programa. + +```python +nombre_aplicacion = 'gnome-calculator' +app.shell.run(nombre_aplicacion) +``` + +Ejecutar comandos shell y capturar la salida. + +```python +comandos = 'ls -lh ~' +resultado = app.shell.run(comandos, True) +app.debug(resultado) +``` + +``` +drwxr-xr-x 4 mau mau 4.0K Aug 15 23:36 Desktop +drwxr-xr-x 6 mau mau 4.0K Jun 9 23:32 Documents +drwxr-xr-x 5 mau mau 4.0K Aug 16 13:09 Downloads +drwxr-xr-x 3 mau mau 4.0K Aug 14 15:19 Pictures +drwxr-xr-x 10 mau mau 4.0K Jun 19 19:36 Projects +drwxr-xr-x 2 mau mau 4.0K May 11 22:36 Templates +drwxr-xr-x 2 mau mau 4.0K Jul 19 13:37 Videos +``` + +Ejectuar comandos y capturar la salida línea a línea. + +```python +comandos = 'ls -lh /home/mau' +for line in app.shell.popen(comandos): + app.debug(line) +``` + +### digest + +Obtener hash. Por default se regresa en hexadecimal. + +```python + datos = 'LibreOffice con Python' + + digest = app.hash.digest('md5', datos) + app.debug('MD5 = ', digest) + + digest = app.hash.digest('sha1', datos) + app.debug('SHA1 = ', digest) + + digest = app.hash.digest('sha256', datos) + app.debug('SHA256 = ', digest) + + digest = app.hash.digest('sha512', datos) + app.debug('SHA512 = ', digest) +``` + +``` +16/08/2022 18:48:07 - DEBUG - MD5 = 3801759ead20abc3ce0d0095289bdcfd +16/08/2022 18:48:07 - DEBUG - SHA1 = 1df74aaae9658c21074aa5a2d4c2055dcf79f0db +16/08/2022 18:48:07 - DEBUG - SHA256 = 228e90b15b6259307e580677939b1f2f45e9317461e98f603af8fcac0f9a598f +16/08/2022 18:48:07 - DEBUG - SHA512 = 3ef45f79f3bfd2b251d250489c91b631306456405510397fb1a7ee37005d196376b7d6ca86a9895f4eb97eb74813965c24d6564a383f4bdb1360665c8fbb192a +``` + +Para obtener bytes. + +``` +digest = app.hash.digest('md5', datos, False) +app.debug('MD5 = ', digest) +``` + +``` +16/08/2022 18:48:07 - DEBUG - MD5 = b'8\x01u\x9e\xad \xab\xc3\xce\r\x00\x95(\x9b\xdc\xfd' +``` + + +### config + +Puede guardar datos de configuración de su macro o extensión dentro del perfil de usuario. + +```python +nombre = 'mi_extension' +datos = { + 'ruta': '/home/mau/pruebas', + 'guardar': True, +} + +if app.config.set(nombre, datos): + app.debug('Configuración guardada...') +``` + +Y recuperarlos en cualquier momento. + +``` +datos = app.config.get(nombre) +app.debug(datos) +``` + + +### color + +Puede ver los colores que puede usar en Wikipedia [Colores Web][1] + +```python +color_nombre = 'darkblue' +color = app.color(color_nombre) +app.debug(color) + +color_rgb = (125, 200, 10) +color = app.color(color_rgb) +app.debug(color) + +color_html = '#008080' +color = app.color(color_html) +app.debug(color) +``` + +[1]: https://es.wikipedia.org/wiki/Colores_web diff --git a/doc/public/404.html b/doc/public/404.html index e86b9a8..1f806c8 100644 --- a/doc/public/404.html +++ b/doc/public/404.html @@ -9,15 +9,15 @@