VirtualMailManager/maillocation.py
changeset 760 b678a1c43027
parent 748 659c4476c57c
child 761 e4e656f19771
--- a/VirtualMailManager/maillocation.py	Mon Mar 24 19:22:04 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-# -*- coding: UTF-8 -*-
-# Copyright (c) 2008 - 2014, Pascal Volk
-# See COPYING for distribution information.
-"""
-    VirtualMailManager.maillocation
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Virtual Mail Manager's maillocation module to handle Dovecot's
-    mail_location setting for accounts.
-
-"""
-
-from VirtualMailManager.constants import MAILLOCATION_INIT
-from VirtualMailManager.errors import MailLocationError as MLErr
-from VirtualMailManager.pycompat import all
-
-
-__all__ = ('MailLocation', 'known_format')
-
-_ = lambda msg: msg
-_format_info = {
-    'maildir': dict(dovecot_version=0x10000f00, postfix=True),
-    'mdbox': dict(dovecot_version=0x20000b05, postfix=False),
-    'sdbox': dict(dovecot_version=0x20000c03, postfix=False),
-}
-
-
-class MailLocation(object):
-    """Class to handle mail_location relevant information."""
-    __slots__ = ('_directory', '_mbfmt', '_mid', '_dbh')
-    _kwargs = ('mid', 'mbfmt', 'directory')
-
-    def __init__(self, dbh, **kwargs):
-        """Creates a new MailLocation instance.
-
-        Either the mid keyword or the mbfmt and directory keywords must be
-        specified.
-
-        Arguments:
-
-        `dbh` : pyPgSQL.PgSQL.Connection
-          A database connection for the database access.
-
-        Keyword arguments:
-
-        `mid` : int
-          the id of a mail_location
-        `mbfmt` : str
-          the mailbox format of the mail_location. One out of: ``maildir``,
-          ``sdbox`` and ``mdbox``.
-        `directory` : str
-          name of the mailbox root directory.
-        """
-        self._dbh = dbh
-        self._directory = None
-        self._mbfmt = None
-        self._mid = 0
-
-        for key in kwargs.iterkeys():
-            if key not in self.__class__._kwargs:
-                raise ValueError('unrecognized keyword: %r' % key)
-        mid = kwargs.get('mid')
-        if mid:
-            assert isinstance(mid, (int, long))
-            self._load_by_mid(mid)
-        else:
-            args = kwargs.get('mbfmt'), kwargs.get('directory')
-            assert all(isinstance(arg, basestring) for arg in args)
-            if args[0].lower() not in _format_info:
-                raise MLErr(_(u"Unsupported mailbox format: '%s'") % args[0],
-                            MAILLOCATION_INIT)
-            directory = args[1].strip()
-            if not directory:
-                raise MLErr(_(u"Empty directory name"), MAILLOCATION_INIT)
-            if len(directory) > 20:
-                raise MLErr(_(u"Directory name is too long: '%s'") % directory,
-                            MAILLOCATION_INIT)
-            self._load_by_names(args[0].lower(), directory)
-
-    def __str__(self):
-        return u'%s:~/%s' % (self._mbfmt, self._directory)
-
-    @property
-    def directory(self):
-        """The mail_location's directory name."""
-        return self._directory
-
-    @property
-    def dovecot_version(self):
-        """The required Dovecot version for this mailbox format."""
-        return _format_info[self._mbfmt]['dovecot_version']
-
-    @property
-    def postfix(self):
-        """`True` if Postfix supports this mailbox format, else `False`."""
-        return _format_info[self._mbfmt]['postfix']
-
-    @property
-    def mbformat(self):
-        """The mail_location's mailbox format."""
-        return self._mbfmt
-
-    @property
-    def mail_location(self):
-        """The mail_location, e.g. ``maildir:~/Maildir``"""
-        return self.__str__()
-
-    @property
-    def mid(self):
-        """The mail_location's unique ID."""
-        return self._mid
-
-    def _load_by_mid(self, mid):
-        """Load mail_location relevant information by *mid*"""
-        dbc = self._dbh.cursor()
-        dbc.execute('SELECT format, directory FROM mailboxformat, '
-                    'maillocation WHERE mid = %u AND '
-                    'maillocation.fid = mailboxformat.fid' % mid)
-        result = dbc.fetchone()
-        dbc.close()
-        if not result:
-            raise ValueError('Unknown mail_location id specified: %r' % mid)
-        self._mid = mid
-        self._mbfmt, self._directory = result
-
-    def _load_by_names(self, mbfmt, directory):
-        """Try to load mail_location relevant information by *mbfmt* and
-        *directory* name. If it fails goto _save()."""
-        dbc = self._dbh.cursor()
-        dbc.execute("SELECT mid FROM maillocation WHERE fid = (SELECT fid "
-                    "FROM mailboxformat WHERE format = %s) AND directory = %s",
-                    (mbfmt, directory))
-        result = dbc.fetchone()
-        dbc.close()
-        if not result:
-            self._save(mbfmt, directory)
-        else:
-            self._mid = result[0]
-            self._mbfmt = mbfmt
-            self._directory = directory
-
-    def _save(self, mbfmt, directory):
-        """Save a new mail_location in the database."""
-        dbc = self._dbh.cursor()
-        dbc.execute("SELECT nextval('maillocation_id')")
-        mid = dbc.fetchone()[0]
-        dbc.execute("INSERT INTO maillocation (fid, mid, directory) VALUES ("
-                    "(SELECT fid FROM mailboxformat WHERE format = %s), %s, "
-                    "%s)",  (mbfmt, mid, directory))
-        self._dbh.commit()
-        dbc.close()
-        self._mid = mid
-        self._mbfmt = mbfmt
-        self._directory = directory
-
-
-def known_format(mbfmt):
-    """Checks if the mailbox format *mbfmt* is known, returns bool."""
-    return mbfmt.lower() in _format_info
-
-del _