<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mailman.git/Mailman/Cgi, branch master</title>
<subtitle>The GNU Mailing List manager.
</subtitle>
<id>https://git.neuromancer.sk/mailman.git/atom?h=master</id>
<link rel='self' href='https://git.neuromancer.sk/mailman.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/'/>
<updated>2008-02-27T06:26:18Z</updated>
<entry>
<title>Bite the bullet: rename the Mailman package to mailman.</title>
<updated>2008-02-27T06:26:18Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2008-02-27T06:26:18Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=a1c73f6c305c7f74987d99855ba59d8fa823c253'/>
<id>urn:sha1:a1c73f6c305c7f74987d99855ba59d8fa823c253</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Tweak copyright years.</title>
<updated>2008-02-08T04:01:48Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2008-02-08T04:01:48Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=0478757a09b4173937d75103fa96444b6b085300'/>
<id>urn:sha1:0478757a09b4173937d75103fa96444b6b085300</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Implement a context manager for Python 2.5's with statement, which is</title>
<updated>2007-09-19T11:28:58Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-09-19T11:28:58Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=4c517789fa8b29d2a23791e6f390d9f1173c3125'/>
<id>urn:sha1:4c517789fa8b29d2a23791e6f390d9f1173c3125</id>
<content type='text'>
used where we used to do a try/except to temporarily change the global
translation language.  This makes the code shorter and cleaner.  E.g.

with i18n.using_language(another_language):
    # do something
</content>
</entry>
<entry>
<title>ListAdmin mostly gone, but not quite.</title>
<updated>2007-09-09T17:22:27Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-09-09T17:22:27Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=f1df4e6e79e7ba49ec0638fa4dd867b4043254f3'/>
<id>urn:sha1:f1df4e6e79e7ba49ec0638fa4dd867b4043254f3</id>
<content type='text'>
Mailman/app/moderator.py: Most of the application level interface
provided by ListAdmin is moved here now, including the ability to hold
messages, subscriptions, and unsubscriptions, and to handle message
(defer, discard, reject, accept).  More work needed.

Some untested conversion of API in Mailman/Cgi/admindb.py, confirm.py,
bin/checkdbs.py.

messagestore.py: Don't use or require the Date: header in the global
message ID calculation.  As described on the mailing list, we're only
going to use the Message-ID header.

IListRequests: added count_of() and of_type() methods.
</content>
</entry>
<entry>
<title>Added a doctest for the Mailman.app.create module.</title>
<updated>2007-08-05T12:42:16Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-08-05T12:42:16Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=e0abca9fbdde530f7517396677c87f19c86bc0c6'/>
<id>urn:sha1:e0abca9fbdde530f7517396677c87f19c86bc0c6</id>
<content type='text'>
BadListNameError is gone.  Use InvalidEmailAddress instead.

Move owner registration from bin/newlist to Mailman/app/create.py, but do not
verified owner email addresses here.  Eventually we'll hook in the IRegistrar
stuff for unverified owner addresses.

IStyleManager.register() verifies that its registering an IStyle.

Added IStyleManager.unregister(), along with updated interfaces and doctests.

Clean up all styles except the default one in the system documentation test
harness.
</content>
</entry>
<entry>
<title>Move the pending database into the SQLAlchemy/Elixir layer.  The old</title>
<updated>2007-08-01T20:11:08Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-08-01T20:11:08Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=f8a6c46455a409125dcc0fcace7d7116898b0319'/>
<id>urn:sha1:f8a6c46455a409125dcc0fcace7d7116898b0319</id>
<content type='text'>
Pending.py module is removed.  Added an interface to this functionality such
that any IPendable (essentially a key/value mapping) can be associated with a
token, and that token can be confirmed and has a lifetime.  Any keys and
values can be stored, as long as both are unicodes.

Added a doctest.

Modified initialization of the database layer to support pluggability via
setuptools.  No longer is this layer initialized from a module, but now it's
instantiated from a class that implements IDatabase.  The StockDatabase class
implements the SQLAchemy/Elixir layer, but this can be overridden in a
setup.py.  Bye bye MANAGERS_INIT_FUNCTION, we hardly knew ye.

Added a package Mailman.app which will contain certain application specific
functionality.  Right now, the only there there is an IRegistar
implementation, which didn't seem to fit anywhere else.

Speaking of which, the IRegistrar interface implements all the logic related
to registration and verification of email addresses.  Think the equivalent of
MailList.AddMember() except generalized out of a mailing list context.  This
latter will eventually go away.  The IRegistrar sends the confirmation email.

Added an IDomain interface, though the only implementation of this so far
lives in the registration.txt doctest.  This defines the context necessary for
domain-level things, like address confirmation.

A bunch of other cleanups in modules that are necessary due to the refactoring
of Pending, but don't affect anything that's actually tested yet, so I won't
vouch for them (except that they don't throw errors on import!).

Clean up Defaults.py; also turn the functions seconds(), minutes(), hours()
and days() into their datetime.timedelta equivalents.

Consolidated the bogus email address exceptions.

In some places where appropriate, use email 4.0 module names instead of the
older brand.

Switch from Mailman.Utils.unique_message_id() to email.utils.make_msgid()
everywhere.  This is because we need to allow sending not in the context of a
mailing list (i.e. domain-wide address confirmation message).  So we can't use
a Message-ID generator that requires a mailing list.  OTOH, this breaks
Message-ID collision detection in the mail-&gt;news gateway.  I'll fix that
eventually.

Remove the 'verified' row on the Address table.  Now verification is checked
by Address.verified_on not being None.
</content>
</entry>
<entry>
<title>More work on completing the transition to setuptools.</title>
<updated>2007-07-18T15:46:44Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-07-18T15:46:44Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=50d84950d1060129da8eb3c3c490a7395b0837e5'/>
<id>urn:sha1:50d84950d1060129da8eb3c3c490a7395b0837e5</id>
<content type='text'>
* Mailman/testing -&gt; Mailman/test
* Removed Mailman/testing/base.py
* Fix mailmanctl by using a different way of calculating where the qrunner
  script is.  The configuration file no longer knows what BIN_DIR is, but the
  mailmanctl script knows where it lives via sys.argv[0].  Also, PREFIX_DIR -&gt;
  VAR_DIR.

Also,

* Since the overwhelmingly predominant use of ILanguageManager is to get the
  description, and since .get_language_data(code)[0] is not very readable,
  split the interface into .get_description() and .get_charset().
* In the setup, automatically add all Mailman.bin modules as command line
  scripts.
</content>
</entry>
<entry>
<title>Major surgery to get the setuptools based installation passing all the</title>
<updated>2007-07-17T03:55:49Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-07-17T03:55:49Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=b8e8aa0386c2ee0fc7e90bf22fbe8fe3f222964a'/>
<id>urn:sha1:b8e8aa0386c2ee0fc7e90bf22fbe8fe3f222964a</id>
<content type='text'>
existing unit tests.  Here's a summary of the changes.

- Removed all dependent third party packages, since the setup.py file now
  claims all package dependencies such that they can be automatically
  installed from the cheeseshop.

- Moved the misc directory into the Mailman package as Mailman/data.  Moved
  templates and messages to Mailman subpackages.

- Added an ILanguageManager interface, plus an implementation, so that
  we don't use Defaults.LC_DESCRIPTIONS directly anymore.  Added a doctest
  for this interface and implementation.  Defaults.LANGUAGES is moved into
  mailman.cfg.  Defaults.LANGUAGE_DICT is moved to _DEFAULT_LANGUAGE_DATA, and
  LC_DESCRIPTIONS is removed.  The calculation of the available and enabled
  languages is moved to the Configuration class, but this will probably still
  need work.  Utils.GetLanguageDescr() and Utils.IsLanguage() are removed.
  I'd like to remove GetCharSet() eventually too, but there are too many uses
  of this currently, so I'm deferring it.

- Utils.findtext(): Hacks added so that templates can be retrieved from the
  language catalog.  The hack is that the template contents are used to find
  the translation, but in the one test case where this is actually flexed, the
  trailing newline in the file contents has to be trimmed.  This is probably
  not right.

- No more Defaults.py.in or mm_cfg.py!  Defaults.py.in is moved to Defaults.py
  and is no longer created from a template file.  The script called
  make_instance is added which creates an etc/mailman.cfg file from
  mailman.cfg.in (previously, mailman.cfg.sample) and /that/ file now has the
  small number of calculated values.  In general, make_instance will not touch
  mailman.cfg if it exists, unless the --force option is given.  CGIEXT is
  made the empty string by default (i.e. not generated).  make_instance grows
  a --var-dir option.  Fleshed out the --languages opton.

- Defaults.py grows a DEFAULT_VAR_DIRECTORY variable, which is the default
  location of the 'var' directory.  The Configuration class uses this as one
  of the directories it searches for its landmark, i.e. etc/mailman.cfg.
  RUNTIME_DIR is gone, as is VAR_PREFIX.

- testall needs to write MAILMAN_USER, MAILMAN_UID, MAILMAN_GROUP,
  MAILMAN_GID, and LANGUAGES run time variables.

- bin/withlist no longer needs to add config.BIN_DIR to sys.path, because in
  fact that variable doesn't exist any more.

- Tweak the French catalog to make a test work.  This is needed because of the
  conversion from %-strings to $-strings.

- The setup.py now generates the .mo files before it does its thing.  This
  will have to be fixed, but for now we must generate these files on setup
  build time instead of installation time.

- Removed an unused interface.
</content>
</entry>
<entry>
<title>Other than contrib files, convert all imports of mm_cfg to imports of config.</title>
<updated>2007-07-15T01:23:28Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-07-15T01:23:28Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=327865eaf118f40063366acad9c7d97487e010d6'/>
<id>urn:sha1:327865eaf118f40063366acad9c7d97487e010d6</id>
<content type='text'>
Ignore mailman.egg-info

In bin/make_instance.py: Catch and ignore import errors when importing
Mailman.i18n.  Before this script has actually been run, there won't be enough
infrastructure in place of the import to succeed.  Include several other fixes
in this file.

Add install_requires to the setup script.
</content>
</entry>
<entry>
<title>The start of a setuptools conversion.  All the Makefile.in and autoconf</title>
<updated>2007-07-13T04:19:10Z</updated>
<author>
<name>Barry Warsaw</name>
</author>
<published>2007-07-13T04:19:10Z</published>
<link rel='alternate' type='text/html' href='https://git.neuromancer.sk/mailman.git/commit/?id=288ae405b09baa443eb1b39422c48c315fbb2e5a'/>
<id>urn:sha1:288ae405b09baa443eb1b39422c48c315fbb2e5a</id>
<content type='text'>
artifacts are removed, as is the C files which we will no longer need.
</content>
</entry>
</feed>
