From 72d780e55c0098ca3cd46281c4a1d70e2d453acf Mon Sep 17 00:00:00 2001 From: Thomas Vogl Date: Fri, 16 Dec 2022 23:40:58 +0100 Subject: [PATCH 1/3] implement setup.py --- .gitignore | 6 + {databinding => mymuell2caldav}/__init__.py | 0 .../databinding}/CalendarSync.py | 0 .../databinding}/LocalDataStorage.py | 0 .../databinding}/MyMuellDataModel.py | 2 +- .../databinding}/__init__.py | 0 .../mymuell2caldav.py | 9 +- {utils => mymuell2caldav/utils}/GuiWorker.py | 0 mymuell2caldav/utils/__init__.py | 0 setup.py | 115 ++++++++++++++++++ start.py | 5 + 11 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 .gitignore rename {databinding => mymuell2caldav}/__init__.py (100%) rename {databinding => mymuell2caldav/databinding}/CalendarSync.py (100%) rename {databinding => mymuell2caldav/databinding}/LocalDataStorage.py (100%) rename {databinding => mymuell2caldav/databinding}/MyMuellDataModel.py (96%) rename {utils => mymuell2caldav/databinding}/__init__.py (100%) rename mymuell2caldav.py => mymuell2caldav/mymuell2caldav.py (97%) rename {utils => mymuell2caldav/utils}/GuiWorker.py (100%) create mode 100644 mymuell2caldav/utils/__init__.py create mode 100644 setup.py create mode 100644 start.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e0099e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +dist/** +*.egg-info +build/** +__pycache__ +.idea +MANIFEST \ No newline at end of file diff --git a/databinding/__init__.py b/mymuell2caldav/__init__.py similarity index 100% rename from databinding/__init__.py rename to mymuell2caldav/__init__.py diff --git a/databinding/CalendarSync.py b/mymuell2caldav/databinding/CalendarSync.py similarity index 100% rename from databinding/CalendarSync.py rename to mymuell2caldav/databinding/CalendarSync.py diff --git a/databinding/LocalDataStorage.py b/mymuell2caldav/databinding/LocalDataStorage.py similarity index 100% rename from databinding/LocalDataStorage.py rename to mymuell2caldav/databinding/LocalDataStorage.py diff --git a/databinding/MyMuellDataModel.py b/mymuell2caldav/databinding/MyMuellDataModel.py similarity index 96% rename from databinding/MyMuellDataModel.py rename to mymuell2caldav/databinding/MyMuellDataModel.py index d7033ca..0654197 100644 --- a/databinding/MyMuellDataModel.py +++ b/mymuell2caldav/databinding/MyMuellDataModel.py @@ -1,6 +1,6 @@ import http.client import json -import databinding.LocalDataStorage as LocalDataStorage +import mymuell2caldav.databinding.LocalDataStorage as LocalDataStorage import logging import re diff --git a/utils/__init__.py b/mymuell2caldav/databinding/__init__.py similarity index 100% rename from utils/__init__.py rename to mymuell2caldav/databinding/__init__.py diff --git a/mymuell2caldav.py b/mymuell2caldav/mymuell2caldav.py similarity index 97% rename from mymuell2caldav.py rename to mymuell2caldav/mymuell2caldav.py index 18c5ba5..d640559 100644 --- a/mymuell2caldav.py +++ b/mymuell2caldav/mymuell2caldav.py @@ -20,16 +20,17 @@ from PyQt5.QtWidgets import \ from PyQt5.QtCore import Qt import sys -from databinding import CalendarSync, MyMuellDataModel -from utils.GuiWorker import GuiWorker +from mymuell2caldav.databinding.CalendarSync import CalendarSync +from mymuell2caldav.databinding.MyMuellDataModel import MyMuellDataModel +from mymuell2caldav.utils.GuiWorker import GuiWorker class MyMuell2CalDavGui(QMainWindow): def __init__(self, parent=None): super().__init__(parent) - self._dataModel = MyMuellDataModel.MyMuellDataModel() - self._davClient = CalendarSync.CalendarSync() + self._dataModel = MyMuellDataModel() + self._davClient = CalendarSync() self._selectedCity = None diff --git a/utils/GuiWorker.py b/mymuell2caldav/utils/GuiWorker.py similarity index 100% rename from utils/GuiWorker.py rename to mymuell2caldav/utils/GuiWorker.py diff --git a/mymuell2caldav/utils/__init__.py b/mymuell2caldav/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..12c418c --- /dev/null +++ b/setup.py @@ -0,0 +1,115 @@ +"""A setuptools based setup module. +See: +https://packaging.python.org/en/latest/distributing.html +https://github.com/pypa/sampleproject +""" + +import os +import re +# To use a consistent encoding +from codecs import open +from os import path + +# Always prefer setuptools over distutils +from setuptools import find_packages, setup + +here = path.abspath(path.dirname(__file__)) + + +def get_requires(filename): + requirements = [] + with open(filename, "rt") as req_file: + for line in req_file.read().splitlines(): + if not line.strip().startswith("#"): + requirements.append(line) + return requirements + + +project_requirements = get_requires("requirements.txt") + + +def generate_long_description_file(): + this_directory = path.abspath(path.dirname(__file__)) + with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f: + long_description = f.read() + return long_description + + +setup( + name='mymuell2caldav', + # Versions should comply with PEP440. For a discussion on single-sourcing + # the version across setup.py and the project code, see + # https://packaging.python.org/en/latest/single_source_version.html + version='1.0.0', + + description='...', + long_description=generate_long_description_file(), + long_description_content_type='text/markdown', + + # The project's main homepage. + url='https://github.com/Av3m/MyMuell2CalDAV', + + # Author details + author='Av3m', + author_email='7688354+Av3m@users.noreply.github.com', + + # Choose your license + license='GPLv3', + + # See https://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Topic :: Software Development :: Build Tools', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8' + ], + + # What does your project relate to? + keywords=['caldav'], + + # You can just specify the packages manually here if your project is + # simple. Or you can use find_packages(). + packages=find_packages(), + + # Alternatively, if you want to distribute just a my_module.py, uncomment + # this: + # py_modules=["my_module"], + + # List run-time dependencies here. These will be installed by pip when + # your project is installed. For an analysis of "install_requires" vs pip's + # requirements files see: + # https://packaging.python.org/en/latest/requirements.html + install_requires=project_requirements, + + # List additional groups of dependencies here (e.g. development + # dependencies). You can install these using the following syntax, + # for example: + # $ pip install -e .[dev,test] + extras_require={ + }, + + # If there are data files included in your packages that need to be + # installed, specify them here. If using Python 2.6 or less, then these + # have to be included in MANIFEST.in as well. + package_data={ + }, + + # Although 'package_data' is the preferred approach, in some case you may + # need to place data files outside of your packages. See: + # http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files # noqa + # In this case, 'data_file' will be installed into '/my_data' + # data_files=[('my_data', ['data/data_file'])], + + # To provide executable scripts, use entry points in preference to the + # "scripts" keyword. Entry points provide cross-platform support and allow + # pip to create the appropriate form of executable for the target platform. + entry_points={ + 'console_scripts': [ + 'mymuell2caldav=mymuell2caldav.mymuell2caldav:main', + ], + }, +) \ No newline at end of file diff --git a/start.py b/start.py new file mode 100644 index 0000000..63d3627 --- /dev/null +++ b/start.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from mymuell2caldav.mymuell2caldav import main + +if __name__ == "__main__": + main() From aa63622a9312604c8cc97d850d0361af0b01f201 Mon Sep 17 00:00:00 2001 From: Thomas Vogl Date: Fri, 16 Dec 2022 23:41:00 +0100 Subject: [PATCH 2/3] make first release ready --- .gitattributes | 1 + .gitignore | 3 ++- README.md | 16 ++++++++++++++++ start.py => mymuell2caldav/__main__.py | 0 mymuell2caldav/mymuell2caldav.py | 4 ++-- mymuell2caldav/version.py | 3 +++ releases/mymuell2caldav-1.0.0-py3-none-any.whl | 3 +++ setup.py | 18 +++++++++++++----- 8 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 .gitattributes rename start.py => mymuell2caldav/__main__.py (100%) create mode 100644 mymuell2caldav/version.py create mode 100644 releases/mymuell2caldav-1.0.0-py3-none-any.whl diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1cda1be --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.whl filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index e0099e2..0bd1a09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -dist/** *.egg-info +*.egg* build/** +dist/** __pycache__ .idea MANIFEST \ No newline at end of file diff --git a/README.md b/README.md index 5704752..af4cfba 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Instead, users are forced to install the buggy and heavy battery draining _MyMü So this tool aims to get rid of the app by parsing data from _MyMüll.de_ web service and synchronize the events with a conventional CalDAV server. +##Changelog +* 1.0.0 - initial version ## Implementation Status - all required functionality implemented for basic usage @@ -46,6 +48,20 @@ So this tool aims to get rid of the app by parsing data from _MyMüll.de_ web se ![GUI](./doc/GUI.png) + +## Setup +- install and setup latest python3 on your platform. +- open a shell and check if the command `python --version` works and points the intended version +- download the latest wheel package in subdirectory _releases/_ on this repository. +- install it with via following shell command: + (the string "x.x.x" need to be replaced with the latest version number) + + `python -m pip install mymuell2caldav-x.x.x-py3-none-any.whl` + + +- start the tool via command `mymuell2caldav` + - alternatively, you could start with `python -m mymuell2caldav` + ## Disclaimer This tool was developed by an annoyed _MyMüll.de_ app user as a free contribution to the open source community and is licenced under the **GPLv3** Licence. diff --git a/start.py b/mymuell2caldav/__main__.py similarity index 100% rename from start.py rename to mymuell2caldav/__main__.py diff --git a/mymuell2caldav/mymuell2caldav.py b/mymuell2caldav/mymuell2caldav.py index d640559..b10178b 100644 --- a/mymuell2caldav/mymuell2caldav.py +++ b/mymuell2caldav/mymuell2caldav.py @@ -23,7 +23,7 @@ import sys from mymuell2caldav.databinding.CalendarSync import CalendarSync from mymuell2caldav.databinding.MyMuellDataModel import MyMuellDataModel from mymuell2caldav.utils.GuiWorker import GuiWorker - +from mymuell2caldav.version import VERSION class MyMuell2CalDavGui(QMainWindow): def __init__(self, parent=None): @@ -249,7 +249,7 @@ class MyMuell2CalDavGui(QMainWindow): # self.setGeometry(300, 300, 1000, 800) self.setMinimumWidth(500) - self.setWindowTitle("MyMuell DAV GUI") + self.setWindowTitle("MyMuell 2 CalDAV Version " + VERSION ) def slot_process_finished(self, result: bool, msg: str): if result: diff --git a/mymuell2caldav/version.py b/mymuell2caldav/version.py new file mode 100644 index 0000000..5885727 --- /dev/null +++ b/mymuell2caldav/version.py @@ -0,0 +1,3 @@ +# please do not do anything here besides changing version number! + +VERSION = '1.0.0' diff --git a/releases/mymuell2caldav-1.0.0-py3-none-any.whl b/releases/mymuell2caldav-1.0.0-py3-none-any.whl new file mode 100644 index 0000000..e34c71b --- /dev/null +++ b/releases/mymuell2caldav-1.0.0-py3-none-any.whl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d1cd6b43526945c644a49897b6ca0890ed2b8149ae232effa43d214e3676fd +size 21139 diff --git a/setup.py b/setup.py index 12c418c..56ef758 100644 --- a/setup.py +++ b/setup.py @@ -34,15 +34,22 @@ def generate_long_description_file(): long_description = f.read() return long_description +def get_version(): + env = dict() + with open('mymuell2caldav/version.py', 'r') as f: + exec(f.read(), env) + + return env['VERSION'] + setup( name='mymuell2caldav', # Versions should comply with PEP440. For a discussion on single-sourcing # the version across setup.py and the project code, see # https://packaging.python.org/en/latest/single_source_version.html - version='1.0.0', + version=get_version(), - description='...', + description='Tool to sync garbage disposal events from MyMüll.de to standard CalDAV server, e.g. Nextcloud', long_description=generate_long_description_file(), long_description_content_type='text/markdown', @@ -60,8 +67,9 @@ setup( classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', - 'Topic :: Software Development :: Build Tools', - 'License :: OSI Approved :: MIT License', + 'Topic :: Home Automation', + 'Topic :: Office/Business :: Scheduling', + 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', @@ -69,7 +77,7 @@ setup( ], # What does your project relate to? - keywords=['caldav'], + keywords=['caldav', 'mymuell', 'sync', 'garbage disposal'], # You can just specify the packages manually here if your project is # simple. Or you can use find_packages(). From a82285ed3c1242ba8b26311cad6cc533eef7c82c Mon Sep 17 00:00:00 2001 From: Thomas Vogl Date: Fri, 16 Dec 2022 23:41:01 +0100 Subject: [PATCH 3/3] improve doc --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index af4cfba..b2fc82a 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,9 @@ Instead, users are forced to install the buggy and heavy battery draining _MyMü So this tool aims to get rid of the app by parsing data from _MyMüll.de_ web service and synchronize the events with a conventional CalDAV server. -##Changelog -* 1.0.0 - initial version +## Changelog +* 1.0.0 + - first release with all basically needed functionality ## Implementation Status - all required functionality implemented for basic usage @@ -35,6 +36,16 @@ So this tool aims to get rid of the app by parsing data from _MyMüll.de_ web se - export the CalDAV events to a local file for manual import to a calendar - unit tests for app +## Setup +- install and setup latest python3 on your platform. +- open a shell and check if the command `python --version` works and points the intended version +- install it with via following shell command: + + `python -m pip install https://github.com/Av3m/MyMuell2CalDAV/raw/master/releases/mymuell2caldav-1.0.0-py3-none-any.whl` + + +- start the tool via command `mymuell2caldav` + - alternatively, you could start with `python -m mymuell2caldav` ## Usage - get url of your CalDAV principal. @@ -49,18 +60,7 @@ So this tool aims to get rid of the app by parsing data from _MyMüll.de_ web se ![GUI](./doc/GUI.png) -## Setup -- install and setup latest python3 on your platform. -- open a shell and check if the command `python --version` works and points the intended version -- download the latest wheel package in subdirectory _releases/_ on this repository. -- install it with via following shell command: - (the string "x.x.x" need to be replaced with the latest version number) - - `python -m pip install mymuell2caldav-x.x.x-py3-none-any.whl` - -- start the tool via command `mymuell2caldav` - - alternatively, you could start with `python -m mymuell2caldav` ## Disclaimer This tool was developed by an annoyed _MyMüll.de_ app user as a free contribution