On Jul 20, 2012, at 02:45 PM, George Chatzisofroniou wrote:
>For my metrics app (GSoC project), I'm currently using a MM3 simulator
>for testing purposes. Proceeding with the development, i think it's
>time to implement a connection with a real MM3 environment.
>For the current version of the app, the only information i need is who
>posted what to which list on what date. So, as we have already
>discussed, the IArchiver should be the origin of the interface.
>But i know nothing on how to implement this. How will i add my app to
>the active IA modules? Is there any code that extends the IArchiver
>and will help me understand how it works? (I guess HK extends it to
>inject the messages into the archiver.)
There isn't too much boilerplate you need to write in order to implement
IArchiver, or any interface. You can look at the existing implementations in
src/mailman/archiving/*.py for examples, but I'll briefly outline what you
from zope.interface import implementer
from mailman.interfaces.archiver import IArchiver
"""This is the docstring."""
name = 'myarchiver'
# do something
def permalink(mlist, msg):
# do something
def archive_message(mlist, message):
# do something
You probably only care about archive_message(). For methods list_url() and
permalink() which you don't care about, you can just `raise NotImplemented`.
That's about it! Of course the details of archive_message() are up to you.
Following a new report. I've finished a coalecor daemon and i wrote
some generators for KittyStore too. I'm now into establishing a real
The first version of coalescor is ready!
Coalescor is a custom Django admin command that is responsible for
maintaining the number of entries in the database at a reasonable
level. If the number of entries in the database is not a concern, its
use is completely optional.
There are five parameters which determine the behavior of the
coalesence: DAILY_DETAIL_RETAINED, WEEKLY_DETAIL_RETAINED,
MONTHLY_DETAIL_RETAINED and ANNUAL_DETAIL_RETAINED. Each one of them
represents the number of grains for which that level of detail is
The daemon coalesces only the new data from its last operation date
and it was designed in a manner not to be memory intensive.
The last two days i also worked on generators. I had already created a
script that generates metrics from a mailbox. There is a KittyStore
API availabe, so it wasn’t hard to also generate metrics from SQL or
NB: Sorry, my query is not related to development, but an issue in
mailman integration with Postfix.
Scenario: I just setup mailman with Postfix(zimbra). I was able to
create new list, subscribe to it. When I susbscribed using different
mail addresses, I received notification mail asking to confirm the
subscription of the list. On confirmation , I was able to receive the
welcome mail also. Now when I send the mail to listname(a)domain.tld, the
subscribed users are not able to receive the group/list mail. Please
advice ! Thanks.
I followed the below forum integration that was suggested official by
I've been working on and off for quite some time on bug 971013
This bug is about providing orderly schema migrations. I now admit that I'm
blocked and I'm looking for suggestions.
As you know, I made a promise that after beta 1, we'd only change the schema
if we can provide automatic migrations. Or IOW, I won't make incompatible
schema changes that break existing mm3 installations.
We had some discussion on this list a while ago about mechanisms to do this,
and trunk has some rudimentary support for it. In the meantime, I found out
about a nice tool called Alembic
which provides a better framework for doing migrations. Even though it's
primarily geared toward SQLAlchemy, I've had some off-line discussions with
Alembic's author Michael Bayer about how we could utilize Alembic without
pulling in all of SQLAlchemy. I experimented with a branch and it looked
promising, but that's not what's blocking progress on this.
What's blocking progress is SQLite, as described in this FAQ:
tl;dr: SQLite has a very limited ALTER TABLE command, and specifically does
not support column renaming or deleting. This really sucks for implementing
any kind of schema migration, regardless of the framework. The little example
shown in the FAQ doesn't really scale well when you have lots of relationships
between the tables, as is the case for the `mailinglist` table as currently
defined. Here's where I am blocked.
There are a couple of options, none of which I like very much.
- I could break the beta1 schema migration promise. I'd just make the schema
changes and all your existing systems would break (all three of them
<wink>). As unfortunate as that is, going this route is really a cop out
because as soon as 3.0 final is out, we can almost guarantee there will be
changes in 3.1 so we'll have to face this issue eventually.
- We could drop support for SQLite. The other database we (semi-)officially
support is Postgres (still waiting on a MySQL branch), which has a
sufficiently powerful ALTER TABLE for our needs. Some people would claim
that SQLite isn't really a viable database anyway, since it's prone to
deadlocks in multithreaded/processing applications such as mm3. While
true, especially for large, busy sites, I think SQLite can work for smaller
sites, and it does make installation much easier since SQLite support comes
with Python. It certainly makes testing much easier.
- As has been suggested before, we could convert the mailinglist table to
key/value pairs, which is actually how the pendings table works. This
might be a good idea *anyway* to better support extensions, but of course
I'd have to break the beta1 promise (just this once <wink>) to make this
change, and it wouldn't help for any other table. I think it would also
make queries trickier, and heck if we go that route why even use a
- We could try to only add columns in SQLite and try to smack the migration
scripts into only copying data from the old columns to the new ones. This
might actually be the most feasible option, but it does leave column
detritus in the SQLite database. Who cares though, right? There may be
other problems with this approach I'm not yet aware of.
I'm sure there are things I've overlooked, so I welcome your comments and
feedback. I'd love to break the logjam on this bug so that we can get moving
again toward the 3.0 final release.
FTR, the two existing WIP branches:
 Though, if Storm never gets ported to Python 3, I might just re-evaluate
the decision to use it as the ORM after mm3.0. SQLAlchemy supports Python 3.
Nevermind, the issue has been resolved.
On Wed, Jul 25, 2012 at 12:43 AM, Aamir Khan <syst3m.w0rm(a)gmail.com> wrote:
> Hey Everyone!
> I have packaged HyperKitty and I have created hk-app standalone django
> project which uses the hyperkitty django application. In future I hope we
> can replace both hk-app  and postorius_standalone  by a single django
> project, mm_ui for administrators who want to install hyperkitty as well as
> postorius on their server.
> In the process of packaging hyperkitty I am facing some issues with the
> code and unable to figure out the exact problem. I have updated the readme
> files for both hyperkitty  django application and hk-app  django
> project. It will be great if you guys can help me to resolve the issue.
> Try to run "python manage.py syncdb" in hk-app and you will get
> ImportError: No module named kittystore.* *I think the system path is
> messed up or probably creating symlink is not the right way to do it inside
> a packaged application.
>  =>
>  => https://github.com/syst3mw0rm/hk-app
>  => https://github.com/syst3mw0rm/hyperkitty
> Aamir Khan | 3rd Year | Computer Science & Engineering | IIT Roorkee
Aamir Khan | 3rd Year | Computer Science & Engineering | IIT Roorkee
I have packaged HyperKitty and I have created hk-app standalone django
project which uses the hyperkitty django application. In future I hope we
can replace both hk-app  and postorius_standalone  by a single django
project, mm_ui for administrators who want to install hyperkitty as well as
postorius on their server.
In the process of packaging hyperkitty I am facing some issues with the
code and unable to figure out the exact problem. I have updated the readme
files for both hyperkitty  django application and hk-app  django
project. It will be great if you guys can help me to resolve the issue.
Try to run "python manage.py syncdb" in hk-app and you will get
ImportError: No module named kittystore.* *I think the system path is
messed up or probably creating symlink is not the right way to do it inside
a packaged application.
 => https://github.com/syst3mw0rm/hk-app
 => https://github.com/syst3mw0rm/hyperkitty
Aamir Khan | 3rd Year | Computer Science & Engineering | IIT Roorkee
I did a branch on the 2.1 series to test rewriting the From: header to be able to make emails to comply with DMARC and ADSP
You can find the branch here:
and the diff with mailman main branch here:
I have also a test mailing list running at:
The best to see how it works is to subscribe, send an email, and see how the email is distributed. I guess you need to receive an email to see that... I'll reply...
Several ways to solve this problem were explored with mailman:
I took a 7th option which is to rewrite the From: without using the + and put the information about the sender in the Reply-To:
This may not be optimum but it works.
Overall this solution is one out of 3 ways to get mailing lists running with DMARC (see DMARC FAQ)
1) don't break DKIM
2) use AOR
3) rewrite the from
There is another one which is to whitelist emails coming from mailing lists....
Also note that while I'm involved in the DMARC group, I do this code as a personal project.
Now send comments, and be nice with me :P
For my metrics app (GSoC project), I'm currently using a MM3 simulator
for testing purposes. Proceeding with the development, i think it's
time to implement a connection with a real MM3 environment.
For the current version of the app, the only information i need is who
posted what to which list on what date. So, as we have already
discussed, the IArchiver should be the origin of the interface.
But i know nothing on how to implement this. How will i add my app to
the active IA modules? Is there any code that extends the IArchiver
and will help me understand how it works? (I guess HK extends it to
inject the messages into the archiver.)
Thanks in advance,
I am encountering a problem with login on Postorius. There is no mechanism to keep the MM user database synchronized to the one which django creates. If you use BrowserID to log in, or if you are otherwise in the django user database, this is currently causing a access error for any user that was not previously defined in the MM database when attempting to access the MM interface.
Further, in implementing extensions to the login function, having the password (but not the other user profile information, including alternate credential specifications) on a separate system greatly complicates the handling of login.
It would greatly simplify things if all of the user information, including profile, and whatever information the "social media" folks want to keep, were stored in one place.
If we are not going to have a single database, to which all components of the system have equal access, then I suggest that we treat the user information as a separate realm from both the UI and the "core" and require both of them to access that information through the same REST interface.