pyfec: argparse: add a feature of exclusivecreate to the argparse FileType
authorZooko O'Whielacronx zooko@zooko.com <zooko@zooko.com>
Sat, 14 Apr 2007 23:00:33 +0000 (04:30 +0530)
committerZooko O'Whielacronx zooko@zooko.com <zooko@zooko.com>
Sat, 14 Apr 2007 23:00:33 +0000 (04:30 +0530)
darcs-hash:8e8be96f844f6b283b87c6c522bc2cd73cbf3a34

pyfec/fec/util/argparse.py

index cb67cdb7dd7e0b957a411a98c85ce1f872f4e576..8b273b75260f63d5736180f1952a3e68d93a0483 100644 (file)
@@ -5,7 +5,6 @@
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted under the terms of the 3-clause BSD
 # license. No warranty expressed or implied.
-# For details, see the accompanying file LICENSE.txt.
 
 """Command-line parsing library
 
@@ -839,11 +838,16 @@ class FileType(object):
         same values as the builtin open() function.
     bufsize -- The file's desired buffer size. Accepts the same values as
         the builtin open() function.
+    exclusiveopen -- A bool indicating whether the attempt to create the file
+        should fail if there is already a file present by that name.  This is
+        ignored if 'w' is not in mode.
     """    
-    def __init__(self, mode='r', bufsize=None):
+    def __init__(self, mode='r', bufsize=None, exclusivecreate=False):
         self._mode = mode
+        self._bufsize = bufsize
         if self._bufsize is None:
             self._bufsize = -1
+        self._exclusivecreate = exclusivecreate
     
     def __call__(self, string):
         # the special argument "-" means sys.std{in,out}
@@ -857,7 +861,11 @@ class FileType(object):
                 raise ValueError(msg)
 
         # all other arguments are used as file names
-        return open(string, self._mode, self._bufsize)
+        if self._exclusivecreate and ('w' in self._mode):
+            fd = _os.open(string, _os.O_CREAT|_os.O_EXCL)
+            return _os.fdopen(fd, self._mode, self._bufsize)
+        else:
+            return open(string, self._mode, self._bufsize)
 
 
 # ===========================