Name | eisenradio JSON |
Version |
2.4.2
JSON |
| download |
home_page | https://github.com/44xtc44 |
Summary | Play radio. Style your App. |
upload_time | 2024-02-19 11:25:42 |
maintainer | |
docs_url | None |
author | René Horn |
requires_python | >=3.8 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Eisenradio - Web radio DB / Media-player
![alt logo of eisenradio](https://github.com/44xtc44/EisenRadio/raw/dev/docs/source/aircraft_logo.png)
![Tests](https://github.com/44xtc44/eisenradio/actions/workflows/tests.yml/badge.svg?branch=dev)
## Overview
This repository shows the full stack source code of an SVG animated GUI for [GhettoRecorder](https://github.com/44xtc44/GhettoRecorder).
* first internet Radio App that can run a Spectrum Analyser in a Browser (Feb,2022), sketch at page bottom
* SVG animations in vanilla JavaScript super fast animated and colorized with regex
* Playlist feature; load and walk through a list of your local sound files
* REST API Flask endpoints; serve a SQLite database in plain SQL
* deployment source code for [Android Studio](https://github.com/44xtc44/EisenRadio-chaquopy) , [Docker](https://github.com/44xtc44/EisenRadio/blob/dev/Dockerfile), [Snapcraft](https://github.com/44xtc44/EisenRadio/tree/dev/snap) and [Kivy](https://github.com/44xtc44/EisenRadio/tree/dev/kivy) available
# Name
The initial design was intended to mimic a hardware store site with multiple items listed.
"Eisen" Hardware [iron radios].
# Comic style animated internet radio
Inkscape created SVG images are used everywhere in the app. No raster graphics in this project. Except converted from SVG.
* 90% of the SVG animations run on canvas for reduced CPU load and smooth, up-scaled display
* a dedicated multi SVG image and SVG group loader class to preload all SVG stuff as super correct tagged SVG images
* inline SVG groups are loaded into a dictionary of image instances and connected to their canvas
<table>
<tbody>
<tr>
<td>
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/browser_android.png" alt="browser android" height="555"/>
</td>
</tr>
<tr>
<td>
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/browser_tux_day_0755.PNG" alt="browser tux at daylight" width="600"/>
</td>
</tr>
<tr>
<td>
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/browser_tux_night_1918.PNG" alt="browser tux at night" width="600"/>
</td>
</tr>
</tbody>
</table>
* each instance stores the image, a list of its SVG tags as well as the current transformation status and position, ...
* SVG path manipulation method with regex
The functional principle can be transferred to Java on Android to create dynamic 2D game backgrounds.
# Audio
Audio spectrum is used to animate the colors of the speaker symbol waves.
Speaker symbol shows customized colors for different levels of audio output strength and dynamic.
Unfortunately the display is very CPU hungry. So only one speaker is shown.
<p>Classic and Ambient 🟦🟩 music will often show other colors than Thrash Metal or Hip Hop 🟧🟥.</p>
Master function [getAverageVolume()](https://github.com/44xtc44/EisenRadio/blob/dev/eisenradio/eisenhome/bp_home_static/js/svg-manage.js#L1760)
calculates the audio volume level. This function was created by "franks laboratory", link in the Thank-you section at bottom.
<p>The "scaling by rhythm" of frontman Tux and friends 🐧 🐱 🐻 is also driven by </p>
[getAverageVolume()](https://github.com/44xtc44/EisenRadio/blob/dev/eisenradio/eisenhome/bp_home_static/js/svg-manage.js#L1760)
# Local audio and shuffled playlists
A local folder with files of different sound file types is called a playlist.
AAC and MP3 files are known to run. You can go back and forth in the list.
If AAC is hanging, you can repair the whole folder with "Tools/aacp file repair" menu.
Integrated from my [aacRepair](https://github.com/44xtc44/aacRepair) repo.
Remember, the app runs in a browser.
We *misuse* the upload multi select feature of the browser.
Nothing is uploaded, but file *objects* are caught in a list and played.
# Gain - preamp
Bring your earbuds to the limit.
EisenRadio owns a *Volume Gain* slider as well as [GhettoRecorder](https://github.com/44xtc44/GhettoRecorder)
Push the preamp to 300%. This feels like 20% louder.
Works with bluetooth headphones!
# Spectrum Analyzer
Spectrum analyzer canvas is now fully integrated and can be switched by the "TV" button.
Choose between different spectrum analyzer shows.
This concept can show its strengths if used to present the latest management reports.
A background video on canvas one and several statistics shown on separated, animated, or distorted monitors, canvas of course.
<table>
<tbody>
<tr>
<td>
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/spectrum_starfield.PNG" alt="Spectrum Analyzer one" style="width:35%"/>
</td>
<td>
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/spectrum_flowfield.PNG" alt="Spectrum Analyzer two" style="width:35%"/>
</td>
</tr>
</tbody>
</table>
# Customized radio
"Edit" the radio settings. Upload your favorite pictures to the database. Add a comment.
The app page is separated by two areas.
A monitor to the left and a display area beside for pictures and comments or the playlist titles.
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/secondary_menu.png" alt="secondary_menu" height="500"/>
## Energy Saver
Sustainable fun reduction.
Some exotic browser and mobiles could be overwhelmed by the fully animated show.
You are compensated by a CPU icon that can change its color.
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/energy_saver.PNG" alt="fun reduction energy saver radio button" style="width:100px"/>
# Recorder
Called and terminated GhettoRecorder threads for listen and record.
This version suffers from the initial button press concept.
Next version of EisenRadio will use the latest GhettoRecorder for easy-peasy internal switching.
# Recorder blacklist feature
Each recorder refuses to write a file, if the title was written to its radio specific blacklist before.
One dedicated thread is responsible to update all radio blacklists.
All lists can be dumped into a JSON file and merged with GhettoRecorder blacklists. Uploaded to DB then.
EisenRadio writes temporary lists of known recorded file names in JSON format.
The SQLite database is updated with a fresh file name only if a recorder writes a new file.
An internet cloud connection count in mind.
# Multiple tools menu
* config with feature selection for animation level
* enable and maintain blacklists
* dump the radios or blacklist database to JSON files
* import a GhettoRecorder [settings.ini](https://github.com/44xtc44/GhettoRecorder/blob/dev/ghettorecorder/settings.ini) file to database to add more radio station URLs
<table>
<tbody>
<tr>
<td>
<a href="https://github.com/44xtc44/EisenRadio/raw/dev/.github/tools_menu.PNG">
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/tools_menu.PNG" alt="tools for blacklist database dump and deletion" style="height:300px"/>
</a>
</td>
<td>
<a href="https://github.com/44xtc44/EisenRadio/raw/dev/.github/config_show.PNG">
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/config_show.PNG" alt="config show" style="height:300px"/>
</a>
</td>
<td>
<a href="https://github.com/44xtc44/EisenRadio/raw/dev/.github/blacklist_alter.PNG">
<img src="https://github.com/44xtc44/EisenRadio/raw/dev/.github/blacklist_alter.PNG" alt="blacklist show" style="height:300px"/>
</a>
</td>
</tr>
</tbody>
</table>
# Help
Use the menu bar. *About* offers a help menu.
There is a "post-it", how to reveal the URL of your beloved radio station, hidden in an advertisement polluted website.
# Links
The app is available as
* Android Studio source code GitHub [EisenRadio-chaquopy](https://github.com/44xtc44/EisenRadio-chaquopy)
* Kivy Android source code GitHub [EisenRadio](https://github.com/44xtc44/EisenRadio/tree/dev/android/) and [PYPI - APK debug build](https://pypi.org/project/eisenradio-apk/)
* SNAP [eisenradio](https://snapcraft.io/eisenradio) and [PYPI package](https://pypi.org/project/eisenradio/).
* Report an issue: https://github.com/44xtc44/eisenradio/issues
# Command line
EisenRadio GUI supported by Flask server.
$ eisenradio # executable script in Python Path
$ python3 -m eisenradio.gui # runs package if Python path is defective or the SNAP pkg installer knows eisenradio
# Export / Import of GhettoRecorder in- and output files
Eisenradio stores *radio names and URLs* and *blacklists* in its database.
You can export for GhettoRecorder ``settings.ini`` and ``blacklist.json`` from database.
``Tools/Export/Names and URLs`` menu.
GhettoRecorder created ``blacklist.json`` can be imported into your database.
# Eisenradio - the boring details
* REST API app on blueprints and ApplicationFactory of the Flask microframework with a SQLite database
* First Internet Radio App that can run a Spectrum Analyser in a Web browser (Feb,2022)
* A local Python Flask Web Server connects to the radio server in behalf of you. Your browser connects to Flask
* Backend (server) opens the connection, buffers the radio stream and presents it to localhost IP: 127.0.0.1
* Frontend (browser) controls the backend, plays internet and local audio playlists
* Browser audio element connects `http://localhost:5050/sound/classic` that streams `http://37.251.146.169:8000/streamHD`
* Closing the browser does not disconnect the server listen (buffer discarded) nor streaming connections
* Plays and repairs aac plus files; play (1.3), repairs since version (1.4);
* Backup and restore are easy work with the help of an optional ex/imported human-readable *ini file
* Blacklist feature for recorded files (titles); delete only once
* lists can be ex/imported via a json dictionary file to other devices
* playing local audio uses the web server multiple file upload feature
* Multithreading allows you an unlimited number of radio connections at the same time, until the ISP Bandwidth limit hits
* Android APK Package uses Python Kivy for multi touch and promotes the app to "foreground service" (to not get killed)
""" sketch """
|B | |S | Flask web server, Header[Werkzeug/2.0.2 Python/3.10.1]
|r |listen |e |-------> starRadio
|o |-------> <-- |r |
|w |GhettoRecorder |v |-------> planetRadio
|s |---> <----- |e |
|e | |r |-------> satelliteRadio
|r | | |
net: localhost net: internet
CORS: accept CORS: deny
audioNode: 1,-1 audioNode: 0, 0
JavaScript,CSS Python,SQL
Cross-Origin Resource Sharing mechanism (CORS)
i.a. prevents a Browser from analysing audio from internet
## pip install
$ pip3 install eisenradio # Tux
> pip install eisenradio # M$
## Pytest and tox
Part of the test automation with flake8 and tox on GitHub
$ tox
## Uninstall
Python user:
find the module location
uninstall and then remove remnants
$ pip3 show eisenradio
$ pip3 uninstall eisenradio
Location: ... /python310/site-packages
# Sphinx Documentation
https://eisenradio.readthedocs.io/en/latest/
# Known issues
Detected problems got a "todo" marker.
You can search through the project to see what is going wrong.
# Contributions
Pull requests are welcome.
If you want to make a major change, open an issue first to have a short discuss.
Next level could be [Blender 3D](https://www.blender.org/) objects rendered as 2D SVG in JavaScript motion.
Replace pure DOM element animation with canvas. Each animation gets its own canvas for more speed and to lower CPU.
# Thank you
[YouTube franks laboratory](https://www.youtube.com/results?search_query=franks+laboratory)
# License
MIT
Raw data
{
"_id": null,
"home_page": "https://github.com/44xtc44",
"name": "eisenradio",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "",
"author": "Ren\u00e9 Horn",
"author_email": "rene_horn@gmx.net",
"download_url": "https://files.pythonhosted.org/packages/86/fa/3ce17927d354560b8023643a5cafb36c59593fcb02030e8e0a99920da23d/eisenradio-2.4.2.tar.gz",
"platform": null,
"description": "# Eisenradio - Web radio DB / Media-player\n\n ![alt logo of eisenradio](https://github.com/44xtc44/EisenRadio/raw/dev/docs/source/aircraft_logo.png)\n ![Tests](https://github.com/44xtc44/eisenradio/actions/workflows/tests.yml/badge.svg?branch=dev)\n\n## Overview\n\nThis repository shows the full stack source code of an SVG animated GUI for [GhettoRecorder](https://github.com/44xtc44/GhettoRecorder).\n\n* first internet Radio App that can run a Spectrum Analyser in a Browser (Feb,2022), sketch at page bottom\n* SVG animations in vanilla JavaScript super fast animated and colorized with regex\n* Playlist feature; load and walk through a list of your local sound files\n* REST API Flask endpoints; serve a SQLite database in plain SQL\n* deployment source code for [Android Studio](https://github.com/44xtc44/EisenRadio-chaquopy) , [Docker](https://github.com/44xtc44/EisenRadio/blob/dev/Dockerfile), [Snapcraft](https://github.com/44xtc44/EisenRadio/tree/dev/snap) and [Kivy](https://github.com/44xtc44/EisenRadio/tree/dev/kivy) available\n\n# Name\n\nThe initial design was intended to mimic a hardware store site with multiple items listed.\n\"Eisen\" Hardware [iron radios].\n\n# Comic style animated internet radio\n\nInkscape created SVG images are used everywhere in the app. No raster graphics in this project. Except converted from SVG.\n\n* 90% of the SVG animations run on canvas for reduced CPU load and smooth, up-scaled display\n* a dedicated multi SVG image and SVG group loader class to preload all SVG stuff as super correct tagged SVG images\n* inline SVG groups are loaded into a dictionary of image instances and connected to their canvas\n\n\n<table>\n <tbody>\n <tr>\n <td>\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/browser_android.png\" alt=\"browser android\" height=\"555\"/> \n </td>\n </tr>\n <tr>\n <td>\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/browser_tux_day_0755.PNG\" alt=\"browser tux at daylight\" width=\"600\"/> \n </td>\n </tr>\n <tr>\n <td>\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/browser_tux_night_1918.PNG\" alt=\"browser tux at night\" width=\"600\"/>\n </td>\n </tr>\n </tbody>\n</table>\n\n* each instance stores the image, a list of its SVG tags as well as the current transformation status and position, ...\n* SVG path manipulation method with regex\n\nThe functional principle can be transferred to Java on Android to create dynamic 2D game backgrounds.\n\n# Audio\n\nAudio spectrum is used to animate the colors of the speaker symbol waves.\nSpeaker symbol shows customized colors for different levels of audio output strength and dynamic.\nUnfortunately the display is very CPU hungry. So only one speaker is shown.\n\n<p>Classic and Ambient 🟦🟩 music will often show other colors than Thrash Metal or Hip Hop 🟧🟥.</p>\n\nMaster function [getAverageVolume()](https://github.com/44xtc44/EisenRadio/blob/dev/eisenradio/eisenhome/bp_home_static/js/svg-manage.js#L1760)\ncalculates the audio volume level. This function was created by \"franks laboratory\", link in the Thank-you section at bottom.\n\n<p>The \"scaling by rhythm\" of frontman Tux and friends 🐧 🐱 🐻 is also driven by </p> \n\n[getAverageVolume()](https://github.com/44xtc44/EisenRadio/blob/dev/eisenradio/eisenhome/bp_home_static/js/svg-manage.js#L1760)\n\n# Local audio and shuffled playlists\n\nA local folder with files of different sound file types is called a playlist.\nAAC and MP3 files are known to run. You can go back and forth in the list.\n\nIf AAC is hanging, you can repair the whole folder with \"Tools/aacp file repair\" menu.\nIntegrated from my [aacRepair](https://github.com/44xtc44/aacRepair) repo.\n\nRemember, the app runs in a browser.\nWe *misuse* the upload multi select feature of the browser.\nNothing is uploaded, but file *objects* are caught in a list and played.\n\n\n# Gain - preamp\n\nBring your earbuds to the limit.\nEisenRadio owns a *Volume Gain* slider as well as [GhettoRecorder](https://github.com/44xtc44/GhettoRecorder)\nPush the preamp to 300%. This feels like 20% louder.\n\nWorks with bluetooth headphones!\n\n\n# Spectrum Analyzer\n\nSpectrum analyzer canvas is now fully integrated and can be switched by the \"TV\" button.\nChoose between different spectrum analyzer shows.\n\nThis concept can show its strengths if used to present the latest management reports.\nA background video on canvas one and several statistics shown on separated, animated, or distorted monitors, canvas of course.\n\n<table>\n <tbody>\n <tr>\n <td>\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/spectrum_starfield.PNG\" alt=\"Spectrum Analyzer one\" style=\"width:35%\"/> \n </td>\n <td>\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/spectrum_flowfield.PNG\" alt=\"Spectrum Analyzer two\" style=\"width:35%\"/>\n </td>\n </tr>\n </tbody>\n</table>\n\n\n# Customized radio\n\n\"Edit\" the radio settings. Upload your favorite pictures to the database. Add a comment.\n\nThe app page is separated by two areas.\nA monitor to the left and a display area beside for pictures and comments or the playlist titles.\n\n<img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/secondary_menu.png\" alt=\"secondary_menu\" height=\"500\"/>\n\n## Energy Saver\n\nSustainable fun reduction.\nSome exotic browser and mobiles could be overwhelmed by the fully animated show.\n\nYou are compensated by a CPU icon that can change its color.\n\n<img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/energy_saver.PNG\" alt=\"fun reduction energy saver radio button\" style=\"width:100px\"/>\n\n\n# Recorder\n\nCalled and terminated GhettoRecorder threads for listen and record.\n\nThis version suffers from the initial button press concept.\nNext version of EisenRadio will use the latest GhettoRecorder for easy-peasy internal switching.\n\n# Recorder blacklist feature\n\nEach recorder refuses to write a file, if the title was written to its radio specific blacklist before.\n\nOne dedicated thread is responsible to update all radio blacklists.\nAll lists can be dumped into a JSON file and merged with GhettoRecorder blacklists. Uploaded to DB then.\n\nEisenRadio writes temporary lists of known recorded file names in JSON format.\nThe SQLite database is updated with a fresh file name only if a recorder writes a new file.\nAn internet cloud connection count in mind.\n\n# Multiple tools menu\n\n* config with feature selection for animation level\n* enable and maintain blacklists\n* dump the radios or blacklist database to JSON files\n* import a GhettoRecorder [settings.ini](https://github.com/44xtc44/GhettoRecorder/blob/dev/ghettorecorder/settings.ini) file to database to add more radio station URLs\n\n<table>\n <tbody>\n <tr>\n <td>\n <a href=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/tools_menu.PNG\">\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/tools_menu.PNG\" alt=\"tools for blacklist database dump and deletion\" style=\"height:300px\"/> \n </a>\n </td>\n <td>\n <a href=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/config_show.PNG\">\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/config_show.PNG\" alt=\"config show\" style=\"height:300px\"/>\n </a>\n </td>\n <td>\n <a href=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/blacklist_alter.PNG\">\n <img src=\"https://github.com/44xtc44/EisenRadio/raw/dev/.github/blacklist_alter.PNG\" alt=\"blacklist show\" style=\"height:300px\"/>\n </a>\n </td>\n </tr>\n </tbody>\n</table>\n\n\n# Help\n\nUse the menu bar. *About* offers a help menu.\n\nThere is a \"post-it\", how to reveal the URL of your beloved radio station, hidden in an advertisement polluted website.\n\n# Links\n\nThe app is available as\n\n* Android Studio source code GitHub [EisenRadio-chaquopy](https://github.com/44xtc44/EisenRadio-chaquopy)\n* Kivy Android source code GitHub [EisenRadio](https://github.com/44xtc44/EisenRadio/tree/dev/android/) and [PYPI - APK debug build](https://pypi.org/project/eisenradio-apk/)\n* SNAP [eisenradio](https://snapcraft.io/eisenradio) and [PYPI package](https://pypi.org/project/eisenradio/).\n* Report an issue: https://github.com/44xtc44/eisenradio/issues\n\n# Command line\n\nEisenRadio GUI supported by Flask server.\n\n $ eisenradio # executable script in Python Path\n $ python3 -m eisenradio.gui # runs package if Python path is defective or the SNAP pkg installer knows eisenradio\n\n\n# Export / Import of GhettoRecorder in- and output files\n\nEisenradio stores *radio names and URLs* and *blacklists* in its database.\n\nYou can export for GhettoRecorder ``settings.ini`` and ``blacklist.json`` from database.\n``Tools/Export/Names and URLs`` menu.\n\nGhettoRecorder created ``blacklist.json`` can be imported into your database.\n\n\n# Eisenradio - the boring details\n\n* REST API app on blueprints and ApplicationFactory of the Flask microframework with a SQLite database\n* First Internet Radio App that can run a Spectrum Analyser in a Web browser (Feb,2022)\n* A local Python Flask Web Server connects to the radio server in behalf of you. Your browser connects to Flask\n\n * Backend (server) opens the connection, buffers the radio stream and presents it to localhost IP: 127.0.0.1\n * Frontend (browser) controls the backend, plays internet and local audio playlists\n * Browser audio element connects `http://localhost:5050/sound/classic` that streams `http://37.251.146.169:8000/streamHD`\n * Closing the browser does not disconnect the server listen (buffer discarded) nor streaming connections\n\n* Plays and repairs aac plus files; play (1.3), repairs since version (1.4);\n* Backup and restore are easy work with the help of an optional ex/imported human-readable *ini file\n* Blacklist feature for recorded files (titles); delete only once\n * lists can be ex/imported via a json dictionary file to other devices\n* playing local audio uses the web server multiple file upload feature\n* Multithreading allows you an unlimited number of radio connections at the same time, until the ISP Bandwidth limit hits\n* Android APK Package uses Python Kivy for multi touch and promotes the app to \"foreground service\" (to not get killed)\n\n \"\"\" sketch \"\"\"\n\n |B | |S | Flask web server, Header[Werkzeug/2.0.2 Python/3.10.1]\n |r |listen |e |-------> starRadio\n |o |-------> <-- |r |\n |w |GhettoRecorder |v |-------> planetRadio\n |s |---> <----- |e |\n |e | |r |-------> satelliteRadio\n |r | | |\n net: localhost net: internet\n CORS: accept CORS: deny\n audioNode: 1,-1 audioNode: 0, 0\n JavaScript,CSS Python,SQL\n\n Cross-Origin Resource Sharing mechanism (CORS)\n i.a. prevents a Browser from analysing audio from internet\n\n\n## pip install\n\n $ pip3 install eisenradio # Tux\n > pip install eisenradio # M$\n\n## Pytest and tox\n\nPart of the test automation with flake8 and tox on GitHub\n\n $ tox\n\n\n## Uninstall\n\nPython user:\n\n find the module location\n uninstall and then remove remnants\n\n $ pip3 show eisenradio\n\n $ pip3 uninstall eisenradio\n\n Location: ... /python310/site-packages\n\n# Sphinx Documentation\n\nhttps://eisenradio.readthedocs.io/en/latest/\n\n# Known issues\n\nDetected problems got a \"todo\" marker.\nYou can search through the project to see what is going wrong.\n\n# Contributions\n\nPull requests are welcome.\nIf you want to make a major change, open an issue first to have a short discuss.\n\nNext level could be [Blender 3D](https://www.blender.org/) objects rendered as 2D SVG in JavaScript motion.\nReplace pure DOM element animation with canvas. Each animation gets its own canvas for more speed and to lower CPU.\n\n# Thank you\n\n[YouTube franks laboratory](https://www.youtube.com/results?search_query=franks+laboratory)\n\n# License\n\nMIT\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Play radio. Style your App.",
"version": "2.4.2",
"project_urls": {
"Homepage": "https://github.com/44xtc44"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "28b4fa298d2ffb84f2640184512426ef58bc85035a9799175ae67b9068e73498",
"md5": "a745f89e4a3a527cdc38e5b4acf679c3",
"sha256": "be22026e0aadb85a96a7a8476ef266e892cec6eccab0a04db2ab03f7790649be"
},
"downloads": -1,
"filename": "eisenradio-2.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a745f89e4a3a527cdc38e5b4acf679c3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 2433795,
"upload_time": "2024-02-19T11:25:36",
"upload_time_iso_8601": "2024-02-19T11:25:36.452330Z",
"url": "https://files.pythonhosted.org/packages/28/b4/fa298d2ffb84f2640184512426ef58bc85035a9799175ae67b9068e73498/eisenradio-2.4.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "86fa3ce17927d354560b8023643a5cafb36c59593fcb02030e8e0a99920da23d",
"md5": "240c8db0d3a004e126dd1301a8d73478",
"sha256": "92493c7512c465d24cd178153348f60d904d260ddf06d5c36d0f4b5e28389dd5"
},
"downloads": -1,
"filename": "eisenradio-2.4.2.tar.gz",
"has_sig": false,
"md5_digest": "240c8db0d3a004e126dd1301a8d73478",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 2436912,
"upload_time": "2024-02-19T11:25:42",
"upload_time_iso_8601": "2024-02-19T11:25:42.259487Z",
"url": "https://files.pythonhosted.org/packages/86/fa/3ce17927d354560b8023643a5cafb36c59593fcb02030e8e0a99920da23d/eisenradio-2.4.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-19 11:25:42",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "eisenradio"
}