hydrusnetwork / hydrus

A personal booru-style media tagger that can import files and tags from your hard drive and popular websites. Content can be shared with other users via user-run servers.
http://hydrusnetwork.github.io/hydrus/
Other
2.39k stars 158 forks source link

packaging test #1074

Closed rachmadaniHaryono closed 2 years ago

rachmadaniHaryono commented 2 years ago

Hydrus version

447

Operating system

Linux (specify distro and version in comments)

Install method

Running from source

Install and OS comments

ubuntu 21.04

i tried packaging hydrus using poetry

here is pyproject.toml file

this is still based linux requirement and not yet compared with macos and windows

can anyone test it?

[tool.poetry]
name = "hydrus"
version = "474.0.0"
description = "A personal booru-style media tagger that can import files and tags from your hard drive and popular websites"
authors = ["Hydrus Network Developer <hydrus.admin@gmail.com>"]
license = "WTFPL"
include = [
  "bin/**/*",
  "db/**/*",
  "help/**/*",
  "static/**/*",
]

[tool.poetry.dependencies]
python = ">=3.8,<3.11"
beautifulsoup4 = ">=4.0.0"
chardet = ">=3.0.4"
cloudscraper = ">=1.2.33"
html5lib = ">=1.0.1"
lxml = ">=4.5.0"
lz4 = ">=3.0.0"
nose = ">=1.3.0"
numpy = ">=1.16.0"
Pillow = ">=6.0.0"
psutil = ">=5.0.0"
pylzma = ">=0.5.0"
pyOpenSSL = ">=19.1.0"
PySocks = ">=1.7.0"
python-mpv = "0.5.2"
PyYAML = ">=5.0.0"
QtPy = ">=1.9.0"
requests = "2.23.0"
Send2Trash = ">=1.5.0"
service-identity = ">=18.1.0"
six = ">=1.14.0"
Twisted = ">=20.3.0"
opencv-python-headless = ">=4.0.0,<=4.5.3.56"
PySide2 = ">=5.15.0"

[tool.poetry.dev-dependencies]
mkdocs-material = "^8.2.2"
httmock = ">=1.4.0"
mock = ">=4.0.0"
pywin32 = {version = "^303", platform = "win32"}
pypiwin32 = {version = "^223", platform = "win32"}
pywin32-ctypes = {version = "^0.2.0", platform = "win32"}
pyinstaller = "4.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[tool.poetry.scripts]
hydrus-server = 'hydrus.hydrus_server:boot'
hydrus-client = 'hydrus.hydrus_client:boot'

here is package structure result

structure

```shell └── hydrus-474.0.0 ├── PKG-INFO ├── bin │   ├── ffmpeg_readme.txt │   ├── swfrender license.txt │   ├── swfrender_linux │   ├── swfrender_osx │   ├── swfrender_win32.exe │   └── upnpc_readme.txt ├── db │   ├── extract_options.sql │   ├── extract_subscriptions.sql │   ├── help my db is broke.txt │   ├── help my db is not booting.txt │   ├── help my media files are broke.txt │   ├── help my mpv crashes with WASAPI or ASIO audio.txt │   ├── how to see inside the db.txt │   └── using the extract scripts.txt ├── hydrus │   ├── __init__.py │   ├── client │   │   ├── ClientAPI.py │   │   ├── ClientApplicationCommand.py │   │   ├── ClientCaches.py │   │   ├── ClientConstants.py │   │   ├── ClientController.py │   │   ├── ClientDaemons.py │   │   ├── ClientData.py │   │   ├── ClientDefaults.py │   │   ├── ClientDownloading.py │   │   ├── ClientDuplicates.py │   │   ├── ClientExporting.py │   │   ├── ClientFiles.py │   │   ├── ClientImageHandling.py │   │   ├── ClientLocation.py │   │   ├── ClientMaintenance.py │   │   ├── ClientManagers.py │   │   ├── ClientMigration.py │   │   ├── ClientOptions.py │   │   ├── ClientParsing.py │   │   ├── ClientPaths.py │   │   ├── ClientRendering.py │   │   ├── ClientSearch.py │   │   ├── ClientSearchParseSystemPredicates.py │   │   ├── ClientSerialisable.py │   │   ├── ClientServices.py │   │   ├── ClientStrings.py │   │   ├── ClientThreading.py │   │   ├── ClientVideoHandling.py │   │   ├── __init__.py │   │   ├── db │   │   │   ├── ClientDB.py │   │   │   ├── ClientDBDefinitionsCache.py │   │   │   ├── ClientDBFilesDuplicates.py │   │   │   ├── ClientDBFilesMaintenance.py │   │   │   ├── ClientDBFilesMaintenanceQueue.py │   │   │   ├── ClientDBFilesMetadataBasic.py │   │   │   ├── ClientDBFilesStorage.py │   │   │   ├── ClientDBMaintenance.py │   │   │   ├── ClientDBMappingsCacheSpecificDisplay.py │   │   │   ├── ClientDBMappingsCounts.py │   │   │   ├── ClientDBMappingsCountsUpdate.py │   │   │   ├── ClientDBMappingsStorage.py │   │   │   ├── ClientDBMaster.py │   │   │   ├── ClientDBModule.py │   │   │   ├── ClientDBRepositories.py │   │   │   ├── ClientDBSerialisable.py │   │   │   ├── ClientDBServices.py │   │   │   ├── ClientDBSimilarFiles.py │   │   │   ├── ClientDBTagDisplay.py │   │   │   ├── ClientDBTagParents.py │   │   │   ├── ClientDBTagSearch.py │   │   │   ├── ClientDBTagSiblings.py │   │   │   └── __init__.py │   │   ├── gui │   │   │   ├── ClientGUI.py │   │   │   ├── ClientGUIAPI.py │   │   │   ├── ClientGUIApplicationCommand.py │   │   │   ├── ClientGUIAsync.py │   │   │   ├── ClientGUICharts.py │   │   │   ├── ClientGUICore.py │   │   │   ├── ClientGUICoreMenuDebug.py │   │   │   ├── ClientGUIDialogs.py │   │   │   ├── ClientGUIDialogsManage.py │   │   │   ├── ClientGUIDialogsQuick.py │   │   │   ├── ClientGUIDownloaders.py │   │   │   ├── ClientGUIDragDrop.py │   │   │   ├── ClientGUIDuplicates.py │   │   │   ├── ClientGUIExport.py │   │   │   ├── ClientGUIFileSeedCache.py │   │   │   ├── ClientGUIFrames.py │   │   │   ├── ClientGUIFunctions.py │   │   │   ├── ClientGUIGallerySeedLog.py │   │   │   ├── ClientGUIImport.py │   │   │   ├── ClientGUILocatorSearchProviders.py │   │   │   ├── ClientGUILogin.py │   │   │   ├── ClientGUIMPV.py │   │   │   ├── ClientGUIMedia.py │   │   │   ├── ClientGUIMediaActions.py │   │   │   ├── ClientGUIMediaControls.py │   │   │   ├── ClientGUIMenus.py │   │   │   ├── ClientGUIOptionsPanels.py │   │   │   ├── ClientGUIPanels.py │   │   │   ├── ClientGUIParsing.py │   │   │   ├── ClientGUIPopupMessages.py │   │   │   ├── ClientGUIRatings.py │   │   │   ├── ClientGUIScrolledPanels.py │   │   │   ├── ClientGUIScrolledPanelsButtonQuestions.py │   │   │   ├── ClientGUIScrolledPanelsEdit.py │   │   │   ├── ClientGUIScrolledPanelsManagement.py │   │   │   ├── ClientGUIScrolledPanelsReview.py │   │   │   ├── ClientGUISerialisable.py │   │   │   ├── ClientGUIShortcutControls.py │   │   │   ├── ClientGUIShortcuts.py │   │   │   ├── ClientGUISplash.py │   │   │   ├── ClientGUIStringControls.py │   │   │   ├── ClientGUIStringPanels.py │   │   │   ├── ClientGUIStyle.py │   │   │   ├── ClientGUISubscriptions.py │   │   │   ├── ClientGUISystemTray.py │   │   │   ├── ClientGUITagSorting.py │   │   │   ├── ClientGUITagSuggestions.py │   │   │   ├── ClientGUITags.py │   │   │   ├── ClientGUITime.py │   │   │   ├── ClientGUITopLevelWindows.py │   │   │   ├── ClientGUITopLevelWindowsPanels.py │   │   │   ├── QLocator.py │   │   │   ├── QtPorting.py │   │   │   ├── __init__.py │   │   │   ├── canvas │   │   │   │   ├── ClientGUICanvas.py │   │   │   │   ├── ClientGUICanvasFrame.py │   │   │   │   ├── ClientGUICanvasHoverFrames.py │   │   │   │   ├── ClientGUICanvasMedia.py │   │   │   │   └── __init__.py │   │   │   ├── lists │   │   │   │   ├── ClientGUIListBoxes.py │   │   │   │   ├── ClientGUIListBoxesData.py │   │   │   │   ├── ClientGUIListConstants.py │   │   │   │   ├── ClientGUIListCtrl.py │   │   │   │   ├── ClientGUIListManager.py │   │   │   │   ├── ClientGUIListStatus.py │   │   │   │   └── __init__.py │   │   │   ├── networking │   │   │   │   ├── ClientGUIHydrusNetwork.py │   │   │   │   ├── ClientGUINetwork.py │   │   │   │   ├── ClientGUINetworkJobControl.py │   │   │   │   └── __init__.py │   │   │   ├── pages │   │   │   │   ├── ClientGUIManagement.py │   │   │   │   ├── ClientGUIPages.py │   │   │   │   ├── ClientGUIResults.py │   │   │   │   ├── ClientGUIResultsSortCollect.py │   │   │   │   ├── ClientGUISession.py │   │   │   │   ├── ClientGUISessionLegacy.py │   │   │   │   └── __init__.py │   │   │   ├── search │   │   │   │   ├── ClientGUIACDropdown.py │   │   │   │   ├── ClientGUIPredicatesMultiple.py │   │   │   │   ├── ClientGUIPredicatesOR.py │   │   │   │   ├── ClientGUIPredicatesSingle.py │   │   │   │   ├── ClientGUISearch.py │   │   │   │   ├── ClientGUISearchPanels.py │   │   │   │   └── __init__.py │   │   │   ├── services │   │   │   │   ├── ClientGUIClientsideServices.py │   │   │   │   ├── ClientGUIServersideServices.py │   │   │   │   └── __init__.py │   │   │   └── widgets │   │   │   ├── ClientGUICommon.py │   │   │   ├── ClientGUIControls.py │   │   │   ├── ClientGUIMenuButton.py │   │   │   └── __init__.py │   │   ├── importing │   │   │   ├── ClientImportFileSeeds.py │   │   │   ├── ClientImportFiles.py │   │   │   ├── ClientImportGallery.py │   │   │   ├── ClientImportGallerySeeds.py │   │   │   ├── ClientImportLocal.py │   │   │   ├── ClientImportSimpleURLs.py │   │   │   ├── ClientImportSubscriptionLegacy.py │   │   │   ├── ClientImportSubscriptionQuery.py │   │   │   ├── ClientImportSubscriptions.py │   │   │   ├── ClientImportWatchers.py │   │   │   ├── ClientImporting.py │   │   │   ├── __init__.py │   │   │   └── options │   │   │   ├── ClientImportOptions.py │   │   │   ├── FileImportOptions.py │   │   │   ├── NoteImportOptions.py │   │   │   ├── PresentationImportOptions.py │   │   │   ├── TagImportOptions.py │   │   │   └── __init__.py │   │   ├── media │   │   │   ├── ClientMedia.py │   │   │   ├── ClientMediaManagers.py │   │   │   ├── ClientMediaResult.py │   │   │   ├── ClientMediaResultCache.py │   │   │   └── __init__.py │   │   ├── metadata │   │   │   ├── ClientRatings.py │   │   │   ├── ClientTagSorting.py │   │   │   ├── ClientTags.py │   │   │   ├── ClientTagsHandling.py │   │   │   └── __init__.py │   │   └── networking │   │   ├── ClientLocalServer.py │   │   ├── ClientLocalServerResources.py │   │   ├── ClientNetworking.py │   │   ├── ClientNetworkingBandwidth.py │   │   ├── ClientNetworkingBandwidthLegacy.py │   │   ├── ClientNetworkingContexts.py │   │   ├── ClientNetworkingDomain.py │   │   ├── ClientNetworkingFunctions.py │   │   ├── ClientNetworkingGUG.py │   │   ├── ClientNetworkingJobs.py │   │   ├── ClientNetworkingLogin.py │   │   ├── ClientNetworkingSessions.py │   │   ├── ClientNetworkingSessionsLegacy.py │   │   ├── ClientNetworkingURLClass.py │   │   └── __init__.py │   ├── core │   │   ├── HydrusAudioHandling.py │   │   ├── HydrusBoot.py │   │   ├── HydrusClipHandling.py │   │   ├── HydrusCompression.py │   │   ├── HydrusConstants.py │   │   ├── HydrusController.py │   │   ├── HydrusDB.py │   │   ├── HydrusDBBase.py │   │   ├── HydrusDBModule.py │   │   ├── HydrusData.py │   │   ├── HydrusDocumentHandling.py │   │   ├── HydrusEncryption.py │   │   ├── HydrusExceptions.py │   │   ├── HydrusFileHandling.py │   │   ├── HydrusFlashHandling.py │   │   ├── HydrusGlobals.py │   │   ├── HydrusImageHandling.py │   │   ├── HydrusLogger.py │   │   ├── HydrusPaths.py │   │   ├── HydrusPubSub.py │   │   ├── HydrusRatingArchive.py │   │   ├── HydrusSerialisable.py │   │   ├── HydrusSessions.py │   │   ├── HydrusTagArchive.py │   │   ├── HydrusTags.py │   │   ├── HydrusTemp.py │   │   ├── HydrusText.py │   │   ├── HydrusThreading.py │   │   ├── HydrusVideoHandling.py │   │   ├── __init__.py │   │   └── networking │   │   ├── HydrusNATPunch.py │   │   ├── HydrusNetwork.py │   │   ├── HydrusNetworkLegacy.py │   │   ├── HydrusNetworkVariableHandling.py │   │   ├── HydrusNetworking.py │   │   ├── HydrusServer.py │   │   ├── HydrusServerAMP.py │   │   ├── HydrusServerRequest.py │   │   ├── HydrusServerResources.py │   │   └── __init__.py │   ├── external │   │   ├── LogicExpressionQueryParser.py │   │   ├── SystemPredicateParser.py │   │   ├── __init__.py │   │   └── hexagonitswfheader.py │   ├── hydrus_client.py │   ├── hydrus_server.py │   ├── hydrus_test.py │   ├── server │   │   ├── ServerController.py │   │   ├── ServerDB.py │   │   ├── ServerFiles.py │   │   ├── ServerServices.py │   │   ├── __init__.py │   │   └── networking │   │   ├── ServerServer.py │   │   ├── ServerServerResources.py │   │   └── __init__.py │   └── test │   ├── TestClientAPI.py │   ├── TestClientConstants.py │   ├── TestClientDB.py │   ├── TestClientDBDuplicates.py │   ├── TestClientDBTags.py │   ├── TestClientDaemons.py │   ├── TestClientData.py │   ├── TestClientImageHandling.py │   ├── TestClientImportOptions.py │   ├── TestClientImportSubscriptions.py │   ├── TestClientListBoxes.py │   ├── TestClientMigration.py │   ├── TestClientNetworking.py │   ├── TestClientParsing.py │   ├── TestClientTags.py │   ├── TestClientThreading.py │   ├── TestController.py │   ├── TestDialogs.py │   ├── TestFunctions.py │   ├── TestHydrusData.py │   ├── TestHydrusNATPunch.py │   ├── TestHydrusNetworking.py │   ├── TestHydrusSerialisable.py │   ├── TestHydrusServer.py │   ├── TestHydrusSessions.py │   ├── TestServerDB.py │   └── __init__.py ├── pyproject.toml ├── setup.py └── static ├── 8chan.png ├── Icons.svg ├── archive.png ├── audio.png ├── avi.png ├── boned.jpg ├── build_files │   ├── docker │   │   ├── README.md │   │   ├── client │   │   │   ├── Dockerfile │   │   │   ├── entrypoint.sh │   │   │   ├── novnc │   │   │   │   ├── icon.png │   │   │   │   └── index.html │   │   │   ├── requests.patch │   │   │   └── supervisord.conf │   │   ├── docker_build.yml │   │   └── server │   │   ├── Dockerfile │   │   └── entrypoint.sh │   ├── linux │   │   ├── client.spec │   │   ├── files_to_delete.txt │   │   ├── requirements.txt │   │   └── server.spec │   ├── macos │   │   ├── Info.plist │   │   ├── ReadMeFirst.rtf │   │   ├── pyoxidizer.bzl │   │   ├── requirements.txt │   │   └── running_from_app │   └── windows │   ├── InnoSetup.iss │   ├── client-win.spec │   ├── requirements.txt │   ├── server-win.spec │   ├── sqlite3.dll │   └── sqlite3.exe ├── check.png ├── clear_highlight.png ├── clip.png ├── cog.png ├── collection.png ├── color_swatch.png ├── copy.png ├── cross.ico ├── default │   ├── gugs │   │   ├── artstation artist lookup.png │   │   ├── danbooru & gelbooru tag search.png │   │   ├── danbooru tag search.png │   │   ├── derpibooru tag search - no filter.png │   │   ├── derpibooru tag search.png │   │   ├── deviant art artist lookup.png │   │   ├── deviant art tag search.png │   │   ├── e621 tag search.png │   │   ├── furry.booru.org tag search.png │   │   ├── gelbooru favorites by user id.png │   │   ├── gelbooru pools (folders) by id.png │   │   ├── gelbooru tag search.png │   │   ├── hentai foundry artist lookup.png │   │   ├── hentai foundry artist scraps lookup.png │   │   ├── hentai foundry artist works lookup.png │   │   ├── hentai foundry tag search.png │   │   ├── inkbunny artist lookup.png │   │   ├── inkbunny tag search.png │   │   ├── konachan tag search.png │   │   ├── newgrounds artist art lookup.png │   │   ├── newgrounds artist games lookup.png │   │   ├── newgrounds artist lookup.png │   │   ├── newgrounds artist movies lookup.png │   │   ├── nijie artist lookup.png │   │   ├── nitter (.eu mirror) media lookup.png │   │   ├── nitter (.eu mirror) retweets lookup.png │   │   ├── nitter (nixnet mirror) media lookup.png │   │   ├── nitter (nixnet mirror) retweets lookup.png │   │   ├── nitter media and retweets lookup.png │   │   ├── nitter media lookup.png │   │   ├── nitter retweets lookup.png │   │   ├── pixiv artist lookup.png │   │   ├── pixiv tag search.png │   │   ├── realbooru tag search.png │   │   ├── rule34.paheal tag search.png │   │   ├── rule34.xxx tag search.png │   │   ├── rule34hentai tag search.png │   │   ├── safebooru tag search.png │   │   ├── sakugabooru tag search.png │   │   ├── sankaku channel tag search.png │   │   ├── sankaku idol tag search.png │   │   ├── tbib tag search.png │   │   ├── tumblr username lookup.png │   │   ├── twitter syndication profile lookup (limited) (with replies).png │   │   ├── twitter syndication profile lookup (limited).png │   │   ├── xbooru tag search.png │   │   └── yande.re tag search.png │   ├── login_scripts │   │   ├── danbooru login.png │   │   ├── deviant art login.png │   │   ├── e621.net login.png │   │   ├── gelbooru 0.2.x login.png │   │   ├── hentai foundry guest login click-through.png │   │   ├── hentai foundry login.png │   │   ├── sankakucomplex login 2018.11.08.png │   │   └── shimmie login.png │   ├── parsers │   │   ├── 420chan thread api parser.png │   │   ├── 4chan thread api parser.png │   │   ├── 4chan-style thread api parser.png │   │   ├── 8chan thread api parser.png │   │   ├── 8chan.moe thread api parser.png │   │   ├── 8kun thread api parser.png │   │   ├── artstation file page api parser.png │   │   ├── artstation gallery page api parser.png │   │   ├── danbooru file page parser - get webm ugoira.png │   │   ├── danbooru file page parser.png │   │   ├── danbooru gallery page parser.png │   │   ├── derpibooru gallery page api parser.png │   │   ├── derpibooru.org file page parser.png │   │   ├── deviant art file extended_fetch parser.png │   │   ├── deviant art file page api parser.png │   │   ├── deviant art file page parser.png │   │   ├── deviant art flash sandbox page parser.png │   │   ├── deviant gallery page api parser (new cursor).png │   │   ├── deviant gallery page api parser.png │   │   ├── e621 file page parser.png │   │   ├── e621 gallery page parser.png │   │   ├── gelbooru 0.1.11 file page parser (simple).png │   │   ├── gelbooru 0.1.11 file page parser.png │   │   ├── gelbooru 0.2.0 file page parser.png │   │   ├── gelbooru 0.2.5 file page parser.png │   │   ├── gelbooru 0.2.x gallery page parser.png │   │   ├── gfycat file page api parser.png │   │   ├── hentai foundry file page parser.png │   │   ├── hentai foundry gallery page parser.png │   │   ├── imgur media page api parser.png │   │   ├── imgur single or subreddit parser.png │   │   ├── inkbunny file page parser.png │   │   ├── inkbunny gallery page parser.png │   │   ├── moebooru file page parser.png │   │   ├── moebooru gallery page parser.png │   │   ├── newgrounds art parser.png │   │   ├── newgrounds file page parser.png │   │   ├── newgrounds gallery page parser.png │   │   ├── nijie artist gallery parser.png │   │   ├── nijie view parser.png │   │   ├── nijie view popup parser.png │   │   ├── nitter media parser.png │   │   ├── nitter retweet parser.png │   │   ├── nitter tweet parser (video from koto.reisen).png │   │   ├── nitter tweet parser.png │   │   ├── pixiv artist gallery page api parser new urls.png │   │   ├── pixiv file page api parser.png │   │   ├── pixiv manga page parser.png │   │   ├── pixiv manga_big page parser.png │   │   ├── pixiv single file page parser - new layout.png │   │   ├── pixiv tag search api parser.png │   │   ├── pixiv tag search gallery page parser.png │   │   ├── prolikewoah thread api parser.png │   │   ├── realbooru file page parser.png │   │   ├── realbooru gallery page parser.png │   │   ├── rule34.paheal gallery page parser.png │   │   ├── rule34hentai gallery page parser.png │   │   ├── safebooru file page parser.png │   │   ├── sankaku file page parser.png │   │   ├── sankaku gallery page parser.png │   │   ├── shimmie file page parser.png │   │   ├── smuglo.li thread api parser.png │   │   ├── tumblr api creator gallery page parser.png │   │   ├── tumblr api post page parser - with post tags.png │   │   ├── tumblr api post page parser.png │   │   ├── twitter syndication api profile parser.png │   │   ├── twitter syndication api tweet parser.png │   │   ├── warosu thread parser.png │   │   ├── yande.re post page parser.png │   │   └── yiff.party api parser.png │   ├── simple_downloader_formulae │   │   ├── 4chan thread (all linked files).png │   │   ├── 8chan thread (all linked files).png │   │   ├── all files linked by images in page.png │   │   ├── all images embedded in page.png │   │   ├── gfycat single video page (mp4).png │   │   ├── gfycat single video page (webm).png │   │   ├── imgur image album (first page).png │   │   ├── imgur single image page.png │   │   ├── imgur single video page.png │   │   ├── mewch thread (all linked files).png │   │   ├── webmshare single video page.png │   │   ├── yiff.party attachments.png │   │   ├── yiff.party post files and attachments.png │   │   └── yiff.party post files.png │   └── url_classes │   ├── 420chan file.png │   ├── 420chan thread json api.png │   ├── 420chan thread new format.png │   ├── 420chan thread.png │   ├── 4chan file.png │   ├── 4chan thread json api.png │   ├── 4chan thread.png │   ├── 4channel thread.png │   ├── 8chan file.png │   ├── 8chan thread json api.png │   ├── 8chan thread.png │   ├── 8chan.moe thread json api.png │   ├── 8chan.moe thread.png │   ├── 8kun thread json api.png │   ├── 8kun thread.png │   ├── artstation artist gallery page api.png │   ├── artstation artist gallery page.png │   ├── artstation file page json api.png │   ├── artstation file page.png │   ├── danbooru file page.png │   ├── danbooru gallery page.png │   ├── derpibooru file page.png │   ├── derpibooru gallery page api.png │   ├── derpibooru gallery page.png │   ├── deviant art artist gallery page api.png │   ├── deviant art file page (old format).png │   ├── deviant art file page api.png │   ├── deviant art file page extended_fetch api.png │   ├── deviant art file page.png │   ├── deviant art flash sandbox page.png │   ├── deviant art tag gallery page api (cursor navigation).png │   ├── deviant art tag gallery page api.png │   ├── e621 file page (old format).png │   ├── e621 file page.png │   ├── e621 gallery page (alternate format).png │   ├── e621 gallery page.png │   ├── furry.booru.org file page.png │   ├── furry.booru.org gallery page.png │   ├── gelbooru file page.png │   ├── gelbooru gallery favorites page.png │   ├── gelbooru gallery page.png │   ├── gelbooru gallery pool page.png │   ├── gfycat file page - detail url.png │   ├── gfycat file page - gif url.png │   ├── gfycat file page api.png │   ├── gfycat file page.png │   ├── hentai foundry artist pictures gallery page.png │   ├── hentai foundry artist scraps gallery page.png │   ├── hentai foundry file page.png │   ├── hentai foundry tag search gallery page.png │   ├── imgur media page api.png │   ├── imgur media page.png │   ├── imgur single media file url.png │   ├── imgur single media page gifv format.png │   ├── imgur single media page.png │   ├── imgur subreddit single media page.png │   ├── imgur tagged media page.png │   ├── inkbunny artist gallery page.png │   ├── inkbunny file page.png │   ├── inkbunny tag search gallery page.png │   ├── konachan file page.png │   ├── konachan gallery page.png │   ├── newgrounds art gallery page overflow.png │   ├── newgrounds art gallery page.png │   ├── newgrounds art.png │   ├── newgrounds file page.png │   ├── newgrounds games gallery page overflow.png │   ├── newgrounds games gallery page.png │   ├── newgrounds movies gallery page overflow.png │   ├── newgrounds movies gallery page.png │   ├── nijie artist page.png │   ├── nijie view popup.png │   ├── nijie view.png │   ├── nitter (.eu mirror) media timeline.png │   ├── nitter (.eu mirror) timeline.png │   ├── nitter (.eu mirror) tweet media.png │   ├── nitter (.eu mirror) tweet.png │   ├── nitter (nixnet mirror) media timeline.png │   ├── nitter (nixnet mirror) timeline.png │   ├── nitter (nixnet mirror) tweet media.png │   ├── nitter (nixnet mirror) tweet.png │   ├── nitter media timeline.png │   ├── nitter timeline.png │   ├── nitter tweet media.png │   ├── nitter tweet.png │   ├── pixiv artist gallery page api.png │   ├── pixiv artist page (new format).png │   ├── pixiv artist page.png │   ├── pixiv file page api.png │   ├── pixiv file page new format (with language).png │   ├── pixiv file page new format (without language).png │   ├── pixiv file page.png │   ├── pixiv manga page.png │   ├── pixiv manga_big page.png │   ├── pixiv search api.png │   ├── pixiv tag search gallery page.png │   ├── prolikewoah thread json api.png │   ├── prolikewoah thread.png │   ├── realbooru file page.png │   ├── realbooru gallery page.png │   ├── rule34.paheal file page.png │   ├── rule34.paheal gallery page.png │   ├── rule34.xxx file page.png │   ├── rule34.xxx gallery page.png │   ├── rule34hentai file page.png │   ├── rule34hentai gallery page.png │   ├── safebooru file page.png │   ├── safebooru gallery page.png │   ├── sakugabooru file page.png │   ├── sakugabooru gallery page.png │   ├── sankaku chan file page.png │   ├── sankaku chan gallery page.png │   ├── sankaku idol file page.png │   ├── sankaku idol gallery page.png │   ├── smuglo.li thread json api.png │   ├── smuglo.li thread.png │   ├── tbib file page.png │   ├── tbib gallery page.png │   ├── tumblr api gallery page.png │   ├── tumblr file page api.png │   ├── tumblr file page.png │   ├── tvch.moe thread json api.png │   ├── tvch.moe thread.png │   ├── twitter syndication api profile.png │   ├── twitter syndication api tweet.png │   ├── twitter tweet.png │   ├── vch.moe thread json api.png │   ├── vch.moe thread.png │   ├── warosu file.png │   ├── warosu thread.png │   ├── xbooru file page.png │   ├── xbooru gallery page.png │   ├── yande.re file page.png │   ├── yande.re gallery page.png │   ├── yiff.party creator page.png │   ├── yiff.party file attachment long.png │   ├── yiff.party file attachment.png │   ├── yiff.party file post.png │   └── yiff.party json api.png ├── delete.png ├── discord.png ├── downloading.png ├── drag.png ├── dump_fail.png ├── dump_ok.png ├── dump_recoverable.png ├── family.png ├── file_pause.png ├── file_play.png ├── file_repository_pending.png ├── file_repository_pending_small.png ├── file_repository_petitioned.png ├── file_repository_petitioned_small.png ├── file_repository_small.png ├── first.png ├── flac.png ├── flash.png ├── flv.png ├── font.png ├── fullscreen_switch.png ├── gallery_pause.png ├── gallery_play.png ├── github.png ├── help.png ├── highlight.png ├── hydrus.ico ├── hydrus.png ├── hydrus_32.png ├── hydrus_32_non-transparent.png ├── hydrus_non-transparent.png ├── hydrus_small.png ├── hydrus_small_flat_white.png ├── hydrus_splash.png ├── icon.icns ├── images.png ├── inbox.png ├── ipfs.png ├── ipfs_pending.png ├── ipfs_pending_small.png ├── ipfs_petitioned.png ├── ipfs_petitioned_small.png ├── ipfs_small.png ├── keyboard.png ├── lain.jpg ├── last.png ├── lightning.png ├── lightning_checked.png ├── lightning_unchecked.png ├── link.png ├── link_break.png ├── listctrl.png ├── local_booru_style.css ├── mp3.png ├── mp4.png ├── mpg.png ├── mpv-conf │   ├── audio_normalisation_test_1_mpv.conf │   ├── audio_normalisation_test_2_mpv.conf │   ├── default_mpv.conf │   └── high_gpu_quality_test_mpv.conf ├── mute.png ├── next.png ├── notes.png ├── ogg.png ├── open_externally.png ├── pair.png ├── paste.png ├── patreon.png ├── pause.png ├── pdf.png ├── play.png ├── previous.png ├── psd.png ├── qss │   ├── CutieDuck_(darkorange).qss │   ├── Dark_Blue.qss │   ├── DarkerDuck_(darkorange).qss │   ├── Fixed Font Size Example.qss │   ├── Hydracula.qss │   ├── OledBlack.qss │   ├── default_hydrus.qss │   └── readme.txt ├── rar.png ├── refresh.png ├── sound.png ├── star.png ├── stop.png ├── testing │   ├── muh_apng.png │   ├── muh_gif.gif │   ├── muh_jpg.jpg │   ├── muh_mp4.mp4 │   ├── muh_mpeg.mpeg │   ├── muh_png.png │   ├── muh_swf.swf │   └── muh_webm.webm ├── text_align_center.png ├── text_align_justify.png ├── text_align_left.png ├── text_align_right.png ├── text_bold.png ├── text_indent.png ├── text_indent_remove.png ├── text_italic.png ├── text_underline.png ├── thumbnails.png ├── to_inbox.png ├── transparent.png ├── trash.png ├── tumblr.png ├── twitter.png ├── undelete.png ├── video.png ├── wma.png ├── z7.png ├── zip.png ├── zoom_in.png ├── zoom_out.png └── zoom_switch.png 43 directories, 720 files ```

i want to test it by uploading it to test.pypi but it is currently used by hydrus-api

Bug description and reproduction

how to install

  1. put above pyproject.toml to hydrus
  2. poetry build
  3. pipx install dist/hydrus-474.0.0.tar.gz
  4. run hydrus-client

Log output

No response

rachmadaniHaryono commented 2 years ago

i tried to build using above package and install it with pipx and there is error

if there is no include = ["static/**/*"] it will raise this error

v474, 2022/02/19 18:01:57: Traceback (most recent call last):
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 1002, in RawOpenPILImage
    pil_image = PILImage.open( path )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/PIL/Image.py", line 2953, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/static/hydrus.png'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientController.py", line 2103, in THREADBootEverything
    self.InitModel()
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientController.py", line 1189, in InitModel
    self._caches[ 'thumbnail' ] = ClientCaches.ThumbnailCache( self )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientCaches.py", line 640, in __init__
    self.Clear()
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientCaches.py", line 946, in Clear
    numpy_image = ClientImageHandling.GenerateNumPyImage( path, HC.IMAGE_PNG )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientImageHandling.py", line 31, in GenerateNumPyImage
    return HydrusImageHandling.GenerateNumPyImage( path, mime, force_pil = force_pil )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 335, in GenerateNumPyImage
    pil_image = GeneratePILImage( path )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 373, in GeneratePILImage
    pil_image = RawOpenPILImage( path )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 1006, in RawOpenPILImage
    raise HydrusExceptions.DamagedOrUnusualFileException( 'Could not load the image--it was likely malformed!' )
hydrus.core.HydrusExceptions.DamagedOrUnusualFileException: Could not load the image--it was likely malformed!

v474, 2022/02/19 18:01:57: boot error
v474, 2022/02/19 18:01:57: A serious error occurred while trying to start the program. The error will be shown next in a window. More information may have been written to client.log.
v474, 2022/02/19 18:02:02: boot error
v474, 2022/02/19 18:02:02: Traceback (most recent call last):
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 1002, in RawOpenPILImage
    pil_image = PILImage.open( path )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/PIL/Image.py", line 2953, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/static/hydrus.png'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientController.py", line 2103, in THREADBootEverything
    self.InitModel()
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientController.py", line 1189, in InitModel
    self._caches[ 'thumbnail' ] = ClientCaches.ThumbnailCache( self )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientCaches.py", line 640, in __init__
    self.Clear()
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientCaches.py", line 946, in Clear
    numpy_image = ClientImageHandling.GenerateNumPyImage( path, HC.IMAGE_PNG )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/client/ClientImageHandling.py", line 31, in GenerateNumPyImage
    return HydrusImageHandling.GenerateNumPyImage( path, mime, force_pil = force_pil )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 335, in GenerateNumPyImage
    pil_image = GeneratePILImage( path )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 373, in GeneratePILImage
    pil_image = RawOpenPILImage( path )
  File "/home/r3r/.local/pipx/venvs/hydrus/lib/python3.9/site-packages/hydrus/core/HydrusImageHandling.py", line 1006, in RawOpenPILImage
    raise HydrusExceptions.DamagedOrUnusualFileException( 'Could not load the image--it was likely malformed!' )
hydrus.core.HydrusExceptions.DamagedOrUnusualFileException: Could not load the image--it was likely malformed!
rachmadaniHaryono commented 2 years ago

from dev

for that poetry packaging thing, yeah, you'll want the static directory. check out our release build script to see what you need to do beyond just the source code https://github.com/hydrusnetwork/hydrus/blob/master/.github/workflows/release.yml static, help, bin, and db dirs, just like the repository folder structure

me: does hydrus read something from help folder? me: i can see how db/*.sql files can be useful but i don't know how to package that other than just include it floogulinc: help folder contains the docs html

there are links in the program to that folder, like 'open help page for parsers' or whatever

notes:

hydrus name is already used on pypi https://pypi.org/project/hydrus/ so maybe use other name, maybe hydrus-network

issue with package / trade off

https://discuss.python.org/t/should-there-be-a-new-standard-for-installing-arbitrary-data-files/7853/8 https://github.com/pypa/pipx/issues/717

also poetry can't handle gui entry script

https://github.com/python-poetry/poetry/issues/1059

e: update the poetry and structure

branch https://github.com/rachmadaniHaryono/hydrus/tree/feature/poetry