A Command Line Client for GNU Mailman
As part of the Google Summer of Code 2014, I will be building a CLI for the GNU Mailman project this summer, under the Python Software Foundation Umbrella and mentors Stephen Turnbull, Barry Warsaw, Florian Fuchs, and Terri Oda, plus valuable inputs from Mailman community, with special mention of Abhilash Raj.
The GNU Mailman is the most popular and most used mailing list management system that is in use today. Almost every developer would have used a Mailman mailing list. The Mailman is written in Python and is currently in its 3.x releases and has undergone radical changes in the architecture as well as in looks. In the functionalities side, the Mailman project has made some architectural leaps by building a RESTful API. In terms of looks, the old classic monochrome look is replaced by an aesthetic UI based on the Bootstrap, under a separate project named Postorious.
My task is to improve the suite even more by building a command line interface or CLI for using the Mailman. The project consists of two parts, building command line tools and a command line shell.
The Command line tools involve building a “command” for performing the core functionalities of Mailman like creating and deleting mailing lists, domains, users and administrative tasks like adding moderators, listing domains, lists, members etc, much like the one provided by Git. Furthermore, some auxiliary functions like a backup and restore tool will also be built. The actions and subject on which the action are to be performed are provided to the command as command line arguments. Python provides an excellent module named argparse that is used to parse the arguments of such commands.
The major task in this part will be to build classes for the various Mailman objects like Lists, Domains and Users, and identify what actions each class must support. The classes must be built in such a way that they can be reused in command line shell.
The Mailman Shell will provide a query interface that can be used to query the Mailman installation in a system, by using a set of intuitive queries. This interface will have features to support stored status queries that can be used to set a few “environment” variables and filter results of the queries based on these variables.
The main task of this part will be building a query parsing mechanism that can effectively impose the specified conditions upon a dataset and display the filtered results. I guess the experience from the Compiler Design courses from my Engineering would come in handy here.
Apart form the above various adjoining code like the unit test modules for testing the functionalities of the project and the documentation will be written in parallel with the project. Also help info for the usage of command line tools, specifying the arguments, options and usage will be added. Help pages for the usage of various shell commands will also be added.
The final objectives of the project would be creating a man page for the newly added command and creating the necessary installation hooks to the mailman.client project which will carry my code.
I will be working on Command line tools first, as the first phase of the project , before the mid term evaluation. The shell is to be built in the second half of the project, reusing the classes created for the command tools.
And here is a link to my proposal for further details and the time line.[Proposal]