Issue 1036490: Extend Shelf to support unicode keys (original) (raw)

Created on 2004-09-28 19:50 by mok0, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (8)
msg54267 - (view) Author: Morten Kjeldgaard (mok0) Date: 2004-09-28 19:50
Lots of modules return unicode strings, for example the xml parser. There is no reason why you shouldn't be able to use a unicode string as key in a dictionary, shelve or database lookup. I think this is more a bug than a feature, since having to make sure what type your keys are makes the code bloated and ugly.
msg54268 - (view) Author: David Goodger (goodger) (Python committer) Date: 2004-09-28 20:35
Logged In: YES user_id=7733 Unicode strings work as dictionary keys for me, in both Python 2.3.3 and 2.4a3. Are you sure of your assertion? Please provide some evidence.
msg54269 - (view) Author: Morten Kjeldgaard (mok0) Date: 2004-09-28 20:58
Logged In: YES user_id=42755 You are right, unicode strings work in dictionaries. I should have checked, sorry. However, they don't work in shelves, as the attached script will demonstrate. You get a type error: Traceback (most recent call last): File "fail.py", line 7, in ? x[a] = "arrrghhh" File "/usr/lib/python2.3/shelve.py", line 130, in __setitem__ self.dict[key] = f.getvalue() File "/usr/lib/python2.3/site-packages/__init__.py", line 120, in __setitem__ TypeError: String or Integer object expected for key, unicode found I am using Python 2.3.3 on Linux
msg54270 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2004-09-28 21:48
Logged In: YES user_id=31435 Moved to the Feature Request tracker, and changed the summary to something more accurate. The restriction to string keys is documented, and the code is functioning as documented. The restriction is hard to lift because the underlying database technologies (gdbm, bsddb) require string keys. I suppose Shelf could encode all incoming keys via utf-8, in every method taking a key argument, and decode again in all ways of getting keys out, but that wouldn't be backward compatible. Unassigned Marc-Andre since I doubt he's going to do something about this.
msg54271 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2004-09-28 21:53
Logged In: YES user_id=31435 Reset the Category to Unicode; SF lost it on the way to the Feature tracker.
msg54272 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2004-11-13 11:26
Logged In: YES user_id=21627 It would be possible to add a unicode argument to the shelve constructors; this would .encode all keys being passed in, and .decode all keys being passed out. Canonically, keys should be encoded as UTF-8.
msg82070 - (view) Author: Daniel Diniz (ajaksu2) * (Python triager) Date: 2009-02-14 14:42
Is this one still valid? Test script is missing.
msg82080 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2009-02-14 15:18
It's fixed in 3.0, by means of the keyencoding argument to Shelf. It would be possible to port that back to 2.7; since no patch had been forthcoming, I'm closing this as fixed, anyway.
History
Date User Action Args
2022-04-11 14:56:07 admin set github: 40960
2009-02-14 15🔞35 loewis set status: open -> closedresolution: fixedmessages: +
2009-02-14 14:42:56 ajaksu2 set nosy: + ajaksu2messages: + components: + Library (Lib)stage: test needed
2004-09-28 19:50:09 mok0 create