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.
@@ -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,11 @@
1
+ from typing import TypedDict
2
+
3
+ class PathItem(TypedDict):
4
+ source: str
5
+ dest: str
6
+ path_type: str
7
+
8
+ class SyncStatusItem(PathItem):
9
+ id: str
10
+ status: str
11
+ operation_type: str
@@ -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,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ easyclone = easyclone.main:app