Skip to content

Commit

Permalink
Extract extras from fragment's egg when vcs is specified
Browse files Browse the repository at this point in the history
  • Loading branch information
ticosax committed Jul 7, 2017
1 parent 44812d9 commit 01b2f5c
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
7 changes: 7 additions & 0 deletions requirements/fragment.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,10 @@ def get_hash_info(d):
return key, d[key]

return None, None


def parse_extras_require(egg):
if egg is not None and ('[' and ']') in egg:
name, _, extras = egg.partition('[')
return name, [extra.strip() for extra in extras[:-1].split(',')]
return egg, []
16 changes: 11 additions & 5 deletions requirements/requirement.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import re
from pkg_resources import Requirement as Req

from .fragment import get_hash_info, parse_fragment
from .fragment import get_hash_info, parse_fragment, parse_extras_require
from .vcs import VCS, VCS_SCHEMES


Expand Down Expand Up @@ -107,7 +107,8 @@ def parse_editable(cls, line):
req.revision = groups['revision']
if groups['fragment']:
fragment = parse_fragment(groups['fragment'])
req.name = fragment.get('egg')
egg = fragment.get('egg')
req.name, req.extras = parse_extras_require(egg)
req.hash_name, req.hash = get_hash_info(fragment)
for vcs in VCS:
if req.uri.startswith(vcs):
Expand All @@ -118,7 +119,8 @@ def parse_editable(cls, line):
req.local_file = True
if groups['fragment']:
fragment = parse_fragment(groups['fragment'])
req.name = fragment.get('egg')
egg = fragment.get('egg')
req.name, req.extras = parse_extras_require(egg)
req.hash_name, req.hash = get_hash_info(fragment)
req.path = groups['path']

Expand Down Expand Up @@ -148,7 +150,8 @@ def parse_line(cls, line):
req.revision = groups['revision']
if groups['fragment']:
fragment = parse_fragment(groups['fragment'])
req.name = fragment.get('egg')
egg = fragment.get('egg')
req.name, req.extras = parse_extras_require(egg)
req.hash_name, req.hash = get_hash_info(fragment)
for vcs in VCS:
if req.uri.startswith(vcs):
Expand All @@ -158,7 +161,8 @@ def parse_line(cls, line):
req.uri = '{scheme}://{path}'.format(**groups)
if groups['fragment']:
fragment = parse_fragment(groups['fragment'])
req.name = fragment.get('egg')
egg = fragment.get('egg')
req.name, req.extras = parse_extras_require(egg)
req.hash_name, req.hash = get_hash_info(fragment)
if groups['scheme'] == 'file':
req.local_file = True
Expand All @@ -169,6 +173,8 @@ def parse_line(cls, line):
req.local_file = True
if groups['fragment']:
fragment = parse_fragment(groups['fragment'])
egg = fragment.get('egg')
name, extras = parse_extras_require(egg)
req.name = fragment.get('egg')
req.hash_name, req.hash = get_hash_info(fragment)
req.path = groups['path']
Expand Down
17 changes: 17 additions & 0 deletions tests/reqfiles/vcs_git_extras_require.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[
{
"specifier": false,
"local_file": false,
"name": "MyProject",
"editable": false,
"uri": "git+https://git.myproject.org/MyProject.git",
"extras": ["security"],
"vcs": "git",
"path": null,
"line": "git+https://git.myproject.org/[email protected]#egg=MyProject[security]",
"hash_name": null,
"hash": null,
"specs": [],
"revision": "v0.1"
}
]
1 change: 1 addition & 0 deletions tests/reqfiles/vcs_git_extras_require.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
git+https://git.myproject.org/[email protected]#egg=MyProject[security]

0 comments on commit 01b2f5c

Please sign in to comment.