Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
*.py[cod]

# virtualenv and other misc bits
/src/*.egg-info
*.egg-info
/dist
/build
Expand Down
9 changes: 8 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
Changelog
=============

v32.0.0 - 2023-0X-XX
------------------------

- Add ``run_order`` field to ``BasePlugin``
This is used to compute the order in which a plugin runs before another plugin
in a given stage.


v31.0.0 - 2022-08-24
------------------------
Expand All @@ -21,7 +28,7 @@ v30.0.0
- Bump dependencies


v21.1.21
v21.1.21
---------

*2021-01-21*
Expand Down
54 changes: 54 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) nexB Inc. and others. All rights reserved.
# ScanCode is a trademark of nexB Inc.
# SPDX-License-Identifier: Apache-2.0
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
# See https://github.com/nexB/skeleton for support or download.
# See https://aboutcode.org for more information about nexB OSS projects.
#

# Python version can be specified with `$ PYTHON_EXE=python3.x make conf`
PYTHON_EXE?=python3
VENV=venv
ACTIVATE?=. ${VENV}/bin/activate;

dev:
@echo "-> Configure the development envt."
./configure --dev

isort:
@echo "-> Apply isort changes to ensure proper imports ordering"
${VENV}/bin/isort --sl -l 100 src tests setup.py

black:
@echo "-> Apply black code formatter"
${VENV}/bin/black -l 100 src tests setup.py

doc8:
@echo "-> Run doc8 validation"
@${ACTIVATE} doc8 --max-line-length 100 --ignore-path docs/_build/ --quiet docs/

valid: isort black

check:
@echo "-> Run pycodestyle (PEP8) validation"
@${ACTIVATE} pycodestyle --max-line-length=100 --exclude=.eggs,venv,lib,thirdparty,docs,migrations,settings.py,.cache .
@echo "-> Run isort imports ordering validation"
@${ACTIVATE} isort --sl --check-only -l 100 setup.py src tests .
@echo "-> Run black validation"
@${ACTIVATE} black --check --check -l 100 src tests setup.py

clean:
@echo "-> Clean the Python env"
./configure --clean

test:
@echo "-> Run the test suite"
${VENV}/bin/pytest -vvs

docs:
rm -rf docs/_build/
@${ACTIVATE} sphinx-build docs/ docs/_build/

.PHONY: conf dev check valid black isort clean test docs
28 changes: 10 additions & 18 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,43 +11,35 @@ jobs:
# These jobs are using VMs and Azure-provided Pythons 3.8
################################################################################

- template: etc/ci/azure-posix.yml
parameters:
job_name: ubuntu18_cpython
image_name: ubuntu-18.04
python_versions: ['3.7', '3.8', '3.9', '3.10']
test_suites:
all: venv/bin/pytest -n 2 -vvs

- template: etc/ci/azure-posix.yml
parameters:
job_name: ubuntu20_cpython
image_name: ubuntu-20.04
python_versions: ['3.7', '3.8', '3.9', '3.10']
python_versions: ['3.7', '3.8', '3.9', '3.10', '3.11']
test_suites:
all: venv/bin/pytest -n 2 -vvs

- template: etc/ci/azure-posix.yml
parameters:
job_name: ubuntu22_cpython
image_name: ubuntu-22.04
python_versions: ['3.7', '3.8', '3.9', '3.10']
python_versions: ['3.7', '3.8', '3.9', '3.10', '3.11']
test_suites:
all: venv/bin/pytest -n 2 -vvs

- template: etc/ci/azure-posix.yml
parameters:
job_name: macos1015_cpython
image_name: macos-10.15
python_versions: ['3.7', '3.8', '3.9', '3.10']
job_name: macos11_cpython
image_name: macos-11
python_versions: ['3.7', '3.8', '3.9', '3.10', '3.11']
test_suites:
all: venv/bin/pytest -n 2 -vvs

- template: etc/ci/azure-posix.yml
parameters:
job_name: macos11_cpython
image_name: macos-11
python_versions: ['3.7', '3.8', '3.9', '3.10']
job_name: macos12_cpython
image_name: macos-12
python_versions: ['3.7', '3.8', '3.9', '3.10', '3.11']
test_suites:
all: venv/bin/pytest -n 2 -vvs

Expand All @@ -63,15 +55,15 @@ jobs:
parameters:
job_name: win2019_cpython
image_name: windows-2019
python_versions: ['3.7', '3.8', '3.9', '3.10']
python_versions: ['3.7', '3.8', '3.9', '3.10', '3.11']
test_suites:
all: venv\Scripts\pytest -n 2 -vvs

- template: etc/ci/azure-win.yml
parameters:
job_name: win2022_cpython
image_name: windows-2022
python_versions: ['3.7', '3.8', '3.9', '3.10']
python_versions: ['3.7', '3.8', '3.9', '3.10', '3.11']
test_suites:
all: venv\Scripts\pytest -n 2 -vvs

Expand Down
2 changes: 1 addition & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ DOCS_REQUIREMENTS="--editable .[docs] --constraint requirements.txt"
VIRTUALENV_DIR=venv

# Cleanable files and directories to delete with the --clean option
CLEANABLE="build venv"
CLEANABLE="build dist venv .cache .eggs"

# extra arguments passed to pip
PIP_EXTRA_ARGS=" "
Expand Down
2 changes: 1 addition & 1 deletion configure.bat
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ set "DOCS_REQUIREMENTS=--editable .[docs] --constraint requirements.txt"
set "VIRTUALENV_DIR=venv"

@rem # Cleanable files and directories to delete with the --clean option
set "CLEANABLE=build venv"
set "CLEANABLE=build dist venv .cache .eggs"

@rem # extra arguments passed to pip
set "PIP_EXTRA_ARGS= "
Expand Down
8 changes: 4 additions & 4 deletions etc/scripts/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Pre-requisites
virtualenv or in the the main configured development virtualenv.
These requireements need to be installed::

pip install --requirement etc/release/requirements.txt
pip install --requirement etc/scripts/requirements.txt

TODO: we need to pin the versions of these tools

Expand All @@ -34,7 +34,7 @@ Scripts
~~~~~~~

**gen_requirements.py**: create/update requirements files from currently
installed requirements.
installed requirements.

**gen_requirements_dev.py** does the same but can subtract the main requirements
to get extra requirements used in only development.
Expand All @@ -50,7 +50,7 @@ The sequence of commands to run are:

./configure --clean
./configure
python etc/release/gen_requirements.py --site-packages-dir <path to site-packages dir>
python etc/scripts/gen_requirements.py --site-packages-dir <path to site-packages dir>

* You can optionally install or update extra main requirements after the
./configure step such that these are included in the generated main requirements.
Expand All @@ -59,7 +59,7 @@ The sequence of commands to run are:

./configure --clean
./configure --dev
python etc/release/gen_requirements_dev.py --site-packages-dir <path to site-packages dir>
python etc/scripts/gen_requirements_dev.py --site-packages-dir <path to site-packages dir>

* You can optionally install or update extra dev requirements after the
./configure step such that these are included in the generated dev
Expand Down
87 changes: 64 additions & 23 deletions etc/scripts/fetch_thirdparty.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import itertools
import os
import sys
from collections import defaultdict

import click

Expand Down Expand Up @@ -110,6 +111,39 @@
is_flag=True,
help="Use on disk cached PyPI indexes list of packages and versions and do not refetch if present.",
)
@click.option(
"--sdist-only",
"sdist_only",
type=str,
metavar="SDIST",
default=tuple(),
show_default=False,
multiple=True,
help="Package name(s) that come only in sdist format (no wheels). "
"The command will not fail and exit if no wheel exists for these names",
)
@click.option(
"--wheel-only",
"wheel_only",
type=str,
metavar="WHEEL",
default=tuple(),
show_default=False,
multiple=True,
help="Package name(s) that come only in wheel format (no sdist). "
"The command will not fail and exit if no sdist exists for these names",
)
@click.option(
"--no-dist",
"no_dist",
type=str,
metavar="DIST",
default=tuple(),
show_default=False,
multiple=True,
help="Package name(s) that do not come either in wheel or sdist format. "
"The command will not fail and exit if no distribution exists for these names",
)
@click.help_option("-h", "--help")
def fetch_thirdparty(
requirements_files,
Expand All @@ -122,6 +156,9 @@ def fetch_thirdparty(
sdists,
index_urls,
use_cached_index,
sdist_only,
wheel_only,
no_dist,
):
"""
Download to --dest THIRDPARTY_DIR the PyPI wheels, source distributions,
Expand Down Expand Up @@ -204,58 +241,62 @@ def fetch_thirdparty(
)
repos.append(repo)

wheels_fetched = []
wheels_not_found = []

sdists_fetched = []
sdists_not_found = []
wheels_or_sdist_not_found = defaultdict(list)

for name, version in sorted(required_name_versions):
nv = name, version
print(f"Processing: {name} @ {version}")
if wheels:
for environment in environments:

if TRACE:
print(f" ==> Fetching wheel for envt: {environment}")
fwfns = utils_thirdparty.download_wheel(

fetched = utils_thirdparty.download_wheel(
name=name,
version=version,
environment=environment,
dest_dir=dest_dir,
repos=repos,
)
if fwfns:
wheels_fetched.extend(fwfns)
else:
wheels_not_found.append(f"{name}=={version} for: {environment}")
if not fetched:
wheels_or_sdist_not_found[f"{name}=={version}"].append(environment)
if TRACE:
print(f" NOT FOUND")

if sdists:
if (sdists or
(f"{name}=={version}" in wheels_or_sdist_not_found and name in sdist_only)
):
if TRACE:
print(f" ==> Fetching sdist: {name}=={version}")

fetched = utils_thirdparty.download_sdist(
name=name,
version=version,
dest_dir=dest_dir,
repos=repos,
)
if fetched:
sdists_fetched.append(fetched)
else:
sdists_not_found.append(f"{name}=={version}")
if not fetched:
wheels_or_sdist_not_found[f"{name}=={version}"].append("sdist")
if TRACE:
print(f" NOT FOUND")

if wheels and wheels_not_found:
print(f"==> MISSING WHEELS")
for wh in wheels_not_found:
print(f" {wh}")
mia = []
for nv, dists in wheels_or_sdist_not_found.items():
name, _, version = nv.partition("==")
if name in no_dist:
continue
sdist_missing = sdists and "sdist" in dists and not name in wheel_only
if sdist_missing:
mia.append(f"SDist missing: {nv} {dists}")
wheels_missing = wheels and any(d for d in dists if d != "sdist") and not name in sdist_only
if wheels_missing:
mia.append(f"Wheels missing: {nv} {dists}")

if sdists and sdists_not_found:
print(f"==> MISSING SDISTS")
for sd in sdists_not_found:
print(f" {sd}")
if mia:
for m in mia:
print(m)
raise Exception(mia)

print(f"==> FETCHING OR CREATING ABOUT AND LICENSE FILES")
utils_thirdparty.fetch_abouts_and_licenses(dest_dir=dest_dir, use_cached_index=use_cached_index)
Expand Down
6 changes: 3 additions & 3 deletions etc/scripts/gen_pypi_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def build_per_package_index(pkg_name, packages, base_url):
<body>"""
document.append(header)

for package in packages:
for package in sorted(packages, key=lambda p: p.archive_file):
document.append(package.simple_index_entry(base_url))

footer = """ </body>
Expand All @@ -141,8 +141,8 @@ def build_links_package_index(packages_by_package_name, base_url):
<body>"""
document.append(header)

for _name, packages in packages_by_package_name.items():
for package in packages:
for _name, packages in sorted(packages_by_package_name.items(), key=lambda i: i[0]):
for package in sorted(packages, key=lambda p: p.archive_file):
document.append(package.simple_index_entry(base_url))

footer = """ </body>
Expand Down
3 changes: 2 additions & 1 deletion etc/scripts/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ pip
setuptools
twine
wheel
build
build
packvers
2 changes: 1 addition & 1 deletion etc/scripts/utils_dejacode.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import requests
import saneyaml

from packaging import version as packaging_version
from packvers import version as packaging_version

"""
Utility to create and retrieve package and ABOUT file data from DejaCode.
Expand Down
2 changes: 1 addition & 1 deletion etc/scripts/utils_pip_compatibility_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

import re

from packaging.tags import (
from packvers.tags import (
compatible_tags,
cpython_tags,
generic_tags,
Expand Down
Loading