Skip to content

Add more dict methods to dbm interfaces #50295

Description

@birkenfeld
BPO 6045
Nosy @loewis, @birkenfeld, @pitrou, @merwok
Superseder
  • bpo-9523: Improve dbm modules
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2011-02-04.00:56:40.284>
    created_at = <Date 2009-05-17.08:46:28.206>
    labels = ['type-feature', 'library']
    title = 'Add more dict methods to dbm interfaces'
    updated_at = <Date 2011-02-04.00:56:40.283>
    user = 'https://github.com/birkenfeld'

    bugs.python.org fields:

    activity = <Date 2011-02-04.00:56:40.283>
    actor = 'eric.araujo'
    assignee = 'none'
    closed = True
    closed_date = <Date 2011-02-04.00:56:40.284>
    closer = 'eric.araujo'
    components = ['Library (Lib)']
    creation = <Date 2009-05-17.08:46:28.206>
    creator = 'georg.brandl'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 6045
    keywords = []
    message_count = 10.0
    messages = ['87968', '87987', '87990', '87991', '87993', '87996', '91342', '123323', '123359', '127845']
    nosy_count = 6.0
    nosy_names = ['loewis', 'georg.brandl', 'pitrou', 'eric.araujo', 'foobaron', 'pablomouzo']
    pr_nums = []
    priority = 'normal'
    resolution = 'duplicate'
    stage = 'resolved'
    status = 'closed'
    superseder = '9523'
    type = 'enhancement'
    url = 'https://bugs.python.org/issue6045'
    versions = ['Python 3.3']

    Activity

    1. birkenfeld commented on May 17, 2009

      @birkenfeld
      MemberAuthor

      All the dbm.* modules currently have different interfaces, and different
      levels of supporting the Python3-style dictionary interface -- while the
      docs claim they all have (most of) the dict interface.

      For example, both dbm.gnu and dbm.ndbm only have keys() methods, and
      they return a list. Etc. for other dict-style methods.

      So, either we remove the claim that they have a dict-style interface
      beyond __*item__() and keys(), or we do something about it.

    2. added
      type-bugAn unexpected behavior, bug, or error
      stdlibStandard Library Python modules in the Lib/ directory
      on May 17, 2009
    3. loewis commented on May 17, 2009

      loewismannequin
      Mannequin

      So, either we remove the claim that they have a dict-style interface
      beyond __*item__() and keys(), or we do something about it.

      I disagree that this is release-critical. I think it is desirable to
      say that the dbm modules support most of a dict-style interface,
      and I also think that it is factually correct to claim that they
      currently do.

      The problem with the current documentation is that it apparently stopped
      documenting the "dict-style interface", in the sense

      http://www.python.org/doc/2.5/lib/typesmapping.html

      did. Instead, the documentation now only documents the dict type itself.
      If a dict-style interface was specified, one would have to specify
      whether returning views from keys/values/items is part of the dict-style
      interface or not.

    4. birkenfeld commented on May 17, 2009

      @birkenfeld
      MemberAuthor

      First, lowering priority.

      I disagree that this is release-critical. I think it is desirable to
      say that the dbm modules support most of a dict-style interface,
      and I also think that it is factually correct to claim that they
      currently do.

      Supporting only __getitem__, __setitem__, __delitem__, __contains__ and
      keys is already "most of a dict-style interface"? Only dumbdbm and
      bsddb, which isn't in the core anymore, support more methods.

      The problem with the current documentation is that it apparently stopped
      documenting the "dict-style interface", in the sense
      http://www.python.org/doc/2.5/lib/typesmapping.html
      did. Instead, the documentation now only documents the dict type itself.
      If a dict-style interface was specified, one would have to specify
      whether returning views from keys/values/items is part of the dict-style
      interface or not.

      It should first be decided what a "dict-style interface" means in Python
      3, then I can document it :)

      However, for the dbm modules I would be in favor of only specifying the
      four mentioned methods, as in the docstring of dbm/init.py, and not
      claiming any more.

    5. loewis commented on May 17, 2009

      loewismannequin
      Mannequin

      > I disagree that this is release-critical. I think it is desirable to
      > say that the dbm modules support most of a dict-style interface,
      > and I also think that it is factually correct to claim that they
      > currently do.

      Supporting only __getitem__, __setitem__, __delitem__, __contains__ and
      keys is already "most of a dict-style interface"?

      It's also __len__... Indeed, I think that this is the major part of the
      dict interface. For a number of additional methods, it would be
      straight-forward to support them as well (such as get(), pop(),
      popitem(), setdefault(), update()). That they are missing should be
      considered as a regular bug/missing feature. However, it appears that
      nobody has complained about those missing features in all these years,
      so that they are missing can't be that serious.

      However, for the dbm modules I would be in favor of only specifying the
      four mentioned methods, as in the docstring of dbm/init.py, and not
      claiming any more.

      I don't mind the documentation to explain precisely what is, as long as
      it continues to explain what could be.

    6. pitrou commented on May 17, 2009

      @pitrou
      Member

      Would inheriting from MutableMapping fix this problem?

    7. loewis commented on May 17, 2009

      loewismannequin
      Mannequin

      Would inheriting from MutableMapping fix this problem?

      In principle: some of it, yes. These types are written in C,
      so I'm not sure how exactly it would work. Also, it
      still wouldn't provide all methods, e.g. copy(), fromkeys(),
      get(), values(), items() would still be missing, as would
      iteration (although the dict documentation apparently never
      says that iterating over a dict is supported).

    8. foobaron commented on Aug 6, 2009

      foobaronmannequin
      Mannequin

      I suspect that for most users, shelve is the main way they will access
      the dbm.* interfaces. Based on that, the dict methods that are really
      needed on dbm.* objects are just: __iter__, __len__, __getitem__,
      __setitem__, __delitem__, __contains__, has_key, and keys.

      Note: bpo-5736 aims to make dbm.* support the iterator protocol, which
      would be crucial for making shelve iteration scalable (currently,
      iterating on a Shelf will call self.dict.keys(), loading the entire
      index into memory!).

      The dbm.* docs could also explicitly tell users who want a *complete*
      dict interface to create a class that inherits from both dbm and
      UserDict.DictMixin / MutableMapping.

    9. birkenfeld commented on Dec 4, 2010

      @birkenfeld
      MemberAuthor

      r87013 adds get() and setdefault() to dbm.gnu -- now gdbm and ndbm have the same set of dict methods available.

      For me, that is enough to demote this to feature request.

      There's another issue anyway for iteration protocol support.

    10. changed the title [-]Fix dbm interfaces[/-] [+]Add more dict methods to dbm interfaces[/+] on Dec 4, 2010
    11. added
      type-featureA feature request or enhancement
      and removed
      type-bugAn unexpected behavior, bug, or error
      on Dec 4, 2010
    12. merwok commented on Dec 4, 2010

      @merwok
      Member

      See also bpo-9523.

    13. merwok commented on Feb 4, 2011

      @merwok
      Member

      I believe this is now superseded by bpo-9523, which has less discussion but a patch.

    14. transferred this issue fromon Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      stdlibStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancement

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions