Speed up unit tests for projects that use extensions.

Review Request #5905 — Created May 30, 2014 and submitted

Information

Djblets
release-0.8.x
aef6ccf...

Reviewers

Projects supporting extensions that used the test HTTP client would end
up reloading all extensions, creating RegisteredExtension entries, every
time a request was performed. This added up quite a bit over time.

This change does two things to address this problem.

1. The RegisteredExtension creation code has been improved. Instead of
using get_or_create, we attempt a create and fall back on a get. This
chops the number of queries in half, since we no longer are assuming
there's an entry in the database already (which is a bad assumption,
since earlier in the function, we checked and didn't see any).

While here, I also fixed a bug where the wrong value was being
used for the stored extension name, due to a scoping issue.

2. ExtensionsMiddleware no longer performs expiration checks if
settings.RUNNING_TEST is True. It's up to the projects to set this
for the test run, though.

Ran the Review Board test suite. It went down from ~147.78 seconds to
~125.45 seconds -- a ~22 second savings. That's with 9 extensions
installed (not enabled) on the system.

reviewbot
  1. This is a review from Review Bot.
      Tool: PEP8 Style Checker
      Processed Files:
        djblets/extensions/manager.py
        djblets/extensions/middleware.py
      Ignored Files:
    
    
  2. 
      
reviewbot
  1. This is a review from Review Bot.
      Tool: Pyflakes
      Processed Files:
        djblets/extensions/manager.py
        djblets/extensions/middleware.py
      Ignored Files:
    
    
  2. 
      
david
  1. Ship It!

  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-0.8.x (b059f6f)