<!-- SPDX-FileCopyrightText: 2023 FC Stegerman <flx@obfusk.net> -->
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
[![GitHub Release](https://img.shields.io/github/release/obfusk/catimerge.svg?logo=github)](https://github.com/obfusk/catimerge/releases)
[![PyPI Version](https://img.shields.io/pypi/v/catimerge.svg)](https://pypi.python.org/pypi/catimerge)
[![Python Versions](https://img.shields.io/pypi/pyversions/catimerge.svg)](https://pypi.python.org/pypi/catimerge)
[![CI](https://github.com/obfusk/catimerge/workflows/CI/badge.svg)](https://github.com/obfusk/catimerge/actions?query=workflow%3ACI)
[![AGPLv3+](https://img.shields.io/badge/license-AGPLv3+-blue.svg)](https://www.gnu.org/licenses/agpl-3.0.html)
<!--
<a href="https://repology.org/project/catimerge/versions">
<img src="https://repology.org/badge/vertical-allrepos/catimerge.svg?header="
alt="Packaging status" align="right" />
</a>
<a href="https://repology.org/project/python:catimerge/versions">
<img src="https://repology.org/badge/vertical-allrepos/python:catimerge.svg?header="
alt="Packaging status" align="right" />
</a>
-->
# catimerge
Merge two [Catima](https://catima.app) `.zip` exports.
```sh
$ catimerge --help
usage: catimerge [-h] [-v] [--version] FIRST_ZIP SECOND_ZIP OUTPUT_ZIP
positional arguments:
FIRST_ZIP
SECOND_ZIP
OUTPUT_ZIP
options:
-h, --help show this help message and exit
-v, --verbose
--version show program's version number and exit
$ catimerge -v catima1.zip catima2.zip out.zip
Merging 'catima1.zip' and 'catima2.zip' into 'out.zip'...
Parsing...
Version: 2
ZIP #1 has 1 group(s), 9 card(s), 2 card group(s), 5 image file(s)
ZIP #2 has 2 group(s), 5 card(s), 3 card group(s), 3 image file(s)
Merging...
Output has 3 group(s), 14 card(s), 5 card group(s), 8 image file(s)
Writing...
```
## GUI
The additional `catimerge-gui` command provides a simple GUI.
![screenshot](gui.png)
## CAVEATS
Unfortunately, Python does not support the password-protected ZIP
files created by Catima. You can either export your data without a
password, or use a tool like 7-Zip to create a temporary passwordless
ZIP file for the merge process.
For example, if you have two password-protected ZIP files as input and
want a password-protected output ZIP file as well:
<details>
```sh
$ ls
catima1.zip
catima2.zip
$ 7z -ocatima1 x catima1.zip # extract into catima1/
[...]
$ 7z -ocatima2 x catima2.zip # extract into catima2/
[...]
$ cd catima1
$ 7z a ../catima1-nopass.zip * # create passwordless ZIP
[...]
$ cd ..
$ cd catima2
$ 7z a ../catima2-nopass.zip * # create passwordless ZIP
[...]
$ cd ..
$ catimerge -v catima1-nopass.zip catima2-nopass.zip out-nopass.zip
Merging 'catima1-nopass.zip' and 'catima2-nopass.zip' into 'out-nopass.zip'...
[...]
$ 7z -oout-nopass x out-nopass.zip # extract into out-nopass/
$ cd out-nopass
$ 7z -p a ../out.zip * # create password-protected ZIP
[...]
$ cd ..
$ ls
catima1
catima1-nopass.zip
catima1.zip
catima2
catima2-nopass.zip
catima2.zip
out-nopass
out-nopass.zip
out.zip
```
</details>
## Installing
### Using pip
```bash
$ pip install catimerge
```
NB: depending on your system you may need to use e.g. `pip3 --user`
instead of just `pip`.
### From git
NB: this installs the latest development version, not the latest
release.
```bash
$ git clone https://github.com/obfusk/catimerge.git
$ cd catimerge
$ pip install -e .
```
NB: you may need to add e.g. `~/.local/bin` to your `$PATH` in order
to run `catimerge`.
To update to the latest development version:
```bash
$ cd catimerge
$ git pull --rebase
```
## Dependencies
* Python >= 3.8 (w/ Tk support for the GUI).
### Debian/Ubuntu
```bash
$ apt install python3-tk
```
## License
[![AGPLv3+](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.html)
<!-- vim: set tw=70 sw=2 sts=2 et fdm=marker : -->
Raw data
{
"_id": null,
"home_page": "https://github.com/obfusk/catimerge",
"name": "catimerge",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "catima export merge",
"author": "FC Stegerman",
"author_email": "flx@obfusk.net",
"download_url": "https://files.pythonhosted.org/packages/ff/ba/3de55181abc366fab9cbba3e6b770032e22566e5005dedb647a5b0427927/catimerge-0.1.1.tar.gz",
"platform": null,
"description": "<!-- SPDX-FileCopyrightText: 2023 FC Stegerman <flx@obfusk.net> -->\n<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->\n\n[![GitHub Release](https://img.shields.io/github/release/obfusk/catimerge.svg?logo=github)](https://github.com/obfusk/catimerge/releases)\n[![PyPI Version](https://img.shields.io/pypi/v/catimerge.svg)](https://pypi.python.org/pypi/catimerge)\n[![Python Versions](https://img.shields.io/pypi/pyversions/catimerge.svg)](https://pypi.python.org/pypi/catimerge)\n[![CI](https://github.com/obfusk/catimerge/workflows/CI/badge.svg)](https://github.com/obfusk/catimerge/actions?query=workflow%3ACI)\n[![AGPLv3+](https://img.shields.io/badge/license-AGPLv3+-blue.svg)](https://www.gnu.org/licenses/agpl-3.0.html)\n\n<!--\n<a href=\"https://repology.org/project/catimerge/versions\">\n <img src=\"https://repology.org/badge/vertical-allrepos/catimerge.svg?header=\"\n alt=\"Packaging status\" align=\"right\" />\n</a>\n\n<a href=\"https://repology.org/project/python:catimerge/versions\">\n <img src=\"https://repology.org/badge/vertical-allrepos/python:catimerge.svg?header=\"\n alt=\"Packaging status\" align=\"right\" />\n</a>\n-->\n\n# catimerge\n\nMerge two [Catima](https://catima.app) `.zip` exports.\n\n```sh\n$ catimerge --help\nusage: catimerge [-h] [-v] [--version] FIRST_ZIP SECOND_ZIP OUTPUT_ZIP\n\npositional arguments:\n FIRST_ZIP\n SECOND_ZIP\n OUTPUT_ZIP\n\noptions:\n -h, --help show this help message and exit\n -v, --verbose\n --version show program's version number and exit\n$ catimerge -v catima1.zip catima2.zip out.zip\nMerging 'catima1.zip' and 'catima2.zip' into 'out.zip'...\nParsing...\nVersion: 2\nZIP #1 has 1 group(s), 9 card(s), 2 card group(s), 5 image file(s)\nZIP #2 has 2 group(s), 5 card(s), 3 card group(s), 3 image file(s)\nMerging...\nOutput has 3 group(s), 14 card(s), 5 card group(s), 8 image file(s)\nWriting...\n```\n\n## GUI\n\nThe additional `catimerge-gui` command provides a simple GUI.\n\n![screenshot](gui.png)\n\n## CAVEATS\n\nUnfortunately, Python does not support the password-protected ZIP\nfiles created by Catima. You can either export your data without a\npassword, or use a tool like 7-Zip to create a temporary passwordless\nZIP file for the merge process.\n\nFor example, if you have two password-protected ZIP files as input and\nwant a password-protected output ZIP file as well:\n\n<details>\n\n```sh\n$ ls\ncatima1.zip\ncatima2.zip\n$ 7z -ocatima1 x catima1.zip # extract into catima1/\n[...]\n$ 7z -ocatima2 x catima2.zip # extract into catima2/\n[...]\n$ cd catima1\n$ 7z a ../catima1-nopass.zip * # create passwordless ZIP\n[...]\n$ cd ..\n$ cd catima2\n$ 7z a ../catima2-nopass.zip * # create passwordless ZIP\n[...]\n$ cd ..\n$ catimerge -v catima1-nopass.zip catima2-nopass.zip out-nopass.zip\nMerging 'catima1-nopass.zip' and 'catima2-nopass.zip' into 'out-nopass.zip'...\n[...]\n$ 7z -oout-nopass x out-nopass.zip # extract into out-nopass/\n$ cd out-nopass\n$ 7z -p a ../out.zip * # create password-protected ZIP\n[...]\n$ cd ..\n$ ls\ncatima1\ncatima1-nopass.zip\ncatima1.zip\ncatima2\ncatima2-nopass.zip\ncatima2.zip\nout-nopass\nout-nopass.zip\nout.zip\n```\n\n</details>\n\n## Installing\n\n### Using pip\n\n```bash\n$ pip install catimerge\n```\n\nNB: depending on your system you may need to use e.g. `pip3 --user`\ninstead of just `pip`.\n\n### From git\n\nNB: this installs the latest development version, not the latest\nrelease.\n\n```bash\n$ git clone https://github.com/obfusk/catimerge.git\n$ cd catimerge\n$ pip install -e .\n```\n\nNB: you may need to add e.g. `~/.local/bin` to your `$PATH` in order\nto run `catimerge`.\n\nTo update to the latest development version:\n\n```bash\n$ cd catimerge\n$ git pull --rebase\n```\n\n## Dependencies\n\n* Python >= 3.8 (w/ Tk support for the GUI).\n\n### Debian/Ubuntu\n\n```bash\n$ apt install python3-tk\n```\n\n## License\n\n[![AGPLv3+](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.html)\n\n<!-- vim: set tw=70 sw=2 sts=2 et fdm=marker : -->\n",
"bugtrack_url": null,
"license": "AGPLv3+",
"summary": "merge two catima.zip exports",
"version": "0.1.1",
"project_urls": {
"Homepage": "https://github.com/obfusk/catimerge"
},
"split_keywords": [
"catima",
"export",
"merge"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "31d6eaa8ea5e805ec672ee107b3fd5d16c950861e377aec80a026f9bf7706911",
"md5": "c8ce5109a67897d2f9d1881ed1f72f63",
"sha256": "da23980c7f47b2fcd38db92239a8a2261d7e4ade835e8839f3752c0b18618731"
},
"downloads": -1,
"filename": "catimerge-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c8ce5109a67897d2f9d1881ed1f72f63",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 19547,
"upload_time": "2023-06-25T20:40:22",
"upload_time_iso_8601": "2023-06-25T20:40:22.043739Z",
"url": "https://files.pythonhosted.org/packages/31/d6/eaa8ea5e805ec672ee107b3fd5d16c950861e377aec80a026f9bf7706911/catimerge-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ffba3de55181abc366fab9cbba3e6b770032e22566e5005dedb647a5b0427927",
"md5": "d37d536b37f77631e17ab7808f6ac588",
"sha256": "6e34dedfd55034f741b11161fe82ce4fc6fc020b93620077f7eff8de6b5f1d9a"
},
"downloads": -1,
"filename": "catimerge-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "d37d536b37f77631e17ab7808f6ac588",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 20116,
"upload_time": "2023-06-25T20:40:23",
"upload_time_iso_8601": "2023-06-25T20:40:23.609532Z",
"url": "https://files.pythonhosted.org/packages/ff/ba/3de55181abc366fab9cbba3e6b770032e22566e5005dedb647a5b0427927/catimerge-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-25 20:40:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "obfusk",
"github_project": "catimerge",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "catimerge"
}