Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: tools/telemetry/third_party/modulegraph/setup.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/telemetry/third_party/modulegraph/setup.cfg ('k') | tools/telemetry/third_party/mox3/.gitignore » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/third_party/modulegraph/setup.py
diff --git a/tools/telemetry/third_party/modulegraph/setup.py b/tools/telemetry/third_party/modulegraph/setup.py
deleted file mode 100644
index a1a4cb6eb261134d55a76db3b4ff2b11be03e7a0..0000000000000000000000000000000000000000
--- a/tools/telemetry/third_party/modulegraph/setup.py
+++ /dev/null
@@ -1,867 +0,0 @@
-"""
-Shared setup file for simple python packages. Uses a setup.cfg that
-is the same as the distutils2 project, unless noted otherwise.
-
-It exists for two reasons:
-1) This makes it easier to reuse setup.py code between my own
- projects
-
-2) Easier migration to distutils2 when that catches on.
-
-Additional functionality:
-
-* Section metadata:
- requires-test: Same as 'tests_require' option for setuptools.
-
-"""
-
-import sys
-import os
-import re
-import platform
-from fnmatch import fnmatch
-import os
-import sys
-import time
-import tempfile
-import tarfile
-try:
- import urllib.request as urllib
-except ImportError:
- import urllib
-from distutils import log
-try:
- from hashlib import md5
-
-except ImportError:
- from md5 import md5
-
-if sys.version_info[0] == 2:
- from ConfigParser import RawConfigParser, NoOptionError, NoSectionError
-else:
- from configparser import RawConfigParser, NoOptionError, NoSectionError
-
-ROOTDIR = os.path.dirname(os.path.abspath(__file__))
-
-
-#
-#
-#
-# Parsing the setup.cfg and converting it to something that can be
-# used by setuptools.setup()
-#
-#
-#
-
-def eval_marker(value):
- """
- Evaluate an distutils2 environment marker.
-
- This code is unsafe when used with hostile setup.cfg files,
- but that's not a problem for our own files.
- """
- value = value.strip()
-
- class M:
- def __init__(self, **kwds):
- for k, v in kwds.items():
- setattr(self, k, v)
-
- variables = {
- 'python_version': '%d.%d'%(sys.version_info[0], sys.version_info[1]),
- 'python_full_version': sys.version.split()[0],
- 'os': M(
- name=os.name,
- ),
- 'sys': M(
- platform=sys.platform,
- ),
- 'platform': M(
- version=platform.version(),
- machine=platform.machine(),
- ),
- }
-
- return bool(eval(value, variables, variables))
-
-
- return True
-
-def _opt_value(cfg, into, section, key, transform = None):
- try:
- v = cfg.get(section, key)
- if transform != _as_lines and ';' in v:
- v, marker = v.rsplit(';', 1)
- if not eval_marker(marker):
- return
-
- v = v.strip()
-
- if v:
- if transform:
- into[key] = transform(v.strip())
- else:
- into[key] = v.strip()
-
- except (NoOptionError, NoSectionError):
- pass
-
-def _as_bool(value):
- if value.lower() in ('y', 'yes', 'on'):
- return True
- elif value.lower() in ('n', 'no', 'off'):
- return False
- elif value.isdigit():
- return bool(int(value))
- else:
- raise ValueError(value)
-
-def _as_list(value):
- return value.split()
-
-def _as_lines(value):
- result = []
- for v in value.splitlines():
- if ';' in v:
- v, marker = v.rsplit(';', 1)
- if not eval_marker(marker):
- continue
-
- v = v.strip()
- if v:
- result.append(v)
- else:
- result.append(v)
- return result
-
-def _map_requirement(value):
- m = re.search(r'(\S+)\s*(?:\((.*)\))?', value)
- name = m.group(1)
- version = m.group(2)
-
- if version is None:
- return name
-
- else:
- mapped = []
- for v in version.split(','):
- v = v.strip()
- if v[0].isdigit():
- # Checks for a specific version prefix
- m = v.rsplit('.', 1)
- mapped.append('>=%s,<%s.%s'%(
- v, m[0], int(m[1])+1))
-
- else:
- mapped.append(v)
- return '%s %s'%(name, ','.join(mapped),)
-
-def _as_requires(value):
- requires = []
- for req in value.splitlines():
- if ';' in req:
- req, marker = v.rsplit(';', 1)
- if not eval_marker(marker):
- continue
- req = req.strip()
-
- if not req:
- continue
- requires.append(_map_requirement(req))
- return requires
-
-def parse_setup_cfg():
- cfg = RawConfigParser()
- r = cfg.read([os.path.join(ROOTDIR, 'setup.cfg')])
- if len(r) != 1:
- print("Cannot read 'setup.cfg'")
- sys.exit(1)
-
- metadata = dict(
- name = cfg.get('metadata', 'name'),
- version = cfg.get('metadata', 'version'),
- description = cfg.get('metadata', 'description'),
- )
-
- _opt_value(cfg, metadata, 'metadata', 'license')
- _opt_value(cfg, metadata, 'metadata', 'maintainer')
- _opt_value(cfg, metadata, 'metadata', 'maintainer_email')
- _opt_value(cfg, metadata, 'metadata', 'author')
- _opt_value(cfg, metadata, 'metadata', 'author_email')
- _opt_value(cfg, metadata, 'metadata', 'url')
- _opt_value(cfg, metadata, 'metadata', 'download_url')
- _opt_value(cfg, metadata, 'metadata', 'classifiers', _as_lines)
- _opt_value(cfg, metadata, 'metadata', 'platforms', _as_list)
- _opt_value(cfg, metadata, 'metadata', 'packages', _as_list)
- _opt_value(cfg, metadata, 'metadata', 'keywords', _as_list)
-
- try:
- v = cfg.get('metadata', 'requires-dist')
-
- except (NoOptionError, NoSectionError):
- pass
-
- else:
- requires = _as_requires(v)
- if requires:
- metadata['install_requires'] = requires
-
- try:
- v = cfg.get('metadata', 'requires-test')
-
- except (NoOptionError, NoSectionError):
- pass
-
- else:
- requires = _as_requires(v)
- if requires:
- metadata['tests_require'] = requires
-
-
- try:
- v = cfg.get('metadata', 'long_description_file')
- except (NoOptionError, NoSectionError):
- pass
-
- else:
- parts = []
- for nm in v.split():
- fp = open(nm, 'rU')
- parts.append(fp.read())
- fp.close()
-
- metadata['long_description'] = '\n\n'.join(parts)
-
-
- try:
- v = cfg.get('metadata', 'zip-safe')
- except (NoOptionError, NoSectionError):
- pass
-
- else:
- metadata['zip_safe'] = _as_bool(v)
-
- try:
- v = cfg.get('metadata', 'console_scripts')
- except (NoOptionError, NoSectionError):
- pass
-
- else:
- if 'entry_points' not in metadata:
- metadata['entry_points'] = {}
-
- metadata['entry_points']['console_scripts'] = v.splitlines()
-
- if sys.version_info[:2] <= (2,6):
- try:
- metadata['tests_require'] += ", unittest2"
- except KeyError:
- metadata['tests_require'] = "unittest2"
-
- return metadata
-
-
-#
-#
-#
-# Bootstrapping setuptools/distribute, based on
-# a heavily modified version of distribute_setup.py
-#
-#
-#
-
-
-SETUPTOOLS_PACKAGE='setuptools'
-
-
-try:
- import subprocess
-
- def _python_cmd(*args):
- args = (sys.executable,) + args
- return subprocess.call(args) == 0
-
-except ImportError:
- def _python_cmd(*args):
- args = (sys.executable,) + args
- new_args = []
- for a in args:
- new_args.append(a.replace("'", "'\"'\"'"))
- os.system(' '.join(new_args)) == 0
-
-
-try:
- import json
-
- def get_pypi_src_download(package):
- url = 'https://pypi.python.org/pypi/%s/json'%(package,)
- fp = urllib.urlopen(url)
- try:
- try:
- data = fp.read()
-
- finally:
- fp.close()
- except urllib.error:
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- pkgdata = json.loads(data.decode('utf-8'))
- if 'urls' not in pkgdata:
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- for info in pkgdata['urls']:
- if info['packagetype'] == 'sdist' and info['url'].endswith('tar.gz'):
- return (info.get('md5_digest'), info['url'])
-
- raise RuntimeError("Cannot determine downlink link for %s"%(package,))
-
-except ImportError:
- # Python 2.5 compatibility, no JSON in stdlib but luckily JSON syntax is
- # simular enough to Python's syntax to be able to abuse the Python compiler
-
- import _ast as ast
-
- def get_pypi_src_download(package):
- url = 'https://pypi.python.org/pypi/%s/json'%(package,)
- fp = urllib.urlopen(url)
- try:
- try:
- data = fp.read()
-
- finally:
- fp.close()
- except urllib.error:
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
-
- a = compile(data, '-', 'eval', ast.PyCF_ONLY_AST)
- if not isinstance(a, ast.Expression):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- a = a.body
- if not isinstance(a, ast.Dict):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- for k, v in zip(a.keys, a.values):
- if not isinstance(k, ast.Str):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- k = k.s
- if k == 'urls':
- a = v
- break
- else:
- raise RuntimeError("PyPI JSON for %s doesn't contain URLs section"%(package,))
-
- if not isinstance(a, ast.List):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- for info in v.elts:
- if not isinstance(info, ast.Dict):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
- url = None
- packagetype = None
- chksum = None
-
- for k, v in zip(info.keys, info.values):
- if not isinstance(k, ast.Str):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
- if k.s == 'url':
- if not isinstance(v, ast.Str):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
- url = v.s
-
- elif k.s == 'packagetype':
- if not isinstance(v, ast.Str):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
- packagetype = v.s
-
- elif k.s == 'md5_digest':
- if not isinstance(v, ast.Str):
- raise RuntimeError("Cannot determine download link for %s"%(package,))
- chksum = v.s
-
- if url is not None and packagetype == 'sdist' and url.endswith('.tar.gz'):
- return (chksum, url)
-
- raise RuntimeError("Cannot determine download link for %s"%(package,))
-
-def _build_egg(egg, tarball, to_dir):
- # extracting the tarball
- tmpdir = tempfile.mkdtemp()
- log.warn('Extracting in %s', tmpdir)
- old_wd = os.getcwd()
- try:
- os.chdir(tmpdir)
- tar = tarfile.open(tarball)
- _extractall(tar)
- tar.close()
-
- # going in the directory
- subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
- os.chdir(subdir)
- log.warn('Now working in %s', subdir)
-
- # building an egg
- log.warn('Building a %s egg in %s', egg, to_dir)
- _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
-
- finally:
- os.chdir(old_wd)
- # returning the result
- log.warn(egg)
- if not os.path.exists(egg):
- raise IOError('Could not build the egg.')
-
-
-def _do_download(to_dir, packagename=SETUPTOOLS_PACKAGE):
- tarball = download_setuptools(packagename, to_dir)
- version = tarball.split('-')[-1][:-7]
- egg = os.path.join(to_dir, '%s-%s-py%d.%d.egg'
- % (packagename, version, sys.version_info[0], sys.version_info[1]))
- if not os.path.exists(egg):
- _build_egg(egg, tarball, to_dir)
- sys.path.insert(0, egg)
- import setuptools
- setuptools.bootstrap_install_from = egg
-
-
-def use_setuptools():
- # making sure we use the absolute path
- return _do_download(os.path.abspath(os.curdir))
-
-def download_setuptools(packagename, to_dir):
- # making sure we use the absolute path
- to_dir = os.path.abspath(to_dir)
- try:
- from urllib.request import urlopen
- except ImportError:
- from urllib2 import urlopen
-
- chksum, url = get_pypi_src_download(packagename)
- tgz_name = os.path.basename(url)
- saveto = os.path.join(to_dir, tgz_name)
-
- src = dst = None
- if not os.path.exists(saveto): # Avoid repeated downloads
- try:
- log.warn("Downloading %s", url)
- src = urlopen(url)
- # Read/write all in one block, so we don't create a corrupt file
- # if the download is interrupted.
- data = src.read()
-
- if chksum is not None:
- data_sum = md5(data).hexdigest()
- if data_sum != chksum:
- raise RuntimeError("Downloading %s failed: corrupt checksum"%(url,))
-
-
- dst = open(saveto, "wb")
- dst.write(data)
- finally:
- if src:
- src.close()
- if dst:
- dst.close()
- return os.path.realpath(saveto)
-
-
-
-def _extractall(self, path=".", members=None):
- """Extract all members from the archive to the current working
- directory and set owner, modification time and permissions on
- directories afterwards. `path' specifies a different directory
- to extract to. `members' is optional and must be a subset of the
- list returned by getmembers().
- """
- import copy
- import operator
- from tarfile import ExtractError
- directories = []
-
- if members is None:
- members = self
-
- for tarinfo in members:
- if tarinfo.isdir():
- # Extract directories with a safe mode.
- directories.append(tarinfo)
- tarinfo = copy.copy(tarinfo)
- tarinfo.mode = 448 # decimal for oct 0700
- self.extract(tarinfo, path)
-
- # Reverse sort directories.
- if sys.version_info < (2, 4):
- def sorter(dir1, dir2):
- return cmp(dir1.name, dir2.name)
- directories.sort(sorter)
- directories.reverse()
- else:
- directories.sort(key=operator.attrgetter('name'), reverse=True)
-
- # Set correct owner, mtime and filemode on directories.
- for tarinfo in directories:
- dirpath = os.path.join(path, tarinfo.name)
- try:
- self.chown(tarinfo, dirpath)
- self.utime(tarinfo, dirpath)
- self.chmod(tarinfo, dirpath)
- except ExtractError:
- e = sys.exc_info()[1]
- if self.errorlevel > 1:
- raise
- else:
- self._dbg(1, "tarfile: %s" % e)
-
-
-#
-#
-#
-# Definitions of custom commands
-#
-#
-#
-
-try:
- import setuptools
-
-except ImportError:
- use_setuptools()
-
-from setuptools import setup
-
-try:
- from distutils.core import PyPIRCCommand
-except ImportError:
- PyPIRCCommand = None # Ancient python version
-
-from distutils.core import Command
-from distutils.errors import DistutilsError
-from distutils import log
-
-if PyPIRCCommand is None:
- class upload_docs (Command):
- description = "upload sphinx documentation"
- user_options = []
-
- def initialize_options(self):
- pass
-
- def finalize_options(self):
- pass
-
- def run(self):
- raise DistutilsError("not supported on this version of python")
-
-else:
- class upload_docs (PyPIRCCommand):
- description = "upload sphinx documentation"
- user_options = PyPIRCCommand.user_options
-
- def initialize_options(self):
- PyPIRCCommand.initialize_options(self)
- self.username = ''
- self.password = ''
-
-
- def finalize_options(self):
- PyPIRCCommand.finalize_options(self)
- config = self._read_pypirc()
- if config != {}:
- self.username = config['username']
- self.password = config['password']
-
-
- def run(self):
- import subprocess
- import shutil
- import zipfile
- import os
- import urllib
- import StringIO
- from base64 import standard_b64encode
- import httplib
- import urlparse
-
- # Extract the package name from distutils metadata
- meta = self.distribution.metadata
- name = meta.get_name()
-
- # Run sphinx
- if os.path.exists('doc/_build'):
- shutil.rmtree('doc/_build')
- os.mkdir('doc/_build')
-
- p = subprocess.Popen(['make', 'html'],
- cwd='doc')
- exit = p.wait()
- if exit != 0:
- raise DistutilsError("sphinx-build failed")
-
- # Collect sphinx output
- if not os.path.exists('dist'):
- os.mkdir('dist')
- zf = zipfile.ZipFile('dist/%s-docs.zip'%(name,), 'w',
- compression=zipfile.ZIP_DEFLATED)
-
- for toplevel, dirs, files in os.walk('doc/_build/html'):
- for fn in files:
- fullname = os.path.join(toplevel, fn)
- relname = os.path.relpath(fullname, 'doc/_build/html')
-
- print ("%s -> %s"%(fullname, relname))
-
- zf.write(fullname, relname)
-
- zf.close()
-
- # Upload the results, this code is based on the distutils
- # 'upload' command.
- content = open('dist/%s-docs.zip'%(name,), 'rb').read()
-
- data = {
- ':action': 'doc_upload',
- 'name': name,
- 'content': ('%s-docs.zip'%(name,), content),
- }
- auth = "Basic " + standard_b64encode(self.username + ":" +
- self.password)
-
-
- boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
- sep_boundary = '\n--' + boundary
- end_boundary = sep_boundary + '--'
- body = StringIO.StringIO()
- for key, value in data.items():
- if not isinstance(value, list):
- value = [value]
-
- for value in value:
- if isinstance(value, tuple):
- fn = ';filename="%s"'%(value[0])
- value = value[1]
- else:
- fn = ''
-
- body.write(sep_boundary)
- body.write('\nContent-Disposition: form-data; name="%s"'%key)
- body.write(fn)
- body.write("\n\n")
- body.write(value)
-
- body.write(end_boundary)
- body.write('\n')
- body = body.getvalue()
-
- self.announce("Uploading documentation to %s"%(self.repository,), log.INFO)
-
- schema, netloc, url, params, query, fragments = \
- urlparse.urlparse(self.repository)
-
-
- if schema == 'http':
- http = httplib.HTTPConnection(netloc)
- elif schema == 'https':
- http = httplib.HTTPSConnection(netloc)
- else:
- raise AssertionError("unsupported schema "+schema)
-
- data = ''
- loglevel = log.INFO
- try:
- http.connect()
- http.putrequest("POST", url)
- http.putheader('Content-type',
- 'multipart/form-data; boundary=%s'%boundary)
- http.putheader('Content-length', str(len(body)))
- http.putheader('Authorization', auth)
- http.endheaders()
- http.send(body)
- except socket.error:
- e = socket.exc_info()[1]
- self.announce(str(e), log.ERROR)
- return
-
- r = http.getresponse()
- if r.status in (200, 301):
- self.announce('Upload succeeded (%s): %s' % (r.status, r.reason),
- log.INFO)
- else:
- self.announce('Upload failed (%s): %s' % (r.status, r.reason),
- log.ERROR)
-
- print ('-'*75)
- print (r.read())
- print ('-'*75)
-
-
-def recursiveGlob(root, pathPattern):
- """
- Recursively look for files matching 'pathPattern'. Return a list
- of matching files/directories.
- """
- result = []
-
- for rootpath, dirnames, filenames in os.walk(root):
- for fn in filenames:
- if fnmatch(fn, pathPattern):
- result.append(os.path.join(rootpath, fn))
- return result
-
-
-def importExternalTestCases(unittest,
- pathPattern="test_*.py", root=".", package=None):
- """
- Import all unittests in the PyObjC tree starting at 'root'
- """
-
- testFiles = recursiveGlob(root, pathPattern)
- testModules = map(lambda x:x[len(root)+1:-3].replace('/', '.'), testFiles)
- if package is not None:
- testModules = [(package + '.' + m) for m in testModules]
-
- suites = []
-
- for modName in testModules:
- try:
- module = __import__(modName)
- except ImportError:
- print("SKIP %s: %s"%(modName, sys.exc_info()[1]))
- continue
-
- if '.' in modName:
- for elem in modName.split('.')[1:]:
- module = getattr(module, elem)
-
- s = unittest.defaultTestLoader.loadTestsFromModule(module)
- suites.append(s)
-
- return unittest.TestSuite(suites)
-
-
-
-class test (Command):
- description = "run test suite"
- user_options = [
- ('verbosity=', None, "print what tests are run"),
- ]
-
- def initialize_options(self):
- self.verbosity='1'
-
- def finalize_options(self):
- if isinstance(self.verbosity, str):
- self.verbosity = int(self.verbosity)
-
-
- def cleanup_environment(self):
- ei_cmd = self.get_finalized_command('egg_info')
- egg_name = ei_cmd.egg_name.replace('-', '_')
-
- to_remove = []
- for dirname in sys.path:
- bn = os.path.basename(dirname)
- if bn.startswith(egg_name + "-"):
- to_remove.append(dirname)
-
- for dirname in to_remove:
- log.info("removing installed %r from sys.path before testing"%(
- dirname,))
- sys.path.remove(dirname)
-
- def add_project_to_sys_path(self):
- from pkg_resources import normalize_path, add_activation_listener
- from pkg_resources import working_set, require
-
- self.reinitialize_command('egg_info')
- self.run_command('egg_info')
- self.reinitialize_command('build_ext', inplace=1)
- self.run_command('build_ext')
-
-
- # Check if this distribution is already on sys.path
- # and remove that version, this ensures that the right
- # copy of the package gets tested.
-
- self.__old_path = sys.path[:]
- self.__old_modules = sys.modules.copy()
-
-
- ei_cmd = self.get_finalized_command('egg_info')
- sys.path.insert(0, normalize_path(ei_cmd.egg_base))
- sys.path.insert(1, os.path.dirname(__file__))
-
- # Strip the namespace packages defined in this distribution
- # from sys.modules, needed to reset the search path for
- # those modules.
-
- nspkgs = getattr(self.distribution, 'namespace_packages')
- if nspkgs is not None:
- for nm in nspkgs:
- del sys.modules[nm]
-
- # Reset pkg_resources state:
- add_activation_listener(lambda dist: dist.activate())
- working_set.__init__()
- require('%s==%s'%(ei_cmd.egg_name, ei_cmd.egg_version))
-
- def remove_from_sys_path(self):
- from pkg_resources import working_set
- sys.path[:] = self.__old_path
- sys.modules.clear()
- sys.modules.update(self.__old_modules)
- working_set.__init__()
-
-
- def run(self):
- import unittest
-
- # Ensure that build directory is on sys.path (py3k)
-
- self.cleanup_environment()
- self.add_project_to_sys_path()
-
- try:
- meta = self.distribution.metadata
- name = meta.get_name()
- test_pkg = name + "_tests"
- suite = importExternalTestCases(unittest,
- "test_*.py", test_pkg, test_pkg)
-
- runner = unittest.TextTestRunner(verbosity=self.verbosity)
- result = runner.run(suite)
-
- # Print out summary. This is a structured format that
- # should make it easy to use this information in scripts.
- summary = dict(
- count=result.testsRun,
- fails=len(result.failures),
- errors=len(result.errors),
- xfails=len(getattr(result, 'expectedFailures', [])),
- xpass=len(getattr(result, 'expectedSuccesses', [])),
- skip=len(getattr(result, 'skipped', [])),
- )
- print("SUMMARY: %s"%(summary,))
-
- finally:
- self.remove_from_sys_path()
-
-#
-#
-#
-# And finally run the setuptools main entry point.
-#
-#
-#
-
-metadata = parse_setup_cfg()
-
-setup(
- cmdclass=dict(
- upload_docs=upload_docs,
- test=test,
- ),
- **metadata
-)
« no previous file with comments | « tools/telemetry/third_party/modulegraph/setup.cfg ('k') | tools/telemetry/third_party/mox3/.gitignore » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698