~ubuntu-branches/ubuntu/vivid/python-pex/vivid

« back to all changes in this revision

Viewing changes to pex/base.py

  • Committer: Package Import Robot
  • Author(s): Barry Warsaw
  • Date: 2015-02-19 14:13:25 UTC
  • Revision ID: package-import@ubuntu.com-20150219141325-w62bie95l6rawuuv
Tags: upstream-0.8.6
ImportĀ upstreamĀ versionĀ 0.8.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
 
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
 
3
 
 
4
from __future__ import absolute_import
 
5
 
 
6
from collections import Iterable
 
7
 
 
8
from pkg_resources import Requirement
 
9
 
 
10
from .compatibility import string as compatibility_string
 
11
 
 
12
REQUIRED_ATTRIBUTES = (
 
13
    'extras',
 
14
    'key',
 
15
    'project_name',
 
16
    'specs',
 
17
)
 
18
 
 
19
 
 
20
def quacks_like_req(req):
 
21
  return all(hasattr(req, attr) for attr in REQUIRED_ATTRIBUTES)
 
22
 
 
23
 
 
24
def maybe_requirement(req):
 
25
  if isinstance(req, Requirement) or quacks_like_req(req):
 
26
    return req
 
27
  elif isinstance(req, compatibility_string):
 
28
    return Requirement.parse(req)
 
29
  raise ValueError('Unknown requirement %r' % (req,))
 
30
 
 
31
 
 
32
def maybe_requirement_list(reqs):
 
33
  if isinstance(reqs, (compatibility_string, Requirement)) or quacks_like_req(reqs):
 
34
    return [maybe_requirement(reqs)]
 
35
  elif isinstance(reqs, Iterable):
 
36
    return [maybe_requirement(req) for req in reqs]
 
37
  raise ValueError('Unknown requirement list %r' % (reqs,))
 
38
 
 
39
 
 
40
def requirement_is_exact(req):
 
41
  return req.specs and len(req.specs) == 1 and req.specs[0][0] == '=='