diff options
| author | Eli Collins <elic@assurancetechnologies.com> | 2011-09-14 14:19:29 -0400 |
|---|---|---|
| committer | Eli Collins <elic@assurancetechnologies.com> | 2011-09-14 14:19:29 -0400 |
| commit | b130100d2f8e7d10e3c810b7a92375bd06af59b6 (patch) | |
| tree | 18e2b289c004f64799faa1632608d5cdaf17ebcf /passlib | |
| parent | 1f1f24734c98c517f5d325132f085a5fc7555ac4 (diff) | |
| download | passlib-b130100d2f8e7d10e3c810b7a92375bd06af59b6.tar.gz | |
fixed small bug in CryptPolicy.iter_config() related to deprecation options
Diffstat (limited to 'passlib')
| -rw-r--r-- | passlib/context.py | 12 | ||||
| -rw-r--r-- | passlib/tests/test_context.py | 63 |
2 files changed, 54 insertions, 21 deletions
diff --git a/passlib/context.py b/passlib/context.py index 45246ac..46bcec3 100644 --- a/passlib/context.py +++ b/passlib/context.py @@ -642,14 +642,16 @@ class CryptPolicy(object): return h.name def encode_hlist(hl): return ", ".join(h.name for h in hl) + def encode_nlist(hl): + return ", ".join(name for name in hl) else: fmt1 = "%s__%s__%s" fmt2 = "%s__%s" + encode_nlist = list if resolve: def encode_handler(h): return h - def encode_hlist(hl): - return list(hl) + encode_hlist = list else: def encode_handler(h): return h.name @@ -671,7 +673,7 @@ class CryptPolicy(object): yield format_key(None, None, "schemes"), encode_hlist(value) for cat, value in self._deprecated.iteritems(): - yield format_key(cat, None, "deprecated"), encode_hlist(value) + yield format_key(cat, None, "deprecated"), encode_nlist(value) for cat, value in self._default.iteritems(): yield format_key(cat, None, "default"), encode_handler(value) @@ -822,7 +824,7 @@ class CryptContext(object): #init #=================================================================== def __init__(self, schemes=None, policy=default_policy, **kwds): - #XXX: add a name for the contexts? + #XXX: add a name for the contexts, to help out repr? if schemes: kwds['schemes'] = schemes if not policy: @@ -836,6 +838,8 @@ class CryptContext(object): names = [ handler.name for handler in self.policy.iter_handlers() ] return "<CryptContext %0xd schemes=%r>" % (id(self), names) + #XXX: make an update() method that just updates policy? + def replace(self, **kwds): """return mutated CryptContext instance diff --git a/passlib/tests/test_context.py b/passlib/tests/test_context.py index b284674..10c7b9c 100644 --- a/passlib/tests/test_context.py +++ b/passlib/tests/test_context.py @@ -158,12 +158,40 @@ admin.sha512_crypt.max_rounds = 40000 sample_config_4pd = dict( schemes = [ "sha512_crypt" ], - all__vary_rounds = "10%", + all__vary_rounds = "10%", sha512_crypt__max_rounds = 20000, admin__all__vary_rounds = "5%", admin__sha512_crypt__max_rounds = 40000, ) + #----------------------------------------------------- + #sample 5 - to_string & deprecation testing + #----------------------------------------------------- + sample_config_5s = sample_config_1s + """\ +deprecated = des_crypt +admin__context__deprecated = des_crypt, bsdi_crypt +""" + + sample_config_5pd = sample_config_1pd.copy() + sample_config_5pd.update( + deprecated = [ "des_crypt" ], + admin__context__deprecated = [ "des_crypt", "bsdi_crypt" ], + ) + + sample_config_5pid = sample_config_1pid.copy() + sample_config_5pid.update({ + "deprecated": "des_crypt", + "admin.context.deprecated": "des_crypt, bsdi_crypt", + }) + + sample_config_5prd = sample_config_1prd.copy() + sample_config_5prd.update({ + # XXX: should deprecated return the actual handlers in this case? + # would have to modify how policy stores info, for one. + "deprecated": ["des_crypt"], + "admin__context__deprecated": ["des_crypt", "bsdi_crypt"], + }) + #========================================================= #constructors #========================================================= @@ -407,20 +435,21 @@ admin.sha512_crypt.max_rounds = 40000 def test_14_handler_is_deprecated(self): "test handler_is_deprecated() method" pa = CryptPolicy(**self.sample_config_1pd) - pb = pa.replace(deprecated=["des_crypt", "bsdi_crypt"], admin__context__deprecated=["des_crypt"]) + pb = CryptPolicy(**self.sample_config_5pd) - self.assertTrue(not pa.handler_is_deprecated("des_crypt")) - self.assertTrue(not pa.handler_is_deprecated(hash.bsdi_crypt)) - self.assertTrue(not pa.handler_is_deprecated("sha512_crypt")) + self.assertFalse(pa.handler_is_deprecated("des_crypt")) + self.assertFalse(pa.handler_is_deprecated(hash.bsdi_crypt)) + self.assertFalse(pa.handler_is_deprecated("sha512_crypt")) self.assertTrue(pb.handler_is_deprecated("des_crypt")) - self.assertTrue(pb.handler_is_deprecated(hash.bsdi_crypt)) - self.assertTrue(not pb.handler_is_deprecated("sha512_crypt")) + self.assertFalse(pb.handler_is_deprecated(hash.bsdi_crypt)) + self.assertFalse(pb.handler_is_deprecated("sha512_crypt")) #check categories as well self.assertTrue(pb.handler_is_deprecated("des_crypt", "user")) + self.assertFalse(pb.handler_is_deprecated("bsdi_crypt", "user")) self.assertTrue(pb.handler_is_deprecated("des_crypt", "admin")) - self.assertFalse(pb.handler_is_deprecated("bsdi_crypt", "admin")) + self.assertTrue(pb.handler_is_deprecated("bsdi_crypt", "admin")) def test_15_min_verify_time(self): pa = CryptPolicy() @@ -448,23 +477,23 @@ admin.sha512_crypt.max_rounds = 40000 #========================================================= def test_20_iter_config(self): "test iter_config() method" - p1 = CryptPolicy(**self.sample_config_1pd) - self.assertEqual(dict(p1.iter_config()), self.sample_config_1pd) - self.assertEqual(dict(p1.iter_config(resolve=True)), self.sample_config_1prd) - self.assertEqual(dict(p1.iter_config(ini=True)), self.sample_config_1pid) + p5 = CryptPolicy(**self.sample_config_5pd) + self.assertEqual(dict(p5.iter_config()), self.sample_config_5pd) + self.assertEqual(dict(p5.iter_config(resolve=True)), self.sample_config_5prd) + self.assertEqual(dict(p5.iter_config(ini=True)), self.sample_config_5pid) def test_21_to_dict(self): "test to_dict() method" - p1 = CryptPolicy(**self.sample_config_1pd) - self.assertEqual(p1.to_dict(), self.sample_config_1pd) - self.assertEqual(p1.to_dict(resolve=True), self.sample_config_1prd) + p5 = CryptPolicy(**self.sample_config_5pd) + self.assertEqual(p5.to_dict(), self.sample_config_5pd) + self.assertEqual(p5.to_dict(resolve=True), self.sample_config_5prd) def test_22_to_string(self): "test to_string() method" - pa = CryptPolicy(**self.sample_config_1pd) + pa = CryptPolicy(**self.sample_config_5pd) s = pa.to_string() #NOTE: can't compare string directly, ordering etc may not match pb = CryptPolicy.from_string(s) - self.assertEqual(pb.to_dict(), self.sample_config_1pd) + self.assertEqual(pb.to_dict(), self.sample_config_5pd) #========================================================= # |
