Skip to content

Commit

Permalink
feat: Added Pipfile support and update pipfile using pipenv
Browse files Browse the repository at this point in the history
feat #12
  • Loading branch information
achillesrasquinha committed Feb 10, 2019
1 parent 0deccfc commit 0feb077
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 47 deletions.
6 changes: 3 additions & 3 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion requirements-dev.txt
Expand Up @@ -11,4 +11,4 @@ pipenv
ipython
vulture
safety
pre-commit
pre-commit
61 changes: 19 additions & 42 deletions src/pipupgrade/commands/__init__.py
Expand Up @@ -7,11 +7,11 @@
import json

# imports - module imports
from pipupgrade.model import Project
from pipupgrade.model import Project, Package
from pipupgrade.commands.util import cli_format
from pipupgrade.table import Table
from pipupgrade.util.string import strip, pluralize
from pipupgrade.util.system import read, write, popen
from pipupgrade.util.system import read, write, popen, which
from pipupgrade.util.environ import getenvvar
from pipupgrade.util.datetime import get_timestamp_str
from pipupgrade import _pip, request as req, cli, semver
Expand Down Expand Up @@ -45,41 +45,6 @@ def _format(x):

return version

def _get_pypi_info(name, raise_err = True):
url = "https://pypi.org/pypi/{}/json".format(name)
res = req.get(url)

info = None

if res.ok:
data = res.json()
info = data["info"]
else:
if raise_err:
res.raise_for_status()

return info

class PackageInfo:
def __init__(self, package):
if isinstance(package, (_pip.Distribution, _pip.DistInfoDistribution, _pip.EggInfoDistribution)):
self.name = package.project_name
self.current_version = package.version
elif isinstance(package, _pip.InstallRequirement):
self.name = package.name
self.current_version = package.installed_version
elif isinstance(package, dict):
self.name = package["name"]
self.current_version = package["version"]
self.latest_version = package.get("version")

_pypi_info = _get_pypi_info(self.name, raise_err = False) or { }

if not hasattr(self, "latest_version"):
self.latest_version = _pypi_info.get("version")

self.home_page = _pypi_info.get("home_page")

def _update_requirements(path, package):
path = osp.realpath(path)

Expand Down Expand Up @@ -163,10 +128,12 @@ def command(
else:
if project:
requirements = requirements or [ ]
pipfile = pipfile or [ ]

for i, p in enumerate(project):
project[i] = Project(osp.abspath(p))
requirements += project[i].requirements
pipfile += [project[i].pipfile]

if requirements:
for requirement in requirements:
Expand Down Expand Up @@ -197,7 +164,7 @@ def command(
dinfo = [ ] # Information DataFrame

for package in packages:
package = PackageInfo(package)
package = Package(package)
package.source = source

if package.latest_version and package.current_version != package.latest_version:
Expand Down Expand Up @@ -270,6 +237,16 @@ def command(
else:
cli.echo("%s upto date." % cli_format(stitle, cli.CYAN))

if pipfile:
for pipf in pipfile:
realpath = osp.realpath(pipf)
basepath = osp.dirname(realpath)

pipenv = which("pipenv", raise_err = True)
popen("%s update" % pipenv, quiet = not verbose, cwd = basepath)

cli.echo("%s upto date." % cli_format(realpath, cli.CYAN))

if project and pull_request:
errstr = '%s not found. Use %s or the environment variable "%s" to set value.'

Expand All @@ -286,16 +263,16 @@ def command(

if output:
branch = get_timestamp_str(format_ = "%Y%m%d%H%M%S")
popen("git checkout -B %s" % branch, quiet = True)
popen("git checkout -B %s" % branch, quiet = not verbose)

title = "fix(dependencies): Update dependencies to latest"
body = ""

# TODO: cross-check with "git add" ?
popen("git add %s" % " ".join(p.requirements), quiet = True, cwd = p.path)
popen("git commit -m '%s'" % title, quiet = True, cwd = p.path)
popen("git add %s" % " ".join([*p.requirements, p.pipfile]), quiet = not verbose, cwd = p.path)
popen("git commit -m '%s'" % title, quiet = not verbose, cwd = p.path)

popen("git push origin %s" % branch, quiet = True, cwd = p.path)
popen("git push origin %s" % branch, quiet = not verbose, cwd = p.path)

if not github_reponame:
raise ValueError(errstr % ("GitHub Reponame", "--github-reponame", getenvvar("GITHUB_REPONAME")))
Expand Down
3 changes: 2 additions & 1 deletion src/pipupgrade/model/__init__.py
@@ -1,2 +1,3 @@
# imports - module imports
from pipupgrade.model.project import Project
from pipupgrade.model.project import Project
from pipupgrade.model.package import Package
37 changes: 37 additions & 0 deletions src/pipupgrade/model/package.py
@@ -0,0 +1,37 @@
# imports - module imports
from pipupgrade import _pip, request as req

def _get_pypi_info(name, raise_err = True):
url = "https://pypi.org/pypi/{}/json".format(name)
res = req.get(url)

info = None

if res.ok:
data = res.json()
info = data["info"]
else:
if raise_err:
res.raise_for_status()

return info

class Package:
def __init__(self, package):
if isinstance(package, (_pip.Distribution, _pip.DistInfoDistribution, _pip.EggInfoDistribution)):
self.name = package.project_name
self.current_version = package.version
elif isinstance(package, _pip.InstallRequirement):
self.name = package.name
self.current_version = package.installed_version
elif isinstance(package, dict):
self.name = package["name"]
self.current_version = package["version"]
self.latest_version = package.get("version")

_pypi_info = _get_pypi_info(self.name, raise_err = False) or { }

if not hasattr(self, "latest_version"):
self.latest_version = _pypi_info.get("version")

self.home_page = _pypi_info.get("home_page")

0 comments on commit 0feb077

Please sign in to comment.