111 lines
6.7 KiB
ReStructuredText
111 lines
6.7 KiB
ReStructuredText
.. _rewrite:
|
|
|
|
Complete Rewrite of github2fedmsg Application
|
|
====
|
|
|
|
This document will investigate the possibility of rewriting github2fedmsg from scratch.
|
|
|
|
Elements that could use our attention
|
|
----
|
|
|
|
**Project configuration**
|
|
| *Currently uses*: Setuptools (`setup.py <https://github.com/fedora-infra/github2fedmsg/blob/develop/setup.py>`_)
|
|
| *Suggested using*: Poetry (`pyproject.toml <https://python-poetry.org/docs/pyproject/>`_)
|
|
| *Reason(s)*: Easier dependency management, project configuration, testing information etc.
|
|
|
|
**Backend language**
|
|
| *Currently uses*: Python 2.7.x (now `EOLed <https://www.python.org/doc/sunset-python-2/>`_)
|
|
| *Suggested using*: Python 3.10.x (and above)
|
|
| *Reason(s)*: Benefit from performance improvements, bug fixes, security patches etc. on the language
|
|
|
|
**Base framework**
|
|
| *Currently uses*: `Pyramid <https://trypyramid.com/>`_
|
|
| *Suggested using*: `Flask <https://flask.palletsprojects.com/en/2.2.x/>`_ or `FastAPI <https://fastapi.tiangolo.com/>`_
|
|
| *Reason(s)*: More knowledge about the suggested ones in the team, streamlined development, more features etc.
|
|
|
|
**Templating implementation**
|
|
| *Currently uses*: `Mako <https://www.makotemplates.org/>`_
|
|
| *Suggested using*: `Jinja <https://jinja.palletsprojects.com/en/3.1.x/>`_
|
|
| *Reason(s)*: More knowledge about the suggested ones in the team, standardized templating etc.
|
|
|
|
**Authentication library**
|
|
| *Currently uses*: `Velruse <https://velruse.readthedocs.io/en/latest/usage.html>`_
|
|
| *Suggested using*: `Authlib <https://authlib.org/>`_
|
|
| *Reason(s)*: Authlib is actively maintained while Velruse had its last update `9 years ago <https://pypi.org/project/velruse/1.1.1/>`_.
|
|
|
|
**Frontend CSS library**
|
|
| *Currently uses*: `Bootstrap 3.1.1 (Fedora) <https://github.com/fedora-infra/github2fedmsg/tree/develop/github2fedmsg/static/bootstrap-3.1.1-fedora>`_
|
|
| *Suggested using*: Updated version of Bootstrap for eg. `Boostrap 5 <https://getbootstrap.com/docs/5.0/getting-started/introduction/>`_
|
|
| *Reason(s)*: Web interface looks/feels dated and is not responsive to variable widths.
|
|
|
|
**Notification popups**
|
|
| *Currently uses*: `Messenger 1.4.1 <https://github.com/fedora-infra/github2fedmsg/tree/develop/github2fedmsg/static/messenger-1.4.1>`_
|
|
| *Suggested using*: Updated version of Messenger or any maintained alternative
|
|
| *Reason(s)*: Library was last added `8 years back <https://github.com/fedora-infra/github2fedmsg/commit/cb98f6c7b74bb50c7cb8ee58aff81033c23300ee>`_ and could use an update.
|
|
|
|
**Interface interactivity**
|
|
| *Currently uses*: `JQuery 1.11.0 <https://github.com/fedora-infra/github2fedmsg/blob/develop/github2fedmsg/static/jquery-1.11.0.min.js>`_
|
|
| *Suggested using*: Updated version of JQuery for eg. `JQuery 3.6.1 <https://code.jquery.com/jquery-3.6.1.min.js>`_
|
|
| *Reason(s)*: Library was last added `9 years back <https://github.com/fedora-infra/github2fedmsg/commit/8985732f1e22a565dfd3ce9964896e9e4f86657e>`_ and could use an update.
|
|
|
|
**API modelling**
|
|
| *Currently uses*: In-place `creation of data structures <https://github.com/fedora-infra/github2fedmsg/blob/develop/github2fedmsg/views/webhooks.py#L247-L253>`_ in worker functions
|
|
| *Suggested using*: Data validation and typing libraries like `Pydantic <https://pydantic-docs.helpmanual.io/>`_
|
|
| *Reason(s)*: Better codebase modularity and readability, auto-validation of API data types etc.
|
|
|
|
**Command line parsing**
|
|
| *Currently uses*: None. Just making do with `stdio` and `stdout`.
|
|
| *Suggested using*: `Click <https://click.palletsprojects.com/en/8.1.x/>`_ or any other alternatives
|
|
| *Reason(s)*: Easy-to-use command line creation, handling of options and commands with auto-generated help etc.
|
|
|
|
The good and the bad
|
|
----
|
|
|
|
**Advantages**
|
|
1. In its current state, the project is written in (now EOLed) Python 2.7.x
|
|
and as Python 3 is currently in active development, the project can
|
|
benefit from the performance improvements, bug fixes and security patches
|
|
included in the language itself.
|
|
2. The project makes use of a certain set of dependencies, the support of
|
|
which, have not been ported from Python 2 to Python 3. Porting into
|
|
Python 3 would necessitate the use of newer dependencies which would be
|
|
more updated, secure and maintained.
|
|
3. In its current state, the project makes use of the
|
|
`Pyramid <https://trypyramid.com/>`_ web framework, the expertise of which
|
|
the team currently lacks, making it unmaintainable right now. A rewrite
|
|
using libraries and frameworks that the team is acquainted with would help.
|
|
4. The web interface makes use of non-default
|
|
`Mako <https://www.makotemplates.org/>`_-based
|
|
`templates <https://github.com/fedora-infra/github2fedmsg/tree/develop/github2fedmsg/templates>`_
|
|
that work right now but due to their obscure nature, it can become
|
|
difficult to debug the templates later. A rewrite of templates using
|
|
a standardized
|
|
`Jinja <https://jinja.palletsprojects.com/en/3.1.x/>`_ format would go a
|
|
long way.
|
|
5. The web interface could use updated versions (or replacements) of
|
|
unmaintained JavaScript and CSS3 dependencies (for now, it has
|
|
`Bootstrap 3.1.1 <https://github.com/fedora-infra/github2fedmsg/tree/develop/github2fedmsg/static/bootstrap-3.1.1-fedora>`_,
|
|
`Messenger 1.4.1 <https://github.com/fedora-infra/github2fedmsg/tree/develop/github2fedmsg/static/messenger-1.4.1>`_,
|
|
`JQuery 1.11.0 <https://github.com/fedora-infra/github2fedmsg/blob/develop/github2fedmsg/static/jquery-1.11.0.min.js>`_
|
|
etc.) in order to introduce responsiveness and provide a better look and
|
|
feel.
|
|
6. The API model can be standardized with the use of typing and data
|
|
validation libraries such as
|
|
`Pydantic <https://pydantic-docs.helpmanual.io/>`_ instead of
|
|
`forming data structures <https://github.com/fedora-infra/github2fedmsg/blob/develop/github2fedmsg/views/webhooks.py#L247-L253>`_
|
|
in the worker function itself, making the code more modular and
|
|
maintainable in the long run.
|
|
|
|
**Disadvantages**
|
|
1. The move from Python 2 to Python 3 would require special attention into
|
|
the finding alternatives for the dependencies which either support only
|
|
Python 2 or are unmaintained as of 2022. Inability to find those would
|
|
render the rewrite unsuccessful.
|
|
2. In the wake of new ways to interact with an API, some features (eg. web
|
|
interface, when API is suggested to be used by itself) of the current
|
|
version have become redundant and a 1:1 rewrite would not help as it
|
|
would frontport those features too.
|
|
3. While reworking the database model, it is possible that the existing dump
|
|
cannot be fully imported due to the changes introduced in the database
|
|
schema to better work the newer reimplementation, thereby potentially
|
|
causing data loss.
|