Doc for install
This commit is contained in:
parent
7b18c1a8ab
commit
796257d444
|
@ -1,3 +1,4 @@
|
||||||
__pycache__
|
__pycache__
|
||||||
*.pyc
|
*.pyc
|
||||||
|
build/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Minimal makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line, and also
|
||||||
|
# from the environment for the first two.
|
||||||
|
SPHINXOPTS ?=
|
||||||
|
SPHINXBUILD ?= sphinx-build
|
||||||
|
SOURCEDIR = source
|
||||||
|
BUILDDIR = build
|
||||||
|
|
||||||
|
# Put it first so that "make" without argument is like "make help".
|
||||||
|
help:
|
||||||
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
.PHONY: help Makefile
|
||||||
|
|
||||||
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
|
%: Makefile
|
||||||
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
@ -0,0 +1,35 @@
|
||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
pushd %~dp0
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set SOURCEDIR=source
|
||||||
|
set BUILDDIR=build
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
%SPHINXBUILD% >NUL 2>NUL
|
||||||
|
if errorlevel 9009 (
|
||||||
|
echo.
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.https://www.sphinx-doc.org/
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:help
|
||||||
|
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
|
||||||
|
:end
|
||||||
|
popd
|
|
@ -0,0 +1,48 @@
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Clone repository
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Clone repository in your favorite folder projects.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
git clone https://git.cuates.net/elmau/easymacro
|
||||||
|
|
||||||
|
and copy library into `pythonpath` in your macros.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
/home/USER/.config/libreoffice/4/user/Scripts/python/pythonpath/easymacro.py
|
||||||
|
|
||||||
|
|
||||||
|
Test
|
||||||
|
----
|
||||||
|
|
||||||
|
In your favorite macros file, for example:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
vim /home/USER/.config/libreoffice/4/user/Scripts/python/mymacros.py
|
||||||
|
|
||||||
|
copy this code:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import easymacro as app
|
||||||
|
|
||||||
|
def main():
|
||||||
|
app.msgbox(app.INFO_DEBUG)
|
||||||
|
return
|
||||||
|
|
||||||
|
and execute from LibreOffice, if you see similar next info, great!
|
||||||
|
|
||||||
|
.. image:: _static/images/01_install_01.png
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
you are ready for develop with **easymacro**.
|
||||||
|
|
||||||
|
|
||||||
|
Happy develop!
|
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
|
@ -0,0 +1,53 @@
|
||||||
|
# Configuration file for the Sphinx documentation builder.
|
||||||
|
#
|
||||||
|
# This file only contains a selection of the most common options. For a full
|
||||||
|
# list see the documentation:
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||||
|
|
||||||
|
# -- Path setup --------------------------------------------------------------
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#
|
||||||
|
# import os
|
||||||
|
# import sys
|
||||||
|
# sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
|
||||||
|
# -- Project information -----------------------------------------------------
|
||||||
|
|
||||||
|
project = 'easymacro'
|
||||||
|
copyright = '2022, El Mau'
|
||||||
|
author = 'El Mau'
|
||||||
|
|
||||||
|
|
||||||
|
# -- General configuration ---------------------------------------------------
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ['_templates']
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
|
exclude_patterns = []
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
#
|
||||||
|
# ~ html_theme = 'alabaster'
|
||||||
|
html_theme = 'sphinx_book_theme'
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['_static']
|
|
@ -0,0 +1,32 @@
|
||||||
|
.. easymacro documentation master file, created by
|
||||||
|
sphinx-quickstart on Tue Feb 22 16:10:57 2022.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
Welcome to easymacro's documentation!
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
**easymacro** it's a library for easily develop macros en LibreOffice con Python. It is an abstraction layer between the extensive and complex LibreOffice API UNO and your code.
|
||||||
|
|
||||||
|
Probably, your will be more happy if used it. :)
|
||||||
|
|
||||||
|
You can used **easymacro** with any extension or directly in your macros.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This project is under active development.
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
01_install
|
||||||
|
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
|
@ -18,6 +18,7 @@
|
||||||
# ~ along with easymacro. If not, see <https://www.gnu.org/licenses/>.
|
# ~ along with easymacro. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import datetime
|
||||||
import getpass
|
import getpass
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
@ -26,16 +27,17 @@ import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
from functools import wraps
|
||||||
|
from pprint import pprint
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
import uno
|
import uno
|
||||||
|
from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS
|
||||||
|
from com.sun.star.awt.MessageBoxResults import YES
|
||||||
from com.sun.star.beans import PropertyValue
|
from com.sun.star.beans import PropertyValue
|
||||||
|
|
||||||
|
|
||||||
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s'
|
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s'
|
||||||
LOG_DATE = '%d/%m/%Y %H:%M:%S'
|
LOG_DATE = '%d/%m/%Y %H:%M:%S'
|
||||||
logging.addLevelName(logging.ERROR, '\033[1;41mERROR\033[1;0m')
|
logging.addLevelName(logging.ERROR, '\033[1;41mERROR\033[1;0m')
|
||||||
|
@ -52,6 +54,8 @@ PC = platform.node()
|
||||||
USER = getpass.getuser()
|
USER = getpass.getuser()
|
||||||
IS_WIN = OS == 'Windows'
|
IS_WIN = OS == 'Windows'
|
||||||
IS_MAC = OS == 'Darwin'
|
IS_MAC = OS == 'Darwin'
|
||||||
|
|
||||||
|
|
||||||
_info_debug = f"Python: {sys.version}\n\n{platform.platform()}\n\n" + '\n'.join(sys.path)
|
_info_debug = f"Python: {sys.version}\n\n{platform.platform()}\n\n" + '\n'.join(sys.path)
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,14 +66,56 @@ CTX = uno.getComponentContext()
|
||||||
SM = CTX.getServiceManager()
|
SM = CTX.getServiceManager()
|
||||||
|
|
||||||
|
|
||||||
def debug(*args):
|
def debug(*args) -> None:
|
||||||
|
"""
|
||||||
|
Show messages debug
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
args (list): iterable messages for show
|
||||||
|
"""
|
||||||
|
|
||||||
data = [str(a) for a in args]
|
data = [str(a) for a in args]
|
||||||
log.debug('\t'.join(data))
|
log.debug('\t'.join(data))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def error(info):
|
def error(message: Any) -> None:
|
||||||
log.error(info)
|
"""
|
||||||
|
Show message error
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
message (Any): message show error
|
||||||
|
"""
|
||||||
|
|
||||||
|
log.error(message)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def info(*args) -> None:
|
||||||
|
"""
|
||||||
|
Show messages info
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
args (list): iterable messages for show
|
||||||
|
"""
|
||||||
|
|
||||||
|
data = [str(a) for a in args]
|
||||||
|
log.info('\t'.join(data))
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def save_log(path: str, data: Any) -> None:
|
||||||
|
"""
|
||||||
|
Save data in file, data append to end
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
path (str): path to save
|
||||||
|
data (Any): any info data
|
||||||
|
"""
|
||||||
|
|
||||||
|
with open(path, 'a') as f:
|
||||||
|
f.write(f'{str(now())[:19]} - ')
|
||||||
|
pprint(data, stream=f)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,14 +148,72 @@ def get_app_config(node_name: str, key: str='', update: bool=False):
|
||||||
|
|
||||||
|
|
||||||
# Get info LibO
|
# Get info LibO
|
||||||
NAME = get_app_config('org.openoffice.Setup/Product', 'ooName')
|
NAME = TITLE = get_app_config('org.openoffice.Setup/Product', 'ooName')
|
||||||
VERSION = get_app_config('org.openoffice.Setup/Product','ooSetupVersion')
|
VERSION = get_app_config('org.openoffice.Setup/Product','ooSetupVersion')
|
||||||
LANGUAGE = get_app_config('org.openoffice.Setup/L10N/', 'ooLocale')
|
LANGUAGE = get_app_config('org.openoffice.Setup/L10N/', 'ooLocale')
|
||||||
LANG = LANGUAGE.split('-')[0]
|
LANG = LANGUAGE.split('-')[0]
|
||||||
|
|
||||||
|
|
||||||
INFO_DEBUG = f"{NAME} v{VERSION} {LANGUAGE}\n\n{_info_debug}"
|
INFO_DEBUG = f"{NAME} v{VERSION} {LANGUAGE}\n\n{_info_debug}"
|
||||||
|
|
||||||
|
node = '/org.openoffice.Office.Calc/Calculate/Other/Date'
|
||||||
|
year = get_app_config(node, 'YY')
|
||||||
|
month = get_app_config(node, 'MM')
|
||||||
|
day = get_app_config(node, 'DD')
|
||||||
|
DATE_OFFSET = datetime.date(year, month, day).toordinal()
|
||||||
|
|
||||||
|
|
||||||
|
def msgbox(message: Any, title: str=TITLE, buttons=MSG_BUTTONS.BUTTONS_OK, type_msg: str='infobox') -> Any:
|
||||||
|
""" Create message box
|
||||||
|
type_msg: infobox, warningbox, errorbox, querybox, messbox
|
||||||
|
http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XMessageBoxFactory.html
|
||||||
|
"""
|
||||||
|
toolkit = create_instance('com.sun.star.awt.Toolkit')
|
||||||
|
parent = toolkit.getDesktopWindow()
|
||||||
|
box = toolkit.createMessageBox(parent, type_msg, buttons, title, str(message))
|
||||||
|
return box.execute()
|
||||||
|
|
||||||
|
|
||||||
|
def question(message: Any, title: str=TITLE) -> Any:
|
||||||
|
result = msgbox(message, title, MSG_BUTTONS.BUTTONS_YES_NO, 'querybox')
|
||||||
|
return result == YES
|
||||||
|
|
||||||
|
|
||||||
|
def warning(message: Any, title: str=TITLE) -> Any:
|
||||||
|
return msgbox(message, title, type_msg='warningbox')
|
||||||
|
|
||||||
|
|
||||||
|
def errorbox(message: Any, title: str=TITLE) -> Any:
|
||||||
|
return msgbox(message, title, type_msg='errorbox')
|
||||||
|
|
||||||
|
|
||||||
|
def mri(obj: Any) -> None:
|
||||||
|
"""
|
||||||
|
Inspect object with MRI Extension
|
||||||
|
"""
|
||||||
|
m = create_instance('mytools.Mri')
|
||||||
|
if m is None:
|
||||||
|
msg = 'Extension MRI not found'
|
||||||
|
error(msg)
|
||||||
|
return
|
||||||
|
|
||||||
|
if hasattr(obj, 'obj'):
|
||||||
|
obj = obj.obj
|
||||||
|
m.inspect(obj)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def catch_exception(f):
|
||||||
|
@wraps(f)
|
||||||
|
def func(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
except Exception as e:
|
||||||
|
name = f.__name__
|
||||||
|
if IS_WIN:
|
||||||
|
msgbox(traceback.format_exc())
|
||||||
|
log.error(name, exc_info=True)
|
||||||
|
return func
|
||||||
|
|
||||||
|
|
||||||
class LOServer(object):
|
class LOServer(object):
|
||||||
HOST = 'localhost'
|
HOST = 'localhost'
|
||||||
|
|
Loading…
Reference in New Issue