Compare commits
4 Commits
0.3.0
...
0.3.0.post
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9581772c9e | ||
|
|
da10ea2c19 | ||
|
|
842b8b6a5c | ||
|
|
5975be2ca5 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -43,4 +43,5 @@ helpers-results
|
||||
/.mypy_cache/
|
||||
.coverage
|
||||
.mypy_cache
|
||||
test/tmp
|
||||
test/tmp
|
||||
test/nextcloud_pwd.mdp
|
||||
@@ -18,7 +18,7 @@ name = "dabdatasync"
|
||||
description = "dabdatasync"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
keywords = ["chacha","chacha","template","dabdatasync"]
|
||||
keywords = ["chacha","dabdatasync","dab","debian","proxmox","pydabfactory"]
|
||||
license = { file = "LICENSE.md" }
|
||||
|
||||
authors = [
|
||||
|
||||
@@ -17,9 +17,10 @@ import sys
|
||||
from tap import Tap
|
||||
from loguru import logger
|
||||
|
||||
from . import __Summuary__, __Name__
|
||||
from . import __Summuary__, __Name__,__version__
|
||||
from . import datasync
|
||||
from . import exceptions
|
||||
from . import compressors
|
||||
|
||||
|
||||
class dabdatasync_args_GetServices(Tap):
|
||||
@@ -36,7 +37,7 @@ class dabdatasync_args_service_abstract(Tap):
|
||||
service: Optional[str] = None
|
||||
|
||||
def configure(self) -> None:
|
||||
self.add_argument("--service")
|
||||
self.add_argument("--service",help=f"specify the service to use (availables: {datasync.DataSync_Factory.get_list()}, first found in priority if not set)")
|
||||
|
||||
|
||||
class dabdatasync_args_service_compress_abstract(dabdatasync_args_service_abstract):
|
||||
@@ -46,7 +47,7 @@ class dabdatasync_args_service_compress_abstract(dabdatasync_args_service_abstra
|
||||
|
||||
def configure(self) -> None:
|
||||
super().configure()
|
||||
self.add_argument("--compressor")
|
||||
self.add_argument("--compressor",help=f"specify the compressor method (availables: {compressors.DataSync_Compressors.get_list()}, .tar.gz if not set)")
|
||||
|
||||
|
||||
class dabdatasync_args_PullData(dabdatasync_args_service_compress_abstract):
|
||||
@@ -64,12 +65,16 @@ class dabdatasync_args_WipeRemoteData(dabdatasync_args_service_abstract):
|
||||
class dabdatasync_args(Tap):
|
||||
"""Main CLI arg parser"""
|
||||
|
||||
verbosity: int = 0
|
||||
|
||||
verbosity: int = 0
|
||||
help: bool = False
|
||||
version: bool = False
|
||||
|
||||
def configure(self) -> None:
|
||||
self.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")
|
||||
self.add_argument("--version", action="store_true", help="show version string")
|
||||
self.add_argument("-h", "--help", action="store_true", help="full help")
|
||||
self.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")
|
||||
|
||||
self.add_subparsers(dest="command", help="command type", required=True)
|
||||
self.add_subparsers(dest="command", help="command type")
|
||||
self.add_subparser("GetServices", dabdatasync_args_GetServices, help="Get registered services list")
|
||||
self.add_subparser("PullData", dabdatasync_args_PullData, help="Pull data from the service")
|
||||
self.add_subparser("PushData", dabdatasync_args_PushData, help="Push data to the service")
|
||||
@@ -86,7 +91,21 @@ def fct_main(i_args: list[str]) -> None: # pylint: disable=too-many-branches,to
|
||||
parser: dabdatasync_args = dabdatasync_args(prog=__Name__, description=__Summuary__)
|
||||
|
||||
args: dabdatasync_args = parser.parse_args(i_args)
|
||||
|
||||
|
||||
if args.help or args.version:
|
||||
print(f"{__Name__} version {__version__}")
|
||||
|
||||
if args.help:
|
||||
print(parser.format_help())
|
||||
|
||||
for name, subparser in parser._subparsers.choices.items():
|
||||
print("=========================")
|
||||
print(f"Subparser {{{name}}}")
|
||||
print(subparser.format_help())
|
||||
|
||||
if args.help or args.version:
|
||||
exit(0)
|
||||
|
||||
logger.remove()
|
||||
if args.verbosity:
|
||||
if args.verbosity == 1:
|
||||
@@ -143,13 +162,13 @@ def fct_main(i_args: list[str]) -> None: # pylint: disable=too-many-branches,to
|
||||
selected_dabdatasync.wipe_remote_data()
|
||||
return
|
||||
|
||||
raise RuntimeError("Invalid argument")
|
||||
raise RuntimeError("a command is required")
|
||||
|
||||
|
||||
def CLI():
|
||||
"""wrapper for .toml declared script"""
|
||||
fct_main(sys.argv)
|
||||
fct_main(sys.argv[1:])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
fct_main(sys.argv[1:])
|
||||
CLI()
|
||||
|
||||
@@ -75,7 +75,11 @@ class DataSync_Compressors:
|
||||
if len(found) == 1:
|
||||
return found[0]
|
||||
raise DataSyncException_TooManyCompressorFound()
|
||||
|
||||
|
||||
@classmethod
|
||||
def get_list(cls) -> list[str]:
|
||||
"""return the available compressor name list"""
|
||||
return [ _.compressor_name for _ in cls._availables]
|
||||
|
||||
@DataSync_Compressors.register
|
||||
class DataSync_Compressor__tar_gz(A_DataSync_Compressor):
|
||||
|
||||
@@ -10,9 +10,12 @@ import unittest
|
||||
from os import chdir, path as os_path
|
||||
from pathlib import Path
|
||||
import pprint
|
||||
import os
|
||||
import glob
|
||||
from io import StringIO
|
||||
from contextlib import redirect_stdout, redirect_stderr
|
||||
import shutil
|
||||
import json
|
||||
from contexttimer import Timer
|
||||
|
||||
print(__name__)
|
||||
@@ -32,7 +35,28 @@ class TestDabDataSync(unittest.TestCase):
|
||||
shutil.rmtree(testdir_path / "test_data2", ignore_errors=True)
|
||||
shutil.copytree(testdir_path / "test_data_origin", testdir_path / "test_data")
|
||||
shutil.copytree(testdir_path / "test_data_origin", testdir_path / "test_data2")
|
||||
|
||||
|
||||
nextcloud_pwd=""
|
||||
if 'nextcloud_pwd' in os.environ:
|
||||
nextcloud_pwd = os.environ.get("nextcloud_pwd")
|
||||
elif os.path.isfile(testdir_path / "nextcloud_pwd.mdp"):
|
||||
with open(testdir_path / "nextcloud_pwd.mdp","rt",encoding="utf-8") as pwd_file:
|
||||
nextcloud_pwd=pwd_file.read()
|
||||
else:
|
||||
raise RuntimeError("NextCloud pwd file not found")
|
||||
files = glob.glob(str(testdir_path / "test_data" / "*.json"))
|
||||
files += glob.glob(str(testdir_path / "test_data2" / "*.json"))
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
data = json.load(f)
|
||||
try:
|
||||
data["Args"]["FSSync_NextCloud_Password"]["value"] = nextcloud_pwd
|
||||
except Exception as exc:
|
||||
print(f"ignoring exception: {exc}")
|
||||
os.remove(file)
|
||||
with open(file, 'w') as f:
|
||||
json.dump(data, f)
|
||||
|
||||
def tearDown(self) -> None:
|
||||
shutil.rmtree(testdir_path / "test_data", ignore_errors=True)
|
||||
shutil.rmtree(testdir_path / "test_data2", ignore_errors=True)
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
},
|
||||
"FSSync_NextCloud_Password": {
|
||||
"type": "STRING",
|
||||
"value": "F3P8m-nQHik-NSmb2-mnFEF-s85RE"
|
||||
"value": ""
|
||||
},
|
||||
"FSSync_NextCloud_Path": {
|
||||
"type": "STRING",
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
"FSSync_NextCloud_Enabled": {"type": "BOOL", "value": false},
|
||||
"FSSync_NextCloud_Address": {"type": "URL", "value": "https://chacha.ddns.net/nextcloud"},
|
||||
"FSSync_NextCloud_User": {"type": "STRING", "value": "chacha-bot"},
|
||||
"FSSync_NextCloud_Password": {"type": "STRING", "value": "F3P8m-nQHik-NSmb2-mnFEF-s85RE"},
|
||||
"FSSync_NextCloud_Password": {"type": "STRING", "value": ""},
|
||||
"FSSync_NextCloud_Path": {"type": "STRING", "value": "pydabfactory"}
|
||||
}}
|
||||
Reference in New Issue
Block a user