Third Party Modules Listing Website

Continuing the discussion from Platform to publish modules:

I would like to revive this idea because I think it will indeed solve Add in Heptapod a location to push the nonofficial module in a more general way.

The idea is to develop a website with (of course) Tryton as backend and Flask/Bootstrap with flask-tryton (until REST API for user application) using web_user module.

Model

User

Users are based on web.user. A Party is created and link to the Web User with a unique constraint.

Organization

An organization regroup users. It is the publisher of modules.
A user can be in multiple organization.
A user can create organization to which he is attached.
A user of an organization can add other users to the organization using their emails.
A user can leave an organization except if he is the last user.

An organization contains:

  • name* (unique)
  • homepage_url
  • description (ReST format)

Module

A module describe a Tryton module with:

  • organization* (the organization publishing the module)
  • module_name* (the name in ir.module)
  • name* (same as module_name by default)
  • package_name (the unique name of the package that contains the module in PyPI)
  • license* (from a predefined list with an “Other” option)
  • repository_url (the URL of the repository)
  • documentation_url (the URL of the documentation)
  • description (ReST format)

Module - Series

Store for each release, the supported Tryton series of a module.
The information is extracted from the requires_dist of the JSON API of PyPI on trytond package.

At least the one of the package_name or the repository_url must be filled.
If the package_name is filled on submission, the other empty field are filled with data from PyPI.

Web Pages

index

Display a search form, t last 5 modules released, last 5 modules added and 5 random modules.

module

Using the route /modules/<organization>/<module_name>.
Display the name, the different links, the link to the organization and the releases with the Tryton series.

organization

Using the route /organizations/<name>
Display the name, the users and the modules.

user

Using the route /users/<name>
Display public information about the user.

profile

Using the route /profile
Form to update current user information

misc

Of course we have the different login/signup/logout pages, the error pages etc.

Scheduled Task

  • for each module, fetch weekly information about new releases (using Simple API with JSON).
  • remove monthly modules that have no releases for any supported series (except module without package name)

Protections

In order to protect against Spam. In addition to have his email addresses validated, the first module publication of an organization must be validated by the administrator (using the Tryton backend).

Future

We may add later:

  • count users of modules based on declaration (of validated users)
  • comments
  • rating

What I see here is a proposal of a implementation (so probably better for features/Ideeas) but I’m missing the organization of such webiste.

  • Where will the website hosted?
  • Who will mainain such platform?
  • Who will check that the information show there is valid and related to Tryton? Who will be “the administrator”?

What about modules that are not hosted on pypi? It seems all the website usage is based on uploading packages to pypi but this is not a requirement to publish a tryton module.

On the Foundation servers.

The same maintainer as for other Foundation project.

Well as explained there will be a first validation than after that it will be based on trust.
But of course if a user is abusing the site, the administrator could deactivate his account and remove the abusing moules.
I would expect also that the community will report such abuse.

The same as for other services of the Foundation.

I know only https://anaconda.org/ as alternative. But as we do not publish Tryton there, I do not think there are many users of Tryton who is using it for Tryton deployment.

The package_name is not required but of course many features based on releases will not be available if there are no releases.