[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)