[pypy-commit] pypy default: Delete obsolete code
rlamy
pypy.commits at gmail.com
Sun Apr 15 10:33:02 EDT 2018
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch:
Changeset: r94335:5c8076e87315
Date: 2018-04-15 15:32 +0100
http://bitbucket.org/pypy/pypy/changeset/5c8076e87315/
Log: Delete obsolete code
diff --git a/pypy/tool/pytest/genreportdata.py b/pypy/tool/pytest/genreportdata.py
deleted file mode 100755
--- a/pypy/tool/pytest/genreportdata.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /usr/bin/env python
-import py
-import sys
-
-mydir = py.path.local(__file__).dirpath().realpath()
-from pypy.tool.pytest import htmlreport
-from pypy.tool.pytest import confpath
-
-if __name__ == '__main__':
- if len(sys.argv) > 1:
- testresultdir = py.path.local(sys.argv[1])
- assert testresultdir.check(dir=1)
- else:
- testresultdir = confpath.testresultdir
- assert testresultdir.check(dir=1)
- try:
- resultwc = py.path.svnwc(testresultdir)
- print "updating", resultwc
- resultwc.update()
- except (KeyboardInterrupt, RuntimeError):
- raise
- except Exception as e: #py.process.ExecutionFailed,e:
- print >> sys.stderr, "Warning: ",e #Subversion update failed"
-
- print "traversing", mydir
- rep = htmlreport.HtmlReport(testresultdir)
- rep.parselatest()
-
- print "making html files"
- rep.makeindex(testresultdir.join('index.html'))
diff --git a/pypy/tool/pytest/htmlreport.py b/pypy/tool/pytest/htmlreport.py
deleted file mode 100644
--- a/pypy/tool/pytest/htmlreport.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#! /usr/bin/env python
-
-"""
-the html test reporter
-
-"""
-import sys, os, re
-import pprint
-import py
-from pypy.tool.pytest import result
-from pypy.tool.pytest.overview import ResultCache
-
-#
-# various interesting path objects
-#
-
-html = py.xml.html
-NBSP = py.xml.raw(" ")
-
-class HtmlReport(object):
- def __init__(self, resultdir):
- self.resultcache = ResultCache(resultdir)
-
- def parselatest(self):
- self.resultcache.parselatest()
-
- #
- # rendering
- #
-
- def render_latest_table(self, results):
- table = html.table(
- [html.th(x, align='left')
- for x in ("failure", "filename", "revision",
- "user", "platform", "elapsed",
- "options", "last error line"
- )],
- )
- r = results[:]
- def f(x, y):
- xnum = x.isok() and 1 or (x.istimeout() and 2 or 3)
- ynum = y.isok() and 1 or (y.istimeout() and 2 or 3)
- res = -cmp(xnum, ynum)
- if res == 0:
- return cmp(x['execution-time'], y['execution-time'])
- return res
- r.sort(f)
- for result in r:
- table.append(self.render_result_row(result))
- return table
-
- def render_result_row(self, result):
- dp = py.path.local(result['fspath'])
-
- options = " ".join([x for x in result.get('options', []) if x!= 'core'])
- if not options:
- options = NBSP
-
- failureratio = 100 * (1.0 - result.ratio_of_passed())
- self.data[result.testname] = failureratio
- return html.tr(
- html.td("%.2f%%" % failureratio,
- style = "background-color: %s" % (getresultcolor(result),)),
- html.td(self.render_test_references(result)),
- html.td(result['pypy-revision']),
- html.td(result['userhost'][:15]),
- html.td(result['platform']),
- html.td("%.2fs" % result['execution-time']),
- html.td(options),
- html.td(result.repr_short_error() or NBSP)
- )
-
- def getrelpath(self, p):
- return p.relto(self.indexpath.dirpath())
-
- def render_test_references(self, result):
- dest = self.make_single_test_result(result)
- #XXX: ask hg for differences between test and vendor branch
- modified = result.ismodifiedtest() and " [mod]" or ""
- return html.div(html.a(result.path.purebasename + modified,
- href=self.getrelpath(dest)),
- style="background-color: transparent")
-
- def make_single_test_result(self, result):
- cache = self.indexpath.dirpath('.cache', result['userhost'][:15])
- cache.ensure(dir=1)
- dest = cache.join(result.path.basename).new(ext='.html')
- doc = ViewResult(result)
- doc.writetopath(dest)
- return dest
-
- def getcorelists(self):
- def iscore(result):
- return 'core' in result.get('options', [])
- coretests = []
- noncoretests = []
- for name in self.resultcache.getnames():
- result = self.resultcache.getlatestrelevant(name)
- if iscore(result):
- coretests.append(result)
- else:
- noncoretests.append(result)
- return coretests, noncoretests
-
- # generate html files
- #
- def makeindex(self, indexpath, detail="PyPy - latest"):
- self.indexpath = indexpath
- self.data = {}
- doc = Document(title='pypy test results')
- body = doc.body
- coretests, noncoretests = self.getcorelists()
- body.append(html.h2("%s compliance test results - "
- "core tests" % detail))
-
- body.append(self.render_test_summary('core', coretests))
- body.append(self.render_latest_table(coretests))
- body.append(
- html.h2("%s compliance test results - non-core tests" % detail))
- body.append(self.render_test_summary('noncore', noncoretests))
- body.append(self.render_latest_table(noncoretests))
- doc.writetopath(indexpath)
- datapath = indexpath.dirpath().join('data')
- d = datapath.open('w')
- print >>d, "data = ",
- pprint.pprint(self.data, stream=d)
- d.close()
- self.data = None
-
- def render_test_summary(self, tag, tests):
- ok = len([x for x in tests if x.isok()])
- err = len([x for x in tests if x.iserror()])
- to = len([x for x in tests if x.istimeout()])
- numtests = ok + err + to
- assert numtests == len(tests)
- assert numtests
-
- t = html.table()
- sum100 = numtests / 100.0
- def row(*args):
- return html.tr(*[html.td(arg) for arg in args])
-
- sum_passed = sum([x.ratio_of_passed() for x in tests])
- compliancy = sum_passed/sum100
- self.data['%s-compliancy' % tag] = compliancy
- t.append(row(html.b("tests compliancy"),
- html.b("%.2f%%" % (compliancy,))))
-
- passed = ok/sum100
- self.data['%s-passed' % tag] = passed
- t.append(row("testmodules passed completely", "%.2f%%" % passed))
- failed = err/sum100
- self.data['%s-failed' % tag] = failed
- t.append(row("testmodules (partially) failed", "%.2f%%" % failed))
- timedout = to/sum100
- self.data['%s-timedout' % tag] = timedout
- t.append(row("testmodules timeout", "%.2f%%" % timedout))
- return t
-
-class Document(object):
- def __init__(self, title=None):
- self.body = html.body()
- self.head = html.head()
- self.doc = html.html(self.head, self.body)
- if title is not None:
- self.head.append(
- html.meta(name="title", content=title))
- self.head.append(
- html.link(rel="Stylesheet", type="text/css", href="/pypy/default.css"))
-
- def writetopath(self, p):
- assert p.ext == '.html'
- self.head.append(
- html.meta(name="Content-Type", content="text/html;charset=UTF-8")
- )
- s = self.doc.unicode().encode('utf-8')
- p.write(s)
-
-def getresultcolor(result):
- if result.isok():
- color = "#00ee00"
- elif result.iserror():
- color = "#ee0000"
- elif result.istimeout:
- color = "#0000ee"
- else:
- color = "#444444"
- return color
-
-class ViewResult(Document):
- def __init__(self, result):
- title = "%s testresult" % (result.path.purebasename,)
- super(ViewResult, self).__init__(title=title)
- color = getresultcolor(result)
- self.body.append(html.h2(title,
- style="background-color: %s" % color))
- self.body.append(self.render_meta_info(result))
-
- for name in ('reportdiff', 'stdout', 'stderr'):
- try:
- text = result.getnamedtext(name)
- except KeyError:
- continue
- self.body.append(html.h3(name))
- self.body.append(html.pre(text))
-
- def render_meta_info(self, result):
- t = html.table()
- items = result.items()
- items.sort()
- for name, value in items:
- if name.lower() == name:
- t.append(html.tr(
- html.td(name), html.td(value)))
- return t
-
-class TestOfHtmlReportClass:
- def setup_class(cls):
- py.test.skip('needs move to own test file')
- cls.testresultdir = confpath.testresultdir
- cls.rep = rep = HtmlReport()
- rep.parse_all(cls.testresultdir)
-
- def test_pickling(self):
- # test pickling of report
- tempdir = py.test.ensuretemp('reportpickle')
- picklepath = tempdir.join('report.pickle')
- picklepath.dump(self.rep)
- x = picklepath.load()
- assert len(x.results) == len(self.rep.results)
-
- def test_render_latest(self):
- t = self.rep.render_latest_table(self.rep.results)
- assert unicode(t)
-
-mydir = py.path.local(__file__).dirpath()
-
-def getpicklepath():
- return mydir.join('.htmlreport.pickle')
diff --git a/pypy/tool/pytest/overview.py b/pypy/tool/pytest/overview.py
deleted file mode 100644
--- a/pypy/tool/pytest/overview.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from pypy.tool.pytest import result
-import sys
-
-class ResultCache:
- def __init__(self, resultdir):
- self.resultdir = resultdir
- self.name2result = {}
-
- def parselatest(self):
- def filefilter(p):
- return p.check(fnmatch='test_*.txt', file=1)
- def rec(p):
- return p.check(dotfile=0)
- for x in self.resultdir.visit(filefilter, rec):
- self.parse_one(x)
-
- def parse_one(self, resultpath):
- try:
- res = result.ResultFromMime(resultpath)
- ver = res['testreport-version']
- if ver != "1.1" and ver != "1.1.1":
- raise TypeError
- except TypeError: # xxx
- print >>sys.stderr, "could not parse %s" % resultpath
- return
- name = res.testname
- print name
- self.name2result.setdefault(name, []).append(res)
- return res
-
- def getnames(self):
- return self.name2result.keys()
-
- def getlatest(self, name, timeout=0, error=0, ok=0):
- l = []
- resultlist = self.name2result[name]
- maxrev = 0
- maxresult = None
- for res in resultlist:
- resrev = res['pypy-revision']
- if resrev == 'unknown':
- continue
- if resrev <= maxrev:
- continue
- if timeout or error or ok:
- if not (timeout and res.istimeout() or
- error and res.iserror() or
- ok and res.isok()):
- continue
- maxrev = resrev
- maxresult = res
- return maxresult
-
- def getlatestrelevant(self, name):
- # get the latest revision that did not time out.
- return self.getlatest(name, error=1, ok=1) or self.getlatest(name)
diff --git a/pypy/tool/pytest/result.py b/pypy/tool/pytest/result.py
deleted file mode 100644
--- a/pypy/tool/pytest/result.py
+++ /dev/null
@@ -1,215 +0,0 @@
-import sys
-import py
-import re
-
-class Result(object):
- def __init__(self, init=True):
- self._headers = {}
- self._blocks = {}
- self._blocknames = []
- if init:
- stdinit(self)
-
- def __setitem__(self, name, value):
- self._headers[name.lower()] = value
-
- def __getitem__(self, name):
- return self._headers[name.lower()]
-
- def get(self, name, default):
- return self._headers.get(name, default)
-
- def __delitem__(self, name):
- del self._headers[name.lower()]
-
- def items(self):
- return self._headers.items()
-
- def addnamedtext(self, name, text):
- assert isinstance(text, basestring)
- assert isinstance(name, str)
- self._blocknames.append(name)
- self._blocks[name] = text
-
- def getnamedtext(self, name):
- return self._blocks[name]
-
- def repr_short_error(self):
- if not self.isok():
- if 'reportdiff' in self._blocks:
- return "output comparison failed, see reportdiff"
- else:
- text = self.getnamedtext('stderr')
- lines = text.strip().split('\n')
- if lines:
- return lines[-1]
-
- def repr_mimemessage(self):
- from email.MIMEMultipart import MIMEMultipart
- from email.MIMEText import MIMEText
-
- outer = MIMEMultipart()
- items = self._headers.items()
- items.sort()
- reprs = {}
- for name, value in items:
- assert ':' not in name
- chars = map(ord, name)
- assert min(chars) >= 33 and max(chars) <= 126
- outer[name] = str(value)
- if not isinstance(value, str):
- typename = type(value).__name__
- assert typename in vars(py.std.__builtin__)
- reprs[name] = typename
-
- outer['_reprs'] = repr(reprs)
-
- for name in self._blocknames:
- text = self._blocks[name]
- m = MIMEText(text)
- m.add_header('Content-Disposition', 'attachment', filename=name)
- outer.attach(m)
- return outer
-
- def grep_nr(self,text,section='stdout'):
- stdout = self._blocks[section]
- find = re.search('%s(?P<nr>\d+)'%text,stdout)
- if find:
- return float(find.group('nr'))
- return 0.
-
- def ratio_of_passed(self):
- if self.isok():
- return 1.
- elif self.istimeout():
- return 0.
- else:
- nr = self.grep_nr('Ran ')
- if nr > 0:
- return (nr - (self.grep_nr('errors=') + self.grep_nr('failures=')))/nr
- else:
- passed = self.grep_nr('TestFailed: ',section='stderr')
- run = self.grep_nr('TestFailed: \d+/',section='stderr')
- if run > 0:
- return passed/run
- else:
- run = self.grep_nr('TestFailed: \d+ of ',section='stderr')
- if run > 0 :
- return (run-passed)/run
- else:
- return 0.0
-
- def isok(self):
- return self['outcome'].lower() == 'ok'
-
- def iserror(self):
- return self['outcome'].lower()[:3] == 'err' or self['outcome'].lower() == 'fail'
-
- def istimeout(self):
- return self['outcome'].lower() == 't/o'
-
-# XXX backward compatibility
-def sanitize(msg, path):
- if 'exit-status' in msg.keys():
- return msg
- f = open(str(path), 'r')
- msg = f.read()
- f.close()
- for broken in ('exit status', 'cpu model', 'cpu mhz'):
- valid = broken.replace(' ','-')
- invalid = msg.find(broken+':')
- msg = (msg[:invalid] + valid +
- msg[invalid+len(valid):])
- from email import message_from_string
- msg = message_from_string(msg)
- return msg
-
-def sanitize_reprs(reprs):
- if 'exit status' in reprs:
- reprs['exit-status'] = reprs.pop('exit status')
-
-class ResultFromMime(Result):
- def __init__(self, path):
- super(ResultFromMime, self).__init__(init=False)
- f = open(str(path), 'r')
- from email import message_from_file
- msg = message_from_file(f)
- f.close()
- msg = sanitize(msg, path)
- # XXX security wise evil (keep in mind once we accept reporsts
- # from anonymous
- #print msg['_reprs']
- self._reprs = eval(msg['_reprs'])
- del msg['_reprs']
- sanitize_reprs(self._reprs)
- for name, value in msg.items():
- if name in self._reprs:
- value = eval(value) # XXX security
- self._headers[name] = value
- self.fspath = self['fspath']
- if self['platform'] == 'win32' and '\\' in self.fspath:
- self.testname = self.fspath.split('\\')[-1]
- else:
- self.testname = self.fspath.split('/')[-1]
- #if sys.platform != 'win32' and '\\' in self.fspath:
- # self.fspath = py.path.local(self['fspath'].replace('\\'
- self.path = path
-
- payload = msg.get_payload()
- if payload:
- for submsg in payload:
- assert submsg.get_content_type() == 'text/plain'
- fn = submsg.get_filename()
- assert fn
- # XXX we need to deal better with encodings to
- # begin with
- content = submsg.get_payload()
- for candidate in 'utf8', 'latin1':
- try:
- text = unicode(content, candidate)
- except UnicodeDecodeError:
- continue
- else:
- unicode(content, candidate)
- self.addnamedtext(fn, text)
-
- def ismodifiedtest(self):
- # XXX we need proper cross-platform paths!
- return 'modified' in self.fspath
-
- def __repr__(self):
- return '<%s (%s) %r rev=%s>' %(self.__class__.__name__,
- self['outcome'],
- self.fspath,
- self['pypy-revision'])
-
-def stdinit(result):
- import getpass
- import socket
- try:
- username = getpass.getuser()
- except:
- username = 'unknown'
- userhost = '%s@%s' % (username, socket.gethostname())
- result['testreport-version'] = "1.1.1"
- result['userhost'] = userhost
- result['platform'] = sys.platform
- result['python-version-info'] = sys.version_info
- info = try_getcpuinfo()
- if info is not None:
- result['cpu-model'] = info.get('model name', "unknown")
- result['cpu-mhz'] = info.get('cpu mhz', 'unknown')
-#
-#
-#
-def try_getcpuinfo():
- if sys.platform.startswith('linux'):
- cpuinfopath = py.path.local('/proc/cpuinfo')
- if cpuinfopath.check(file=1):
- d = {}
- for line in cpuinfopath.readlines():
- if line.strip():
- name, value = line.split(':', 1)
- name = name.strip().lower()
- d[name] = value.strip()
- return d
diff --git a/pypy/tool/pytest/test/test_new_count.py b/pypy/tool/pytest/test/test_new_count.py
deleted file mode 100644
--- a/pypy/tool/pytest/test/test_new_count.py
+++ /dev/null
@@ -1,32 +0,0 @@
-
-import py
-#from pypy.tool.pytest.confpath import testresultdir
-from pypy.tool.pytest.result import ResultFromMime
-testpath = py.path.local(__file__).dirpath('data')
-
-class TestResultCache:
-
- def test_timeout(self):
- test = ResultFromMime(testpath.join('test___all__.txt'))
- assert test.ratio_of_passed() == 0.
-
- def test_passed(self):
- test = ResultFromMime(testpath.join('test_sys.txt'))
- assert test.ratio_of_passed() == 1.
-
- def test_unittest_partial(self):
- test = ResultFromMime(testpath.join('test_compile.txt'))
- assert test.ratio_of_passed() == 10./15
-
- def test_doctest_of(self):
- test = ResultFromMime(testpath.join('test_generators.txt'))
- assert test.ratio_of_passed() == 133./154
-
- def test_doctest_slash(self):
- test = ResultFromMime(testpath.join('test_descr.txt'))
- assert test.ratio_of_passed() == 65./92
-
- def test_fail(self):
- test = ResultFromMime(testpath.join('test_global.txt'))
- assert test.ratio_of_passed() == 0.
-
diff --git a/pypy/tool/pytest/test/test_overview.py b/pypy/tool/pytest/test/test_overview.py
deleted file mode 100644
--- a/pypy/tool/pytest/test/test_overview.py
+++ /dev/null
@@ -1,23 +0,0 @@
-
-import py
-from pypy.tool.pytest.confpath import testresultdir
-from pypy.tool.pytest.overview import ResultCache
-
-class TestResultCache:
- def setup_class(cls):
- if not testresultdir.check(dir=1):
- py.test.skip("testresult directory not checked out")
- cls.rc = ResultCache(testresultdir)
- cls.rc.parselatest()
-
- def test_getlatest_all(self):
- for type in 'error', 'timeout', 'ok':
- for name in self.rc.getnames():
- result = self.rc.getlatest(name, **{type:1})
- if result:
- meth = getattr(result, 'is'+type)
- assert meth()
-
- #def test_getlatest_datetime(self):
- # result = self.rc.getlatest('test_datetime', ok=1)
- # assert result
More information about the pypy-commit
mailing list