Compare commits
10 Commits
0.3.0.post
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 6d5cbeed49 | |||
|
|
e95b59ae3d | ||
|
|
7e6aacc82f | ||
|
|
cb4872d057 | ||
|
|
f9c03a83f3 | ||
|
|
f4ac5360b7 | ||
| 636316650e | |||
| bfcf65b6e7 | |||
| f39fd9cf44 | |||
|
|
dd45b1281f |
2
.project
2
.project
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<projectDescription>
|
<projectDescription>
|
||||||
<name>{{project_name}}</name>
|
<name>dabdatasync</name>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
<projects>
|
<projects>
|
||||||
</projects>
|
</projects>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import sys
|
|||||||
from tap import Tap
|
from tap import Tap
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from . import __Summuary__, __Name__,__version__
|
from . import __Summuary__, __Name__, __version__
|
||||||
from . import datasync
|
from . import datasync
|
||||||
from . import exceptions
|
from . import exceptions
|
||||||
from . import compressors
|
from . import compressors
|
||||||
@@ -37,7 +37,10 @@ class dabdatasync_args_service_abstract(Tap):
|
|||||||
service: Optional[str] = None
|
service: Optional[str] = None
|
||||||
|
|
||||||
def configure(self) -> None:
|
def configure(self) -> None:
|
||||||
self.add_argument("--service",help=f"specify the service to use (availables: {datasync.DataSync_Factory.get_list()}, first found in priority if not set)")
|
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):
|
class dabdatasync_args_service_compress_abstract(dabdatasync_args_service_abstract):
|
||||||
@@ -47,7 +50,10 @@ class dabdatasync_args_service_compress_abstract(dabdatasync_args_service_abstra
|
|||||||
|
|
||||||
def configure(self) -> None:
|
def configure(self) -> None:
|
||||||
super().configure()
|
super().configure()
|
||||||
self.add_argument("--compressor",help=f"specify the compressor method (availables: {compressors.DataSync_Compressors.get_list()}, .tar.gz if not set)")
|
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):
|
class dabdatasync_args_PullData(dabdatasync_args_service_compress_abstract):
|
||||||
@@ -65,14 +71,14 @@ class dabdatasync_args_WipeRemoteData(dabdatasync_args_service_abstract):
|
|||||||
class dabdatasync_args(Tap):
|
class dabdatasync_args(Tap):
|
||||||
"""Main CLI arg parser"""
|
"""Main CLI arg parser"""
|
||||||
|
|
||||||
verbosity: int = 0
|
verbosity: int = 0
|
||||||
help: bool = False
|
help: bool = False
|
||||||
version: bool = False
|
version: bool = False
|
||||||
|
|
||||||
def configure(self) -> None:
|
def configure(self) -> None:
|
||||||
self.add_argument("--version", action="store_true", help="show version string")
|
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("-h", "--help", action="store_true", help="full help")
|
||||||
self.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")
|
self.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")
|
||||||
|
|
||||||
self.add_subparsers(dest="command", help="command type")
|
self.add_subparsers(dest="command", help="command type")
|
||||||
self.add_subparser("GetServices", dabdatasync_args_GetServices, help="Get registered services list")
|
self.add_subparser("GetServices", dabdatasync_args_GetServices, help="Get registered services list")
|
||||||
@@ -86,26 +92,26 @@ class dabdatasync_args(Tap):
|
|||||||
self.command: Union[str, None] = cast(Union[str, None], self.command) # pylint: disable=attribute-defined-outside-init
|
self.command: Union[str, None] = cast(Union[str, None], self.command) # pylint: disable=attribute-defined-outside-init
|
||||||
|
|
||||||
|
|
||||||
def fct_main(i_args: list[str]) -> None: # pylint: disable=too-many-branches,too-complex
|
def fct_main(i_args: list[str]) -> None: # pylint: disable=too-many-branches,too-complex,too-many-statements
|
||||||
"""CLI main function"""
|
"""CLI main function"""
|
||||||
parser: dabdatasync_args = dabdatasync_args(prog=__Name__, description=__Summuary__)
|
parser: dabdatasync_args = dabdatasync_args(prog=__Name__, description=__Summuary__)
|
||||||
|
|
||||||
args: dabdatasync_args = parser.parse_args(i_args)
|
args: dabdatasync_args = parser.parse_args(i_args)
|
||||||
|
|
||||||
if args.help or args.version:
|
if args.help or args.version:
|
||||||
print(f"{__Name__} version {__version__}")
|
print(f"{__Name__} version {__version__}")
|
||||||
|
|
||||||
if args.help:
|
if args.help:
|
||||||
print(parser.format_help())
|
print(parser.format_help())
|
||||||
|
|
||||||
for name, subparser in parser._subparsers.choices.items():
|
for name, subparser in parser._subparsers.choices.items(): # type: ignore[union-attr] # pylint: disable=protected-access
|
||||||
print("=========================")
|
print("=========================")
|
||||||
print(f"Subparser {{{name}}}")
|
print(f"Subparser {{{name}}}")
|
||||||
print(subparser.format_help())
|
print(subparser.format_help())
|
||||||
|
|
||||||
if args.help or args.version:
|
if args.help or args.version:
|
||||||
exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
logger.remove()
|
logger.remove()
|
||||||
if args.verbosity:
|
if args.verbosity:
|
||||||
if args.verbosity == 1:
|
if args.verbosity == 1:
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import warnings
|
|||||||
|
|
||||||
try: # pragma: no cover
|
try: # pragma: no cover
|
||||||
__version__ = version("dabdatasync")
|
__version__ = version("dabdatasync")
|
||||||
except PackageNotFoundError: # pragma: no cover
|
except PackageNotFoundError: # pragma: no cover
|
||||||
warnings.warn("can not read __version__, assuming local test context, setting it to ?.?.?")
|
warnings.warn("can not read __version__, assuming local test context, setting it to ?.?.?")
|
||||||
__version__ = "?.?.?"
|
__version__ = "?.?.?"
|
||||||
|
|
||||||
|
|||||||
@@ -75,11 +75,12 @@ class DataSync_Compressors:
|
|||||||
if len(found) == 1:
|
if len(found) == 1:
|
||||||
return found[0]
|
return found[0]
|
||||||
raise DataSyncException_TooManyCompressorFound()
|
raise DataSyncException_TooManyCompressorFound()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_list(cls) -> list[str]:
|
def get_list(cls) -> list[str]:
|
||||||
"""return the available compressor name list"""
|
"""return the available compressor name list"""
|
||||||
return [ _.compressor_name for _ in cls._availables]
|
return [_.compressor_name for _ in cls._availables]
|
||||||
|
|
||||||
|
|
||||||
@DataSync_Compressors.register
|
@DataSync_Compressors.register
|
||||||
class DataSync_Compressor__tar_gz(A_DataSync_Compressor):
|
class DataSync_Compressor__tar_gz(A_DataSync_Compressor):
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class A_DataSync(ABC):
|
|||||||
"""Abstract DataSync class"""
|
"""Abstract DataSync class"""
|
||||||
|
|
||||||
service_name: str = "ABSTRACT"
|
service_name: str = "ABSTRACT"
|
||||||
|
priority: int = 0
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@final
|
@final
|
||||||
@@ -178,3 +179,8 @@ class DataSync_Factory:
|
|||||||
"""decorator to register a concrete class to the factory"""
|
"""decorator to register a concrete class to the factory"""
|
||||||
cls.ar_cls_DataSync.add(_cls)
|
cls.ar_cls_DataSync.add(_cls)
|
||||||
return _cls
|
return _cls
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_list(cls) -> list[str]:
|
||||||
|
"""return the available DataSync concrete class name list"""
|
||||||
|
return [_.service_name for _ in cls.ar_cls_DataSync]
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class C_DataSync_NextCloud(A_DataSync):
|
|||||||
"""Concrete DataSync class - Nextcloud"""
|
"""Concrete DataSync class - Nextcloud"""
|
||||||
|
|
||||||
service_name: str = "Nextcloud"
|
service_name: str = "Nextcloud"
|
||||||
|
priority: int = 100
|
||||||
|
|
||||||
def __init__(self, manifest: dict[Any, Any], cls_compressor: type[A_DataSync_Compressor]) -> None:
|
def __init__(self, manifest: dict[Any, Any], cls_compressor: type[A_DataSync_Compressor]) -> None:
|
||||||
super().__init__(manifest, cls_compressor)
|
super().__init__(manifest, cls_compressor)
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
# Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Unported License.
|
# Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Unported License.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the license along with this
|
# You should have received a copy of the license along with this
|
||||||
# work. If not, see <https://creativecommons.org/licenses/by-nc-sa/4.0/>.
|
# work. If not, see <https://creativecommons.org/licenses/by-nc-sa/4.0/>.
|
||||||
|
|||||||
@@ -35,32 +35,46 @@ class TestDabDataSync(unittest.TestCase):
|
|||||||
shutil.rmtree(testdir_path / "test_data2", ignore_errors=True)
|
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_data")
|
||||||
shutil.copytree(testdir_path / "test_data_origin", testdir_path / "test_data2")
|
shutil.copytree(testdir_path / "test_data_origin", testdir_path / "test_data2")
|
||||||
|
|
||||||
nextcloud_pwd=""
|
nextcloud_pwd = ""
|
||||||
if 'nextcloud_pwd' in os.environ:
|
if "nextcloud_pwd" in os.environ:
|
||||||
nextcloud_pwd = os.environ.get("nextcloud_pwd")
|
nextcloud_pwd = os.environ.get("nextcloud_pwd")
|
||||||
elif os.path.isfile(testdir_path / "nextcloud_pwd.mdp"):
|
elif os.path.isfile(testdir_path / "nextcloud_pwd.mdp"):
|
||||||
with open(testdir_path / "nextcloud_pwd.mdp","rt",encoding="utf-8") as pwd_file:
|
with open(testdir_path / "nextcloud_pwd.mdp", "rt", encoding="utf-8") as pwd_file:
|
||||||
nextcloud_pwd=pwd_file.read()
|
nextcloud_pwd = pwd_file.read()
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("NextCloud pwd file not found")
|
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"))
|
files = glob.glob(str(testdir_path / "*.json"))
|
||||||
|
files += glob.glob(str(testdir_path / "*.json"))
|
||||||
for file in files:
|
for file in files:
|
||||||
with open(file) as f:
|
with open(file) as f:
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
try:
|
try:
|
||||||
data["Args"]["FSSync_NextCloud_Password"]["value"] = nextcloud_pwd
|
data["Args"]["FSSync_NextCloud_Password"]["value"] = nextcloud_pwd
|
||||||
except Exception as exc:
|
except Exception:
|
||||||
print(f"ignoring exception: {exc}")
|
pass
|
||||||
os.remove(file)
|
os.remove(file)
|
||||||
with open(file, 'w') as f:
|
with open(file, "w") as f:
|
||||||
json.dump(data, f)
|
json.dump(data, f, sort_keys=True, indent=4)
|
||||||
|
|
||||||
def tearDown(self) -> None:
|
def tearDown(self) -> None:
|
||||||
shutil.rmtree(testdir_path / "test_data", ignore_errors=True)
|
shutil.rmtree(testdir_path / "test_data", ignore_errors=True)
|
||||||
shutil.rmtree(testdir_path / "test_data2", ignore_errors=True)
|
shutil.rmtree(testdir_path / "test_data2", ignore_errors=True)
|
||||||
|
|
||||||
|
files = glob.glob(str(testdir_path / "*.json"))
|
||||||
|
files += glob.glob(str(testdir_path / "*.json"))
|
||||||
|
for file in files:
|
||||||
|
with open(file) as f:
|
||||||
|
data = json.load(f)
|
||||||
|
try:
|
||||||
|
data["Args"]["FSSync_NextCloud_Password"]["value"] = ""
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
os.remove(file)
|
||||||
|
with open(file, "w") as f:
|
||||||
|
json.dump(data, f, sort_keys=True, indent=4)
|
||||||
|
|
||||||
def test_version(self):
|
def test_version(self):
|
||||||
self.assertNotEqual(dabdatasync.__version__, "?.?.?")
|
self.assertNotEqual(dabdatasync.__version__, "?.?.?")
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002",
|
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002",
|
||||||
"Args": {}}
|
"Args": {}
|
||||||
|
}
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
{
|
{
|
||||||
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002"}
|
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,25 @@
|
|||||||
{
|
{
|
||||||
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002",
|
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002",
|
||||||
"Args": {
|
"Args": {
|
||||||
"FSSync_NextCloud_Enabled": {"type": "BOOL", "value": false},
|
"FSSync_NextCloud_Address": {
|
||||||
"FSSync_NextCloud_Address": {"type": "URL", "value": "https://chacha.ddns.net/nextcloud"},
|
"type": "URL",
|
||||||
"FSSync_NextCloud_User": {"type": "STRING", "value": "chacha-bot"},
|
"value": "https://chacha.ddns.net/nextcloud"
|
||||||
"FSSync_NextCloud_Password": {"type": "STRING", "value": ""},
|
},
|
||||||
"FSSync_NextCloud_Path": {"type": "STRING", "value": "pydabfactory"}
|
"FSSync_NextCloud_Enabled": {
|
||||||
}}
|
"type": "BOOL",
|
||||||
|
"value": false
|
||||||
|
},
|
||||||
|
"FSSync_NextCloud_Password": {
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"FSSync_NextCloud_Path": {
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "pydabfactory"
|
||||||
|
},
|
||||||
|
"FSSync_NextCloud_User": {
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "chacha-bot"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002",
|
"APP_ID": "2a13dff2-1298-11ee-be56-0242ac120002",
|
||||||
"Args": {
|
"Args": {
|
||||||
"FSSync_NextCloud_Enabled": {"type": "BOOL", "value": true}
|
"FSSync_NextCloud_Enabled": {
|
||||||
}}
|
"type": "BOOL",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user