The database laboratory course at the Budapest University of Technology and Economics which I collaborate with as a lecturer uses Sympa for mailing lists and file sharing. Latter is not one of the most used features of this software, and the web interface feels sluggish, not to mention the lots of leftover files in my Downloads directory for each attempt to view one page of a certain file. I understood that using the same software for these two tasks made managing user accounts easier, so I tried to come up with a solution that makes it easier to handle these files with the existing setup.
First, I searched whether an API for Sympa exists and I found that while they created the Sympa SOAP server, it only handles common use-cases related to mailing lists management, so it can be considered a dead end. This meant that my solution had to use the web interface, so I selected an old and a new tool for the task: LXML for parsing, since I already knew of its power, and requests for handling HTTP, because of its fame. These two tools made it possible to create half of the solution first, resulting in a Sympa API that can be used independently of the file system bridge.
Two things I found particularly great about requests were that its handling of
sessions was superior than any APIs I've ever seen, and that it was possible to
retrieve the results in multiple formats (raw socket, bytes, Unicode text).
Since I only had one Sympa installation to test with, I only hacked the code so
far to make it work, so for example, I had to use regular expressions to strip
the XML and HTML encoding information, since both stated
us-ascii while the
output was in ISO-8859-2, correctly stated in the HTTP
In the second half of the time, I had to create a bridge between the file
system and the API I created, and FUSE was my natural choice. Choosing the
Python binding was not so easy, as a Debian user, the
seemed like a logical choice, but as Matt Joiner wrote in his answer on a
related Stack Overflow question, fusepy was a better choice. Using
one of the examples, I managed to build an experimental version of
SympaFS with naive caching and session management, but it works!
$ mkdir /tmp/sympa $ python sympafs.py https://foo.tld/lists email@example.com adatlabor /tmp/sympa Password: $ mount | fgrep sympa SympaFS on /tmp/sympa type fuse (rw,nosuid,nodev,relatime,user_id=1000, group_id=1000) $ ls -l /tmp/sympa/2012 összesen 0 -r-xr-xr-x 1 root root 11776 febr 9 00:00 CensoredFile1.doc -r-xr-xr-x 1 root root 161792 febr 22 00:00 CensoredFile2.xls -r-xr-xr-x 1 root root 39424 febr 9 00:00 CensoredFile3.doc dr-xr-xr-x 2 root root 0 febr 14 00:00 CensoredDir1 dr-xr-xr-x 2 root root 0 ápr 4 2011 CensoredDir2 $ file /tmp/sympa/2012/CensoredFile1.doc Composite Document File V2 Document, Little Endian, Os: Windows, Version 5.1, Code page: 1252, Author: Censored, Last Saved By: User, Name of Creating Application: Microsoft Excel, Last Printed: Tue Feb 14 15:00:39 2012, Create Time/Date: Wed Feb 8 21:51:10 2012, Last Saved Time/Date: Wed Feb 22 08:10:20 2012, Security: 0 $ fusermount -u /tmp/sympa