[py-svn] r34089 - in py/dist/py/apigen: rest tracer tracer/testing
fijal at codespeak.net
fijal at codespeak.net
Fri Nov 3 11:38:48 CET 2006
Author: fijal
Date: Fri Nov 3 11:38:47 2006
New Revision: 34089
Modified:
py/dist/py/apigen/rest/genrest.py
py/dist/py/apigen/tracer/description.py
py/dist/py/apigen/tracer/testing/test_docgen.py
Log:
(guido, fijal) - Intermediate checkin of somehow changing semantics of __dict__ monitoring.
Modified: py/dist/py/apigen/rest/genrest.py
==============================================================================
--- py/dist/py/apigen/rest/genrest.py (original)
+++ py/dist/py/apigen/rest/genrest.py Fri Nov 3 11:38:47 2006
@@ -390,7 +390,10 @@
tbrest.append(Paragraph(Link(linkname, linktarget)))
else:
tbrest.append(Paragraph(linkname))
- source = line.code.source()
+ try:
+ source = line.code.source()
+ except IOError:
+ source = "*Cannot get source*"
mangled = []
for i, sline in enumerate(str(source).split('\n')):
if i == lineno:
Modified: py/dist/py/apigen/tracer/description.py
==============================================================================
--- py/dist/py/apigen/tracer/description.py (original)
+++ py/dist/py/apigen/tracer/description.py Fri Nov 3 11:38:47 2006
@@ -4,6 +4,7 @@
import types
import inspect
+import copy
MAX_CALL_SITES = 20
@@ -42,9 +43,6 @@
def __cmp__(self, other):
return cmp(self._getval(), other._getval())
-class NoValue(object):
- """used in MethodDesc.get_local_changes() when there is no value"""
-
def cut_stack(stack, frame, upward_frame=None):
if hasattr(frame, 'raw'):
frame = frame.raw
@@ -234,7 +232,7 @@
def __init__(self, *args, **kwargs):
super(MethodDesc, self).__init__(*args, **kwargs)
self.old_dict = {}
- self.new_dict = {}
+ self.changeset = {}
# right now it's not different than method desc, only code is different
def getcode(self):
@@ -245,28 +243,47 @@
def consider_start_locals(self, frame):
# XXX recursion issues?
- obj = frame.f_locals.get('self')
- if not obj:
- # static method
+ obj = frame.f_locals[self.pyobj.im_func.func_code.co_varnames[0]]
+ try:
+ if not obj:
+ # static method
+ return
+ except AttributeError:
return
- self.old_dict = obj.__dict__.copy()
+ #self.old_dict = self.perform_dict_copy(obj.__dict__)
+ self.old_dict = copy.deepcopy(obj.__dict__)
def consider_end_locals(self, frame):
- obj = frame.f_locals.get('self')
- if not obj:
- # static method
+ obj = frame.f_locals[self.pyobj.im_func.func_code.co_varnames[0]]
+ try:
+ if not obj:
+ # static method
+ return
+ except AttributeError:
return
- self.new_dict = obj.__dict__.copy()
+ # store the local changes
+ # update self.changeset
+ self.update_changeset(obj.__dict__)
def get_local_changes(self):
- changeset = {}
+ return self.changeset
+
+ def set_changeset(changeset, key, value):
+ if key not in changeset:
+ changeset[key] = set([value])
+ else:
+ changeset[key].add(value)
+ set_changeset = staticmethod(set_changeset)
+
+ def update_changeset(self, new_dict):
+ changeset = self.changeset
for k, v in self.old_dict.iteritems():
- if k not in self.new_dict:
- changeset[k] = (v, NoValue)
- elif self.new_dict[k] != v:
- changeset[k] = (v, self.new_dict[k])
- for k, v in self.new_dict.iteritems():
+ if k not in new_dict:
+ self.set_changeset(changeset, k, "deleted")
+ elif new_dict[k] != v:
+ self.set_changeset(changeset, k, "changed")
+ for k, v in new_dict.iteritems():
if k not in self.old_dict:
- changeset[k] = (NoValue, v)
+ self.set_changeset(changeset, k, "created")
return changeset
Modified: py/dist/py/apigen/tracer/testing/test_docgen.py
==============================================================================
--- py/dist/py/apigen/tracer/testing/test_docgen.py (original)
+++ py/dist/py/apigen/tracer/testing/test_docgen.py Fri Nov 3 11:38:47 2006
@@ -160,8 +160,8 @@
t.end_tracing()
desc = ds.descs['testclass']
methdesc = desc.fields['bar']
- assert methdesc.old_dict != methdesc.new_dict
- assert methdesc.get_local_changes() == {'foo': (0, 1)}
+ #assert methdesc.old_dict != methdesc.new_dict
+ assert methdesc.get_local_changes() == {'foo': set(['changed'])}
def test_local_changes_nochange():
class testclass(object):
@@ -177,4 +177,3 @@
desc = ds.descs['testclass']
methdesc = desc.fields['bar']
assert methdesc.get_local_changes() == {}
-
More information about the pytest-commit
mailing list