Use "six" to abstract dictionary iteration and callable for python 2/3

Review Request #4893 — Created Nov. 4, 2013 and submitted

Information

Djblets
master

Reviewers

Use "six" to abstract dictionary iteration and callable for python 2/3

I'm starting to work on porting our codebase to be compatible with both python
2 and 3. In python 3, items(), keys(), and values() are all iterators by
default and the old iter*() methods are gone. The "six" library includes
abstractions to handle these.

In addition, for some strange reason 'callable' is gone in python 3.0 and 3.1.
They brought it back in 3.2 (which may be a reasonable minimum), but for now,
to get the 2to3 tool to shut up, I'm using six's abstraction for that as well.

  • Ran djblets unit tests
  • Ran reviewboard unit tests
Description From Last Updated

That ordering doesn't seem right. I think the from made sense where it was.

chipx86chipx86

Just for my own knowledge, why is this change needed? I thought sorted() allowed an iterator.

chipx86chipx86

We should probably just use self.get_enabled_extensions() here.

chipx86chipx86

Should use self.get_installed_extensions.

chipx86chipx86
chipx86
  1. This library is going to take some getting used to.

  2. djblets/extensions/tests.py (Diff revision 1)
     
     
     
     
     
     
    Show all issues

    That ordering doesn't seem right. I think the from made sense where it was.

    1. Oops! For some reason I read that and skipped the "from mock" part and thought it was a normal import. Weird.

  3. djblets/log/middleware.py (Diff revision 1)
     
     
    Show all issues

    Just for my own knowledge, why is this change needed? I thought sorted() allowed an iterator.

    1. It's not. fixing.

  4. 
      
chipx86
  1. Can we use the Django-provided version of six, instead of adding another dependency?

    1. I had meant to and then I spazzed. Fixing.
  2. 
      
david
chipx86
  1. 
      
  2. djblets/extensions/manager.py (Diff revision 2)
     
     
    Show all issues

    We should probably just use self.get_enabled_extensions() here.

  3. djblets/extensions/manager.py (Diff revision 2)
     
     
    Show all issues

    Should use self.get_installed_extensions.

  4. 
      
david
david
Review request changed
Status:
Completed