[Python-checkins] python/nondist/sandbox/csv csv.py,1.21,1.22

montanaro@users.sourceforge.net montanaro@users.sourceforge.net
Tue, 04 Feb 2003 18:21:44 -0800


Update of /cvsroot/python/python/nondist/sandbox/csv
In directory sc8-pr-cvs1:/tmp/cvs-serv6964

Modified Files:
	csv.py 
Log Message:
rearrange the Dialect class some more.  I'm not sure this is the best way to
do things.  We can yank stuff out though.  It gives us something to argue
about. ;-)

* Make the Dialect class patently invalid.

* Put excel's settings in the excel class.

* Add a _name attribute to Dialect which is filled in by register_dialect().

* Add a _validate method which is called from __init__.


Index: csv.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/csv/csv.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** csv.py	5 Feb 2003 01:53:19 -0000	1.21
--- csv.py	5 Feb 2003 02:21:42 -0000	1.22
***************
*** 13,18 ****
      if not issubclass(dialect, Dialect):
          raise TypeError, "dialect not a subclass of Dialect"
      dialect._name = name
!     _dialects[name] = dialect()
  
  def get_dialect(name):
--- 13,21 ----
      if not issubclass(dialect, Dialect):
          raise TypeError, "dialect not a subclass of Dialect"
+     if dialect == Dialect:
+         raise ValueError, "Dialect is an abstract class"
+     d = dialect()
      dialect._name = name
!     _dialects[name] = d
  
  def get_dialect(name):
***************
*** 27,40 ****
  class Dialect:
      _name = ""
      delimiter = ','
      quotechar = '"'
-     escapechar = None
      doublequote = True
      skipinitialspace = False
      lineterminator = '\r\n'
      quoting = QUOTE_MINIMAL
- 
- class excel(Dialect):
-     pass
  register_dialect("excel", excel)
  
--- 30,73 ----
  class Dialect:
      _name = ""
+     _valid = False
+     # placeholders
+     delimiter = None
+     quotechar = None
+     escapechar = None
+     doublequote = None
+     skipinitialspace = None
+     lineterminator = None
+     quoting = None
+ 
+     def __init__(self):
+         if self.__class__ != Dialect:
+             self._valid = True
+         errors = self._validate()
+         if errors != []:
+             raise Error, "Dialect did not validate: %s" % ", ".join(errors)
+ 
+     def _validate(self):
+         errors = []
+         if not self._valid:
+             errors.append("can't directly instantiate Dialect class")
+         if self.delimiter is None:
+             errors.append("delimiter not set")
+         if self.quotechar is None:
+             errors.append("quotechar not set")
+         if self.lineterminator is None:
+             errors.append("lineterminator not set")
+         if self.doublequote not in (True, False):
+             errors.append("doublequote setting must be True or False")
+         if self.skipinitialspace not in (True, False):
+             errors.append("skipinitialspace setting must be True or False")
+         return errors
+ 
+ class excel(Dialect):
      delimiter = ','
      quotechar = '"'
      doublequote = True
      skipinitialspace = False
      lineterminator = '\r\n'
      quoting = QUOTE_MINIMAL
  register_dialect("excel", excel)