Carrom tournaments management
Project description
This project contains some tools that make it easier the organization of a championship of Carrom tournaments using a variant of the Swiss system, or even everyone against everyone events.
The main component is a Pyramid application serving two distinct user interfaces:
A very light, HTML only, read only view of the whole database, where you can actually browse thru the clubs, championships, tourneys, players and ratings. You can see it in action on the public SoL instance at https://sol4.metapensiero.it/lit/.
A complete ExtJS based desktop-like application, that exposes all the functionalities described below in an easy to manage interface.
Goals
These are the key points:
Multilingual application
Scarry spoke only Italian, because the i18n mechanism in Delphi (and in general under Windows) sucks. Most of the code was written and commented in Italian too, and that made it very difficult to get foreign contributions.
Multiuser
There is a super user (named “admin” by default) that can do everything, in particular create other normal users, who can then log in and manage her own tournaments, but can’t change information owned by other users.
SoL 4 also implements an optional self registration procedure.
Real database
Scarry used Paradox tables, but we are in the third millennium, now: SoL uses a real, even if simple and light, SQL database under its skin.
Easy to use
The application is usually driven by computer-illiterated guys, so little to no surprises.
Easy to deploy
Gods know how many hours went in building f*cking installers with BDE goodies!
Bring back the fun
Programming in Python is just that, since the beginning!
High level description
The application implements the following features:
basic tables editing, like adding a new player, opening a new championship, manually tweaking the scores, and so on;
handle a single tourney
compose a list of competitors: usually this is just a single player, but there are two people in doubles, or more (teams)
set up the first round, made up of matches, each pairing two distinct competitors: if the tournament is associated with a rating this considers the Glicko2 rate of each player, otherwise uses a random pairing; either way, the tournament secretary is able to manually change the combinations
print the game sheets, where the player will write the scores
possibly show a countdown, to alert the end of the game
insert the score of each match
compute the new ranking
print the current ranking
possibly offer a way to withdraw some competitors, or to add a new competitor
compute the next round
repeat steps c. thru i. usually up to seven rounds
possibly offer a way to go back, delete last round, correct a score and repeat
if required, play up to three final rounds between the first two competitors
recompute the ranking, assigning prizes
update the rating the tournament is associated to
handle a championship of tourneys
each tourney is associated to one championship
print the championship ranking
data exchange, to import/export whole tourneys in a portable way
Installation and Setup
The very first requirement to install an instance of SoL on your own machine is getting Python 3.6 or better[1]. This step obviously depends on the operating system you are using: on most GNU/Linux distributions it is already available[2], for example on Debian and derivatives like Ubuntu the following command will do the task:
$ apt-get install python3
If instead you are using M$-Windows, you should select the right installer from the downloads page on https://www.python.org/.
Another recommended, although optional, add-on is the DejaVu fonts set, to support a rather wide range of glyphs when producing the PDFs printouts. As usual, on GNU/Linux it’s a matter of executing the following command
$ apt-get install fonts-dejavu
or equivalent for your distribution, while on M$-Windows you need to download them and extract the archive in the right location which usually is C:\Windows\Fonts.
The good old way
Install SoL using pip:
pip install SoL
that will download the latest version of SoL from PyPI and all its dependencies as well
Install ExtJS 4.2.1:
python3 -m metapensiero.extjs.desktop
Create a standard config file:
soladmin create-config config.ini
and edit it as appropriate; you can also directly specify the name and the password of the super user (by default the name is admin and the password will be asked interactively):
soladmin create-config --admin differentone --password str4nge
Setup the database:
soladmin initialize-db config.ini
Load official data:
soladmin restore config.ini
Run the application server:
pserve config.ini
Enjoy!
firefox http://localhost:6996/
or, for poor Window$ users or just because using Python makes you happier:
python -m webbrowser http://localhost:6996/
Pre-built Docker image
Another option, if you have a 64bit computer, is to run the pre-built Docker image.
Requirements
First of all, you must enable the hardware virtualization in the BIOS of your computer.
Then you can proceed to install the Docker Engine for your particular operating system (that is, GNU/Linux, Windows or Mac OS X).
After you have tested the install in the Docker Quickstart terminal (for example as depicted here), run the following command in the same window:
docker run -d -p 80:6996 --name sol amarsanakal/solista
This will start the software and is now accessible on port 80. You can access it as http://<ip-address>.
The <ip-address> is the ip address of the docker machine running on your PC. This would have been displayed to you when you launched the Docker Quickstart terminal. You can check it anytime by running:
docker-machine ls
the ip address is shown under the URL column. Use that without the port number shown there. See https://docs.docker.com/machine/get-started/ for more details.
Developer’s playground
If you are a developer and want to play with Docker, you can checkout SoL sources and
build an image with make docker-build
change the admin credentials with make docker-change-admin
start SoL within a Docker container with make docker-start, then visit http://localhost:6996/ as usual
See Makefile.docker for other related targets.
Roadmap
Provide some Unix shell scripts and Windows batch files to make the end users happier
Complete this section
Figure out how to build a new image on hub.docker.com whenever a new SoL release happens
Development
Since version 4 the development has been moved to GitLab: the previous repository on Bitbucket is now just a mirror, automatically kept in sync when new commits land on the primary one.
The complete sources can be downloaded with the following command:
git clone https://gitlab.com/metapensiero/SoL.git
I recommend using a virtual environment to keep you isolated from the system packages:
python3 -m venv env source env/bin/activate
After that, you can setup a development environment by executing the command:
pip install -r requirements/development.txt
You must then install the required ExtJS 4 sources executing:
python -m metapensiero.extjs.desktop --src
If you are a developer, you are encouraged to create your own fork of the software and possibly open a pull request: I will happily merge your changes!
You can run the tests suite with either
make test
or with a more specific
pytest tests/models
I18N / L10N
Currently SoL is translated in English[3], French and Italian. If you know other languages and want to contribute, the easiest way to create a new translation is to create an account on the Weblate site and follow its translators guide.
Otherwise if like me you prefer using more traditional tools[4] you can extract a copy of the sources and operate directly on the local catalogs under the directory src/sol/locale.
To extract translatable messages use the following command:
make update-catalogs
To check your work you must compile them with:
make compile-catalogs
Feedback and support
If you run in troubles, or want to suggest something, or simply a desire of saying “Thank you” raises up, feel free to contact me via email as lele at metapensiero dot it.
Consider also joining the dedicated mailing list where you can get in contact with other users of the application. There is also an issues tracker where you can open a new tickets about bugs or enhancements.
Changes
4.0b10 (2020-04-14)
Fix deployment issues
4.0b9 (2020-04-14)
Fix deployment issues
4.0b8 (2020-04-14)
New optional “social site” URL on tournaments
Store all boards misses, not just the totals
4.0b7 (2020-04-09)
Show both the scores and the errors in the training tournament’s Lit view
4.0b6 (2020-04-08)
Fix bug that allowed the self-insertion to only one of the competitors…
4.0b5 (2020-04-08)
- note:
one month of captivity…
Other minor tweaks to “Corona Carrom” management
4.0b4 (2020-04-07)
Minor tweaks to “Corona Carrom” management
4.0b3 (2020-04-05)
Restore “email” and “language” on players, removed in 4.0a5
Add support for “Corona Carrom”, “El Carrom en los tiempos del Covid-19”
4.0b2 (2020-02-15)
Highlight winners in the results printout, as suggested by Carlito
New “donations” section in the user’s manuals (still draft!)
4.0b1 (2020-02-10)
New introductory chapter in the user manual, thanks to Elisa for the preliminary text
New “world” fake country and icon, for international federations
Add an entry in the main menu to change account’s UI language
Take into account the selected round when printing tourney’s matches, for consistency with the results printout
Use darkblue instead of red to highlight winners, as red may suggest an error condition
4.0a10 (2020-02-06)
Add a rating on the clubs, used as default when creating new associated championships
Clearer identification of ratings, showing their level and associated club, if any
4.0a9 (2020-02-05)
Show the user’s email in the “owner” lookup, to avoid name clashes
Fix serialization of the new hosting club tourney’s attribute
New button to start the countdown after 60 seconds
Fix the actions deactivation logic based on the owner id for new records
4.0a8 (2020-02-01)
Add a rating on the championships, used as default when creating new associated tournaments
4.0a7 (2020-01-31)
Revise the obfuscation algorithm of player names, using an hash of the original one instead of simple truncation, to avoid conflicts; also, from now on it gets applied also to the exported streams
Highlight the not-yet-scored matches in the tourney management window
Allow emblems and portraits up to 512Kb in size
4.0a6 (2020-01-29)
Nicer rendering of the main Lit page
Simpler way to open the Lit page of a tourney from its management window
Allow to save partial results, to be on the safe side when there are lots of boards
Show the “hosting club” on all printouts, if present
4.0a5 (2020-01-25)
Remove “email”, “language” and “phone” from players data
Remove player’s rate from participants printout
Omit the player’s club in the ranking printout for international tourneys
Add the player’s nationality in matches and results printouts
Add an “hosting club” to tournaments
4.0a4 (2020-01-18)
New association between clubs and users: now a user may add a championship/tourney/rating/player only to clubs he either owns or is associated with
Add a link to send an email to the instance’ admin on the login panel
4.0a3 (2020-01-13)
Use a three-state flag for the player’s agreed privacy: when not explicitly expressed, SoL assumes they are publicly discernible if they participated to tournaments after January 1, 2020
Player’s first and last names must be longer that one single character
4.0a2 (2020-01-11)
Fix issue with UI language negotiation
Use the better maintained Fomantic-UI fork of Semantic-UI in the “Lit” interface
New tournaments delay compatriots pairing option
Technicalities:
Official repository is now https://gitlab.com/metapensiero/SoL
NixOS recipes (thanks to azazel@metapensiero.it)
4.0a1 (2018-08-06)
Warning
Backward incompatible version
This release uses a different algorithm to crypt the user’s password: for this reason previous account credentials cannot be restored and shall require manual intervention.
It’s not possible to upgrade an existing SoL3 database to the latest version.
However, SoL4 is able to import a backup of a SoL3 database made by soladmin backup.
Different layout for matches and results printouts, using two columns for the competitors to improve readability (suggested by Daniele)
New tournaments retirements policy
New “women” and “under xx” tourney’s ranking printouts
New “self sign up” procedure
New “forgot password” procedure
New “agreed privacy” on players
Somewhat prettier “Lit” interface, using Semantic-UI tables
Technicalities:
Development moved to GitLab
Officially supported on Python 3.6 and 3.7, not anymore on <=3.5
Shiny new pytest-based tests suite
Uses python-rapidjson instead nssjson, as I officially declared the latter as abandoned
Uses PyNaCl instead of cryptacular, as the former is much better maintained
“Users” are now a separated entity from “players”: now the login “username” is a mandatory email and the password must be longer than five characters (was three before)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file SoL-4.0b10.tar.gz
.
File metadata
- Download URL: SoL-4.0b10.tar.gz
- Upload date:
- Size: 6.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f0e6eb1f9621a60425e1bbbc749d8c6647cbfcde5e711b90d3eb78de98809946 |
|
MD5 | 084de783c929fd2b459e5b92c995f194 |
|
BLAKE2b-256 | c64b44ef9f95b310b0d099fd2f9131ec6c07282736f76e32df72994d07fb1b9b |
File details
Details for the file SoL-4.0b10-py3-none-any.whl
.
File metadata
- Download URL: SoL-4.0b10-py3-none-any.whl
- Upload date:
- Size: 4.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f68bfe3c69a62956664753dee036b5e6574b27b2da1a0ce205f8610d8ecea3b |
|
MD5 | 748c1ff5507b9bd0418830401b813205 |
|
BLAKE2b-256 | e20cd8b763be456b015311056978d9869a94a26909271db6758d6c832a688f34 |