github2fedmsg : add docs about suggested rewrite
Signed-off-by: Akashdeep Dhar <akashdeep.dhar@gmail.com>
This commit is contained in:
parent
9b7c14dd12
commit
3e7b6a5539
1 changed files with 100 additions and 10 deletions
|
@ -1,21 +1,111 @@
|
|||
.. _rewrite:
|
||||
|
||||
Complete rewrite of github2fedmsg application
|
||||
=============================================
|
||||
Complete Rewrite of github2fedmsg Application
|
||||
====
|
||||
|
||||
This document will investigate the possibility of rewriting github2fedmsg from scratch.
|
||||
|
||||
Notes
|
||||
-----
|
||||
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.
|
||||
|
||||
The Good Points
|
||||
---------------
|
||||
**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
|
||||
|
||||
1. Good point
|
||||
**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.
|
||||
|
||||
The Bad points
|
||||
--------------
|
||||
**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/>`_.
|
||||
|
||||
1. Bad point
|
||||
**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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue