diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 073e637..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "todo-tree.tree.showBadges": true, - "todo-tree.tree.showCountsInTree": true -} \ No newline at end of file diff --git a/README.md b/README.md index 0c9d4e1..fd72969 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,9 @@ To start, find the script to use or to add to your code [here](model/WebPicDownl To use the script check the following prerequisites. * Python `>= 3.10.6` ; +* beautifulsoup4 `>= 4.11.1` ; * bs4 (BeautifulSoup) `>= 0.0.1` ; +* urllib3 `>= 1.26.12` ; ### Console Use ? diff --git a/version.txt b/VERSION similarity index 100% rename from version.txt rename to VERSION diff --git a/metadata.yml b/app_metadata.yml similarity index 100% rename from metadata.yml rename to app_metadata.yml diff --git a/versionfile.txt b/app_version_file.txt similarity index 100% rename from versionfile.txt rename to app_version_file.txt diff --git a/autopy-run.py b/autopy-run.py deleted file mode 100644 index e2a6710..0000000 --- a/autopy-run.py +++ /dev/null @@ -1,11 +0,0 @@ -from auto_py_to_exe import __main__ as apte -import pyinstaller_versionfile - -if __name__ == '__main__': - pyinstaller_versionfile.create_versionfile_from_input_file( - output_file="versionfile.txt", - input_file="metadata.yml", - #version="1.2.3.4" # optional, can be set to overwrite version information (equivalent to --version when using the CLI) - ) - apte.__name__ = '__main__' - apte.run() \ No newline at end of file diff --git a/autopy-conf.json b/build_config.json similarity index 100% rename from autopy-conf.json rename to build_config.json diff --git a/build_tool.py b/build_tool.py new file mode 100644 index 0000000..e3d8e6f --- /dev/null +++ b/build_tool.py @@ -0,0 +1,10 @@ +from auto_py_to_exe import __main__ as apte +import pyinstaller_versionfile + +if __name__ == '__main__': + pyinstaller_versionfile.create_versionfile_from_input_file( + output_file="app_version_file.txt", + input_file="app_metadata.yml" + ) + apte.__name__ = '__main__' + apte.run() \ No newline at end of file diff --git a/main.py b/main.py index d5dc265..cc9cd6a 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,14 @@ import os +import re import sys -from controller.HomeController import HomeController -from controller.InfoController import InfoController -from controller.MainController import MainController -from controller.Frames import Frames -from model.WebPicDownloader import WebPicDownloader -from view.HomeView import HomeView -from view.InfoView import InfoView -from view.MainWindow import MainWindow +from webpicdownloader.model.WebPicDownloader import WebPicDownloader +from webpicdownloader.controller.HomeController import HomeController +from webpicdownloader.controller.InfoController import InfoController +from webpicdownloader.controller.MainController import MainController +from webpicdownloader.controller.Frames import Frames +from webpicdownloader.view.HomeView import HomeView +from webpicdownloader.view.InfoView import InfoView +from webpicdownloader.view.MainWindow import MainWindow def get_sys_directory() -> str: @@ -29,7 +30,9 @@ def get_config() -> dict: 'app_folder': os.getcwd(), 'app_version': '1.0.0', # This version must match with the version.txt at root 'app_version_date': '2022-09-05', + 'app_version_source': 'https://git.endmove.eu/EndMove/WebPicDownloader/src/branch/dev/version.txt', + 'sys_version_matcher': re.compile(r'^(\d{1,2}\.)(\d{1,2}\.)(\d{1,2})$'), 'sys_directory': get_sys_directory(), 'about_title': 'About WebPicDownloader', diff --git a/run_tests.py b/run_tests.py new file mode 100644 index 0000000..a58cf7a --- /dev/null +++ b/run_tests.py @@ -0,0 +1,4 @@ +import unittest +loader = unittest.TestLoader() +runner = unittest.TextTestRunner() +runner.run(loader.discover('./test/')) \ No newline at end of file diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_update_module.py b/test/test_update_module.py new file mode 100644 index 0000000..79c22e3 --- /dev/null +++ b/test/test_update_module.py @@ -0,0 +1,11 @@ +import unittest + + +class TestUpdateModule(unittest.TestCase): + + def test_lol(self): + self.assertTrue(True) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/util/AsyncTask.py b/util/AsyncTask.py deleted file mode 100644 index 05f9021..0000000 --- a/util/AsyncTask.py +++ /dev/null @@ -1,54 +0,0 @@ -import threading - - -class AsyncTask(threading.Thread): - """ - AsyncTask - - AsyncTask is a utility class allowing to execute a task asynchronously in a thread. - For more informations read the constructor documentation. - - @author Jérémi Nihart / EndMove - @link https://git.endmove.eu/EndMove/WebPicDownloader - @version 1.0.1 - @since 2022-09-04 - """ - # Variables - __run_callback = None - __run_args: list = None - __quite_callback = None - __quite_args = None - - # Constructor - def __init__(self, rcallback, rargs=None, qcallback=None, qargs=None) -> None: - """ - Constructor - => Indicate in the constructors, the parameters for launching the process, as - well as the stop otpions. Then use the function {AsyncTask.start()} to start - the thread and the processing. - [!]: The function {AsyncTask.run()} is reserved for the thread and should not be run - from outside. - - * :rcallback: -> Asynchronous start function. - * :rargs: -> Arguments for the asyncrone startup function. - * :qcallback: -> Stop function to stop asynchronous processing. - * :qargs: -> Argument for the stop function. - """ - super().__init__() - self.__run_callback = rcallback - self.__run_args = rargs if rargs else () - self.__quite_callback = qcallback if qcallback else lambda: print("exiting thread") - self.__quite_args = qargs if qargs else () - - def run(self) -> None: - """ - [Internal function of (threading.Thread)] - [!] : This function must not be used! Start the task with {AsyncTask.start()} ! - """ - self.__run_callback(*self.__run_args) - - def stop(self) -> None: - """ - Stop the running task, make sure you have previously defined the stop function. - """ - self.__quite_callback(*self.__quite_args) \ No newline at end of file diff --git a/assets/logo.ico b/webpicdownloader/assets/logo.ico similarity index 100% rename from assets/logo.ico rename to webpicdownloader/assets/logo.ico diff --git a/controller/Frames.py b/webpicdownloader/controller/Frames.py similarity index 100% rename from controller/Frames.py rename to webpicdownloader/controller/Frames.py diff --git a/controller/HomeController.py b/webpicdownloader/controller/HomeController.py similarity index 96% rename from controller/HomeController.py rename to webpicdownloader/controller/HomeController.py index 99b594b..4c2dfb2 100644 --- a/controller/HomeController.py +++ b/webpicdownloader/controller/HomeController.py @@ -1,5 +1,5 @@ -from controller.MainController import MainController -from model.WebPicDownloader import MessageType, WebPicDownloader +from webpicdownloader.controller.MainController import MainController +from webpicdownloader.model.WebPicDownloader import MessageType, WebPicDownloader class HomeController: diff --git a/controller/InfoController.py b/webpicdownloader/controller/InfoController.py similarity index 92% rename from controller/InfoController.py rename to webpicdownloader/controller/InfoController.py index d4681f0..9df6318 100644 --- a/controller/InfoController.py +++ b/webpicdownloader/controller/InfoController.py @@ -1,5 +1,5 @@ -from controller.Frames import Frames -from controller.MainController import MainController +from webpicdownloader.controller.Frames import Frames +from webpicdownloader.controller.MainController import MainController class InfoController: diff --git a/controller/MainController.py b/webpicdownloader/controller/MainController.py similarity index 98% rename from controller/MainController.py rename to webpicdownloader/controller/MainController.py index c8846cd..c8e36bf 100644 --- a/controller/MainController.py +++ b/webpicdownloader/controller/MainController.py @@ -1,5 +1,5 @@ import os -from controller.Frames import Frames +from webpicdownloader.controller.Frames import Frames class MainController: diff --git a/model/WebPicDownloader.py b/webpicdownloader/model/WebPicDownloader.py similarity index 100% rename from model/WebPicDownloader.py rename to webpicdownloader/model/WebPicDownloader.py diff --git a/webpicdownloader/util/UpdateModule.py b/webpicdownloader/util/UpdateModule.py new file mode 100644 index 0000000..a6a4b33 --- /dev/null +++ b/webpicdownloader/util/UpdateModule.py @@ -0,0 +1,17 @@ + + +from http.client import HTTPException +import re +from urllib import request as http + + +def fetch_version(headers: str, url: str) -> str: + """ + + """ + request = http.Request(url=url, headers=headers, method='GET') + response = http.urlopen(request) + if response.getcode() != 200: + raise HTTPException("Bad response returned by server") + return response.read().decode('utf-8') + diff --git a/view/HomeView.py b/webpicdownloader/view/HomeView.py similarity index 97% rename from view/HomeView.py rename to webpicdownloader/view/HomeView.py index 24dda9c..6e1848d 100644 --- a/view/HomeView.py +++ b/webpicdownloader/view/HomeView.py @@ -2,8 +2,8 @@ import tkinter as tk import tkinter.font as tfont from tkinter import ttk from tkinter import scrolledtext as tst -from controller.HomeController import HomeController -from view.MainWindow import MainWindow +from webpicdownloader.controller.HomeController import HomeController +from webpicdownloader.view.MainWindow import MainWindow class HomeView(ttk.Frame): diff --git a/view/InfoView.py b/webpicdownloader/view/InfoView.py similarity index 94% rename from view/InfoView.py rename to webpicdownloader/view/InfoView.py index 47c694d..e9f0423 100644 --- a/view/InfoView.py +++ b/webpicdownloader/view/InfoView.py @@ -1,9 +1,9 @@ import tkinter as tk from tkinter import font from tkinter import ttk -from controller.Frames import Frames -from controller.InfoController import InfoController -from view.MainWindow import MainWindow +from webpicdownloader.controller.Frames import Frames +from webpicdownloader.controller.InfoController import InfoController +from webpicdownloader.view.MainWindow import MainWindow class InfoView(ttk.Frame): diff --git a/view/MainWindow.py b/webpicdownloader/view/MainWindow.py similarity index 96% rename from view/MainWindow.py rename to webpicdownloader/view/MainWindow.py index 3acbaaf..cff05d9 100644 --- a/view/MainWindow.py +++ b/webpicdownloader/view/MainWindow.py @@ -1,7 +1,7 @@ import tkinter as tk from tkinter import messagebox -from controller.Frames import Frames -from controller.MainController import MainController +from webpicdownloader.controller.Frames import Frames +from webpicdownloader.controller.MainController import MainController class MainWindow(tk.Tk): @@ -48,7 +48,7 @@ class MainWindow(tk.Tk): [internal function] => Initialize window parameters """ - self.iconbitmap(f"{self.__controller.get_config('sys_directory')}\\assets\logo.ico") # App logo + self.iconbitmap(f"{self.__controller.get_config('sys_directory')}\\webpicdownloader\\assets\\logo.ico") # App logo window_width = 430 # App width window_height = 305 # App height x_cordinate = int((self.winfo_screenwidth()/2) - (window_width/2))