This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author tb
Recipients berker.peksag, r.david.murray, tb
Date 2012-10-23.08:39:08
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1350981549.22.0.118017365998.issue16297@psf.upfronthosting.co.za>
In-reply-to
Content
This is my use case:
I am creating a custom DictReader class for reading and accessing the columns white space and case insensitive. 
For this I created a dict subclass (DictInsensitive) with a custom __getitem__ method. DictReaderInsensitive.__next__ overrides the original DictReader.__next__ by returning a DictInsensitive. I also override the DictReader.fieldnames property to lower/strip all fieldnames.
See http://stackoverflow.com/a/12970460/1251007 for an example. 
This is all functional with the current csv.DictReader. All entries in DictReaderInsensitive.fieldnames are in lower case and without white space and by iterating over the lines I get dictionaries where I can access the keys white space/case insensitive.

Now, the problem is: If I want the check wether a specific fieldname is present in the input file, I have strip()/lower() "by hand":
    csv_in = DictReaderInsensitive(open(input_file, 'rU'))
    if "Fieldname to check".strip().lower() in csv_in.fieldnames

To do this automatically, I created a ListInsensitive as a subclass of list:
    class ListInsensitive(list):
        def __contains__(self, item):
            return list.__contains__(self, item.strip().lower())

Now I want csv.DictReader to use that new class. I thought of overwriting the setter method, but here lies the current problem. I can overwrite the setter method, but csv.DictReader does not use the setter method internally.

My setter method looks like this:
    @fieldnames.setter
    def fieldnames(self, value):
        if value == None:
            self._fieldnames = None
        else:
            self._fieldnames = ListInsensitive()
            for name in value:
                self._fieldnames.append(name.strip().lower())
History
Date User Action Args
2012-10-23 08:39:09tbsetrecipients: + tb, r.david.murray, berker.peksag
2012-10-23 08:39:09tbsetmessageid: <1350981549.22.0.118017365998.issue16297@psf.upfronthosting.co.za>
2012-10-23 08:39:09tblinkissue16297 messages
2012-10-23 08:39:08tbcreate