diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b989be6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,105 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +.static_storage/ +.media/ +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/lector/__init__.py b/lector/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/__main__.py b/lector/__main__.py similarity index 98% rename from __main__.py rename to lector/__main__.py index d03b7d7..1c95d46 100755 --- a/__main__.py +++ b/lector/__main__.py @@ -21,20 +21,19 @@ import sys import hashlib from PyQt5 import QtWidgets, QtGui, QtCore -import sorter -import database +from lector import database +from lector import sorter +from lector.toolbars import LibraryToolBar, BookToolBar +from lector.widgets import Tab +from lector.delegates import LibraryDelegate +from lector.threaded import BackGroundTabUpdate, BackGroundBookAddition, BackGroundBookDeletion +from lector.library import Library +from lector.settings import Settings +from lector.settingsdialog import SettingsUI +from lector.metadatadialog import MetadataUI +from lector.definitionsdialog import DefinitionsUI -from resources import mainwindow, resources -from toolbars import LibraryToolBar, BookToolBar -from widgets import Tab -from delegates import LibraryDelegate -from threaded import BackGroundTabUpdate, BackGroundBookAddition, BackGroundBookDeletion -from library import Library -from settings import Settings - -from settingsdialog import SettingsUI -from metadatadialog import MetadataUI -from definitionsdialog import DefinitionsUI +from resources import mainwindow class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): diff --git a/database.py b/lector/database.py similarity index 100% rename from database.py rename to lector/database.py diff --git a/definitionsdialog.py b/lector/definitionsdialog.py similarity index 100% rename from definitionsdialog.py rename to lector/definitionsdialog.py diff --git a/delegates.py b/lector/delegates.py similarity index 100% rename from delegates.py rename to lector/delegates.py diff --git a/library.py b/lector/library.py similarity index 99% rename from library.py rename to lector/library.py index 7ee40de..da58235 100644 --- a/library.py +++ b/lector/library.py @@ -21,8 +21,8 @@ import pickle import pathlib from PyQt5 import QtGui, QtCore -import database -from models import TableProxyModel, ItemProxyModel +from lector import database +from lector.models import TableProxyModel, ItemProxyModel class Library: diff --git a/metadatadialog.py b/lector/metadatadialog.py similarity index 98% rename from metadatadialog.py rename to lector/metadatadialog.py index 990defc..70d1731 100644 --- a/metadatadialog.py +++ b/lector/metadatadialog.py @@ -18,10 +18,10 @@ from PyQt5 import QtWidgets, QtCore, QtGui -import database +from lector import database from resources import metadata -from widgets import PliantQGraphicsScene +from lector.widgets import PliantQGraphicsScene class MetadataUI(QtWidgets.QDialog, metadata.Ui_Dialog): diff --git a/models.py b/lector/models.py similarity index 100% rename from models.py rename to lector/models.py diff --git a/settings.py b/lector/settings.py similarity index 100% rename from settings.py rename to lector/settings.py diff --git a/settingsdialog.py b/lector/settingsdialog.py similarity index 98% rename from settingsdialog.py rename to lector/settingsdialog.py index 7fa284c..55ede21 100644 --- a/settingsdialog.py +++ b/lector/settingsdialog.py @@ -23,10 +23,11 @@ import os import copy from PyQt5 import QtWidgets, QtCore -import database +from lector import database +from lector.models import MostExcellentFileSystemModel +from lector.threaded import BackGroundBookSearch, BackGroundBookAddition + from resources import settingswindow -from models import MostExcellentFileSystemModel, FileSystemProxyModel -from threaded import BackGroundBookSearch, BackGroundBookAddition class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): diff --git a/sorter.py b/lector/sorter.py similarity index 99% rename from sorter.py rename to lector/sorter.py index 1290e0c..ee0f482 100644 --- a/sorter.py +++ b/lector/sorter.py @@ -42,7 +42,7 @@ import threading from multiprocessing import Pool, Manager from PyQt5 import QtCore, QtGui -import database +from lector import database from parsers.cbz import ParseCBZ from parsers.cbr import ParseCBR diff --git a/threaded.py b/lector/threaded.py similarity index 98% rename from threaded.py rename to lector/threaded.py index b375d56..fa90a46 100644 --- a/threaded.py +++ b/lector/threaded.py @@ -21,8 +21,8 @@ import pathlib from multiprocessing.dummy import Pool from PyQt5 import QtCore -import sorter -import database +from lector import sorter +from lector import database class BackGroundTabUpdate(QtCore.QThread): diff --git a/toolbars.py b/lector/toolbars.py similarity index 100% rename from toolbars.py rename to lector/toolbars.py diff --git a/widgets.py b/lector/widgets.py similarity index 99% rename from widgets.py rename to lector/widgets.py index 0cf3747..7eeaed1 100644 --- a/widgets.py +++ b/lector/widgets.py @@ -26,10 +26,9 @@ import os import uuid from PyQt5 import QtWidgets, QtGui, QtCore -from resources import pie_chart -from models import BookmarkProxyModel -from sorter import resize_image -from delegates import BookmarkDelegate +from lector.models import BookmarkProxyModel +from lector.sorter import resize_image +from lector.delegates import BookmarkDelegate class Tab(QtWidgets.QWidget): diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..79bc678 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,5 @@ +[bdist_wheel] +# This flag says that the code is written to work on both Python 2 and Python +# 3. If at all possible, it is good practice to do this. If you cannot, you +# will need to generate wheels for each Python version that you support. +universal=1 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..bf9b22f --- /dev/null +++ b/setup.py @@ -0,0 +1,80 @@ +import codecs +from os import path +from setuptools import setup, find_packages + +HERE = path.abspath(path.dirname(__file__)) + +# Get the long description from the README file +with codecs.open(path.join(HERE, 'README.md'), encoding='utf-8') as f: + LONG_DESC = f.read() + +INSTALL_DEPS = ['PyQt5==5.10.1', + 'requests==2.18.4', + 'beautifulsoup4==4.6.0'] +TEST_DEPS = ['pytest', + 'unittest2'] +DEV_DEPS = [] + +setup( + name='lector', + + # https://pypi.python.org/pypi/setuptools_scm + use_scm_version=True, + + description='Qt-based ebook reader', + long_description=LONG_DESC, + + url='https://github.com/BasioMeusPuga/Lector', + + author='BasioMeusPuga', + author_email='disgruntled.mob@gmail.com', + + license='GPL v3.0', + + # See https://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + # How mature is this project? Common values are + # 3 - Alpha + # 4 - Beta + # 5 - Production/Stable + 'Development Status :: 3 - Alpha', + + 'Intended Audience :: End Users/Desktop', + + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + ], + + # What does your project relate to? + keywords='qt ebook epub kindle', + + packages=find_packages(), + + entry_points={ + 'console_scripts': [ + 'lector = lector.__main__:main' + ] + }, + # 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=INSTALL_DEPS, + + setup_requires=['setuptools_scm'], + + python_requires='>=3.4, <4.0', + + # 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={ + 'dev': DEV_DEPS, + 'test': TEST_DEPS + }, +)