Skip to content

Commit

Permalink
Update remote of local only
Browse files Browse the repository at this point in the history
If --local and --remote used, do not refresh PyPI remote data
for any stale records which were not found in local data.
  • Loading branch information
jayvdb committed Sep 12, 2020
1 parent 5e387c1 commit 2af6508
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions package_monitor/management/commands/refresh_packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,41 @@
logger = getLogger(__name__)


def create_package_version(requirement: Requirement) -> None:
def create_package_version(requirement: Requirement) -> PackageVersion:
"""Create a new PackageVersion from a requirement. Handles errors."""
try:
PackageVersion(requirement=requirement).save()
pv = PackageVersion(requirement=requirement).save()
logger.info("Package '%s' added.", requirement.name) # noqa
except IntegrityError:
logger.info("Package '%s' already exists.", requirement.name) # noqa
pv = PackageVersion.objects.get(package_name=requirement.name)
return pv


def local() -> None:
def local() -> List[PackageVersion]:
"""Load local requirements file."""
logger.info("Loading requirements from local file.")
packages = []
with open(REQUIREMENTS_FILE, "r") as f:
requirements = parse(f)
for r in requirements:
logger.debug("Creating new package: %r", r)
create_package_version(r)
pv = create_package_version(r)
packages.append(pv)

return packages

def remote() -> Dict[str, List]:

def remote(packages: List[PackageVersion] = None) -> Dict[str, List]:
"""Update package info from PyPI."""
logger.info("Fetching latest data from PyPI.")
results = defaultdict(list)
packages = PackageVersion.objects.exclude(is_editable=True)
if not packages:
packages = PackageVersion.objects.exclude(is_editable=True)
for pv in packages:
if pv.is_editable:
logger.debug("Skipping editable package from PyPI: %r", pv)
continue
pv.update_from_pypi()
results[pv.diff_status].append(pv)
logger.debug("Updated package from PyPI: %r", pv)
Expand Down Expand Up @@ -102,11 +112,12 @@ def handle(self, *args: Any, **options: Any) -> None:
if options["clean"]:
clean()

packages = []
if options["local"]:
local()
packages = local()

if options["remote"]:
results = remote()
results = remote(packages)
if options["notify"]:
send_mail(
options["subject"],
Expand Down

0 comments on commit 2af6508

Please sign in to comment.