.. -*- coding: utf-8 -*-
.. :Project: SoL -- Introduction
.. :Created: gio 9 ott 2008 11:40:17 CET
.. :Author: Lele Gaifax <lele@metapensiero.it>
.. :License: GNU General Public License version 3 or later
.. :Copyright: © 2008-2010, 2013-2016, 2018-2020, 2024, 2025 Lele Gaifax
..
=====================
Scarry On Lin{e|ux}
=====================
-------------------------------------------------------------
Powerful and complete solution to manage Carrom championships
-------------------------------------------------------------
:version: 5
:author: Lele Gaifax <lele@metapensiero.it>
:license: GPLv3
:status: |pipeline| |coverage|
.. |pipeline| image:: https://gitlab.com/metapensiero/SoL/badges/master/pipeline.svg
:target: https://gitlab.com/metapensiero/SoL/pipelines/
:alt: CI build status
.. |coverage| image:: https://gitlab.com/metapensiero/SoL/badges/master/coverage.svg
:target: https://gitlab.com/metapensiero/SoL/pipelines/
:alt: Overall test coverage
This project contains some tools that make it easier the organization of a championship of
Carrom_ tournaments using either a variant of the `Swiss system`__, the `Knockout system`__ or
even `all play all`__ events.
__ https://en.wikipedia.org/wiki/Swiss-system_tournament
__ https://en.wikipedia.org/wiki/Single-elimination_tournament
__ https://en.wikipedia.org/wiki/Round-robin_tournament
The main component is a Pyramid_ application serving two distinct user interfaces:
1. A very light, 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://sol5.metapensiero.it/lit/.
2. A complete ExtJS_ based desktop-like application, that exposes all the functionalities
described below__ in an easy to manage interface.
__ Goals_
.. _Carrom: https://en.wikipedia.org/wiki/Carrom
.. _Pyramid: https://trypyramid.com/
.. _ExtJS: https://www.sencha.com/products/extjs/
.. contents:: :depth: 2
Goals
=====
These are the key points:
1. Multilingual application
Scarry__ spoke only Italian, because the i18n mechanism in ``Delphi`` (and in general under
``M$ Windows``) sucks. Most of the code was written and commented in Italian too, and that
made it very difficult to get foreign contributions.
__ https://sol5.metapensiero.it/static/manual/#brief-history
2. 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`` also implements an optional *self registration* procedure.
3. 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.
4. Easy to use
The application is usually driven by computer-illiterated guys, so little to no surprises.
5. Easy to deploy
Gods know how many hours went in building f*cking installers with BDE__ goodies!
__ https://en.wikipedia.org/wiki/Borland_Database_Engine
6. 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
a. compose a list of `competitors`: usually this is just a single player, but there are two
people in doubles, or more (teams)
b. 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
c. print the game sheets, where the player will write the scores
d. possibly show a countdown, to alert the end of the game
e. insert the score of each match
f. compute the new ranking
g. print the current ranking
h. possibly offer a way to withdraw some competitors, or to add a new competitor
i. compute the next round
j. repeat steps c. thru i. usually up to seven rounds
k. possibly offer a way to go back, delete last round, correct a score and repeat
l. if required, play up to three final rounds between the first two competitors
m. recompute the ranking, assigning prizes
n. 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
__ https://en.wikipedia.org/wiki/Glicko_rating_system
Installation and Setup
======================
The very first requirement to install an instance of ``SoL`` on your own machine is getting
``Python`` 3.10 or better\ [#]_. This step obviously depends on the operating system you are
using: on most ``GNU/Linux`` distributions it is already available\ [#]_, 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 ``PDF`` printouts.
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``.
__ https://www.python.org/downloads/windows/
__ https://dejavu-fonts.github.io/
__ https://en.wikipedia.org/wiki/Glyph
__ https://sourceforge.net/projects/dejavu/files/dejavu/2.37/dejavu-fonts-ttf-2.37.zip
The good old way
----------------
1. Install ``SoL`` using ``pip``::
pip install SoL
that will download the latest version of ``SoL`` from PyPI__ and all its dependencies as well
__ https://pypi.org/project/SoL/
2. Install ExtJS_ 4.2.1::
python3 -m metapensiero.extjs.desktop
3. 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
4. Setup the database::
soladmin initialize-db config.ini
5. Load official data::
soladmin restore config.ini
6. Run the application server::
pserve config.ini
7. Enjoy!
::
firefox http://localhost:6996/
or, for poor ``M$Window`` users or just because using ``Python`` makes you
happier::
python -m webbrowser http://localhost:6996/
Development
===========
Since version 4 the development has been moved to GitLab__.
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
that in particular will install ``SoL`` in `editable mode`__.
__ https://setuptools.pypa.io/en/latest/userguide/development_mode.html
You must then install the required ``ExtJS`` 4 sources executing::
python -m metapensiero.extjs.desktop --src
At this point, you can bootstrap a new database issuing::
make development.db
and then start the server with::
make serve
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
__ https://gitlab.com/metapensiero/SoL
Nowadays I tend to prefer NixOS__ and it's `package manager`__, and unsurprisingly ``SoL`` is
quite well integrated in that world. An alternative way to do the above is
::
nix develop
make test
__ https://nixos.org/
__ https://nixos.org/learn/
I18N / L10N
-----------
Currently ``SoL`` is translated in English\ [#]_, French\ [#]_ and Italian. If you know other
languages and want to contribute, do not hesitate to contact me and I'll be more than happy to
get you going.
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.
__ https://groups.google.com/d/forum/sol-users
__ https://gitlab.com/metapensiero/SoL/issues
-----
.. [#] As of this writing I'm using version 3.12 and I'd recommend using that, but SoL used to
work great with any version higher than 3.4.
.. [#] In fact it may even be already installed!
.. [#] The are actually two distinct catalogs, to take into account US and UK variants.
.. [#] Nobody is taking care of the French catalog nowadays, so it is currently very partial
.. [#] ``GNU Emacs`` comes to mind of course, but there are zillions of them: start looking at
the `gettext page <https://en.wikipedia.org/wiki/Gettext>`_ on Wikipedia.
Raw data
{
"_id": null,
"home_page": null,
"name": "SoL",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "web, wsgi, pyramid, carrom, tournaments, swiss system, knockout system, round-robin system",
"author": null,
"author_email": "Lele Gaifax <lele@metapensiero.it>",
"download_url": "https://files.pythonhosted.org/packages/63/b7/c7319ffa31c42200f681ae729a553ab507c369b37d7d2c191a7f174dae55/sol-5.14.tar.gz",
"platform": null,
"description": ".. -*- coding: utf-8 -*-\n.. :Project: SoL -- Introduction\n.. :Created: gio 9 ott 2008 11:40:17 CET\n.. :Author: Lele Gaifax <lele@metapensiero.it>\n.. :License: GNU General Public License version 3 or later\n.. :Copyright: \u00a9 2008-2010, 2013-2016, 2018-2020, 2024, 2025 Lele Gaifax\n..\n\n=====================\n Scarry On Lin{e|ux}\n=====================\n\n-------------------------------------------------------------\nPowerful and complete solution to manage Carrom championships\n-------------------------------------------------------------\n\n:version: 5\n:author: Lele Gaifax <lele@metapensiero.it>\n:license: GPLv3\n:status: |pipeline| |coverage|\n\n.. |pipeline| image:: https://gitlab.com/metapensiero/SoL/badges/master/pipeline.svg\n :target: https://gitlab.com/metapensiero/SoL/pipelines/\n :alt: CI build status\n\n.. |coverage| image:: https://gitlab.com/metapensiero/SoL/badges/master/coverage.svg\n :target: https://gitlab.com/metapensiero/SoL/pipelines/\n :alt: Overall test coverage\n\nThis project contains some tools that make it easier the organization of a championship of\nCarrom_ tournaments using either a variant of the `Swiss system`__, the `Knockout system`__ or\neven `all play all`__ events.\n\n__ https://en.wikipedia.org/wiki/Swiss-system_tournament\n__ https://en.wikipedia.org/wiki/Single-elimination_tournament\n__ https://en.wikipedia.org/wiki/Round-robin_tournament\n\nThe main component is a Pyramid_ application serving two distinct user interfaces:\n\n1. A very light, read only view of the whole database, where you can actually browse\n thru the clubs, championships, tourneys, players and ratings. You can see it in action on\n the public ``SoL`` instance at https://sol5.metapensiero.it/lit/.\n\n2. A complete ExtJS_ based desktop-like application, that exposes all the functionalities\n described below__ in an easy to manage interface.\n\n__ Goals_\n\n.. _Carrom: https://en.wikipedia.org/wiki/Carrom\n.. _Pyramid: https://trypyramid.com/\n.. _ExtJS: https://www.sencha.com/products/extjs/\n\n.. contents:: :depth: 2\n\n\nGoals\n=====\n\nThese are the key points:\n\n1. Multilingual application\n\n Scarry__ spoke only Italian, because the i18n mechanism in ``Delphi`` (and in general under\n ``M$ Windows``) sucks. Most of the code was written and commented in Italian too, and that\n made it very difficult to get foreign contributions.\n\n __ https://sol5.metapensiero.it/static/manual/#brief-history\n\n2. Multiuser\n\n There is a *super user* (named \u201cadmin\u201d by default) that can do everything, in particular\n create other *normal users*, who can then log in and manage her own tournaments, but can't\n change information owned by other users.\n\n ``SoL`` also implements an optional *self registration* procedure.\n\n3. Real database\n\n ``Scarry`` used ``Paradox`` tables, but we are in the third millennium, now: ``SoL`` uses a\n real, even if simple and light, ``SQL`` database under its skin.\n\n4. Easy to use\n\n The application is usually driven by computer-illiterated guys, so little to no surprises.\n\n5. Easy to deploy\n\n Gods know how many hours went in building f*cking installers with BDE__ goodies!\n\n __ https://en.wikipedia.org/wiki/Borland_Database_Engine\n\n6. Bring back the fun\n\n Programming in ``Python`` is just that, since the beginning!\n\n\nHigh level description\n----------------------\n\nThe application implements the following features:\n\n* basic tables editing, like adding a new player, opening a new championship, manually tweaking\n the scores, and so on;\n\n* handle a single tourney\n\n a. compose a list of `competitors`: usually this is just a single player, but there are two\n people in doubles, or more (teams)\n\n b. set up the first round, made up of `matches`, each pairing two distinct `competitors`: if\n the tournament is associated with a `rating` this considers the Glicko2__ rate of each\n player, otherwise uses a random pairing; either way, the tournament secretary is able to\n manually change the combinations\n\n c. print the game sheets, where the player will write the scores\n\n d. possibly show a countdown, to alert the end of the game\n\n e. insert the score of each match\n\n f. compute the new ranking\n\n g. print the current ranking\n\n h. possibly offer a way to withdraw some competitors, or to add a new competitor\n\n i. compute the next round\n\n j. repeat steps c. thru i. usually up to seven rounds\n\n k. possibly offer a way to go back, delete last round, correct a score and repeat\n\n l. if required, play up to three final rounds between the first two competitors\n\n m. recompute the ranking, assigning prizes\n\n n. update the `rating` the tournament is associated to\n\n* handle a championship of tourneys\n\n * each tourney is associated to one championship\n\n * print the championship ranking\n\n* data exchange, to import/export whole tourneys in a portable way\n\n__ https://en.wikipedia.org/wiki/Glicko_rating_system\n\n\nInstallation and Setup\n======================\n\nThe very first requirement to install an instance of ``SoL`` on your own machine is getting\n``Python`` 3.10 or better\\ [#]_. This step obviously depends on the operating system you are\nusing: on most ``GNU/Linux`` distributions it is already available\\ [#]_, for example on\n``Debian`` and derivatives like ``Ubuntu`` the following command will do the task::\n\n $ apt-get install python3\n\nIf instead you are using ``M$ Windows``, you should select the right installer from the\ndownloads__ page on https://www.python.org/.\n\nAnother recommended, although optional, add-on is the `DejaVu fonts`__ set, to support a rather\nwide range of `glyphs`__ when producing the ``PDF`` printouts.\n\nOn ``GNU/Linux`` it's a matter of executing the following command\n\n::\n\n $ apt-get install fonts-dejavu\n\nor equivalent for your distribution, while on ``M$ Windows`` you need to download__ them and\nextract the archive in the right location which usually is ``C:\\Windows\\Fonts``.\n\n__ https://www.python.org/downloads/windows/\n__ https://dejavu-fonts.github.io/\n__ https://en.wikipedia.org/wiki/Glyph\n__ https://sourceforge.net/projects/dejavu/files/dejavu/2.37/dejavu-fonts-ttf-2.37.zip\n\n\nThe good old way\n----------------\n\n1. Install ``SoL`` using ``pip``::\n\n pip install SoL\n\n that will download the latest version of ``SoL`` from PyPI__ and all its dependencies as well\n\n __ https://pypi.org/project/SoL/\n\n2. Install ExtJS_ 4.2.1::\n\n python3 -m metapensiero.extjs.desktop\n\n3. Create a standard config file::\n\n soladmin create-config config.ini\n\n and edit it as appropriate; you can also directly specify the name and the password of the\n *super user* (by default the name is ``admin`` and the password will be asked\n interactively)::\n\n soladmin create-config --admin differentone --password str4nge\n\n4. Setup the database::\n\n soladmin initialize-db config.ini\n\n5. Load official data::\n\n soladmin restore config.ini\n\n6. Run the application server::\n\n pserve config.ini\n\n7. Enjoy!\n ::\n\n firefox http://localhost:6996/\n\n or, for poor ``M$Window`` users or just because using ``Python`` makes you\n happier::\n\n python -m webbrowser http://localhost:6996/\n\n\nDevelopment\n===========\n\nSince version 4 the development has been moved to GitLab__.\n\nThe complete sources can be downloaded with the following command::\n\n git clone https://gitlab.com/metapensiero/SoL.git\n\nI recommend using a *virtual environment* to keep you isolated from the system packages::\n\n python3 -m venv env\n source env/bin/activate\n\nAfter that, you can setup a development environment by executing the command::\n\n pip install -r requirements/development.txt\n\nthat in particular will install ``SoL`` in `editable mode`__.\n\n__ https://setuptools.pypa.io/en/latest/userguide/development_mode.html\n\nYou must then install the required ``ExtJS`` 4 sources executing::\n\n python -m metapensiero.extjs.desktop --src\n\nAt this point, you can bootstrap a new database issuing::\n\n make development.db\n\nand then start the server with::\n\n make serve\n\nIf you are a developer, you are encouraged to create your own `fork` of the software and\npossibly open a `pull request`: I will happily merge your changes!\n\nYou can run the tests suite with either\n\n::\n\n make test\n\nor with a more specific\n\n::\n\n pytest tests/models\n\n__ https://gitlab.com/metapensiero/SoL\n\nNowadays I tend to prefer NixOS__ and it's `package manager`__, and unsurprisingly ``SoL`` is\nquite well integrated in that world. An alternative way to do the above is\n\n::\n\n nix develop\n make test\n\n__ https://nixos.org/\n__ https://nixos.org/learn/\n\n\nI18N / L10N\n-----------\n\nCurrently ``SoL`` is translated in English\\ [#]_, French\\ [#]_ and Italian. If you know other\nlanguages and want to contribute, do not hesitate to contact me and I'll be more than happy to\nget you going.\n\n\nFeedback and support\n--------------------\n\nIf you run in troubles, or want to suggest something, or simply a desire of saying *\u201cThank\nyou\u201d* raises up, feel free to contact me via email as ``lele at metapensiero dot it``.\n\nConsider also joining the `dedicated mailing list`__ where you can get in contact with other\nusers of the application. There is also an `issues tracker`__ where you can open a new tickets\nabout bugs or enhancements.\n\n__ https://groups.google.com/d/forum/sol-users\n__ https://gitlab.com/metapensiero/SoL/issues\n\n-----\n\n.. [#] As of this writing I'm using version 3.12 and I'd recommend using that, but SoL used to\n work great with any version higher than 3.4.\n\n.. [#] In fact it may even be already installed!\n\n.. [#] The are actually two distinct catalogs, to take into account US and UK variants.\n\n.. [#] Nobody is taking care of the French catalog nowadays, so it is currently very partial\n\n.. [#] ``GNU Emacs`` comes to mind of course, but there are zillions of them: start looking at\n the `gettext page <https://en.wikipedia.org/wiki/Gettext>`_ on Wikipedia.\n",
"bugtrack_url": null,
"license": "GPLv3+",
"summary": "Carrom tournaments management",
"version": "5.14",
"project_urls": {
"Homepage": "https://sol5.metapensiero.it",
"Repository": "https://gitlab.com/metapensiero/SoL"
},
"split_keywords": [
"web",
" wsgi",
" pyramid",
" carrom",
" tournaments",
" swiss system",
" knockout system",
" round-robin system"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c2dac87d03eeed0785b63215e95def6d1d94d451a881b23ea7a13d8cb4b326ab",
"md5": "fb03d28bfe4c330e84c376e4e9d0164d",
"sha256": "f58de3348ed72db27cca5e93bc323e12c2c08f5a45f7cc277b2c1628d30156b6"
},
"downloads": -1,
"filename": "sol-5.14-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fb03d28bfe4c330e84c376e4e9d0164d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 4177623,
"upload_time": "2025-08-19T10:51:52",
"upload_time_iso_8601": "2025-08-19T10:51:52.672133Z",
"url": "https://files.pythonhosted.org/packages/c2/da/c87d03eeed0785b63215e95def6d1d94d451a881b23ea7a13d8cb4b326ab/sol-5.14-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "63b7c7319ffa31c42200f681ae729a553ab507c369b37d7d2c191a7f174dae55",
"md5": "ce7c530e6637d3e80caa896b2925983b",
"sha256": "b0fa91f871560823e9f3f79a27966e12edb14b794e57f70c601e6cb0c4b345ff"
},
"downloads": -1,
"filename": "sol-5.14.tar.gz",
"has_sig": false,
"md5_digest": "ce7c530e6637d3e80caa896b2925983b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 4627350,
"upload_time": "2025-08-19T10:51:59",
"upload_time_iso_8601": "2025-08-19T10:51:59.119037Z",
"url": "https://files.pythonhosted.org/packages/63/b7/c7319ffa31c42200f681ae729a553ab507c369b37d7d2c191a7f174dae55/sol-5.14.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-19 10:51:59",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "metapensiero",
"gitlab_project": "SoL",
"lcname": "sol"
}