|
18 | 18 | logger = getLogger(__name__) |
19 | 19 |
|
20 | 20 |
|
21 | | -def create_package_version(requirement: Requirement) -> None: |
| 21 | +def create_package_version(requirement: Requirement) -> PackageVersion: |
22 | 22 | """Create a new PackageVersion from a requirement. Handles errors.""" |
23 | 23 | try: |
24 | | - PackageVersion(requirement=requirement).save() |
| 24 | + pv = PackageVersion(requirement=requirement).save() |
25 | 25 | logger.info("Package '%s' added.", requirement.name) # noqa |
26 | 26 | except IntegrityError: |
27 | 27 | logger.info("Package '%s' already exists.", requirement.name) # noqa |
| 28 | + pv = PackageVersion.objects.get(package_name=requirement.name) |
| 29 | + return pv |
28 | 30 |
|
29 | 31 |
|
30 | | -def local() -> None: |
| 32 | +def local() -> List[PackageVersion]: |
31 | 33 | """Load local requirements file.""" |
32 | 34 | logger.info("Loading requirements from local file.") |
| 35 | + packages = [] |
33 | 36 | with open(REQUIREMENTS_FILE, "r") as f: |
34 | 37 | requirements = parse(f) |
35 | 38 | for r in requirements: |
36 | 39 | logger.debug("Creating new package: %r", r) |
37 | | - create_package_version(r) |
| 40 | + pv = create_package_version(r) |
| 41 | + packages.append(pv) |
38 | 42 |
|
| 43 | + return packages |
39 | 44 |
|
40 | | -def remote() -> Dict[str, List]: |
| 45 | + |
| 46 | +def remote(packages: List[PackageVersion] = None) -> Dict[str, List]: |
41 | 47 | """Update package info from PyPI.""" |
42 | 48 | logger.info("Fetching latest data from PyPI.") |
43 | 49 | 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 |
46 | 56 | pv.update_from_pypi() |
47 | 57 | results[pv.diff_status].append(pv) |
48 | 58 | logger.debug("Updated package from PyPI: %r", pv) |
@@ -102,11 +112,12 @@ def handle(self, *args: Any, **options: Any) -> None: |
102 | 112 | if options["clean"]: |
103 | 113 | clean() |
104 | 114 |
|
| 115 | + packages = [] |
105 | 116 | if options["local"]: |
106 | | - local() |
| 117 | + packages = local() |
107 | 118 |
|
108 | 119 | if options["remote"]: |
109 | | - results = remote() |
| 120 | + results = remote(packages) |
110 | 121 | if options["notify"]: |
111 | 122 | send_mail( |
112 | 123 | options["subject"], |
|
0 commit comments