Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pygame/pygameweb
🎮🕸️ pygame.org website. Python, PostgreSQL, Flask, sqlalchemy, JS.
https://github.com/pygame/pygameweb
flask pygame python sqlalchemy
Last synced: 3 days ago
JSON representation
🎮🕸️ pygame.org website. Python, PostgreSQL, Flask, sqlalchemy, JS.
- Host: GitHub
- URL: https://github.com/pygame/pygameweb
- Owner: pygame
- License: bsd-2-clause
- Created: 2017-02-11T01:40:39.000Z (almost 8 years ago)
- Default Branch: main
- Last Pushed: 2024-12-23T21:18:15.000Z (16 days ago)
- Last Synced: 2024-12-30T05:16:34.965Z (10 days ago)
- Topics: flask, pygame, python, sqlalchemy
- Language: Python
- Homepage: https://www.pygame.org/
- Size: 491 KB
- Stars: 121
- Watchers: 18
- Forks: 30
- Open Issues: 53
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
pygame.org website |coverage-status|
====================================Pieces of the pygame website (https://www.pygame.org/) will be open sourced here.
Strategy is to bring in code one piece at a time, and clean it up as I go.
It's a community website where people can post projects, comment on them,
but also write things in there themselves on wiki pages.Quick-Start
===========Set up the required packages::
python3.6 -m venv anenv
. ./anenv/bin/activate
pip install --upgrade pip
pip install -r requirements.dev.txt
pip install -e .For now yuicompressor is needed for css compression, and
imagamagick and optipng are needed for creating and optimizing image thumbnails,
additionally postgresql is the database of choice::
brew install yuicompressor node optipng imagemagick postgresql
sudo apt-get install yui-compressor nodejs optipng imagemagick postgresql postgresql-client libpq-devEnvironment setup
=================Define a **.env** file based on the **example.env** file.
::
cp example.env .env
Define the **APP_SECRET_KEY** variable in the **.env** file or the tests won't work.
You can define any value, like **"a"** or **"s3cret-stuff-blah"**.Tool setup
==========See setup.cfg for all tool config (pytest, coverage, etc).
Db setup instructions
=====================postgresql 9.6
One database for testing, and another one for running the app.
We use alembic for db migrations. http://alembic.readthedocs.org/en/latest/
Set up the `postgresql` database::
sudo -u postgres createdb pygame
sudo -u postgres psql pygame -c "CREATE USER pygame WITH PASSWORD 'password';"
sudo -u postgres psql pygame -c "GRANT ALL PRIVILEGES ON DATABASE pygame to pygame;"We also create a database for running tests::
sudo -u postgres createdb pygame_test
sudo -u postgres psql pygame -c "CREATE USER pygame_test WITH PASSWORD 'password';"
sudo -u postgres psql pygame_test -c "GRANT ALL PRIVILEGES ON DATABASE pygame_test to pygame_test;"To upgrade to latest model changes do::
alembic upgrade head
When you change a model make an alembic revision::
alembic revision --autogenerate -m "Added a field for these reasons."
Then you will need to apply the change to your db (and commit the version file)::
alembic upgrade head
Testing with pytest
===================http://docs.pytest.org/en/latest/
To run all unit tests and functional tests use::
pytest
To watch for changes and rerun tests::
ptw
Maybe you just want to test the wiki parts::
pytest -k wiki
tests/unit/ are for unit tests.
tests/functional/ are for tests which would use flask and db.
tests/conftest.py is for test configuration.
tests/sqlpytestflask.py are some fixtures for db testing.Unit tests and functional tests are kept separate, because functional tests can take a while longer to run.
We use various fixtures to make writing the tests easier and faster.
Running the webserver locally
=============================Use an environment variable to configure the database connection (see the
database setup steps above)::export APP_DATABASE_URL="postgresql://pygame:password@localhost/pygame"
Configure a directory containing static files::
export APP_WWW="static/"
The application may need a secure key, but for debugging it's not important
that it's properly random::export APP_SECRET_KEY="s3cret-stuff-blah"
Finally, you can enable some Flask debugging machinery (which should be off for
the site in production)::export APP_DEBUG=1
Now add the database fixtures to populate it with sample users. After that, you should be able to
login as admin with email ``[email protected]`` and password ``password``::
pygameweb_fixtures
Then run::pygameweb_front
Templates with jinja2 and bootstrap
===================================pygameweb/templates/
We use::
* `Jinja2 `_
* `Flask-Bootstrap `_
* `Bootstrap `_Command line tools with click
=============================We use click and setuptools entry points (in setup.py) for command line tools::
* `click `_
* `entry points `_Note, when you add or change a command line tool, you need to `pip install -e .` again.
If you can, try not to use command line options at all. Have one command do one thing,
and make the defaults good, or use the pygameweb.config.User login with Flask-security-fork
===================================pygameweb.user
pygameweb/templates/securityUsing::
* `flask-security-fork `_
Navigation with flask-nav
=========================pygameweb.nav
pygameweb.page.modelsUsing::
* `flask-nav `_
* `flask-bootstrap `_Dashboard is an overview
========================of all sorts of things happening in the pygame worlds around the interwebs.
https://pygame.org/dashboard
It's a 7000px wide webpage offering a summary of what's happening.
Projects people are working on,
videos folks are making,
tweets twits are... tweeting,
questions asked and answered.To caching things we
====================use `Flask-Caching `_
pygameweb.cache
pygameweb.news.viewsWith with a @cache decorator, and/or markup in a template.
.. |coverage-status| image:: https://coveralls.io/repos/github/pygame/pygameweb/badge.svg?branch=main
:target: https://coveralls.io/github/pygame/pygameweb?branch=main
:alt: Test coverage percentageReleases
========Step by step release instructions below.
- Commits to `main` branch do a dev deploy to pypi.
- Commits to `maintest` branch do a dev deploy to pypi.
- Commits to a tag do a real deploy to pypi.Prereleases
-----------https://packaging.python.org/tutorials/distributing-packages/#pre-release-versioning
Pre releases should be named like this:
```
# pygameweb/__init__.py
__version__ = '0.0.2'
```
Which is one version ahead of of the last tagged release.Release tags should be like '0.0.2', and match the `pygameweb/__init__.py __version__`.
Preparing a release in a branch.
--------------------------------It's a good idea to start a branch first, and make any necessary changes
for the release.```
git checkout -b v0.0.2
vi pygameweb/__init__.py __version__ = '0.0.2'
git commit -m "Version 0.0.2"
```Change log, drafting a release.
-------------------------------Github 'releases' are done as well.
You can start drafting the release notes in there before the tag.
https://help.github.com/articles/creating-releases/You can make the release notes with the help of the changes since last release.
https://github.com/pygame/pygameweb/compare/0.0.1...maingit log 0.0.1...main
Tagging a release
-----------------When the release is tagged, pushing it starts the deploy to pypi off.
```
git tag -a 0.0.2
git push origin 0.0.2
```
Note: do not tag pre releases
(these are made on commits to `main`/`maintest`).After the tag is pushed, then you can do the release
in github from your draft release.Back to dev version.
--------------------If we were at 0.0.2 before, now we want to be at 0.0.3.dev
```
vi pygameweb/__init__.py __version__ = '0.0.3.dev'
```Merge the release branch into main, and push that up.
Contributing
============Please discuss contributions first to avoid disappointment and rework.
Please see `contribution-guide.org `_ and
`Python Code of Conduct `_ for
details on what we expect from contributors. Thanks!The stack? python 3.6, postgresql 9.6, Flask, py.test, sqlalchemy, alembic, gulp, ansible, node.