A sleek, minimalist podcast app that combines powerful features with a clean, intuitive design. Discover and enjoy your favorite podcasts effortlessly, all in a beautifully streamlined interface.
- Installation
- Execution
- Testing
- Configuration
- Endpoints
- Features
- Design Decisions
- Data Sources
- Contributors
- Clone this repository
Windows
$ cd <project directory>
$ py -3 -m venv venv
$ venv\Scripts\activate
$ pip install -r requirements.txt
MacOS
$ cd <project directory>
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
When using PyCharm, set the virtual environment using 'File or PyCharm'->'Settings' and select your project from the left menu. Select 'Project Interpreter', click on the gearwheel button and select 'Add Interpreter'. Click the 'Existing environment' radio button to select the virtual environment.
Running the application
From the project directory, and within the activated virtual environment (see venv\Scripts\activate above):
$ flask run
From a terminal in the root folder of the project, you can also run all tests using the following commands:
-
To run the main tests:
python -m pytest -v tests
-
To run the database functionality tests:
python -m pytest -v tests_db
Make sure you are within the virtual environment when running these commands. PyCharm also provides a built-in terminal, which uses the configured virtual environment.
The project directory/.env file contains variable settings. They are set with appropriate values.
FLASK_APP
: Entry point of the application (should always bewsgi.py
).FLASK_ENV
: The environment in which to run the application (eitherdevelopment
orproduction
).SECRET_KEY
: Secret key used to encrypt session data.TESTING
: Set to False for running the application. Overridden and set to True automatically when testing the application.WTF_CSRF_SECRET_KEY
: Secret key used by the WTForm library.
These settings are for the database version of the code:
SQLALCHEMY_DATABASE_URI
: The URI of the SQlite database, by default it will be created in the root directory of the project.SQLALCHEMY_ECHO
: If this flag is set to True, SQLAlchemy will print the SQL statements it uses internally to interact with the tables.REPOSITORY
: This flag allows us to easily switch between using the Memory repository or the SQLAlchemyDatabase repository.
Here are the primary endpoints for the application:
- GET:
- /: Homepage of the application.
- /<facet_name>: Displays the home page with podcasts filtered by the specified facet (e.g., top podcasts, recently played, or new podcasts).
- /home/<podcast_id>: Redirects to the detailed description page of the selected podcast.
- /category: Displays a list of all podcast categories. (page for categories)
- /category/<category_name>: Redirects to the page displaying podcasts within the specified category.
- /discover: Displays the Discover(Catalogue) page with popular categories, editor picks, and a podcast list with a filter functionality (ex: By newest to oldest).
- /all_podcasts/<category_name>: Shows podcasts under a specific category or all podcasts if the category is "all".
- /editor_picks/<podcast_id>: Redirects to the detailed description page of a podcast selected as an editor's pick.
- /filtered_podcast/<podcast_id>: Redirects to the detailed description page of a podcast after applying some filter and clicking a podcast.
- /podcast: Displays detailed information about a specific podcast, including its description, categories, and episodes.
- Minimalist Design: A clean and intuitive interface that makes it easy to navigate through your favorite podcasts.
- Podcast Discovery: Browse and search for podcasts based on various categories and recommendations.
- Detailed Podcast View: View detailed information about each podcast, including episodes, descriptions, and related content.
- Podcasts and Episodes CSV was processed and cleaned.
- Currently, most routes return a randomly selected list of Podcasts as this feature will be properly implementable once a database has been implemented in part 2. For example, 'continue listening' can't be implemented at this stage.
The data files are modified excerpts downloaded from:
https://www.kaggle.com/code/switkowski/building-a-podcast-recommendation-engine/input
- Deiza Talreja
- Thamasha Rajakaruna
- Vandan Bhatt
If you'd like to contribute to this project, feel free to fork the repository and submit a pull request with your improvements.