From 0049aad28cd8e9325e85482f9b010dd8f84ebf4a Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sat, 21 Jan 2017 14:37:15 -0500 Subject: [PATCH] refactor --- pipenv/__init__.py | 2 +- pipenv/{core.py => cli.py} | 83 ++------------------------------------ pipenv/utils.py | 81 +++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 81 deletions(-) rename pipenv/{core.py => cli.py} (82%) create mode 100644 pipenv/utils.py diff --git a/pipenv/__init__.py b/pipenv/__init__.py index a8ce586c..1e696b31 100644 --- a/pipenv/__init__.py +++ b/pipenv/__init__.py @@ -1 +1 @@ -from .core import * \ No newline at end of file +from .cli import cli \ No newline at end of file diff --git a/pipenv/core.py b/pipenv/cli.py similarity index 82% rename from pipenv/core.py rename to pipenv/cli.py index aa367017..3439ed94 100644 --- a/pipenv/core.py +++ b/pipenv/cli.py @@ -11,6 +11,8 @@ import toml import _pipfile as pipfile from .project import Project +from .utils import format_toml, multi_split +from .utils import convert_deps_from_pip, convert_deps_to_pip __version__ = '0.1.4' @@ -30,85 +32,6 @@ def ensure_latest_pip(): click.echo(crayons.blue(c.out)) -def format_toml(data): - """Pretty-formats a given toml string.""" - data = data.split('\n') - for i, line in enumerate(data): - if i > 0: - if line.startswith('['): - data[i] = '\n{}'.format(line) - - return '\n'.join(data) - - - -def multi_split(s, split): - """Splits on multiple given seperators.""" - for r in split: - s = s.replace(r, '|') - - return [i for i in s.split('|') if len(i) > 0] - - -def convert_deps_from_pip(dep): - """"Converts a pip-formatted dependency to a Pipfile-formatted one.""" - dependency = {} - - # Comparison operators: e.g. Django>1.10 - if '=' in dep or '<' in dep or '>' in dep: - r = multi_split(dep, '=<>') - dependency[r[0]] = dep[len(r[0]):] - - # Extras: e.g. requests[socks] - elif '[' in dep: - r = multi_split(dep, '[]') - dependency[r[0]] = {'extras': r[1].split(',')} - - # TODO: Editable installs. - # if dep.startswith('-e'): - - # Bare dependencies: e.g. requests - else: - dependency[dep] = '*' - - return dependency - - -def convert_deps_to_pip(deps): - """"Converts a Pipfile-formatteddependency to a pip-formatted one.""" - dependencies = [] - - for dep in deps.keys(): - # Default (e.g. '>1.10'). - extra = deps[dep] - - # Get rid of '*'. - if deps[dep] == '*' or str(extra) == '{}': - extra = '' - - # Support for extras (e.g. requests[socks]) - if 'extras' in deps[dep]: - extra = '[{}]'.format(deps[dep]['extras'][0]) - - # Support for git. - if 'git' in deps[dep]: - extra = 'git+{}'.format(deps[dep]['git']) - - # Support for @refs. - if 'ref' in deps[dep]: - extra += '@{}'.format(deps[dep]['ref']) - - # Support for editable. - if 'editable' in deps[dep]: - # Support for --egg. - extra += ' --egg={}'.format(dep) - dep = '-e ' - - dependencies.append('{}{}'.format(dep, extra)) - - return dependencies - - def do_where(virtualenv=False, bare=True): """Executes the where functionality.""" @@ -215,7 +138,7 @@ def activate_virtualenv(source=True): def do_activate_virtualenv(bare=False): """Executes the activate virtualenv functionality.""" if not bare: - click.echo('To activate this project\'s virtualenv, run the following:\n $ {}'.format(crayons.red(activate_virtualenv()))) + click.echo('To activate this project\'s virtualenv, run the following:\n $ {}'.format(crayons.red('pipenv shell'))) else: click.echo(activate_virtualenv()) diff --git a/pipenv/utils.py b/pipenv/utils.py new file mode 100644 index 00000000..25dbd8e9 --- /dev/null +++ b/pipenv/utils.py @@ -0,0 +1,81 @@ +import delegator +import click + + +def format_toml(data): + """Pretty-formats a given toml string.""" + data = data.split('\n') + for i, line in enumerate(data): + if i > 0: + if line.startswith('['): + data[i] = '\n{}'.format(line) + + return '\n'.join(data) + + + +def multi_split(s, split): + """Splits on multiple given seperators.""" + for r in split: + s = s.replace(r, '|') + + return [i for i in s.split('|') if len(i) > 0] + + +def convert_deps_from_pip(dep): + """"Converts a pip-formatted dependency to a Pipfile-formatted one.""" + dependency = {} + + # Comparison operators: e.g. Django>1.10 + if '=' in dep or '<' in dep or '>' in dep: + r = multi_split(dep, '=<>') + dependency[r[0]] = dep[len(r[0]):] + + # Extras: e.g. requests[socks] + elif '[' in dep: + r = multi_split(dep, '[]') + dependency[r[0]] = {'extras': r[1].split(',')} + + # TODO: Editable installs. + # if dep.startswith('-e'): + + # Bare dependencies: e.g. requests + else: + dependency[dep] = '*' + + return dependency + + +def convert_deps_to_pip(deps): + """"Converts a Pipfile-formatteddependency to a pip-formatted one.""" + dependencies = [] + + for dep in deps.keys(): + # Default (e.g. '>1.10'). + extra = deps[dep] + + # Get rid of '*'. + if deps[dep] == '*' or str(extra) == '{}': + extra = '' + + # Support for extras (e.g. requests[socks]) + if 'extras' in deps[dep]: + extra = '[{}]'.format(deps[dep]['extras'][0]) + + # Support for git. + if 'git' in deps[dep]: + extra = 'git+{}'.format(deps[dep]['git']) + + # Support for @refs. + if 'ref' in deps[dep]: + extra += '@{}'.format(deps[dep]['ref']) + + # Support for editable. + if 'editable' in deps[dep]: + # Support for --egg. + extra += ' --egg={}'.format(dep) + dep = '-e ' + + dependencies.append('{}{}'.format(dep, extra)) + + return dependencies