You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
# Copyright 2014 The Chromium Authors. All rights reserved.
 | 
						|
# Use of this source code is governed by a BSD-style license that can be
 | 
						|
# found in the LICENSE file.
 | 
						|
 | 
						|
import ast
 | 
						|
import contextlib
 | 
						|
import os
 | 
						|
import platform
 | 
						|
import shutil
 | 
						|
import sys
 | 
						|
import tempfile
 | 
						|
 | 
						|
 | 
						|
ROOT = os.path.dirname(os.path.abspath(__file__))
 | 
						|
WHEELHOUSE = os.path.join(ROOT, 'wheelhouse')
 | 
						|
 | 
						|
BUCKET = 'chrome-python-wheelhouse'
 | 
						|
STORAGE_URL = 'https://www.googleapis.com/storage/v1/b/{}/o'.format(BUCKET)
 | 
						|
OBJECT_URL = 'https://storage.googleapis.com/{}/{{}}#md5={{}}'.format(BUCKET)
 | 
						|
LOCAL_OBJECT_URL = 'file://{}'
 | 
						|
 | 
						|
LOCAL_STORAGE_PATH = os.path.join(ROOT, 'wheelhouse_cache')
 | 
						|
 | 
						|
SOURCE_URL = 'gs://{}/sources/{{}}'.format(BUCKET)
 | 
						|
WHEELS_URL = 'gs://{}/wheels/'.format(BUCKET)
 | 
						|
 | 
						|
 | 
						|
class DepsConflictException(Exception):
 | 
						|
  def __init__(self, name):
 | 
						|
    super(DepsConflictException, self).__init__(
 | 
						|
        'Package \'%s\' is defined twice in deps.pyl' % name)
 | 
						|
 | 
						|
 | 
						|
def platform_tag():
 | 
						|
  if sys.platform.startswith('linux'):
 | 
						|
    return '_{0}_{1}'.format(*platform.linux_distribution())
 | 
						|
  return ''
 | 
						|
 | 
						|
 | 
						|
def print_deps(deps, indent=1, with_implicit=True):
 | 
						|
  for dep, entry in deps.iteritems():
 | 
						|
    if not with_implicit and entry.get('implicit'):
 | 
						|
      continue
 | 
						|
    print '  ' * indent + '%s: %r' % (dep, entry)
 | 
						|
  print
 | 
						|
 | 
						|
 | 
						|
@contextlib.contextmanager
 | 
						|
def tempdir(*args, **kwargs):
 | 
						|
  tdir = None
 | 
						|
  try:
 | 
						|
    tdir = tempfile.mkdtemp(*args, **kwargs)
 | 
						|
    yield tdir
 | 
						|
  finally:
 | 
						|
    if tdir:
 | 
						|
      shutil.rmtree(tdir, ignore_errors=True)
 | 
						|
 | 
						|
 | 
						|
@contextlib.contextmanager
 | 
						|
def tempname(*args, **kwargs):
 | 
						|
  tmp = None
 | 
						|
  try:
 | 
						|
    tmp = tempfile.mktemp(*args, **kwargs)
 | 
						|
    yield tmp
 | 
						|
  finally:
 | 
						|
    if tmp:
 | 
						|
      try:
 | 
						|
        os.unlink(tmp)
 | 
						|
      except OSError:
 | 
						|
        pass
 | 
						|
 | 
						|
 | 
						|
def read_deps(path):
 | 
						|
  if os.path.exists(path):
 | 
						|
    with open(path, 'rb') as f:
 | 
						|
      return ast.literal_eval(f.read())
 | 
						|
 | 
						|
 | 
						|
def merge_deps(paths):
 | 
						|
  deps = {}
 | 
						|
  for path in paths:
 | 
						|
    d = read_deps(path)
 | 
						|
    for key in d:
 | 
						|
      if key in deps:
 | 
						|
        raise DepsConflictException(key)
 | 
						|
    deps.update(d)
 | 
						|
  return deps
 |