[Python-checkins] r45900 - python/trunk/Lib/mailbox.py

Neal Norwitz nnorwitz at gmail.com
Fri May 5 06:16:14 CEST 2006


Two questions, 1) shouldn't the class be:

class WindowsError(Exception): pass

Does the ernno module exist on Windows and if so, do 2 and 183 exist in it?
If not it might be easier to make your own local ENOTFOUND or whatever,
then you wouldn't need comments.

n
--
On 5/4/06, martin.v.loewis <python-checkins at python.org> wrote:
> Author: martin.v.loewis
> Date: Thu May  4 16:27:52 2006
> New Revision: 45900
>
> Modified:
>    python/trunk/Lib/mailbox.py
> Log:
> Update checks to consider Windows error numbers.
>
> Modified: python/trunk/Lib/mailbox.py
> ==============================================================================
> --- python/trunk/Lib/mailbox.py (original)
> +++ python/trunk/Lib/mailbox.py Thu May  4 16:27:52 2006
> @@ -2,6 +2,7 @@
>
>  """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes."""
>
> +import sys
>  import os
>  import time
>  import calendar
> @@ -23,6 +24,11 @@
>              'BabylMessage', 'MMDFMessage', 'UnixMailbox',
>              'PortableUnixMailbox', 'MmdfMailbox', 'MHMailbox', 'BabylMailbox' ]
>
> +if sys.platform != 'win32':
> +    # Define WindowsError so that we can use it in an except statement
> +    # even on non-Windows systems
> +    class WindowsError:
> +        pass
>
>  class Mailbox:
>      """A group of messages in a particular place."""
> @@ -262,10 +268,11 @@
>              self.remove(key)
>          except KeyError:
>              pass
> +        except WindowsError, e:
> +            if e.errno != 2: # ERROR_FILE_NOT_FOUND
> +                raise
>          except OSError, e:
> -            if e.errno == errno.ENOENT:
> -                pass
> -            else:
> +            if e.errno != errno.ENOENT:
>                  raise
>
>      def __setitem__(self, key, message):
> @@ -419,6 +426,12 @@
>          path = os.path.join(self._path, 'tmp', uniq)
>          try:
>              os.stat(path)
> +        except WindowsError, e:
> +            if e.errno == 2: # ERROR_FILE_NOT_FOUND
> +                Maildir._count += 1
> +                return open(path, 'wb+')
> +            else:
> +                raise
>          except OSError, e:
>              if e.errno == errno.ENOENT:
>                  Maildir._count += 1
> @@ -566,6 +579,12 @@
>          self._file.close()
>          try:
>              os.rename(new_file.name, self._path)
> +        except WindowsError, e:
> +            if e.errno == 183: # ERROR_ALREADY_EXISTS
> +                os.remove(self._path)
> +                os.rename(new_file.name, self._path)
> +            else:
> +                raise
>          except OSError, e:
>              if e.errno == errno.EEXIST:
>                  os.remove(self._path)
> @@ -1837,6 +1856,13 @@
>                  else:
>                      os.rename(pre_lock.name, f.name + '.lock')
>                      dotlock_done = True
> +            except WindowsError, e:
> +                if e.errno == 183:  # ERROR_ALREADY_EXISTS
> +                    os.remove(pre_lock.name)
> +                    raise ExternalClashError('dot lock unavailable: %s' %
> +                                             f.name)
> +                else:
> +                    raise
>              except OSError, e:
>                  if e.errno == errno.EEXIST:
>                      os.remove(pre_lock.name)
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>


More information about the Python-checkins mailing list