From 71d40fa6fa474f55c37311928394c9bf0e07609e Mon Sep 17 00:00:00 2001 From: El Mau Date: Wed, 2 Mar 2022 14:44:58 -0600 Subject: [PATCH] Doc for paths --- docs/source/paths.rst | 233 ++++++++++++++++++++++++++++++++++++++++++ source/easymacro.py | 27 ++--- 2 files changed, 247 insertions(+), 13 deletions(-) diff --git a/docs/source/paths.rst b/docs/source/paths.rst index 111bb42..7779b96 100644 --- a/docs/source/paths.rst +++ b/docs/source/paths.rst @@ -312,4 +312,237 @@ Can select multiple files path_files = app.path.get_file(multiple=True) +Get files +--------- +Get files not recursively +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + path = '/home/mau/Documents' + files = app.path.files(path) + for f in files: + app.debug(f) + + +Add filter +^^^^^^^^^^ + +.. code-block:: python + + files = app.path.files(path, '*.pdf') + + +Get content files, recursively +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + files = app.path.files(path, '**/*.pdf') + + +Get content files recursively +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This method use `os.walk` + +.. code-block:: python + + path = '/home/mau/Documents' + files = app.path.walk(path) + for f in files: + app.debug(f) + + +Add filter +^^^^^^^^^^ + +.. code-block:: python + + files = app.path.walk(path, 'ods') + + # or filters + + files = app.path.walk(path, 'ods|odt') + + +Get directories +--------------- + +Get directories not recursively +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This method use library `pathlib` + +.. code-block:: python + + path = '/home/mau/Documents' + folders = app.path.dirs(path) + for f in folders: + app.debug(f) + + +Get directories recursively +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This method use `os.walk` + +.. code-block:: python + + path = '/home/mau/Documents' + folders = app.path.walk_dirs(path) + for f in folders: + app.debug(f) + + +Get info in a tuple +^^^^^^^^^^^^^^^^^^^ + +Like (ID_FOLDER, ID_PARENT, NAME) + +.. code-block:: python + + path = '/home/mau/Documents' + folders = app.path.walk_dirs(path, True) + for f in folders: + app.debug(f) + + +Get install path extension from id +---------------------------------- + +.. code-block:: python + + id_ext = 'net.elmau.zaz.EasyMacro' + path = app.path.ext(id_ext) + app.debug(path) + +.. code-block:: bash + + 24/06/2021 21:47:29 - DEBUG - /home/mau/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu20665x29msz.tmp_/ZAZEasyMacro_v0.1.0.oxt + + +Replace extension +----------------- + +.. code-block:: python + + path = '/home/mau/myFile.ods' + path_new = app.path.replace_ext(path, 'pdf') + app.debug(path_new) + + +Open any type file +------------------ + +Open with default application in OS. + +.. code-block:: python + + path = '/home/mau/file.pdf' + app.path.open(path) + + path = '/home/mau/index.html' + app.path.open(path) + + +Save and read text data +----------------------- + +Default encoding is UTF8 + +.. code-block:: python + + data = """Do you want to know who you are? Don't ask. Act! + Action will delineate and define you. + + Thomas Jefferson + """ + + path = '/home/mau/temp.txt' + app.path.save(path, data) + + data = app.path.read(path) + app.msgbox(data) + +Change encoding + +.. code-block:: python + + app.path.save(path, data, 'iso-8859-1') + + +Save and read binary data +------------------------- + +.. code-block:: python + + data = b'Binary data' + path = '/home/mau/temp.bin' + app.path.save_bin(path, data) + + data = app.path.read_bin(path) + app.msgbox(data) + + +Save and read json +------------------ + +.. code-block:: python + + path = '/home/mau/data.json' + data = { + 'type': 'calc', + 'name': 'myfile.ods', + } + app.path.to_json(path, data) + + data = app.path.from_json(path) + + app.msgbox(data) + + +Save and read csv +----------------- + +You can used the same way that `python csv`_ + +.. code-block:: python + + path = '/home/mau/data.csv' + data = ( + (1, 'one', app.now()), + (2, 'two', app.now()), + (3, 'three', app.now()), + ) + app.path.to_csv(path, data) + + data = app.path.from_csv(path) + + app.msgbox(data) + + +Delete files and directories +---------------------------- + +**CAUTION**: This method delete files and directories without confirmation, always ask to user first. + +.. code-block:: python + + path = '/home/mau/temp.bin' + result = app.path.kill(path) + app.msgbox(result) + + +Delete directory and all content +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + path = '/home/mau/safe_for_delete' + result = app.path.kill(path) + app.msgbox(result) + + +.. _python csv: https://docs.python.org/3.7/library/csv.html diff --git a/source/easymacro.py b/source/easymacro.py index ccf86cf..036dd49 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -18,6 +18,7 @@ # ~ along with easymacro. If not, see . +import csv import datetime import getpass import hashlib @@ -25,6 +26,7 @@ import json import logging import os import platform +import re import shlex import shutil import socket @@ -1222,18 +1224,6 @@ class Paths(object): files = [str(p) for p in Path(path).glob(pattern) if p.is_file()] return files - @classmethod - def dirs(cls, path): - """Get directories in path - - :param path: Path to scan - :type path: str - :return: Directories in path - :rtype: list - """ - dirs = [str(p) for p in Path(path).iterdir() if p.is_dir()] - return dirs - @classmethod def walk(cls, path, filters=''): """Get all files in path recursively @@ -1254,6 +1244,18 @@ class Paths(object): paths += [cls.join(folder, f) for f in files] return paths + @classmethod + def dirs(cls, path): + """Get directories in path + + :param path: Path to scan + :type path: str + :return: Directories in path + :rtype: list + """ + dirs = [str(p) for p in Path(path).iterdir() if p.is_dir()] + return dirs + @classmethod def walk_dirs(cls, path, tree=False): """Get directories recursively @@ -1268,7 +1270,6 @@ class Paths(object): folders = [] if tree: i = 0 - p = 0 parents = {path: 0} for root, dirs, _ in os.walk(path): for name in dirs: