easyclone 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- easyclone/__main__.py +4 -0
- easyclone/config.py +97 -0
- easyclone/ipc/__init__.py +2 -0
- easyclone/ipc/client.py +26 -0
- easyclone/ipc/server.py +50 -0
- easyclone/main.py +59 -0
- easyclone/rclone/__init__.py +3 -0
- easyclone/rclone/backup.py +59 -0
- easyclone/rclone/create_dirs.py +159 -0
- easyclone/rclone/operations.py +48 -0
- easyclone/shared/__init__.py +3 -0
- easyclone/shared/sync_status.py +61 -0
- easyclone/utils/__init__.py +2 -0
- easyclone/utils/essentials.py +24 -0
- easyclone/utils/path_manipulation.py +37 -0
- easyclone/utypes/__init__.py +3 -0
- easyclone/utypes/config.py +16 -0
- easyclone/utypes/enums.py +29 -0
- easyclone/utypes/models.py +11 -0
- easyclone-0.1.0.dist-info/METADATA +62 -0
- easyclone-0.1.0.dist-info/RECORD +25 -0
- easyclone-0.1.0.dist-info/WHEEL +5 -0
- easyclone-0.1.0.dist-info/entry_points.txt +2 -0
- easyclone-0.1.0.dist-info/licenses/LICENSE +674 -0
- easyclone-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
class LogLevel(Enum):
|
|
4
|
+
ERROR = "error"
|
|
5
|
+
LOG = "log"
|
|
6
|
+
INFO = "info"
|
|
7
|
+
WARN = "warn"
|
|
8
|
+
|
|
9
|
+
class BackupLog(Enum):
|
|
10
|
+
OK = "✓"
|
|
11
|
+
ERR = "⛌"
|
|
12
|
+
WAIT = ""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CommandType(Enum):
|
|
16
|
+
COPY = "copy"
|
|
17
|
+
SYNC = "sync"
|
|
18
|
+
|
|
19
|
+
class PathType(Enum):
|
|
20
|
+
FILE = "file"
|
|
21
|
+
DIR = "dir"
|
|
22
|
+
|
|
23
|
+
class BackupStatus(Enum):
|
|
24
|
+
IN_PROGRESS = "in_progress"
|
|
25
|
+
FINISHED = "finished"
|
|
26
|
+
|
|
27
|
+
class RcloneOperationType(Enum):
|
|
28
|
+
BACKUP = "backup"
|
|
29
|
+
MKDIR = "mkdir"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: easyclone
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Very convenient Rclone bulk backup wrapper
|
|
5
|
+
Project-URL: Repository, https://github.com/dybdeskarphet/easyclone
|
|
6
|
+
Project-URL: Documentation, https://github.com/dybdeskarphet/easyclone
|
|
7
|
+
Project-URL: Issues, https://github.com/dybdeskarphet/easyclone/issues
|
|
8
|
+
Requires-Python: >=3.13
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: pydantic>=2.11.5
|
|
12
|
+
Requires-Dist: toml>=0.10.2
|
|
13
|
+
Requires-Dist: typer>=0.16.0
|
|
14
|
+
Dynamic: license-file
|
|
15
|
+
|
|
16
|
+
# ☁️ easyclone
|
|
17
|
+
|
|
18
|
+
**easyclone** is a lightweight, configurable CLI tool that wraps `rclone` to behave more like Google's *Backup and Sync* app.
|
|
19
|
+
|
|
20
|
+
You define what to back up, where to back it up, and EasyClone handles the syncs and copies — clean, fast, and reliable.
|
|
21
|
+
|
|
22
|
+
## 🚀 Features
|
|
23
|
+
|
|
24
|
+
* 🔁 Sync & Copy support per-path
|
|
25
|
+
* 📁 Backup multiple paths at once
|
|
26
|
+
* 🧠 Human-friendly TOML config
|
|
27
|
+
* 🛠️ IPC-ready architecture for future GUI or monitoring tools
|
|
28
|
+
* 🔊 Optional verbose logging
|
|
29
|
+
|
|
30
|
+
## 🛠️ Requirements
|
|
31
|
+
|
|
32
|
+
* Python **3.13+**
|
|
33
|
+
* [`rclone`](https://rclone.org/) installed and accessible in your `$PATH`
|
|
34
|
+
* `pydantic>=2.11.5`
|
|
35
|
+
* `toml>=0.10.2`
|
|
36
|
+
* `typer>=0.16.0`
|
|
37
|
+
|
|
38
|
+
## 🧪 Example Usage
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
easyclone start-backup
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
It will:
|
|
45
|
+
|
|
46
|
+
* Sync the paths in `sync_paths`
|
|
47
|
+
* Copy the paths in `copy_paths`
|
|
48
|
+
* Use the `remote_name` and `root_dir` to target your cloud storage
|
|
49
|
+
|
|
50
|
+
## 🙋♀️ Contributing
|
|
51
|
+
|
|
52
|
+
PRs welcome. Bug reports even more welcome.
|
|
53
|
+
|
|
54
|
+
## ❓ FAQ
|
|
55
|
+
|
|
56
|
+
Why does it create the folders first?
|
|
57
|
+
> Because services like Google Drive support multiple folders with the same name in the same directory. So when you try to concurrently backup paths from the same directory, it will create the parent directory more than once, and we don't want that.
|
|
58
|
+
|
|
59
|
+
## 📄 License
|
|
60
|
+
|
|
61
|
+
GPLv3 — do whatever you want, just don't blame me if you sync your `/` folder to the cloud :)
|
|
62
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
easyclone/__main__.py,sha256=RCZmmoCNOWC7rAfIDm_LaymsybXIzE6McYbUEEkf9P8,60
|
|
2
|
+
easyclone/config.py,sha256=KZZ2Nci3OaHdlLBUiDURsBNk6ykzGFzbgbVWJgnagHA,3045
|
|
3
|
+
easyclone/main.py,sha256=8x29pJOeRBcN7-bo9_obQcGRL20V4vEIyEPS5H0UaNU,2241
|
|
4
|
+
easyclone/ipc/__init__.py,sha256=D8LmJOt3zBb0pC4PMmhWh9eeO4fwKO1mkIURQKR6mFI,71
|
|
5
|
+
easyclone/ipc/client.py,sha256=vidZYAT9c_0j7-tdgIZlWyMZFRj-3kFCX-qkqRqQf94,691
|
|
6
|
+
easyclone/ipc/server.py,sha256=J1LRdBg2-aGmki2BSLkikPUKjbR5eoLLcln1m6trEPU,1597
|
|
7
|
+
easyclone/rclone/__init__.py,sha256=P2QzkNRtPCsiq_pEJJMiHvvkkPAVzYnQENJmMsNOCdA,139
|
|
8
|
+
easyclone/rclone/backup.py,sha256=J7oD0ggVXCMWDBQG86zS5yuILZVE4rQL4ZJRXd7hXBY,2406
|
|
9
|
+
easyclone/rclone/create_dirs.py,sha256=VA17p9_ugjUw1UsvpS3O-n3amYit0PXtKozapFxLYYA,5528
|
|
10
|
+
easyclone/rclone/operations.py,sha256=qiJ7tsur5xOZA6mXm_0IIQm9XLq2o41PG9e9OfUADPU,1869
|
|
11
|
+
easyclone/shared/__init__.py,sha256=W7RC303nbvfZjUVfkxx8eygOk-Cgd5QnOR_voIKh4ZM,64
|
|
12
|
+
easyclone/shared/sync_status.py,sha256=s6HIGuxKGmV0Q1sMlJCDpYMOFEcp7gRL6M5s0Gk65zE,1949
|
|
13
|
+
easyclone/utils/__init__.py,sha256=L5Ptm5yN3-vLeYx0xObnl6jZEfFqb9BDazawPcTnRfc,88
|
|
14
|
+
easyclone/utils/essentials.py,sha256=g4UTzZz3lzkzL5HOo7Jak4w2divHYTl6IYWFVMq_-zM,691
|
|
15
|
+
easyclone/utils/path_manipulation.py,sha256=Zns50LDyXEcPRRxKm6fg6wMK0C6SZO8Aog0ptLPlzG0,1088
|
|
16
|
+
easyclone/utypes/__init__.py,sha256=x9-_ZwBSAPD2rg2wVDZh73QmzLz93Sp271kSatYRKc8,65
|
|
17
|
+
easyclone/utypes/config.py,sha256=OpZpbfFfQL9XOqGOtXA3Z2z2dIJGgiSfO3uR9QqkgIw,355
|
|
18
|
+
easyclone/utypes/enums.py,sha256=lc23od0aCadAbGekwhZag9cdVUfd18aijmVDWDcVJbs,470
|
|
19
|
+
easyclone/utypes/models.py,sha256=vxuyxlWgCcmwwT_4p7wI2la2BbW80HDNovB8H_dpW_k,191
|
|
20
|
+
easyclone-0.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
21
|
+
easyclone-0.1.0.dist-info/METADATA,sha256=6ns5K-BxwRQiw7zHopnNBv7qMNI-uLN_jjHeHfRIjxQ,1881
|
|
22
|
+
easyclone-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
23
|
+
easyclone-0.1.0.dist-info/entry_points.txt,sha256=ukxo6aGwBHPHRmAe9VSGDJsYouHeo9XiTbGWrIg0i1Y,49
|
|
24
|
+
easyclone-0.1.0.dist-info/top_level.txt,sha256=B65BPHvXKdnaQW2aJzNfSsI1U5sEYsuFeVI_aw4jOxU,10
|
|
25
|
+
easyclone-0.1.0.dist-info/RECORD,,
|