Skip to content

Commit d22e659

Browse files
committed
Update remote of local only
If --local and --remote used, do not refresh PyPI remote data for any stale records which were not found in local data.
1 parent 5e387c1 commit d22e659

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

package_monitor/management/commands/refresh_packages.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,41 @@
1818
logger = getLogger(__name__)
1919

2020

21-
def create_package_version(requirement: Requirement) -> None:
21+
def create_package_version(requirement: Requirement) -> PackageVersion:
2222
"""Create a new PackageVersion from a requirement. Handles errors."""
2323
try:
24-
PackageVersion(requirement=requirement).save()
24+
pv = PackageVersion(requirement=requirement).save()
2525
logger.info("Package '%s' added.", requirement.name) # noqa
2626
except IntegrityError:
2727
logger.info("Package '%s' already exists.", requirement.name) # noqa
28+
pv = PackageVersion.objects.get(package_name=requirement.name)
29+
return pv
2830

2931

30-
def local() -> None:
32+
def local() -> List[PackageVersion]:
3133
"""Load local requirements file."""
3234
logger.info("Loading requirements from local file.")
35+
packages = []
3336
with open(REQUIREMENTS_FILE, "r") as f:
3437
requirements = parse(f)
3538
for r in requirements:
3639
logger.debug("Creating new package: %r", r)
37-
create_package_version(r)
40+
pv = create_package_version(r)
41+
packages.append(pv)
3842

43+
return packages
3944

40-
def remote() -> Dict[str, List]:
45+
46+
def remote(packages: List[PackageVersion] = None) -> Dict[str, List]:
4147
"""Update package info from PyPI."""
4248
logger.info("Fetching latest data from PyPI.")
4349
results = defaultdict(list)
44-
packages = PackageVersion.objects.exclude(is_editable=True)
45-
for pv in packages:
50+
if not packages:
51+
packages = PackageVersion.objects.exclude(is_editable=True) # type: ignore
52+
for pv in packages: # type: ignore
53+
if pv.is_editable:
54+
logger.debug("Skipping editable package from PyPI: %r", pv)
55+
continue
4656
pv.update_from_pypi()
4757
results[pv.diff_status].append(pv)
4858
logger.debug("Updated package from PyPI: %r", pv)
@@ -102,11 +112,12 @@ def handle(self, *args: Any, **options: Any) -> None:
102112
if options["clean"]:
103113
clean()
104114

115+
packages = []
105116
if options["local"]:
106-
local()
117+
packages = local()
107118

108119
if options["remote"]:
109-
results = remote()
120+
results = remote(packages)
110121
if options["notify"]:
111122
send_mail(
112123
options["subject"],

0 commit comments

Comments
 (0)