diff --git a/.gitignore b/.gitignore index 7ff4882a41ca87f23f0d46663f615bc66a0adaba..af2fde44a0c30a3430cc2f221e8ecef37fdfbd31 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,8 @@ nosetests.xml src/sakia/gen_resources/* src/icons_rc.py src/i18n_rc.py +src/sakia/icons_rc.py +src/sakia/i18n_rc.py res/i18n/qm res/i18n/lang-* out diff --git a/gen_resources.py b/gen_resources.py index 699fdd81cd5e52a4a01b53ace7ddbde12e265279..128eb908ad2c86339b31d377b54d0f0779383fc5 100644 --- a/gen_resources.py +++ b/gen_resources.py @@ -5,7 +5,7 @@ import sys, os, multiprocessing, subprocess root_path = os.path.abspath(os.path.join(os.path.dirname(__file__))) resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'res')) -gen_resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src')) +gen_resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src/sakia')) def convert_ui(args, **kwargs): subprocess.call(args, **kwargs) @@ -22,7 +22,10 @@ def build_resources(): exe = 'pyuic5' elif f.endswith('.qrc'): source = os.path.join(root, f) - dest = os.path.join(gen_resources, os.path.splitext(os.path.basename(source))[0]+'_rc.py') + filename = os.path.splitext(os.path.basename(source))[0] + # we remove "sakia." from the rc filename + # its only named like this so that imports are corrects in uic files + dest = os.path.join(gen_resources, filename.replace('sakia.', '')+'_rc.py') exe = 'pyrcc5' else: continue diff --git a/gen_translations.py b/gen_translations.py index 35c1d6b0c3c6f53f79f797f9fc0b52560a2110ea..71af5da11ce446ef5f5f4c6d541a795c1cb4d1fa 100644 --- a/gen_translations.py +++ b/gen_translations.py @@ -1,6 +1,6 @@ import sys, os, multiprocessing, subprocess, time, shutil -gen_resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src')) +gen_resources = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src/sakia')) ts = os.path.abspath(os.path.join(os.path.dirname(__file__), 'res', 'i18n', 'ts')) qm = os.path.abspath(os.path.join(os.path.dirname(__file__), 'res', 'i18n', 'qm')) if not os.path.exists(qm): diff --git a/res/icons/icons.qrc b/res/icons/sakia.icons.qrc similarity index 100% rename from res/icons/icons.qrc rename to res/icons/sakia.icons.qrc diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..1e67e7488897ac9f0404931bb768b8b6c728cff5 --- /dev/null +++ b/setup.py @@ -0,0 +1,90 @@ +from setuptools import setup, find_packages +import os +import re +import sys +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'src'))) +import sakia + + +def which(program): + """ + Detect whether or not a program is installed. + Thanks to http://stackoverflow.com/a/377028/70191 + """ + def is_exe(fpath): + return os.path.exists(fpath) and os.access(fpath, os.X_OK) + + fpath, _ = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ['PATH'].split(os.pathsep): + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + + return None + +EDITABLE_REQUIREMENT = re.compile(r'^-e (?P<link>(?P<vcs>git|svn|hg|bzr).+#egg=(?P<package>.+)-(?P<version>\d(?:\.\d)*))$') + +install_requires = [] +dependency_links = [] +data_files = [('sakia', ['src/sakia/root_servers.yml', 'src/sakia/g1_licence.html'])] + +for requirement in (l.strip() for l in open('requirements.txt')): + match = EDITABLE_REQUIREMENT.match(requirement) + if match: + assert which(match.group('vcs')) is not None, \ + "VCS '%(vcs)s' must be installed in order to install %(link)s" % match.groupdict() + install_requires.append("%(package)s==%(version)s" % match.groupdict()) + dependency_links.append(match.group('link')) + else: + install_requires.append(requirement) + +sql_files = [] +for file in os.listdir(os.path.join("src", "sakia", "data", "repositories")): + if file.endswith(".sql"): + sql_file = os.path.basename(file) + sql_files.append('src/sakia/data/repositories/{:}'.format(sql_file)) +data_files.append(('sakia/data/repositories/', sql_files)) + + +setup( + name='sakia', + + version=sakia.__version__, + author="inso", + + author_email="insomniak.fr@gmail.com", + + description="A [duniter](https://github.com/duniter/duniter) Python client", + + long_description=open('README.md').read(), + + # Active la prise en compte du fichier MANIFEST.in + include_package_data=True, + url='https://github.com/duniter/sakia', + + classifiers=[ + "Programming Language :: Python", + "Development Status :: 4 - Beta", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Natural Language :: French", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.5", + "Topic :: Communications", + ], + install_requires=install_requires, + dependency_links=dependency_links, + packages=find_packages('src'), + package_dir={'sakia': 'src/sakia', + 'i18n_rc': 'src/i18n_rc', + 'icons_rc': 'src/icons_rc'}, + entry_points={ + 'console_scripts': [ + 'sakia = sakia.main:main' + ] + }, + data_files=data_files +) \ No newline at end of file diff --git a/src/sakia/app.py b/src/sakia/app.py index e198750c744243d4a6d7c9552f71ed9ec3083289..ecfe2e41f2d99d3d6e7fa45a43013f8e23ba4e06 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -2,7 +2,7 @@ import attr import datetime import logging import socket -import i18n_rc +import sakia.i18n_rc import async_timeout import aiohttp from PyQt5.QtCore import QObject, pyqtSignal, QTranslator, QCoreApplication, QLocale, Qt diff --git a/src/sakia/gui/dialogs/connection_cfg/connection_cfg.ui b/src/sakia/gui/dialogs/connection_cfg/connection_cfg.ui index c8cb9fefaaacc964c618638c09df7f795ba4459d..3ca0005841d1ece59abd86774051da134d46800b 100644 --- a/src/sakia/gui/dialogs/connection_cfg/connection_cfg.ui +++ b/src/sakia/gui/dialogs/connection_cfg/connection_cfg.ui @@ -35,7 +35,7 @@ <string>Register a new identity</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/new_membership</normaloff>:/icons/new_membership</iconset> </property> <property name="iconSize"> @@ -52,7 +52,7 @@ <string>Connect with an existing identity</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/connect_icon</normaloff>:/icons/connect_icon</iconset> </property> <property name="iconSize"> @@ -69,7 +69,7 @@ <string>Connect a wallet</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/wallet_icon</normaloff>:/icons/wallet_icon</iconset> </property> <property name="iconSize"> @@ -86,7 +86,7 @@ <string>Connect using a public key</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/duniter_info_icon</normaloff>:/icons/duniter_info_icon</iconset> </property> <property name="iconSize"> @@ -484,7 +484,7 @@ p, li { white-space: pre-wrap; } </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> <slots> diff --git a/src/sakia/gui/dialogs/contact/contact.ui b/src/sakia/gui/dialogs/contact/contact.ui index 5a8a86a4f55177707d519ee5928d7fa6928685f9..9c3223fb82cd2323b0295db9da60234d38ce0b9c 100644 --- a/src/sakia/gui/dialogs/contact/contact.ui +++ b/src/sakia/gui/dialogs/contact/contact.ui @@ -54,7 +54,7 @@ <string>Delete selected contact</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/not_member</normaloff>:/icons/not_member</iconset> </property> </widget> @@ -172,7 +172,7 @@ <string>Save</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/add_account_icon</normaloff>:/icons/add_account_icon</iconset> </property> <property name="iconSize"> @@ -207,7 +207,7 @@ </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> <slots> diff --git a/src/sakia/gui/dialogs/plugins_manager/plugins_manager.ui b/src/sakia/gui/dialogs/plugins_manager/plugins_manager.ui index 653208d1d46e7b12742881b864d830369e7dc1df..0c733a7edbb37a32f6a4d3910ada80323a870585 100644 --- a/src/sakia/gui/dialogs/plugins_manager/plugins_manager.ui +++ b/src/sakia/gui/dialogs/plugins_manager/plugins_manager.ui @@ -89,7 +89,7 @@ </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> <slots> diff --git a/src/sakia/gui/main_window/mainwindow.ui b/src/sakia/gui/main_window/mainwindow.ui index 83349620fcc5705d428b68009b193e2796804a52..6952332165cd45e4d96a35391dc70c0a86722305 100644 --- a/src/sakia/gui/main_window/mainwindow.ui +++ b/src/sakia/gui/main_window/mainwindow.ui @@ -140,7 +140,7 @@ </action> </widget> <resources> - <include location="../../../../res/icons/icons.qrc"/> + <include location="../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> <slots> diff --git a/src/sakia/gui/main_window/toolbar/toolbar.ui b/src/sakia/gui/main_window/toolbar/toolbar.ui index 330986d4df5ca7caa96165a8001a141f1ffd0e6a..f86152ea3cb508fef057b2834c3dc3d5abaeba3f 100644 --- a/src/sakia/gui/main_window/toolbar/toolbar.ui +++ b/src/sakia/gui/main_window/toolbar/toolbar.ui @@ -38,7 +38,7 @@ <string>Network</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/wot_icon</normaloff>:/icons/wot_icon</iconset> </property> <property name="iconSize"> @@ -55,7 +55,7 @@ <string>Search an identity</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/explorer_icon</normaloff>:/icons/explorer_icon</iconset> </property> <property name="iconSize"> @@ -72,7 +72,7 @@ <string>Explore</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/add_community</normaloff>:/icons/add_community</iconset> </property> <property name="iconSize"> @@ -102,7 +102,7 @@ <string>Contacts</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/connect_icon</normaloff>:/icons/connect_icon</iconset> </property> <property name="iconSize"> @@ -119,7 +119,7 @@ <string/> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/menu_icon</normaloff>:/icons/menu_icon</iconset> </property> <property name="iconSize"> @@ -142,7 +142,7 @@ </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/gui/navigation/graphs/wot/wot_tab.ui b/src/sakia/gui/navigation/graphs/wot/wot_tab.ui index 7bddf7cbfa3102c58d9b38710d1c30d85e78e956..ad97c67465219d8618cb2f3d7887b63413a907c2 100644 --- a/src/sakia/gui/navigation/graphs/wot/wot_tab.ui +++ b/src/sakia/gui/navigation/graphs/wot/wot_tab.ui @@ -31,7 +31,7 @@ </customwidget> </customwidgets> <resources> - <include location="../../../../../../res/icons/icons.qrc"/> + <include location="../../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> <slots> diff --git a/src/sakia/gui/navigation/homescreen/homescreen.ui b/src/sakia/gui/navigation/homescreen/homescreen.ui index 97f5d8bfb627f44bd79556a0ea732b3ceb179b92..409997566c567b88a862c1402dad56d3c854670f 100644 --- a/src/sakia/gui/navigation/homescreen/homescreen.ui +++ b/src/sakia/gui/navigation/homescreen/homescreen.ui @@ -22,7 +22,7 @@ <layout class="QVBoxLayout" name="verticalLayout"/> </widget> <resources> - <include location="../../../../res/icons/icons.qrc"/> + <include location="../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/gui/navigation/identity/identity.ui b/src/sakia/gui/navigation/identity/identity.ui index 1c3fd32caa5fe4f7a21a69f28a80602242518f34..f9b2ea7a5a3e9a865630961afdf8b4a0cd146dd7 100644 --- a/src/sakia/gui/navigation/identity/identity.ui +++ b/src/sakia/gui/navigation/identity/identity.ui @@ -76,7 +76,7 @@ QGroupBox::title { <string>Certify an identity</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/certification_icon</normaloff>:/icons/certification_icon</iconset> </property> </widget> @@ -117,7 +117,7 @@ QGroupBox::title { <string/> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/refresh_icon</normaloff>:/icons/refresh_icon</iconset> </property> </widget> @@ -155,7 +155,7 @@ QGroupBox::title { <string>Renew membership</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/renew_membership</normaloff>:/icons/renew_membership</iconset> </property> <property name="iconSize"> @@ -187,7 +187,7 @@ QGroupBox::title { </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/gui/navigation/network/network.ui b/src/sakia/gui/navigation/network/network.ui index e1d1d9617ca1eb36903303e5c8083aad25fe5bee..9426af7f0e50a7f5c1f639c145649871c5f0ead6 100644 --- a/src/sakia/gui/navigation/network/network.ui +++ b/src/sakia/gui/navigation/network/network.ui @@ -40,7 +40,7 @@ <string/> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/refresh_icon</normaloff>:/icons/refresh_icon</iconset> </property> <property name="iconSize"> @@ -86,7 +86,7 @@ </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections> <connection> diff --git a/src/sakia/gui/navigation/txhistory/txhistory.ui b/src/sakia/gui/navigation/txhistory/txhistory.ui index a903b359cc826053cc55efdc8a587d73183111d5..85bf1bb5513d49be8e83ef3099f05b4e7bd4dbea 100644 --- a/src/sakia/gui/navigation/txhistory/txhistory.ui +++ b/src/sakia/gui/navigation/txhistory/txhistory.ui @@ -90,7 +90,7 @@ <string>Send money</string> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/payment_icon</normaloff>:/icons/payment_icon</iconset> </property> <property name="iconSize"> @@ -207,7 +207,7 @@ </customwidget> </customwidgets> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/gui/preferences.ui b/src/sakia/gui/preferences.ui index eba1b05fe9e9ca32b4097a46d23567d7633923fa..03c4e3f68528025988681bf129b139686a8e995c 100644 --- a/src/sakia/gui/preferences.ui +++ b/src/sakia/gui/preferences.ui @@ -30,7 +30,7 @@ <string>General</string> </property> <property name="icon"> - <iconset resource="../../../res/icons/icons.qrc"> + <iconset> <normaloff>:/icons/settings_app_icon</normaloff>:/icons/settings_app_icon</iconset> </property> <property name="iconSize"> @@ -50,7 +50,7 @@ <string>Display</string> </property> <property name="icon"> - <iconset resource="../../../res/icons/icons.qrc"> + <iconset> <normaloff>:/icons/settings_display_icon</normaloff>:/icons/settings_display_icon</iconset> </property> <property name="iconSize"> @@ -70,7 +70,7 @@ <string>Network</string> </property> <property name="icon"> - <iconset resource="../../../res/icons/icons.qrc"> + <iconset> <normaloff>:/icons/settings_network_icon</normaloff>:/icons/settings_network_icon</iconset> </property> <property name="iconSize"> @@ -414,7 +414,7 @@ </layout> </widget> <resources> - <include location="../../../res/icons/icons.qrc"/> + <include location="../../../res/icons/sakia.icons.qrc"/> </resources> <connections> <connection> diff --git a/src/sakia/gui/sub/search_user/__init__.py b/src/sakia/gui/sub/search_user/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/sakia/gui/sub/search_user/search_user.ui b/src/sakia/gui/sub/search_user/search_user.ui index c93e6fc13bcb5cd66b415fccfb1a441b29f2bd13..ac532df3632f1bdf171ea6431092ae495047d77b 100644 --- a/src/sakia/gui/sub/search_user/search_user.ui +++ b/src/sakia/gui/sub/search_user/search_user.ui @@ -36,7 +36,7 @@ <string/> </property> <property name="icon"> - <iconset resource="../../../../../res/icons/icons.qrc"> + <iconset resource="../../../../../res/icons/sakia.icons.qrc"> <normaloff>:/icons/home_icon</normaloff>:/icons/home_icon</iconset> </property> </widget> @@ -44,7 +44,7 @@ </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/gui/sub/user_information/user_information.ui b/src/sakia/gui/sub/user_information/user_information.ui index 8dd0958db218eb0a4d50f9ef7c8bd45ed48acbc8..e0331c25f12dfb197a33fb22c9af83192ec933d8 100644 --- a/src/sakia/gui/sub/user_information/user_information.ui +++ b/src/sakia/gui/sub/user_information/user_information.ui @@ -84,7 +84,7 @@ QGroupBox::title { <string/> </property> <property name="pixmap"> - <pixmap resource="../../../../../res/icons/icons.qrc">:/icons/member_icon</pixmap> + <pixmap resource="../../../../../res/icons/sakia.icons.qrc">:/icons/member_icon</pixmap> </property> <property name="scaledContents"> <bool>true</bool> @@ -114,9 +114,9 @@ QGroupBox::title { </layout> </widget> <resources> - <include location="../../../../../res/icons/icons.qrc"/> - <include location="../../../../../res/icons/icons.qrc"/> - <include location="../../../../../res/icons/icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> + <include location="../../../../../res/icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/gui/widgets/toast.ui b/src/sakia/gui/widgets/toast.ui index 61c442e0323f682ec39f0e071a74533a8fa0b25f..c42c994a97d51b27d1580a6ffc1680627ea1b986 100644 --- a/src/sakia/gui/widgets/toast.ui +++ b/src/sakia/gui/widgets/toast.ui @@ -14,7 +14,7 @@ <string>MainWindow</string> </property> <property name="windowIcon"> - <iconset resource="../icons/icons.qrc"> + <iconset resource="../icons/sakia.icons.qrc"> <normaloff>:/icons/cutecoin_logo</normaloff>:/icons/cutecoin_logo</iconset> </property> <widget class="QWidget" name="centralwidget"> @@ -40,7 +40,7 @@ <widget class="QStatusBar" name="statusbar"/> </widget> <resources> - <include location="../icons/icons.qrc"/> + <include location="../icons/sakia.icons.qrc"/> </resources> <connections/> </ui> diff --git a/src/sakia/main.py b/src/sakia/main.py index c94962f0be38d83984b36d421a369dcda428c6cd..bc7020d16cc6a334cb1fb852f62f067c7c4a3f0f 100755 --- a/src/sakia/main.py +++ b/src/sakia/main.py @@ -77,7 +77,8 @@ def exception_message(log_lines, exc_info): mb.exec() -if __name__ == '__main__': + +def main(): #Â activate ctrl-c interrupt signal.signal(signal.SIGINT, signal.SIG_DFL) sakia = QApplication(sys.argv) @@ -138,3 +139,6 @@ if __name__ == '__main__': cleanup_lock(lock) sys.exit() + +if __name__ == '__main__': + main()