refactor: restructure project for PyPI packaging
- Added `pyproject.toml` for project metadata and dependency management - Moved application code to `src/wikimore` directory for better organization - Updated `launch.json` configuration for Flask app - Enhanced README with installation, development instructions, and badges - Introduced `main` function in `app.py` for environment-based configuration These changes streamline packaging and improve project maintainability.
This commit is contained in:
parent
31687723aa
commit
ae73156fc9
9 changed files with 107 additions and 10 deletions
3
.vscode/launch.json
vendored
3
.vscode/launch.json
vendored
|
@ -10,10 +10,11 @@
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"module": "flask",
|
"module": "flask",
|
||||||
"env": {
|
"env": {
|
||||||
"FLASK_APP": "app.py",
|
|
||||||
"FLASK_DEBUG": "1",
|
"FLASK_DEBUG": "1",
|
||||||
},
|
},
|
||||||
"args": [
|
"args": [
|
||||||
|
"--app",
|
||||||
|
"wikimore",
|
||||||
"run",
|
"run",
|
||||||
"--no-debugger",
|
"--no-debugger",
|
||||||
"--no-reload",
|
"--no-reload",
|
||||||
|
|
72
README.md
72
README.md
|
@ -1,26 +1,84 @@
|
||||||
# Wikimore - A simple frontend for Wikimedia projects
|
# Wikimore - A simple frontend for Wikimedia projects
|
||||||
|
|
||||||
|
[![Support Private.coffee!](https://shields.private.coffee/badge/private.coffee-support%20us!-pink?logo=coffeescript)](https://private.coffee)
|
||||||
|
[![Matrix](https://shields.private.coffee/badge/Matrix-join%20us!-blue?logo=matrix)](https://matrix.pcof.fi/#/#wikimore:private.coffee)
|
||||||
|
[![PyPI](https://shields.private.coffee/pypi/v/wikimore)](https://pypi.org/project/wikimore/)
|
||||||
|
[![PyPI - Python Version](https://shields.private.coffee/pypi/pyversions/wikimore)](https://pypi.org/project/wikimore/)
|
||||||
|
[![PyPI - License](https://shields.private.coffee/pypi/l/wikimore)](https://pypi.org/project/wikimore/)
|
||||||
|
[![Latest Git Commit](https://shields.private.coffee/gitea/last-commit/privatecoffee/wikimore?gitea_url=https://git.private.coffee)](https://git.private.coffee/privatecoffee/wikimore)
|
||||||
|
|
||||||
Wikimore is a simple frontend for Wikimedia projects. It uses the MediaWiki API to fetch data from Wikimedia projects and display it in a user-friendly way. It is built using Flask.
|
Wikimore is a simple frontend for Wikimedia projects. It uses the MediaWiki API to fetch data from Wikimedia projects and display it in a user-friendly way. It is built using Flask.
|
||||||
|
|
||||||
This project is still in development and more features will be added in the future. It is useful for anyone who wants to access Wikimedia projects with a more basic frontend, or to provide access to Wikimedia projects to users who cannot access them directly, for example due to state censorship.
|
This project is still in development and more features will be added in the future. It is useful for anyone who wants to access Wikimedia projects with a more basic frontend, or to provide access to Wikimedia projects to users who cannot access them directly, for example due to state censorship.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Multi-language support (currently English and German, more can and will be added)
|
- Supports all Wikimedia projects in all languages
|
||||||
- Multi-project support (currently Wikipedia and Wiktionary, more can and will be added)
|
|
||||||
- Search functionality
|
- Search functionality
|
||||||
- Proxy support for Wikimedia images
|
- Proxy support for Wikimedia images
|
||||||
|
|
||||||
|
## Instances
|
||||||
|
|
||||||
|
| URL | Provided by | Country | Comments |
|
||||||
|
| ----------------------------------------------------------- | ----------------------------------------- | ------- | -------- |
|
||||||
|
| [wikimore.private.coffee](https://wikimore.private.coffee/) | [Private.coffee](https://private.coffee/) | Austria | |
|
||||||
|
|
||||||
|
If you operate a public instance of Wikimore and would like to have it listed here, please open an issue or a pull request.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
### Production
|
||||||
|
|
||||||
|
1. Create a virtual environment and activate it
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Install the package from PyPI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install wikimore
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Run the application
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wikimore
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Open your browser and navigate to `http://localhost:8109`
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
1. Clone the repository
|
1. Clone the repository
|
||||||
2. Install the required packages using `pip install -r requirements.txt`
|
|
||||||
3. Run the app using `python app.py`
|
|
||||||
|
|
||||||
## Usage
|
```bash
|
||||||
|
git clone https://git.private.coffee/privatecoffee/wikimore.git
|
||||||
|
cd wikimore
|
||||||
|
```
|
||||||
|
|
||||||
1. Open your browser and navigate to `http://localhost:5000`
|
2. Create a virtual environment and activate it
|
||||||
2. Use the search bar to search for articles on a given Wikimedia project, in a given language
|
|
||||||
|
```bash
|
||||||
|
python3 -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Install the package in editable mode
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Run the application
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flask --app wikimore run
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Open your browser and navigate to `http://localhost:5000`
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
26
pyproject.toml
Normal file
26
pyproject.toml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
[build-system]
|
||||||
|
requires = ["hatchling"]
|
||||||
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name = "wikimore"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = [{ name = "Private.coffee Team", email = "support@private.coffee" }]
|
||||||
|
description = "A simple frontend for Wikimedia wikis"
|
||||||
|
readme = "README.md"
|
||||||
|
license = { file = "LICENSE" }
|
||||||
|
requires-python = ">=3.10"
|
||||||
|
classifiers = [
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"License :: OSI Approved :: GNU Affero General Public License v3",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
]
|
||||||
|
dependencies = ["flask", "bs4"]
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
wikimore = "wikimore.app:main"
|
||||||
|
|
||||||
|
[project.urls]
|
||||||
|
"Homepage" = "https://git.private.coffee/privatecoffee/wikimore"
|
||||||
|
"Bug Tracker" = "https://git.private.coffee/privatecoffee/wikimore/issues"
|
||||||
|
"Source Code" = "https://git.private.coffee/privatecoffee/wikimore"
|
3
src/wikimore/__init__.py
Normal file
3
src/wikimore/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from .app import app
|
||||||
|
|
||||||
|
__all__ = ["app"]
|
|
@ -3,6 +3,7 @@ import urllib.request
|
||||||
from urllib.parse import urlencode, urlparse
|
from urllib.parse import urlencode, urlparse
|
||||||
from html import escape
|
from html import escape
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
import logging
|
import logging
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
@ -208,7 +209,15 @@ def search_redirect(project, lang, query):
|
||||||
|
|
||||||
app.wikimedia_projects, app.languages = get_wikimedia_projects()
|
app.wikimedia_projects, app.languages = get_wikimedia_projects()
|
||||||
|
|
||||||
print(len(app.wikimedia_projects), len(app.languages))
|
logger.debug(
|
||||||
|
f"Loaded {len(app.wikimedia_projects)} Wikimedia projects and {len(app.languages)} languages"
|
||||||
|
)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
port = int(os.environ.get("PORT", 8109))
|
||||||
|
host = os.environ.get("HOST", "0.0.0.0")
|
||||||
|
debug = os.environ.get("DEBUG", False)
|
||||||
|
app.run(port=port, host=host, debug=debug)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run(debug=True)
|
main()
|
Loading…
Reference in a new issue