From e06fdc89b651ff966894c2a52b1b994fcc0ce5fb Mon Sep 17 00:00:00 2001 From: Sergey Schetinin Date: Sat, 31 Jul 2010 09:12:08 +0300 Subject: [PATCH] shortpath the most common environ_getter case --- webob/descriptors.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/webob/descriptors.py b/webob/descriptors.py index fd1d1052..e314d7b9 100644 --- a/webob/descriptors.py +++ b/webob/descriptors.py @@ -37,22 +37,24 @@ def __init__(self, key, default='', default_factory=None, def __get__(self, obj, type=None): if obj is None: return self - if self.key not in obj.environ: + try: + return obj.environ[self.key] + except KeyError: if self.default_factory: val = obj.environ[self.key] = self.default_factory() return val else: return self.default - return obj.environ[self.key] + def __set__(self, obj, value): if not self.settable: raise AttributeError("Read-only attribute (key %r)" % self.key) - if value is None: - if self.key in obj.environ: - del obj.environ[self.key] - else: + if value is not None: obj.environ[self.key] = value + elif self.key in obj.environ: + del obj.environ[self.key] + def __delete__(self, obj): if not self.deletable: