From c840f910d3c2ff30ee27a7a52291a0deacb3abe1 Mon Sep 17 00:00:00 2001 From: Sean Fisk Date: Mon, 23 Sep 2013 00:54:14 -0400 Subject: [PATCH 1/2] Removes dict comprehension for Python 2.6 compat. --- pinject/arg_binding_keys.py | 4 ++-- pinject/object_graph.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pinject/arg_binding_keys.py b/pinject/arg_binding_keys.py index 972cb32..3f70ecd 100644 --- a/pinject/arg_binding_keys.py +++ b/pinject/arg_binding_keys.py @@ -104,8 +104,8 @@ def create_kwargs(arg_binding_keys, provider_fn): Returns: a (possibly empty) map from arg name to provided value """ - return {arg_binding_key._arg_name: provider_fn(arg_binding_key) - for arg_binding_key in arg_binding_keys} + return dict([(arg_binding_key._arg_name, provider_fn(arg_binding_key)) + for arg_binding_key in arg_binding_keys]) _PROVIDE_PREFIX = 'provide_' diff --git a/pinject/object_graph.py b/pinject/object_graph.py index 6753d83..0c9759c 100644 --- a/pinject/object_graph.py +++ b/pinject/object_graph.py @@ -208,7 +208,8 @@ def _verify_callable(fn, arg_name): def _pare_to_present_args(kwargs, fn): arg_names, _, _, _ = inspect.getargspec(fn) - return {arg: value for arg, value in kwargs.iteritems() if arg in arg_names} + return dict([ + (arg, value) for arg, value in kwargs.iteritems() if arg in arg_names]) class ObjectGraph(object): From 026362ca346465fb79e087456c00a68ddf7043f1 Mon Sep 17 00:00:00 2001 From: Sean Fisk Date: Mon, 23 Sep 2013 00:56:27 -0400 Subject: [PATCH 2/2] Uses unittest2 for Python 2.6 compat. --- pinject/annotations_test.py | 6 +++--- pinject/arg_binding_keys_test.py | 10 +++++----- pinject/binding_keys_test.py | 6 +++--- pinject/bindings_test.py | 22 +++++++++++----------- pinject/decorators_test.py | 18 +++++++++--------- pinject/finding_test.py | 4 ++-- pinject/initializers_test.py | 6 +++--- pinject/injection_contexts_test.py | 4 ++-- pinject/locations_test.py | 14 +++++++------- pinject/object_graph_test.py | 16 ++++++++-------- pinject/object_providers_test.py | 4 ++-- pinject/pinject_test.py | 4 ++-- pinject/provider_indirections_test.py | 6 +++--- pinject/providing_test.py | 4 ++-- pinject/required_bindings_test.py | 4 ++-- pinject/scoping_test.py | 10 +++++----- requirements-dev.txt | 1 + 17 files changed, 70 insertions(+), 69 deletions(-) create mode 100644 requirements-dev.txt diff --git a/pinject/annotations_test.py b/pinject/annotations_test.py index 42b1cd2..34c6c56 100644 --- a/pinject/annotations_test.py +++ b/pinject/annotations_test.py @@ -14,12 +14,12 @@ """ -import unittest +import unittest2 from pinject import annotations -class AnnotationTest(unittest.TestCase): +class AnnotationTest(unittest2.TestCase): def test_as_correct_adjective(self): self.assertEqual('annotated with "foo"', @@ -40,7 +40,7 @@ def test_not_equal(self): hash(annotations.Annotation('bar'))) -class NoAnnotationTest(unittest.TestCase): +class NoAnnotationTest(unittest2.TestCase): def test_as_correct_adjective(self): self.assertEqual('unannotated', diff --git a/pinject/arg_binding_keys_test.py b/pinject/arg_binding_keys_test.py index b898f99..9b61e78 100644 --- a/pinject/arg_binding_keys_test.py +++ b/pinject/arg_binding_keys_test.py @@ -14,7 +14,7 @@ """ -import unittest +import unittest2 from pinject import annotations from pinject import arg_binding_keys @@ -22,7 +22,7 @@ from pinject import provider_indirections -class ArgBindingKeyTest(unittest.TestCase): +class ArgBindingKeyTest(unittest2.TestCase): def test_repr(self): arg_binding_key = arg_binding_keys.ArgBindingKey( @@ -120,7 +120,7 @@ def test_doesnt_conflict_with_any_binding_key(self): [non_conflicting_arg_binding_key])) -class GetUnboundArgNamesTest(unittest.TestCase): +class GetUnboundArgNamesTest(unittest2.TestCase): def test_all_arg_names_bound(self): self.assertEqual( @@ -137,7 +137,7 @@ def test_some_arg_name_unbound(self): ['bound', 'unbound'], [arg_binding_keys.new('bound')])) -class CreateKwargsTest(unittest.TestCase): +class CreateKwargsTest(unittest2.TestCase): def test_returns_nothing_for_no_input(self): self.assertEqual( @@ -154,7 +154,7 @@ def ProviderFn(arg_binding_key): ProviderFn)) -class NewArgBindingKeyTest(unittest.TestCase): +class NewArgBindingKeyTest(unittest2.TestCase): def test_with_no_bells_or_whistles(self): arg_binding_key = arg_binding_keys.new('an-arg-name') diff --git a/pinject/binding_keys_test.py b/pinject/binding_keys_test.py index 998a07c..02972d7 100644 --- a/pinject/binding_keys_test.py +++ b/pinject/binding_keys_test.py @@ -14,13 +14,13 @@ """ -import unittest +import unittest2 from pinject import annotations from pinject import binding_keys -class BindingKeyTest(unittest.TestCase): +class BindingKeyTest(unittest2.TestCase): def test_repr(self): binding_key = binding_keys.BindingKey( @@ -70,7 +70,7 @@ def test_unequal_if_not_same_annotation(self): self.assertNotEqual(str(binding_key_one), str(binding_key_two)) -class NewBindingKeyTest(unittest.TestCase): +class NewBindingKeyTest(unittest2.TestCase): def test_without_annotation(self): binding_key = binding_keys.new('an-arg-name') diff --git a/pinject/bindings_test.py b/pinject/bindings_test.py index 684ecbc..fe71f74 100644 --- a/pinject/bindings_test.py +++ b/pinject/bindings_test.py @@ -15,7 +15,7 @@ import threading -import unittest +import unittest2 from pinject import bindings as bindings_lib from pinject import binding_keys @@ -41,7 +41,7 @@ def new_in_default_scope(binding_key): get_binding_loc_fn=lambda: 'unknown') -class GetBindingKeyToBindingMapsTest(unittest.TestCase): +class GetBindingKeyToBindingMapsTest(unittest2.TestCase): def setUp(self): class SomeClass(object): @@ -97,7 +97,7 @@ def handle_binding_collision_fn( self.assertTrue(was_called.is_set()) -class GetOverallBindingKeyToBindingMapsTest(unittest.TestCase): +class GetOverallBindingKeyToBindingMapsTest(unittest2.TestCase): def setUp(self): class SomeClass(object): @@ -149,7 +149,7 @@ def test_colliding_highest_priority_bindings_raises_error(self): error_type=errors.ConflictingExplicitBindingsError) -class BindingMappingTest(unittest.TestCase): +class BindingMappingTest(unittest2.TestCase): def test_success(self): binding_mapping = bindings_lib.BindingMapping( @@ -196,7 +196,7 @@ def test_verifying_missing_required_binding_raises_error(self): 'unknown-binding-key', 'a-require-loc')]) -class DefaultGetArgNamesFromClassNameTest(unittest.TestCase): +class DefaultGetArgNamesFromClassNameTest(unittest2.TestCase): def test_single_word_lowercased(self): self.assertEqual( @@ -237,7 +237,7 @@ def call_provisor_fn(a_binding): _UNUSED_INJECTION_CONTEXT, FakeObjectProvider(), pargs=[], kwargs={}) -class GetExplicitClassBindingsTest(unittest.TestCase): +class GetExplicitClassBindingsTest(unittest2.TestCase): def test_returns_no_bindings_for_no_input(self): self.assertEqual([], bindings_lib.get_explicit_class_bindings([])) @@ -265,7 +265,7 @@ def __init__(self): explicit_binding.binding_key) -class GetProviderBindingsTest(unittest.TestCase): +class GetProviderBindingsTest(unittest2.TestCase): def test_returns_no_bindings_for_non_binding_spec(self): class SomeClass(object): @@ -304,7 +304,7 @@ def provide_foo(self): SomeBindingSpec(), known_scope_ids=[]) -class GetImplicitClassBindingsTest(unittest.TestCase): +class GetImplicitClassBindingsTest(unittest2.TestCase): def test_returns_no_bindings_for_no_input(self): self.assertEqual([], bindings_lib.get_implicit_class_bindings([])) @@ -346,7 +346,7 @@ class SomeClass(object): implicit_binding.binding_key) -class BinderTest(unittest.TestCase): +class BinderTest(unittest2.TestCase): def setUp(self): self.collected_bindings = [] @@ -408,7 +408,7 @@ def test_binding_to_non_class_raises_error(self): to_class='not-a-class') -class BindingSpecTest(unittest.TestCase): +class BindingSpecTest(unittest2.TestCase): def test_equal_if_same_type(self): class SomeBindingSpec(bindings_lib.BindingSpec): @@ -435,7 +435,7 @@ class BindingSpecTwo(bindings_lib.BindingSpec): self.assertNotEqual(hash(BindingSpecOne()), hash(BindingSpecTwo())) -class GetProviderFnBindingsTest(unittest.TestCase): +class GetProviderFnBindingsTest(unittest2.TestCase): def test_proviser_calls_provider_fn(self): def provide_foo(): diff --git a/pinject/decorators_test.py b/pinject/decorators_test.py index dc9ac9e..45adfa8 100644 --- a/pinject/decorators_test.py +++ b/pinject/decorators_test.py @@ -15,7 +15,7 @@ import inspect -import unittest +import unittest2 from pinject import arg_binding_keys from pinject import bindings @@ -40,7 +40,7 @@ def call_with_injection(self, provider_fn, injection_context): return provider_fn() -class AnnotateArgTest(unittest.TestCase): +class AnnotateArgTest(unittest2.TestCase): def test_adds_binding_in_pinject_decorated_fn(self): @decorators.annotate_arg('foo', 'an-annotation') @@ -51,7 +51,7 @@ def some_function(foo): some_function, decorators._ARG_BINDING_KEYS_ATTR)]) -class InjectTest(unittest.TestCase): +class InjectTest(unittest2.TestCase): def test_can_set_injectable_arg_names(self): @decorators.inject(['foo', 'bar']) @@ -143,7 +143,7 @@ def some_function(foo, bar): self.assertRaises(errors.DuplicateDecoratorError, do_bad_inject) -class InjectableTest(unittest.TestCase): +class InjectableTest(unittest2.TestCase): def test_adds_wrapper_to_init(self): class SomeClass(object): @@ -154,7 +154,7 @@ def __init__(self, foo): hasattr(SomeClass.__init__, decorators._IS_WRAPPER_ATTR)) -class ProvidesTest(unittest.TestCase): +class ProvidesTest(unittest2.TestCase): def test_sets_arg_values(self): @decorators.provides('an-arg-name', annotated_with='an-annotation', @@ -206,7 +206,7 @@ def provide_something(self): for provider_fn_binding in provider_fn_bindings])) -class GetProviderFnDecorationsTest(unittest.TestCase): +class GetProviderFnDecorationsTest(unittest2.TestCase): def test_returns_defaults_for_undecorated_fn(self): def provide_foo(): @@ -242,7 +242,7 @@ def provide_foo(): provider_decorations) -class GetPinjectWrapperTest(unittest.TestCase): +class GetPinjectWrapperTest(unittest2.TestCase): def test_sets_recognizable_wrapper_attribute(self): @decorators.annotate_arg('foo', 'an-annotation') @@ -296,7 +296,7 @@ def some_function(foo, bar='BAR', *pargs, **kwargs): self.assertEqual(('BAR',), defaults) -class IsExplicitlyInjectableTest(unittest.TestCase): +class IsExplicitlyInjectableTest(unittest2.TestCase): def test_non_injectable_class(self): class SomeClass(object): @@ -311,7 +311,7 @@ def __init__(self): self.assertTrue(decorators.is_explicitly_injectable(SomeClass)) -class GetInjectableArgBindingKeysTest(unittest.TestCase): +class GetInjectableArgBindingKeysTest(unittest2.TestCase): def assert_fn_has_injectable_arg_binding_keys(self, fn, arg_binding_keys): self.assertEqual( diff --git a/pinject/finding_test.py b/pinject/finding_test.py index cb2ffe4..475050c 100644 --- a/pinject/finding_test.py +++ b/pinject/finding_test.py @@ -15,12 +15,12 @@ import sys -import unittest +import unittest2 from pinject import finding -class FindClassesTest(unittest.TestCase): +class FindClassesTest(unittest2.TestCase): def test_finds_passed_in_classes(self): class SomeClass(object): diff --git a/pinject/initializers_test.py b/pinject/initializers_test.py index 418b192..b367f91 100644 --- a/pinject/initializers_test.py +++ b/pinject/initializers_test.py @@ -15,13 +15,13 @@ import inspect -import unittest +import unittest2 from pinject import errors from pinject import initializers -class CopyArgsToInternalFieldsTest(unittest.TestCase): +class CopyArgsToInternalFieldsTest(unittest2.TestCase): def test_does_nothing_extra_for_zero_arg_initializer(self): class SomeClass(object): @@ -86,7 +86,7 @@ def some_function(foo, bar): do_bad_decorated_fn) -class CopyArgsToPublicFieldsTest(unittest.TestCase): +class CopyArgsToPublicFieldsTest(unittest2.TestCase): def test_uses_no_field_prefix(self): class SomeClass(object): diff --git a/pinject/injection_contexts_test.py b/pinject/injection_contexts_test.py index 1cae6ba..281ed02 100644 --- a/pinject/injection_contexts_test.py +++ b/pinject/injection_contexts_test.py @@ -14,7 +14,7 @@ """ -import unittest +import unittest2 from pinject import binding_keys from pinject import bindings @@ -25,7 +25,7 @@ _UNUSED_INJECTION_SITE_FN = lambda: None -class InjectionContextTest(unittest.TestCase): +class InjectionContextTest(unittest2.TestCase): def setUp(self): self.binding_key = binding_keys.new('foo') diff --git a/pinject/locations_test.py b/pinject/locations_test.py index 6aa3add..55a6789 100644 --- a/pinject/locations_test.py +++ b/pinject/locations_test.py @@ -14,12 +14,12 @@ """ -import unittest +import unittest2 from pinject import locations -class GetTypeLocTest(unittest.TestCase): +class GetTypeLocTest(unittest2.TestCase): def test_known(self): class SomeObject(object): @@ -28,10 +28,10 @@ class SomeObject(object): def test_unknown(self): self.assertEqual('unknown location', - locations.get_loc(unittest.TestCase)) + locations.get_loc(unittest2.TestCase)) -class GetClassNameAndLocTest(unittest.TestCase): +class GetClassNameAndLocTest(unittest2.TestCase): def test_known(self): class OtherObject(object): @@ -49,11 +49,11 @@ def a_method(self): self.assertIn('locations_test.py', class_name_and_loc) def test_unknown(self): - self.assertEqual('unittest.case.TestCase', - locations.get_name_and_loc(unittest.TestCase)) + self.assertEqual('unittest2.case.TestCase', + locations.get_name_and_loc(unittest2.TestCase)) -class GetBackFrameLocTest(unittest.TestCase): +class GetBackFrameLocTest(unittest2.TestCase): def test_correct_file_and_line(self): def get_loc(): diff --git a/pinject/object_graph_test.py b/pinject/object_graph_test.py index c435a88..443383b 100644 --- a/pinject/object_graph_test.py +++ b/pinject/object_graph_test.py @@ -16,7 +16,7 @@ import inspect import types -import unittest +import unittest2 from pinject import bindings from pinject import decorators @@ -25,7 +25,7 @@ from pinject import scoping -class NewObjectGraphTest(unittest.TestCase): +class NewObjectGraphTest(unittest2.TestCase): def test_can_create_object_graph_with_all_defaults(self): _ = object_graph.new_object_graph() @@ -230,7 +230,7 @@ class _Foo(object): binding_specs=[SomeBindingSpec()]) -class VerifyTypeTest(unittest.TestCase): +class VerifyTypeTest(unittest2.TestCase): def test_verifies_correct_type_ok(self): object_graph._verify_type(types, types.ModuleType, 'unused') @@ -240,7 +240,7 @@ def test_raises_exception_if_incorrect_type(self): 'not-a-module', types.ModuleType, 'an-arg-name') -class VerifyTypesTest(unittest.TestCase): +class VerifyTypesTest(unittest2.TestCase): def test_verifies_empty_sequence_ok(self): object_graph._verify_types([], types.ModuleType, 'unused') @@ -258,7 +258,7 @@ def test_raises_exception_if_element_is_incorrect_type(self): ['not-a-module'], types.ModuleType, 'an-arg-name') -class VerifySubclassesTest(unittest.TestCase): +class VerifySubclassesTest(unittest2.TestCase): def test_verifies_empty_sequence_ok(self): object_graph._verify_subclasses([], bindings.BindingSpec, 'unused') @@ -282,7 +282,7 @@ class NotBindingSpec(object): [NotBindingSpec()], bindings.BindingSpec, 'an-arg-name') -class VerifyCallableTest(unittest.TestCase): +class VerifyCallableTest(unittest2.TestCase): def test_verifies_callable_ok(self): object_graph._verify_callable(lambda: None, 'unused') @@ -292,7 +292,7 @@ def test_raises_exception_if_not_callable(self): object_graph._verify_callable, 42, 'an-arg-name') -class PareToPresentArgsTest(unittest.TestCase): +class PareToPresentArgsTest(unittest2.TestCase): def test_removes_only_args_not_present(self): def fn(self, present): @@ -304,7 +304,7 @@ def fn(self, present): fn)) -class ObjectGraphProvideTest(unittest.TestCase): +class ObjectGraphProvideTest(unittest2.TestCase): def test_can_provide_trivial_class(self): class ExampleClassWithInit(object): diff --git a/pinject/object_providers_test.py b/pinject/object_providers_test.py index 5c75ad7..b28eb89 100644 --- a/pinject/object_providers_test.py +++ b/pinject/object_providers_test.py @@ -15,7 +15,7 @@ import inspect -import unittest +import unittest2 from pinject import arg_binding_keys from pinject import binding_keys @@ -46,7 +46,7 @@ def new_injection_context(): _UNUSED_INJECTION_SITE_FN = lambda: None -class ObjectProviderTest(unittest.TestCase): +class ObjectProviderTest(unittest2.TestCase): def test_provides_from_arg_binding_key_successfully(self): arg_binding_key = arg_binding_keys.new('an-arg-name') diff --git a/pinject/pinject_test.py b/pinject/pinject_test.py index 2d8910f..8f187a8 100644 --- a/pinject/pinject_test.py +++ b/pinject/pinject_test.py @@ -14,12 +14,12 @@ """ -import unittest +import unittest2 import pinject -class CopiedClassesTest(unittest.TestCase): +class CopiedClassesTest(unittest2.TestCase): def test_new_object_graph_works(self): class SomeClass(object): diff --git a/pinject/provider_indirections_test.py b/pinject/provider_indirections_test.py index f187e70..93903e7 100644 --- a/pinject/provider_indirections_test.py +++ b/pinject/provider_indirections_test.py @@ -14,12 +14,12 @@ """ -import unittest +import unittest2 from pinject import provider_indirections -class ProviderIndirectionTest(unittest.TestCase): +class ProviderIndirectionTest(unittest2.TestCase): def test_returns_provider_fn(self): provide_fn = provider_indirections.INDIRECTION.StripIndirectionIfNeeded( @@ -27,7 +27,7 @@ def test_returns_provider_fn(self): self.assertEqual('provided-thing', provide_fn()) -class NoProviderIndirectionTest(unittest.TestCase): +class NoProviderIndirectionTest(unittest2.TestCase): def test_returns_provided_thing(self): self.assertEqual( diff --git a/pinject/providing_test.py b/pinject/providing_test.py index fbd001c..0297702 100644 --- a/pinject/providing_test.py +++ b/pinject/providing_test.py @@ -14,12 +14,12 @@ """ -import unittest +import unittest2 from pinject import providing -class DefaultGetArgNamesFromProviderFnNameTest(unittest.TestCase): +class DefaultGetArgNamesFromProviderFnNameTest(unittest2.TestCase): def test_non_provider_prefix_returns_nothing(self): self.assertEqual([], diff --git a/pinject/required_bindings_test.py b/pinject/required_bindings_test.py index 4213319..ec80ef3 100644 --- a/pinject/required_bindings_test.py +++ b/pinject/required_bindings_test.py @@ -14,13 +14,13 @@ """ -import unittest +import unittest2 from pinject import binding_keys from pinject import required_bindings -class RequiredBindingsTest(unittest.TestCase): +class RequiredBindingsTest(unittest2.TestCase): def setUp(self): self.required_bindings = required_bindings.RequiredBindings() diff --git a/pinject/scoping_test.py b/pinject/scoping_test.py index 728abfa..84df10f 100644 --- a/pinject/scoping_test.py +++ b/pinject/scoping_test.py @@ -14,7 +14,7 @@ """ -import unittest +import unittest2 from pinject import bindings from pinject import binding_keys @@ -22,7 +22,7 @@ from pinject import scoping -class PrototypeScopeTest(unittest.TestCase): +class PrototypeScopeTest(unittest2.TestCase): def test_always_calls_provider_fn(self): next_provided = [0] @@ -37,7 +37,7 @@ def provider_fn(): [scope.provide(binding_key, provider_fn) for _ in xrange(10)]) -class SingletonScopeTest(unittest.TestCase): +class SingletonScopeTest(unittest2.TestCase): def setUp(self): self.scope = scoping.SingletonScope() @@ -63,7 +63,7 @@ def provide_from_singleton_scope(): provide_from_singleton_scope)) -class GetIdToScopeWithDefaultsTest(unittest.TestCase): +class GetIdToScopeWithDefaultsTest(unittest2.TestCase): def test_adds_default_scopes_to_given_scopes(self): orig_id_to_scope = {'a-scope-id': 'a-scope'} @@ -88,7 +88,7 @@ def test_does_not_allow_overriding_singleton_scope(self): id_to_scope={scoping.SINGLETON: 'unused'}) -class BindableScopesTest(unittest.TestCase): +class BindableScopesTest(unittest2.TestCase): def setUp(self): self.bindable_scopes = scoping.BindableScopes( diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..d79cbd2 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1 @@ +unittest22==0.5.1