From 5eaa65d9e41bc07a56c50783c67a0dd4a5e7d481 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:04:15 +0500 Subject: [PATCH 01/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 24 ++ scripts/find_dependencies.py | 373 +++++++++++++++++++++++ 2 files changed, 397 insertions(+) create mode 100644 .github/workflows/check_dependencies.yml create mode 100644 scripts/find_dependencies.py diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml new file mode 100644 index 000000000000..1557605b3b48 --- /dev/null +++ b/.github/workflows/check_dependencies.yml @@ -0,0 +1,24 @@ +name: Check Python Dependencies + +on: + pull_request: + +defaults: + run: + shell: bash # strict bash + +jobs: + check_dependencies: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.8' + + - name: Run Python script + run: python find_dependencies.py \ No newline at end of file diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py new file mode 100644 index 000000000000..c8133460f77e --- /dev/null +++ b/scripts/find_dependencies.py @@ -0,0 +1,373 @@ +""" +Spider and catalog dependencies. + +$ export OLIVE_DIRS=$(gittreeif origin/open-release/olive.master -q pwd) +$ python find_deps.py $OLIVE_DIRS + +""" + +import concurrent.futures +import contextlib +import functools +import itertools +import json +import os +import re +import shlex +import shutil +import subprocess +import sys +import tarfile +import time +import zipfile +from pathlib import Path +from typing import Iterable, Optional, Tuple + +import requests +from rich.progress import Progress, MofNCompleteColumn + +# pylint: disable=unspecified-encoding + +cached = functools.lru_cache(maxsize=0) + +@contextlib.contextmanager +def change_dir(new_dir): + """ + Change to a new directory, and then change back. + + Will make the directory if needed. + """ + old_dir = os.getcwd() + new_dir = Path(new_dir) + new_dir.mkdir(parents=True, exist_ok=True) + os.chdir(new_dir) + try: + yield new_dir + finally: + os.chdir(old_dir) + + +def run_command(cmd: str, outfile=None) -> Tuple[bool, str]: + """ + Run a command line (with no shell). Write the output to a file. + + Returns a tuple: + bool: true if the command succeeded. + str: the output of the command. + + """ + proc = subprocess.run( + shlex.split(cmd, posix=False), + shell=False, + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + output = proc.stdout.decode("utf-8") + if outfile: + Path(outfile).write_text(output) + + return proc.returncode == 0, output.strip() + + +@cached +def npm_repo_url(npm_spec: str) -> Optional[str]: + """Given 'jspkg@0.1.0', return a repo url.""" + pkg, _, ver = npm_spec.rpartition("@") + url = f"https://registry.npmjs.org/{pkg}/{ver}" + try: + resp = requests.get(url, timeout=60) + if resp.status_code != 200: + print(f"{npm_spec}: {url} -> {resp.status_code}") + return None + jdata = resp.json() + except requests.RequestException as exc: + print(f"Couldn't fetch npm data for {npm_spec}: {exc}") + return None + repo = jdata.get("repository") + if repo is None: + return None + if isinstance(repo, dict): + repo = repo["url"] + return repo + +def canonical_url(url: str) -> str: + """Canonicalize a repo URL, probably on GitHub.""" + for pat, repl in [ + (r"^git\+", ""), + (r"#.$", ""), + (r"\.git$", ""), + (r"^git:", "https:"), + (r"^ssh://git@", "https://"), + (r"^git@github.com:", "https://github.com/"), + ]: + url = re.sub(pat, repl, url) + if ":" not in url and url.count("/") == 1: + url = f"https://github.com/{url}" + return url + +@cached +def find_real_url(url: str) -> Optional[str]: + """Find the eventual real url for a redirected url.""" + while True: + try: + resp = requests.head(url, timeout=60, allow_redirects=True) + except requests.RequestException as exc: + print(f"Couldn't fetch {url}: {exc}") + return None + if resp.status_code == 429: + # I didn't know you could get 429 from https://github.com, but you can... + wait = int(resp.headers.get("Retry-After", 10)) + time.sleep(wait + 1) + else: + break + + if resp.status_code == 200: + return resp.url + return None + + +WORK_DIR = Path("/tmp/unpack_reqs") + +def parallel_map(func, data, description): + """Run func over data using threads, with a progress bar.""" + data = list(data) + n_workers = os.cpu_count() or 1 + with concurrent.futures.ThreadPoolExecutor(max_workers=n_workers) as executor: + with Progress(*Progress.get_default_columns(), MofNCompleteColumn()) as progress: + pbar = progress.add_task(f"{description:20}", total=len(data)) + for result in executor.map(func, data): + progress.update(pbar, advance=1) + yield result + +def write_list(path: str, lines: Iterable[str]): + """Write a list of strings to a file.""" + with Path(path).open("w") as flist: + for line in lines: + print(line, file=flist) + +def check_js_dependencies() -> Iterable[str]: + """Check the JS dependencies in package-lock.json, returning a set of repo URLs.""" + print("Checking JavaScript dependencies") + with Path("package-lock.json").open() as lockf: + lock_data = json.load(lockf) + + deps = set() + for name, pkg in lock_data["packages"].items(): + name = pkg.get("name") or name + name = name.rpartition("node_modules/")[-1] + version = pkg.get("version") + if version is None: + continue + deps.add(f"{name}@{version}") + write_list("deps.txt", sorted(deps)) + + urls = set() + for url in parallel_map(npm_repo_url, deps, "Getting npm URLs"): + if url: + urls.add(canonical_url(url)) + + real_urls = set() + for url in parallel_map(find_real_url, urls, "Getting real URLs"): + if url: + real_urls.add(url) + + print(f"{len(deps)} deps, {len(urls)} urls, {len(real_urls)} real urls") + write_list("repo_urls.txt", sorted(real_urls)) + return real_urls + +def check_py_dependencies() -> Iterable[str]: + """Check the Python dependencies in base.txt, returning a set of repo URLs.""" + print("Checking Python dependencies") + + print("Creating venv") + run_command("python3 -m venv .venv", "make_venv.log") + run_command(".venv/bin/python3 -m pip install -U pip", "pip_upgrade.log") + print("Downloading packages") + run_command(".venv/bin/python3 -m pip download --dest files -r base.txt", "pip_download.log") + + urls = set() + for url in parallel_map(repo_url_from_wheel, Path("files").glob("*.whl"), "Examining wheels"): + if url: + urls.add(canonical_url(url)) + + for url in parallel_map(repo_url_from_tgz, Path("files").glob("*.tar.gz"), "Examining tar.gz"): + if url: + urls.add(canonical_url(url)) + + with open("base.txt") as fbase: + for line in fbase: + if match := re.search(r"https://github.com[^@ #]*(\.git)?", line): + urls.add(canonical_url(match[0])) + + real_urls = set() + for url in parallel_map(find_real_url, urls, "Getting real URLs"): + if url: + real_urls.add(url) + + write_list("repo_urls.txt", sorted(real_urls)) + return real_urls + +def matching_text(text, regexes): + """Find a line in text matching a regex, and return the first regex group.""" + for regex in regexes: + for line in text.splitlines(): + if match := re.search(regex, line): + return match[1] + return None + +@cached +def repo_url_from_wheel(wheel_path: str) -> Optional[str]: + """Read metadata from a .whl file, returning the repo URL.""" + with zipfile.ZipFile(wheel_path) as whl_file: + fmetadata = next((f for f in whl_file.namelist() if f.endswith("/METADATA")), None) + if fmetadata is None: + print(f"No metadata in {wheel_path}") + return None + with whl_file.open(fmetadata) as inner_file: + metadata = inner_file.read().decode("utf-8") + return repo_url_from_metadata(wheel_path, metadata) + +@cached +def repo_url_from_tgz(tgz_path: str) -> Optional[str]: + """Read metadata from a .tar.gz file, returning the repo URL.""" + with tarfile.open(tgz_path) as tgz_file: + fmetadata = next((f for f in tgz_file.getnames() if f.endswith("/PKG-INFO")), None) + if fmetadata is None: + print(f"No metadata in {tgz_path}") + return None + metadata = tgz_file.extractfile(fmetadata).read().decode("utf-8") + return repo_url_from_metadata(tgz_path, metadata) + + +SOURCE_URL_REGEXES = [ + # These regexes are tried in order. The first group is the extracted URL. + r"(?i)^Project-URL: Source.*,\s*(.*)$", + r"(?i)^Home-page: (.*)$", + r"(?i)^Project-URL: Home.*,\s*(.*)$", + # If they point to GitHub issues, that's their repo. + r"(?i)^Project-URL: [^,]+,\s*(https?://github.com/[^/]+/[^/]+)/issues/?$", + # If we can't find a URL marked as home, then use any GitHub repo URL. + r"(?i)^Project-URL: [^,]+,\s*(https?://github.com/[^/]+/[^/]+)$", +] + +def repo_url_from_metadata(filename, metadata): + """Find the likely source repo URL from PyPI metadata.""" + repo_url = matching_text(metadata, SOURCE_URL_REGEXES) + if repo_url is None: + print(f"No repo URL in {filename}") + return None + if repo_url == "UNKNOWN": + print(f"Repo URL is UNKNOWN in {filename}") + return None + return repo_url + +# The first of these we find is the requirements file we'll examine: +PY_REQS = [ + "requirements/edx/base.txt", + "requirements/base.txt", + "requirements.txt", +] + +# Files that indicate a repo is a Python project: +PY_INDICATORS = [ + "setup.py", + "setup.cfg", + "pyproject.toml", +] + +def find_py_reqs(): + """Find the Python requirements file to use.""" + for fname in PY_REQS: + possible_req = Path(fname) + if possible_req.exists(): + return possible_req + if any(Path(ind).exists() for ind in PY_INDICATORS): + print(f"WARNING: {os.getcwd()} is likely a Python package, but we can't find its dependencies.") + return None + + +def process_directory(): + """ + Find all the requirements in the current directory. Returns a set of repo URLs. + + Also copies the considered dependencies file into the temp work directory, + for later analysis. + """ + repo_name = Path.cwd().name + repo_work = WORK_DIR / repo_name + repo_work.mkdir(parents=True, exist_ok=True) + repo_urls = set() + if (js_reqs := Path("package-lock.json")).exists(): + shutil.copyfile(js_reqs, repo_work / "package-lock.json") + with change_dir(repo_work): + repo_urls.update(check_js_dependencies()) + if (py_reqs := find_py_reqs()): + shutil.copyfile(py_reqs, repo_work / "base.txt") + with change_dir(repo_work): + repo_urls.update(check_py_dependencies()) + return repo_urls + +FIRST_PARTY_ORGS = ["openedx"] + +SECOND_PARTY_ORGS = [ + "edx", "edx-unsupported", "edx-solutions", + "mitodl", + "overhangio", + "open-craft", "eduNEXT", "raccoongang", +] + +# def urls_in_orgs(urls, orgs): +# """ +# Find urls that are in any of the `orgs`. +# """ +# return sorted( +# url for url in urls +# if any(f"/{org}/" in url for org in orgs) +# ) + +def urls_in_orgs(urls, org): + """ + Find urls that are in any of the `orgs`. + """ + return sorted( + url for url in urls + if f"/{org}/" in url + ) + + +def main(dirs=None, org=None): + """ + Analyze the requirements in all of the directories mentioned on the command line. + If arguments have newlines, treat each line as a separate directory. + """ + if dirs is None: + repo_dir = sys.argv[1] + org_flag_index = sys.argv.index("--org") + org = sys.argv[org_flag_index + 1] + #import pdb; pdb.set_trace() + print(f"Creating new work directory: {WORK_DIR}") + shutil.rmtree(WORK_DIR, ignore_errors=True) + + #dirs = sorted(itertools.chain.from_iterable(d.splitlines() for d in dirs)) + repo_urls = set() + + #for i_dir, repo_dir in enumerate(dirs, start=1): +# print(f"-- repo {repo_dir} ({i_dir}/{len(dirs)}) ----------") + with change_dir(repo_dir): + repo_urls.update(process_directory()) + + write_list(WORK_DIR / "repo_urls.txt", sorted(repo_urls)) + + #firsts = urls_in_orgs(repo_urls, FIRST_PARTY_ORGS) + #write_list(WORK_DIR / "first_party_urls.txt", firsts) + seconds = urls_in_orgs(repo_urls, "edx") + #write_list(WORK_DIR / "second_party_urls.txt", seconds) + + print("== DONE ==============") + print("Second-party:") + print("\n".join(seconds)) + + +if __name__ == "__main__": + main() From 69f52de4fb7681bfdff9bcae2fc19d523fa62b4c Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:08:07 +0500 Subject: [PATCH 02/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 1557605b3b48..f8c49f938a48 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -6,6 +6,7 @@ on: defaults: run: shell: bash # strict bash + working-directory: ./scripts jobs: check_dependencies: @@ -20,5 +21,8 @@ jobs: with: python-version: '3.8' + - name: Make the script files executable + run: chmod +x my-script.sh my-other-script.sh + - name: Run Python script run: python find_dependencies.py \ No newline at end of file From b972e2740f4e903faa836758bcaca17f192291c0 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:10:21 +0500 Subject: [PATCH 03/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index f8c49f938a48..c6b201f1ef62 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -22,7 +22,7 @@ jobs: python-version: '3.8' - name: Make the script files executable - run: chmod +x my-script.sh my-other-script.sh + run: chmod +x find_dependencies.py - name: Run Python script run: python find_dependencies.py \ No newline at end of file From 118640ceac8ccb47919cf1b5344b8f3ebd4c4a48 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:12:06 +0500 Subject: [PATCH 04/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index c6b201f1ef62..beba4cb2fead 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -21,6 +21,9 @@ jobs: with: python-version: '3.8' + - name: Install requests module + run: pip install requests + - name: Make the script files executable run: chmod +x find_dependencies.py From cd6463d15ce15fc76ac3c04834fdacc3f764285f Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:13:22 +0500 Subject: [PATCH 05/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index beba4cb2fead..ece2b93002ee 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -22,7 +22,10 @@ jobs: python-version: '3.8' - name: Install requests module - run: pip install requests + run: pip install requests + + - name: Install requests module + run: pip install rich - name: Make the script files executable run: chmod +x find_dependencies.py From 3fd66be65faa3a5c9ad972c4bb0e838eec2cf444 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:17:02 +0500 Subject: [PATCH 06/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 2 +- scripts/find_dependencies.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index ece2b93002ee..879d1a67b54a 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -31,4 +31,4 @@ jobs: run: chmod +x find_dependencies.py - name: Run Python script - run: python find_dependencies.py \ No newline at end of file + run: python find_dependencies.py edx-platform --org edx \ No newline at end of file diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index c8133460f77e..ba2b314a1f56 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -361,7 +361,7 @@ def main(dirs=None, org=None): #firsts = urls_in_orgs(repo_urls, FIRST_PARTY_ORGS) #write_list(WORK_DIR / "first_party_urls.txt", firsts) - seconds = urls_in_orgs(repo_urls, "edx") + seconds = urls_in_orgs(repo_urls, org) #write_list(WORK_DIR / "second_party_urls.txt", seconds) print("== DONE ==============") From 3d53c6e9a602983d7d28c0df452fd77ab99b8e41 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Tue, 16 Apr 2024 16:20:51 +0500 Subject: [PATCH 07/25] chore: testing workflow --- scripts/find_dependencies.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index ba2b314a1f56..89f0ef757231 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -367,6 +367,8 @@ def main(dirs=None, org=None): print("== DONE ==============") print("Second-party:") print("\n".join(seconds)) + if seconds: + sys.exit(1) if __name__ == "__main__": From 11fd4c5b4ab4c7dac606d51e3116e9073ebda8c7 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Wed, 17 Apr 2024 17:46:03 +0500 Subject: [PATCH 08/25] chore: testing workflow --- scripts/find_dependencies.py | 372 +++++++++++++++++++---------------- 1 file changed, 199 insertions(+), 173 deletions(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index 89f0ef757231..a70fdb8585ad 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -70,26 +70,26 @@ def run_command(cmd: str, outfile=None) -> Tuple[bool, str]: return proc.returncode == 0, output.strip() -@cached -def npm_repo_url(npm_spec: str) -> Optional[str]: - """Given 'jspkg@0.1.0', return a repo url.""" - pkg, _, ver = npm_spec.rpartition("@") - url = f"https://registry.npmjs.org/{pkg}/{ver}" - try: - resp = requests.get(url, timeout=60) - if resp.status_code != 200: - print(f"{npm_spec}: {url} -> {resp.status_code}") - return None - jdata = resp.json() - except requests.RequestException as exc: - print(f"Couldn't fetch npm data for {npm_spec}: {exc}") - return None - repo = jdata.get("repository") - if repo is None: - return None - if isinstance(repo, dict): - repo = repo["url"] - return repo +# @cached +# def npm_repo_url(npm_spec: str) -> Optional[str]: +# """Given 'jspkg@0.1.0', return a repo url.""" +# pkg, _, ver = npm_spec.rpartition("@") +# url = f"https://registry.npmjs.org/{pkg}/{ver}" +# try: +# resp = requests.get(url, timeout=60) +# if resp.status_code != 200: +# print(f"{npm_spec}: {url} -> {resp.status_code}") +# return None +# jdata = resp.json() +# except requests.RequestException as exc: +# print(f"Couldn't fetch npm data for {npm_spec}: {exc}") +# return None +# repo = jdata.get("repository") +# if repo is None: +# return None +# if isinstance(repo, dict): +# repo = repo["url"] +# return repo def canonical_url(url: str) -> str: """Canonicalize a repo URL, probably on GitHub.""" @@ -106,25 +106,25 @@ def canonical_url(url: str) -> str: url = f"https://github.com/{url}" return url -@cached -def find_real_url(url: str) -> Optional[str]: - """Find the eventual real url for a redirected url.""" - while True: - try: - resp = requests.head(url, timeout=60, allow_redirects=True) - except requests.RequestException as exc: - print(f"Couldn't fetch {url}: {exc}") - return None - if resp.status_code == 429: - # I didn't know you could get 429 from https://github.com, but you can... - wait = int(resp.headers.get("Retry-After", 10)) - time.sleep(wait + 1) - else: - break - - if resp.status_code == 200: - return resp.url - return None +# @cached +# def find_real_url(url: str) -> Optional[str]: +# """Find the eventual real url for a redirected url.""" +# while True: +# try: +# resp = requests.head(url, timeout=60, allow_redirects=True) +# except requests.RequestException as exc: +# print(f"Couldn't fetch {url}: {exc}") +# return None +# if resp.status_code == 429: +# # I didn't know you could get 429 from https://github.com, but you can... +# wait = int(resp.headers.get("Retry-After", 10)) +# time.sleep(wait + 1) +# else: +# break + +# if resp.status_code == 200: +# return resp.url +# return None WORK_DIR = Path("/tmp/unpack_reqs") @@ -140,104 +140,104 @@ def parallel_map(func, data, description): progress.update(pbar, advance=1) yield result -def write_list(path: str, lines: Iterable[str]): - """Write a list of strings to a file.""" - with Path(path).open("w") as flist: - for line in lines: - print(line, file=flist) - -def check_js_dependencies() -> Iterable[str]: - """Check the JS dependencies in package-lock.json, returning a set of repo URLs.""" - print("Checking JavaScript dependencies") - with Path("package-lock.json").open() as lockf: - lock_data = json.load(lockf) - - deps = set() - for name, pkg in lock_data["packages"].items(): - name = pkg.get("name") or name - name = name.rpartition("node_modules/")[-1] - version = pkg.get("version") - if version is None: - continue - deps.add(f"{name}@{version}") - write_list("deps.txt", sorted(deps)) - - urls = set() - for url in parallel_map(npm_repo_url, deps, "Getting npm URLs"): - if url: - urls.add(canonical_url(url)) - - real_urls = set() - for url in parallel_map(find_real_url, urls, "Getting real URLs"): - if url: - real_urls.add(url) - - print(f"{len(deps)} deps, {len(urls)} urls, {len(real_urls)} real urls") - write_list("repo_urls.txt", sorted(real_urls)) - return real_urls - -def check_py_dependencies() -> Iterable[str]: - """Check the Python dependencies in base.txt, returning a set of repo URLs.""" - print("Checking Python dependencies") - - print("Creating venv") - run_command("python3 -m venv .venv", "make_venv.log") - run_command(".venv/bin/python3 -m pip install -U pip", "pip_upgrade.log") - print("Downloading packages") - run_command(".venv/bin/python3 -m pip download --dest files -r base.txt", "pip_download.log") - - urls = set() - for url in parallel_map(repo_url_from_wheel, Path("files").glob("*.whl"), "Examining wheels"): - if url: - urls.add(canonical_url(url)) - - for url in parallel_map(repo_url_from_tgz, Path("files").glob("*.tar.gz"), "Examining tar.gz"): - if url: - urls.add(canonical_url(url)) - - with open("base.txt") as fbase: - for line in fbase: - if match := re.search(r"https://github.com[^@ #]*(\.git)?", line): - urls.add(canonical_url(match[0])) - - real_urls = set() - for url in parallel_map(find_real_url, urls, "Getting real URLs"): - if url: - real_urls.add(url) - - write_list("repo_urls.txt", sorted(real_urls)) - return real_urls - -def matching_text(text, regexes): - """Find a line in text matching a regex, and return the first regex group.""" - for regex in regexes: - for line in text.splitlines(): - if match := re.search(regex, line): - return match[1] - return None - -@cached -def repo_url_from_wheel(wheel_path: str) -> Optional[str]: - """Read metadata from a .whl file, returning the repo URL.""" - with zipfile.ZipFile(wheel_path) as whl_file: - fmetadata = next((f for f in whl_file.namelist() if f.endswith("/METADATA")), None) - if fmetadata is None: - print(f"No metadata in {wheel_path}") - return None - with whl_file.open(fmetadata) as inner_file: - metadata = inner_file.read().decode("utf-8") - return repo_url_from_metadata(wheel_path, metadata) - -@cached -def repo_url_from_tgz(tgz_path: str) -> Optional[str]: - """Read metadata from a .tar.gz file, returning the repo URL.""" - with tarfile.open(tgz_path) as tgz_file: - fmetadata = next((f for f in tgz_file.getnames() if f.endswith("/PKG-INFO")), None) - if fmetadata is None: - print(f"No metadata in {tgz_path}") - return None - metadata = tgz_file.extractfile(fmetadata).read().decode("utf-8") - return repo_url_from_metadata(tgz_path, metadata) +# def write_list(path: str, lines: Iterable[str]): +# """Write a list of strings to a file.""" +# with Path(path).open("w") as flist: +# for line in lines: +# print(line, file=flist) + +# def check_js_dependencies() -> Iterable[str]: +# """Check the JS dependencies in package-lock.json, returning a set of repo URLs.""" +# print("Checking JavaScript dependencies") +# with Path("package-lock.json").open() as lockf: +# lock_data = json.load(lockf) + +# deps = set() +# for name, pkg in lock_data["packages"].items(): +# name = pkg.get("name") or name +# name = name.rpartition("node_modules/")[-1] +# version = pkg.get("version") +# if version is None: +# continue +# deps.add(f"{name}@{version}") +# write_list("deps.txt", sorted(deps)) + +# urls = set() +# for url in parallel_map(npm_repo_url, deps, "Getting npm URLs"): +# if url: +# urls.add(canonical_url(url)) + +# real_urls = set() +# for url in parallel_map(find_real_url, urls, "Getting real URLs"): +# if url: +# real_urls.add(url) + +# print(f"{len(deps)} deps, {len(urls)} urls, {len(real_urls)} real urls") +# write_list("repo_urls.txt", sorted(real_urls)) +# return real_urls + +# def check_py_dependencies() -> Iterable[str]: +# """Check the Python dependencies in base.txt, returning a set of repo URLs.""" +# print("Checking Python dependencies") + +# print("Creating venv") +# run_command("python3 -m venv .venv", "make_venv.log") +# run_command(".venv/bin/python3 -m pip install -U pip", "pip_upgrade.log") +# print("Downloading packages") +# run_command(".venv/bin/python3 -m pip download --dest files -r base.txt", "pip_download.log") + +# urls = set() +# for url in parallel_map(repo_url_from_wheel, Path("files").glob("*.whl"), "Examining wheels"): +# if url: +# urls.add(canonical_url(url)) + +# for url in parallel_map(repo_url_from_tgz, Path("files").glob("*.tar.gz"), "Examining tar.gz"): +# if url: +# urls.add(canonical_url(url)) + +# with open("base.txt") as fbase: +# for line in fbase: +# if match := re.search(r"https://github.com[^@ #]*(\.git)?", line): +# urls.add(canonical_url(match[0])) + +# real_urls = set() +# for url in parallel_map(find_real_url, urls, "Getting real URLs"): +# if url: +# real_urls.add(url) + +# write_list("repo_urls.txt", sorted(real_urls)) +# return real_urls + +# def matching_text(text, regexes): +# """Find a line in text matching a regex, and return the first regex group.""" +# for regex in regexes: +# for line in text.splitlines(): +# if match := re.search(regex, line): +# return match[1] +# return None + +# @cached +# def repo_url_from_wheel(wheel_path: str) -> Optional[str]: +# """Read metadata from a .whl file, returning the repo URL.""" +# with zipfile.ZipFile(wheel_path) as whl_file: +# fmetadata = next((f for f in whl_file.namelist() if f.endswith("/METADATA")), None) +# if fmetadata is None: +# print(f"No metadata in {wheel_path}") +# return None +# with whl_file.open(fmetadata) as inner_file: +# metadata = inner_file.read().decode("utf-8") +# return repo_url_from_metadata(wheel_path, metadata) + +# @cached +# def repo_url_from_tgz(tgz_path: str) -> Optional[str]: +# """Read metadata from a .tar.gz file, returning the repo URL.""" +# with tarfile.open(tgz_path) as tgz_file: +# fmetadata = next((f for f in tgz_file.getnames() if f.endswith("/PKG-INFO")), None) +# if fmetadata is None: +# print(f"No metadata in {tgz_path}") +# return None +# metadata = tgz_file.extractfile(fmetadata).read().decode("utf-8") +# return repo_url_from_metadata(tgz_path, metadata) SOURCE_URL_REGEXES = [ @@ -264,9 +264,15 @@ def repo_url_from_metadata(filename, metadata): # The first of these we find is the requirements file we'll examine: PY_REQS = [ - "requirements/edx/base.txt", - "requirements/base.txt", - "requirements.txt", + # "requirements/edx/base.txt", + #"requirements/edx/base.in", + "requirements/edx/kernel.in", + #"requirements/edx/bundled.in", + #"requirements/edx/testing.in", + # "requirements/base.txt", + #"requirements/base.in", + "requirements/kernel.in", + # "requirements.txt", ] # Files that indicate a repo is a Python project: @@ -286,6 +292,19 @@ def find_py_reqs(): print(f"WARNING: {os.getcwd()} is likely a Python package, but we can't find its dependencies.") return None +def request_package_info_url(package): + base_url = "https://pypi.org/pypi/" + url = f"{base_url}{package}/json" + response = requests.get(url) + if response.status_code == 200: + #print(f"Package: {package}") + data_dict = response.json() + info = data_dict["info"] + home_page = info["home_page"] + return home_page + else: + print(f"Failed to retrieve data for package {package}. Status code:", response.status_code) + def process_directory(): """ @@ -293,20 +312,40 @@ def process_directory(): Also copies the considered dependencies file into the temp work directory, for later analysis. - """ + """ repo_name = Path.cwd().name repo_work = WORK_DIR / repo_name repo_work.mkdir(parents=True, exist_ok=True) repo_urls = set() + package_names = [] + openedx_packages = [] if (js_reqs := Path("package-lock.json")).exists(): shutil.copyfile(js_reqs, repo_work / "package-lock.json") - with change_dir(repo_work): - repo_urls.update(check_js_dependencies()) + # with change_dir(repo_work): + # repo_urls.update(check_js_dependencies()) if (py_reqs := find_py_reqs()): shutil.copyfile(py_reqs, repo_work / "base.txt") - with change_dir(repo_work): - repo_urls.update(check_py_dependencies()) - return repo_urls + + with open(repo_work / "base.txt") as fbase: + # Read each line (package name) in the file + file_data = fbase.read() + + # Splitting the data by lines + lines = file_data.strip().split('\n') + for line in lines: + # Print the package name + parts = line.split('#', 1) + package_name = parts[0].strip() + package_names.append(package_name) + + for package in package_names: + if package != " ": + home_page = request_package_info_url(package) + if home_page is not None: + if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): + openedx_packages.append(home_page) + + return openedx_packages FIRST_PARTY_ORGS = ["openedx"] @@ -317,23 +356,23 @@ def process_directory(): "open-craft", "eduNEXT", "raccoongang", ] -# def urls_in_orgs(urls, orgs): -# """ -# Find urls that are in any of the `orgs`. -# """ -# return sorted( -# url for url in urls -# if any(f"/{org}/" in url for org in orgs) -# ) - -def urls_in_orgs(urls, org): +def urls_in_orgs(urls, orgs): """ Find urls that are in any of the `orgs`. """ return sorted( url for url in urls - if f"/{org}/" in url - ) + if any(f"/{org}/" in url for org in orgs) + ) + +# def urls_in_orgs(urls, org): +# """ +# Find urls that are in any of the `orgs`. +# """ +# return sorted( +# url for url in urls +# if f"/{org}/" in url +# ) def main(dirs=None, org=None): @@ -345,31 +384,18 @@ def main(dirs=None, org=None): repo_dir = sys.argv[1] org_flag_index = sys.argv.index("--org") org = sys.argv[org_flag_index + 1] - #import pdb; pdb.set_trace() print(f"Creating new work directory: {WORK_DIR}") shutil.rmtree(WORK_DIR, ignore_errors=True) - - #dirs = sorted(itertools.chain.from_iterable(d.splitlines() for d in dirs)) repo_urls = set() - #for i_dir, repo_dir in enumerate(dirs, start=1): -# print(f"-- repo {repo_dir} ({i_dir}/{len(dirs)}) ----------") with change_dir(repo_dir): repo_urls.update(process_directory()) - write_list(WORK_DIR / "repo_urls.txt", sorted(repo_urls)) - - #firsts = urls_in_orgs(repo_urls, FIRST_PARTY_ORGS) - #write_list(WORK_DIR / "first_party_urls.txt", firsts) - seconds = urls_in_orgs(repo_urls, org) - #write_list(WORK_DIR / "second_party_urls.txt", seconds) - print("== DONE ==============") print("Second-party:") - print("\n".join(seconds)) - if seconds: + print("\n".join(repo_urls)) + if repo_urls: sys.exit(1) - if __name__ == "__main__": main() From dd2818a4a6b2a91e3fa670403fc43b89100d9a72 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Wed, 17 Apr 2024 18:19:39 +0500 Subject: [PATCH 09/25] chore: testing workflow --- scripts/find_dependencies.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index a70fdb8585ad..f737987336cc 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -344,7 +344,8 @@ def process_directory(): if home_page is not None: if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): openedx_packages.append(home_page) - + + print(openedx_packages) return openedx_packages FIRST_PARTY_ORGS = ["openedx"] From 97027d7498793de3280840acd901482d73168280 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 09:11:02 +0500 Subject: [PATCH 10/25] chore: testting workflow --- scripts/find_dependencies.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index f737987336cc..a70fdb8585ad 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -344,8 +344,7 @@ def process_directory(): if home_page is not None: if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): openedx_packages.append(home_page) - - print(openedx_packages) + return openedx_packages FIRST_PARTY_ORGS = ["openedx"] From ba9fdd0a44694adc78493bb2c38aee89c5a1244d Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 12:04:03 +0500 Subject: [PATCH 11/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 879d1a67b54a..394d09b34ec1 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -31,4 +31,5 @@ jobs: run: chmod +x find_dependencies.py - name: Run Python script - run: python find_dependencies.py edx-platform --org edx \ No newline at end of file + run: python find_dependencies.py edx-platform --org edx + working-directory: ./requirements \ No newline at end of file From 099c566e9e582212ff5efa1dd402d16dc34e6383 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 12:06:15 +0500 Subject: [PATCH 12/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 394d09b34ec1..7e5d747e3572 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -6,7 +6,6 @@ on: defaults: run: shell: bash # strict bash - working-directory: ./scripts jobs: check_dependencies: @@ -32,4 +31,4 @@ jobs: - name: Run Python script run: python find_dependencies.py edx-platform --org edx - working-directory: ./requirements \ No newline at end of file + working-directory: ./scripts \ No newline at end of file From bc5e3d72776d58571f882a4cae3732afccacf423 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 12:11:33 +0500 Subject: [PATCH 13/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 7e5d747e3572..3400c7152ee7 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -30,5 +30,4 @@ jobs: run: chmod +x find_dependencies.py - name: Run Python script - run: python find_dependencies.py edx-platform --org edx - working-directory: ./scripts \ No newline at end of file + run: python find_dependencies.py edx-platform --org edx \ No newline at end of file From 01862d2f395160b869d360abe0d20dfce8046d07 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 12:20:32 +0500 Subject: [PATCH 14/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 3400c7152ee7..3481d5dba71f 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -6,6 +6,7 @@ on: defaults: run: shell: bash # strict bash + working-directory: ./scripts jobs: check_dependencies: @@ -30,4 +31,5 @@ jobs: run: chmod +x find_dependencies.py - name: Run Python script - run: python find_dependencies.py edx-platform --org edx \ No newline at end of file + run: python find_dependencies.py edx-platform --org edx + \ No newline at end of file From 3afa0624a3ae65cf09fcd074b937b6802be03cfe Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:19:45 +0500 Subject: [PATCH 15/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 21 +++++- scripts/find_dependencies.py | 90 ++++++++++++++++-------- 2 files changed, 80 insertions(+), 31 deletions(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 3481d5dba71f..b437ab188ae1 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -6,7 +6,6 @@ on: defaults: run: shell: bash # strict bash - working-directory: ./scripts jobs: check_dependencies: @@ -21,6 +20,26 @@ jobs: with: python-version: '3.8' + - name: Create repo_work directory + run: | + WORK_DIR="/tmp/unpack_reqs" + repo_name="${{ github.repository }}" + repo_work="$WORK_DIR/$repo_name" + mkdir -p "$repo_work" + echo "$repo_work" + + - name: Copy Python requirements file + run: | + for req_file in "requirements/edx/base.txt" "requirements/base.txt" "requirements.txt"; do + if [ -f "$req_file" ]; then + cp "$req_file" /tmp/unpack_reqs/openedx/edx-platform/base.txt + echo "Python requirements file found: $req_file" + echo "Content of base.txt:" + cat "$req_file" + break + fi + done + - name: Install requests module run: pip install requests diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index a70fdb8585ad..076580dc14e0 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -305,6 +305,32 @@ def request_package_info_url(package): else: print(f"Failed to retrieve data for package {package}. Status code:", response.status_code) +def find_file_in_project(filename): + """ + Recursively searches for a file within the project directory. + + Args: + - filename: The name of the file to search for. + + Returns: + - A list of file paths where the file was found. + """ + # Get the current working directory + project_root = os.getcwd() + + # List to store paths of found files + found_paths = [] + + # Recursively search for the file in the project directory + for root, dirs, files in os.walk(project_root): + if filename in files: + # Construct the full path of the found file + file_path = os.path.join(root, filename) + found_paths.append(file_path) + + return found_paths + + def process_directory(): """ @@ -313,37 +339,37 @@ def process_directory(): Also copies the considered dependencies file into the temp work directory, for later analysis. """ - repo_name = Path.cwd().name - repo_work = WORK_DIR / repo_name - repo_work.mkdir(parents=True, exist_ok=True) + # repo_name = Path.cwd().name + # repo_work = WORK_DIR / repo_name + # repo_work.mkdir(parents=True, exist_ok=True) repo_urls = set() package_names = [] openedx_packages = [] - if (js_reqs := Path("package-lock.json")).exists(): - shutil.copyfile(js_reqs, repo_work / "package-lock.json") + # if (js_reqs := Path("package-lock.json")).exists(): + # shutil.copyfile(js_reqs, repo_work / "package-lock.json") # with change_dir(repo_work): # repo_urls.update(check_js_dependencies()) - if (py_reqs := find_py_reqs()): - shutil.copyfile(py_reqs, repo_work / "base.txt") - - with open(repo_work / "base.txt") as fbase: - # Read each line (package name) in the file - file_data = fbase.read() - - # Splitting the data by lines - lines = file_data.strip().split('\n') - for line in lines: - # Print the package name - parts = line.split('#', 1) - package_name = parts[0].strip() - package_names.append(package_name) - - for package in package_names: - if package != " ": - home_page = request_package_info_url(package) - if home_page is not None: - if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): - openedx_packages.append(home_page) + # if (py_reqs := find_py_reqs()): + # shutil.copyfile(py_reqs, repo_work / "base.txt") + + with open(repo_work / "base.txt") as fbase: + # Read each line (package name) in the file + file_data = fbase.read() + + # Splitting the data by lines + lines = file_data.strip().split('\n') + for line in lines: + # Print the package name + parts = line.split('#', 1) + package_name = parts[0].strip() + package_names.append(package_name) + + for package in package_names: + if package != " ": + home_page = request_package_info_url(package) + if home_page is not None: + if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): + openedx_packages.append(home_page) return openedx_packages @@ -380,16 +406,20 @@ def main(dirs=None, org=None): Analyze the requirements in all of the directories mentioned on the command line. If arguments have newlines, treat each line as a separate directory. """ + import pdb; pdb.set_trace() if dirs is None: repo_dir = sys.argv[1] org_flag_index = sys.argv.index("--org") org = sys.argv[org_flag_index + 1] - print(f"Creating new work directory: {WORK_DIR}") - shutil.rmtree(WORK_DIR, ignore_errors=True) + #print(f"Creating new work directory: {WORK_DIR}") + #shutil.rmtree(WORK_DIR, ignore_errors=True) repo_urls = set() - with change_dir(repo_dir): - repo_urls.update(process_directory()) + #with change_dir(repo_dir): + repo_urls.update(process_directory()) + + + print("== DONE ==============") print("Second-party:") From 28f9b40d6b7238d4036abd17f0414b408cb91592 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:22:08 +0500 Subject: [PATCH 16/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index b437ab188ae1..21cda73a7c65 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -51,4 +51,5 @@ jobs: - name: Run Python script run: python find_dependencies.py edx-platform --org edx + working-directory: ./scripts \ No newline at end of file From e15846ad03fd258f20d6f210c64031a1f566fddb Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:23:50 +0500 Subject: [PATCH 17/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 21cda73a7c65..6a818ba2564c 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -48,6 +48,7 @@ jobs: - name: Make the script files executable run: chmod +x find_dependencies.py + working-directory: ./scripts - name: Run Python script run: python find_dependencies.py edx-platform --org edx From 13c2af34607be6070cb265739d2b0a456e368575 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:28:05 +0500 Subject: [PATCH 18/25] chore: testing workflow --- .github/workflows/check_dependencies.yml | 2 +- scripts/find_dependencies.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index 6a818ba2564c..d816a21e7554 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -30,7 +30,7 @@ jobs: - name: Copy Python requirements file run: | - for req_file in "requirements/edx/base.txt" "requirements/base.txt" "requirements.txt"; do + for req_file in "requirements/edx/kernel.in"; do if [ -f "$req_file" ]; then cp "$req_file" /tmp/unpack_reqs/openedx/edx-platform/base.txt echo "Python requirements file found: $req_file" diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index 076580dc14e0..63bc776f0cd9 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -406,11 +406,10 @@ def main(dirs=None, org=None): Analyze the requirements in all of the directories mentioned on the command line. If arguments have newlines, treat each line as a separate directory. """ - import pdb; pdb.set_trace() - if dirs is None: - repo_dir = sys.argv[1] - org_flag_index = sys.argv.index("--org") - org = sys.argv[org_flag_index + 1] + # if dirs is None: + # repo_dir = sys.argv[1] + # org_flag_index = sys.argv.index("--org") + # org = sys.argv[org_flag_index + 1] #print(f"Creating new work directory: {WORK_DIR}") #shutil.rmtree(WORK_DIR, ignore_errors=True) repo_urls = set() From 6d3939934a75547ea4372054d6f36696d331bd13 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:30:11 +0500 Subject: [PATCH 19/25] chore: testing workflow --- scripts/find_dependencies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index 63bc776f0cd9..d21bbf4078d3 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -351,7 +351,7 @@ def process_directory(): # repo_urls.update(check_js_dependencies()) # if (py_reqs := find_py_reqs()): # shutil.copyfile(py_reqs, repo_work / "base.txt") - + repo_work = "/tmp/unpack_reqs/openedx/edx-platform" with open(repo_work / "base.txt") as fbase: # Read each line (package name) in the file file_data = fbase.read() From 1a4f6329c47e742ee0ade13d653aef73661830fd Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:31:36 +0500 Subject: [PATCH 20/25] chore: testing workflow --- scripts/find_dependencies.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index d21bbf4078d3..44b930683f3b 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -351,8 +351,8 @@ def process_directory(): # repo_urls.update(check_js_dependencies()) # if (py_reqs := find_py_reqs()): # shutil.copyfile(py_reqs, repo_work / "base.txt") - repo_work = "/tmp/unpack_reqs/openedx/edx-platform" - with open(repo_work / "base.txt") as fbase: + + with open("/tmp/unpack_reqs/openedx/edx-platform/base.txt") as fbase: # Read each line (package name) in the file file_data = fbase.read() From 71d7349a288fd6cecb8a0ebdb8c069d1ab98db64 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:33:36 +0500 Subject: [PATCH 21/25] chore: testing workflow --- scripts/find_dependencies.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index 44b930683f3b..c39d48b161c6 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -423,8 +423,8 @@ def main(dirs=None, org=None): print("== DONE ==============") print("Second-party:") print("\n".join(repo_urls)) - if repo_urls: - sys.exit(1) + # if repo_urls: + # sys.exit(1) if __name__ == "__main__": main() From ec021b3949ab81d0c9b47e682fbc45173f08e0e3 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:36:10 +0500 Subject: [PATCH 22/25] chore: testing workflow --- scripts/find_dependencies.py | 179 +---------------------------------- 1 file changed, 4 insertions(+), 175 deletions(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index c39d48b161c6..8c7037add3c4 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -69,28 +69,6 @@ def run_command(cmd: str, outfile=None) -> Tuple[bool, str]: return proc.returncode == 0, output.strip() - -# @cached -# def npm_repo_url(npm_spec: str) -> Optional[str]: -# """Given 'jspkg@0.1.0', return a repo url.""" -# pkg, _, ver = npm_spec.rpartition("@") -# url = f"https://registry.npmjs.org/{pkg}/{ver}" -# try: -# resp = requests.get(url, timeout=60) -# if resp.status_code != 200: -# print(f"{npm_spec}: {url} -> {resp.status_code}") -# return None -# jdata = resp.json() -# except requests.RequestException as exc: -# print(f"Couldn't fetch npm data for {npm_spec}: {exc}") -# return None -# repo = jdata.get("repository") -# if repo is None: -# return None -# if isinstance(repo, dict): -# repo = repo["url"] -# return repo - def canonical_url(url: str) -> str: """Canonicalize a repo URL, probably on GitHub.""" for pat, repl in [ @@ -106,27 +84,6 @@ def canonical_url(url: str) -> str: url = f"https://github.com/{url}" return url -# @cached -# def find_real_url(url: str) -> Optional[str]: -# """Find the eventual real url for a redirected url.""" -# while True: -# try: -# resp = requests.head(url, timeout=60, allow_redirects=True) -# except requests.RequestException as exc: -# print(f"Couldn't fetch {url}: {exc}") -# return None -# if resp.status_code == 429: -# # I didn't know you could get 429 from https://github.com, but you can... -# wait = int(resp.headers.get("Retry-After", 10)) -# time.sleep(wait + 1) -# else: -# break - -# if resp.status_code == 200: -# return resp.url -# return None - - WORK_DIR = Path("/tmp/unpack_reqs") def parallel_map(func, data, description): @@ -140,106 +97,6 @@ def parallel_map(func, data, description): progress.update(pbar, advance=1) yield result -# def write_list(path: str, lines: Iterable[str]): -# """Write a list of strings to a file.""" -# with Path(path).open("w") as flist: -# for line in lines: -# print(line, file=flist) - -# def check_js_dependencies() -> Iterable[str]: -# """Check the JS dependencies in package-lock.json, returning a set of repo URLs.""" -# print("Checking JavaScript dependencies") -# with Path("package-lock.json").open() as lockf: -# lock_data = json.load(lockf) - -# deps = set() -# for name, pkg in lock_data["packages"].items(): -# name = pkg.get("name") or name -# name = name.rpartition("node_modules/")[-1] -# version = pkg.get("version") -# if version is None: -# continue -# deps.add(f"{name}@{version}") -# write_list("deps.txt", sorted(deps)) - -# urls = set() -# for url in parallel_map(npm_repo_url, deps, "Getting npm URLs"): -# if url: -# urls.add(canonical_url(url)) - -# real_urls = set() -# for url in parallel_map(find_real_url, urls, "Getting real URLs"): -# if url: -# real_urls.add(url) - -# print(f"{len(deps)} deps, {len(urls)} urls, {len(real_urls)} real urls") -# write_list("repo_urls.txt", sorted(real_urls)) -# return real_urls - -# def check_py_dependencies() -> Iterable[str]: -# """Check the Python dependencies in base.txt, returning a set of repo URLs.""" -# print("Checking Python dependencies") - -# print("Creating venv") -# run_command("python3 -m venv .venv", "make_venv.log") -# run_command(".venv/bin/python3 -m pip install -U pip", "pip_upgrade.log") -# print("Downloading packages") -# run_command(".venv/bin/python3 -m pip download --dest files -r base.txt", "pip_download.log") - -# urls = set() -# for url in parallel_map(repo_url_from_wheel, Path("files").glob("*.whl"), "Examining wheels"): -# if url: -# urls.add(canonical_url(url)) - -# for url in parallel_map(repo_url_from_tgz, Path("files").glob("*.tar.gz"), "Examining tar.gz"): -# if url: -# urls.add(canonical_url(url)) - -# with open("base.txt") as fbase: -# for line in fbase: -# if match := re.search(r"https://github.com[^@ #]*(\.git)?", line): -# urls.add(canonical_url(match[0])) - -# real_urls = set() -# for url in parallel_map(find_real_url, urls, "Getting real URLs"): -# if url: -# real_urls.add(url) - -# write_list("repo_urls.txt", sorted(real_urls)) -# return real_urls - -# def matching_text(text, regexes): -# """Find a line in text matching a regex, and return the first regex group.""" -# for regex in regexes: -# for line in text.splitlines(): -# if match := re.search(regex, line): -# return match[1] -# return None - -# @cached -# def repo_url_from_wheel(wheel_path: str) -> Optional[str]: -# """Read metadata from a .whl file, returning the repo URL.""" -# with zipfile.ZipFile(wheel_path) as whl_file: -# fmetadata = next((f for f in whl_file.namelist() if f.endswith("/METADATA")), None) -# if fmetadata is None: -# print(f"No metadata in {wheel_path}") -# return None -# with whl_file.open(fmetadata) as inner_file: -# metadata = inner_file.read().decode("utf-8") -# return repo_url_from_metadata(wheel_path, metadata) - -# @cached -# def repo_url_from_tgz(tgz_path: str) -> Optional[str]: -# """Read metadata from a .tar.gz file, returning the repo URL.""" -# with tarfile.open(tgz_path) as tgz_file: -# fmetadata = next((f for f in tgz_file.getnames() if f.endswith("/PKG-INFO")), None) -# if fmetadata is None: -# print(f"No metadata in {tgz_path}") -# return None -# metadata = tgz_file.extractfile(fmetadata).read().decode("utf-8") -# return repo_url_from_metadata(tgz_path, metadata) - - SOURCE_URL_REGEXES = [ # These regexes are tried in order. The first group is the extracted URL. r"(?i)^Project-URL: Source.*,\s*(.*)$", @@ -339,19 +196,11 @@ def process_directory(): Also copies the considered dependencies file into the temp work directory, for later analysis. """ - # repo_name = Path.cwd().name - # repo_work = WORK_DIR / repo_name - # repo_work.mkdir(parents=True, exist_ok=True) + repo_urls = set() package_names = [] openedx_packages = [] - # if (js_reqs := Path("package-lock.json")).exists(): - # shutil.copyfile(js_reqs, repo_work / "package-lock.json") - # with change_dir(repo_work): - # repo_urls.update(check_js_dependencies()) - # if (py_reqs := find_py_reqs()): - # shutil.copyfile(py_reqs, repo_work / "base.txt") - + with open("/tmp/unpack_reqs/openedx/edx-platform/base.txt") as fbase: # Read each line (package name) in the file file_data = fbase.read() @@ -391,40 +240,20 @@ def urls_in_orgs(urls, orgs): if any(f"/{org}/" in url for org in orgs) ) -# def urls_in_orgs(urls, org): -# """ -# Find urls that are in any of the `orgs`. -# """ -# return sorted( -# url for url in urls -# if f"/{org}/" in url -# ) - def main(dirs=None, org=None): """ Analyze the requirements in all of the directories mentioned on the command line. If arguments have newlines, treat each line as a separate directory. """ - # if dirs is None: - # repo_dir = sys.argv[1] - # org_flag_index = sys.argv.index("--org") - # org = sys.argv[org_flag_index + 1] - #print(f"Creating new work directory: {WORK_DIR}") - #shutil.rmtree(WORK_DIR, ignore_errors=True) repo_urls = set() - - #with change_dir(repo_dir): repo_urls.update(process_directory()) - - - print("== DONE ==============") print("Second-party:") print("\n".join(repo_urls)) - # if repo_urls: - # sys.exit(1) + if repo_urls: + sys.exit(1) if __name__ == "__main__": main() From be4e10e05d591801e994fc65b8377486d060d25b Mon Sep 17 00:00:00 2001 From: salman2013 Date: Thu, 18 Apr 2024 16:46:37 +0500 Subject: [PATCH 23/25] chore: testing workflow --- scripts/find_dependencies.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index 8c7037add3c4..31a5b73cc3b1 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -154,7 +154,6 @@ def request_package_info_url(package): url = f"{base_url}{package}/json" response = requests.get(url) if response.status_code == 200: - #print(f"Package: {package}") data_dict = response.json() info = data_dict["info"] home_page = info["home_page"] From c6fcab906336d39c655fbb1e3f74a2a1c37007f0 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Fri, 19 Apr 2024 16:43:33 +0500 Subject: [PATCH 24/25] chore: testing workflow --- requirements/edx/testing.in | 1 + scripts/find_dependencies.py | 41 ++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/requirements/edx/testing.in b/requirements/edx/testing.in index b903768f4de6..3ef467f2286a 100644 --- a/requirements/edx/testing.in +++ b/requirements/edx/testing.in @@ -46,3 +46,4 @@ unidiff # Required by coverage_pytest_plugin pylint-pytest==0.3.0 # A Pylint plugin to suppress pytest-related false positives. pact-python # Library for contract testing py # Needed for pytest configurations, was previously been fetched through tox +requirements-parser \ No newline at end of file diff --git a/scripts/find_dependencies.py b/scripts/find_dependencies.py index 31a5b73cc3b1..5471ee68f2a4 100644 --- a/scripts/find_dependencies.py +++ b/scripts/find_dependencies.py @@ -13,6 +13,7 @@ import json import os import re +import requirements import shlex import shutil import subprocess @@ -195,30 +196,28 @@ def process_directory(): Also copies the considered dependencies file into the temp work directory, for later analysis. """ - + repo_name = Path.cwd().name + repo_work = WORK_DIR / repo_name + repo_work.mkdir(parents=True, exist_ok=True) repo_urls = set() package_names = [] openedx_packages = [] - - with open("/tmp/unpack_reqs/openedx/edx-platform/base.txt") as fbase: - # Read each line (package name) in the file - file_data = fbase.read() - - # Splitting the data by lines - lines = file_data.strip().split('\n') - for line in lines: - # Print the package name - parts = line.split('#', 1) - package_name = parts[0].strip() - package_names.append(package_name) - - for package in package_names: - if package != " ": - home_page = request_package_info_url(package) - if home_page is not None: - if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): - openedx_packages.append(home_page) - + if (js_reqs := Path("package-lock.json")).exists(): + shutil.copyfile(js_reqs, repo_work / "package-lock.json") + + if (py_reqs := find_py_reqs()): + shutil.copyfile(py_reqs, repo_work / "base.txt") + + with open(repo_work / "base.txt") as fbase: + # Read each line (package name) in the file + # with open('requirements.txt', 'r') as fd: + for req in requirements.parse(fbase): + print(req.name) + home_page = request_package_info_url(req.name) + if home_page is not None: + if match := urls_in_orgs([home_page], SECOND_PARTY_ORGS): + openedx_packages.append(home_page) + return openedx_packages FIRST_PARTY_ORGS = ["openedx"] From 153b281e45f1ae66b5112e363721d36710098864 Mon Sep 17 00:00:00 2001 From: salman2013 Date: Fri, 19 Apr 2024 19:37:08 +0500 Subject: [PATCH 25/25] chore: testing workflow --- requirements/common_constraints.txt | 9 + requirements/edx-sandbox/py38.txt | 22 +- requirements/edx/base.txt | 197 +++++++------- requirements/edx/coverage.txt | 4 +- requirements/edx/development.txt | 257 +++++++++--------- requirements/edx/doc.txt | 198 +++++++------- requirements/edx/paver.txt | 8 +- requirements/edx/semgrep.txt | 18 +- requirements/edx/testing.txt | 237 ++++++++-------- requirements/pip-tools.txt | 16 +- requirements/pip.txt | 4 +- scripts/user_retirement/requirements/base.txt | 91 +++---- .../user_retirement/requirements/testing.txt | 115 ++++---- scripts/xblock/requirements.txt | 2 +- 14 files changed, 592 insertions(+), 586 deletions(-) diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index 54348c7a58fa..4abc9ae22cb3 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -24,3 +24,12 @@ Django<5.0 elasticsearch<7.14.0 # django-simple-history>3.0.0 adds indexing and causes a lot of migrations to be affected + +# opentelemetry requires version 6.x at the moment: +# https://github.com/open-telemetry/opentelemetry-python/issues/3570 +# Normally this could be added as a constraint in edx-django-utils, where we're +# adding the opentelemetry dependency. However, when we compile pip-tools.txt, +# that uses version 7.x, and then there's no undoing that when compiling base.txt. +# So we need to pin it globally, for now. +# Ticket for unpinning: https://github.com/openedx/edx-lint/issues/407 +importlib-metadata<7 diff --git a/requirements/edx-sandbox/py38.txt b/requirements/edx-sandbox/py38.txt index 4030fa2b35ed..1fe1d6b79bf7 100644 --- a/requirements/edx-sandbox/py38.txt +++ b/requirements/edx-sandbox/py38.txt @@ -22,11 +22,11 @@ cryptography==38.0.4 # -r requirements/edx-sandbox/py38.in cycler==0.12.1 # via matplotlib -fonttools==4.49.0 +fonttools==4.51.0 # via matplotlib -importlib-resources==6.1.1 +importlib-resources==6.4.0 # via matplotlib -joblib==1.3.2 +joblib==1.4.0 # via nltk kiwisolver==1.4.5 # via matplotlib @@ -56,25 +56,25 @@ numpy==1.22.4 # matplotlib # openedx-calc # scipy -openedx-calc==3.0.1 +openedx-calc==3.1.0 # via -r requirements/edx-sandbox/py38.in -packaging==23.2 +packaging==24.0 # via matplotlib -pillow==10.2.0 +pillow==10.3.0 # via matplotlib -pycparser==2.21 +pycparser==2.22 # via cffi -pyparsing==3.1.1 +pyparsing==3.1.2 # via # -r requirements/edx-sandbox/py38.in # chem # matplotlib # openedx-calc -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via matplotlib random2==1.0.2 # via -r requirements/edx-sandbox/py38.in -regex==2023.12.25 +regex==2024.4.16 # via nltk scipy==1.7.3 # via @@ -93,5 +93,5 @@ sympy==1.12 # openedx-calc tqdm==4.66.2 # via nltk -zipp==3.17.0 +zipp==3.18.1 # via importlib-resources diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index b5970757e553..2a15a9d0a67d 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -6,9 +6,9 @@ # -e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack # via -r requirements/edx/github.in -acid-xblock==0.2.1 +acid-xblock==0.3.1 # via -r requirements/edx/kernel.in -aiohttp==3.9.3 +aiohttp==3.9.5 # via # geoip2 # openai @@ -24,7 +24,7 @@ aniso8601==9.0.1 # via edx-tincan-py35 appdirs==1.4.4 # via fs -asgiref==3.7.2 +asgiref==3.8.1 # via # django # django-cors-headers @@ -57,6 +57,7 @@ backports-zoneinfo[tzdata]==0.2.1 # via # celery # django + # edx-milestones # icalendar # kombu beautifulsoup4==4.12.3 @@ -74,20 +75,20 @@ bleach[css]==6.1.0 # xblock-poll boto==2.49.0 # via -r requirements/edx/kernel.in -boto3==1.34.45 +boto3==1.34.87 # via # -r requirements/edx/kernel.in # django-ses # fs-s3fs # ora2 -botocore==1.34.45 +botocore==1.34.87 # via # -r requirements/edx/kernel.in # boto3 # s3transfer bridgekeeper==0.9 # via -r requirements/edx/kernel.in -celery==5.3.6 +celery==5.4.0 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/kernel.in @@ -130,13 +131,13 @@ click==8.1.6 # edx-django-utils # nltk # user-util -click-didyoumean==0.3.0 +click-didyoumean==0.3.1 # via celery click-plugins==1.1.1 # via celery click-repl==0.3.0 # via celery -code-annotations==1.6.0 +code-annotations==1.8.0 # via # edx-enterprise # edx-toggles @@ -148,7 +149,7 @@ coreschema==0.0.4 # via # coreapi # drf-yasg -crowdsourcehinter-xblock==0.6 +crowdsourcehinter-xblock==0.7 # via -r requirements/edx/bundled.in cryptography==38.0.4 # via @@ -163,7 +164,7 @@ cryptography==38.0.4 # pyopenssl # snowflake-connector-python # social-auth-core -cssutils==2.9.0 +cssutils==2.10.2 # via pynliner defusedxml==0.7.1 # via @@ -172,7 +173,7 @@ defusedxml==0.7.1 # ora2 # python3-openid # social-auth-core -django==4.2.10 +django==4.2.11 # via # -c requirements/edx/../common_constraints.txt # -c requirements/edx/../constraints.txt @@ -253,7 +254,7 @@ django-celery-results==2.5.1 # via -r requirements/edx/kernel.in django-classy-tags==4.1.0 # via django-sekizai -django-config-models==2.5.1 +django-config-models==2.7.0 # via # -r requirements/edx/kernel.in # edx-enterprise @@ -261,7 +262,7 @@ django-config-models==2.5.1 # lti-consumer-xblock django-cors-headers==4.3.1 # via -r requirements/edx/kernel.in -django-countries==7.5.1 +django-countries==7.6.1 # via # -r requirements/edx/kernel.in # edx-enterprise @@ -278,13 +279,13 @@ django-environ==0.11.2 # via openedx-blockstore django-fernet-fields-v2==0.9 # via edx-enterprise -django-filter==23.5 +django-filter==24.2 # via # -r requirements/edx/kernel.in # edx-enterprise # lti-consumer-xblock # openedx-blockstore -django-ipware==6.0.4 +django-ipware==6.0.5 # via # -r requirements/edx/kernel.in # edx-enterprise @@ -293,7 +294,7 @@ django-js-asset==2.2.0 # via django-mptt django-method-override==1.0.4 # via -r requirements/edx/kernel.in -django-model-utils==4.4.0 +django-model-utils==4.5.0 # via # -r requirements/edx/kernel.in # django-user-tasks @@ -334,7 +335,7 @@ django-sekizai==4.1.0 # via # -r requirements/edx/kernel.in # openedx-django-wiki -django-ses==3.5.2 +django-ses==3.6.0 # via -r requirements/edx/bundled.in django-simple-history==3.4.0 # via @@ -356,7 +357,7 @@ django-storages==1.14.2 # via # -r requirements/edx/kernel.in # edxval -django-user-tasks==3.1.0 +django-user-tasks==3.2.0 # via -r requirements/edx/kernel.in django-waffle==4.1.0 # via @@ -396,59 +397,59 @@ djangorestframework==3.14.0 # super-csv djangorestframework-xml==2.0.0 # via edx-enterprise -done-xblock==2.2.0 +done-xblock==2.3.0 # via -r requirements/edx/bundled.in drf-jwt==1.19.2 # via edx-drf-extensions drf-nested-routers==0.93.5 # via openedx-blockstore -drf-spectacular==0.27.1 +drf-spectacular==0.27.2 # via -r requirements/edx/kernel.in drf-yasg==1.21.5 # via # -c requirements/edx/../constraints.txt # django-user-tasks # edx-api-doc-tools -edx-ace==1.7.0 +edx-ace==1.8.0 # via -r requirements/edx/kernel.in -edx-api-doc-tools==1.7.0 +edx-api-doc-tools==1.8.0 # via # -r requirements/edx/kernel.in # edx-name-affirmation # openedx-blockstore -edx-auth-backends==4.2.0 +edx-auth-backends==4.3.0 # via # -r requirements/edx/kernel.in # openedx-blockstore -edx-braze-client==0.2.2 +edx-braze-client==0.2.3 # via # -r requirements/edx/bundled.in # edx-enterprise -edx-bulk-grades==1.0.2 +edx-bulk-grades==1.1.0 # via # -r requirements/edx/kernel.in # staff-graded-xblock -edx-ccx-keys==1.2.1 +edx-ccx-keys==1.3.0 # via # -r requirements/edx/kernel.in # lti-consumer-xblock -edx-celeryutils==1.2.5 +edx-celeryutils==1.3.0 # via # -r requirements/edx/kernel.in # edx-name-affirmation # super-csv edx-codejail==3.3.3 # via -r requirements/edx/kernel.in -edx-completion==4.4.0 +edx-completion==4.6.0 # via -r requirements/edx/kernel.in -edx-django-release-util==1.3.0 +edx-django-release-util==1.4.0 # via # -r requirements/edx/kernel.in # edxval # openedx-blockstore -edx-django-sites-extensions==4.0.2 +edx-django-sites-extensions==4.2.0 # via -r requirements/edx/kernel.in -edx-django-utils==5.10.1 +edx-django-utils==5.12.0 # via # -r requirements/edx/kernel.in # django-config-models @@ -465,7 +466,7 @@ edx-django-utils==5.10.1 # openedx-events # ora2 # super-csv -edx-drf-extensions==10.2.0 +edx-drf-extensions==10.3.0 # via # -r requirements/edx/kernel.in # edx-completion @@ -481,15 +482,15 @@ edx-enterprise==4.13.3 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/kernel.in -edx-event-bus-kafka==5.6.0 +edx-event-bus-kafka==5.7.0 # via -r requirements/edx/kernel.in -edx-event-bus-redis==0.3.3 +edx-event-bus-redis==0.5.0 # via -r requirements/edx/kernel.in -edx-i18n-tools==1.3.0 +edx-i18n-tools==1.5.0 # via # -r requirements/edx/bundled.in # ora2 -edx-milestones==0.5.0 +edx-milestones==0.6.0 # via -r requirements/edx/kernel.in edx-name-affirmation==2.3.7 # via -r requirements/edx/kernel.in @@ -509,7 +510,7 @@ edx-opaque-keys[django]==2.5.1 # lti-consumer-xblock # openedx-events # ora2 -edx-organizations==6.12.1 +edx-organizations==6.13.0 # via -r requirements/edx/kernel.in edx-proctoring==4.16.1 # via @@ -517,22 +518,22 @@ edx-proctoring==4.16.1 # edx-proctoring-proctortrack edx-rbac==1.8.0 # via edx-enterprise -edx-rest-api-client==5.6.1 +edx-rest-api-client==5.7.0 # via # -r requirements/edx/kernel.in # edx-enterprise # edx-proctoring -edx-search==3.8.2 +edx-search==3.9.1 # via -r requirements/edx/kernel.in -edx-sga==0.23.1 +edx-sga==0.24.1 # via -r requirements/edx/bundled.in -edx-submissions==3.6.0 +edx-submissions==3.7.0 # via # -r requirements/edx/kernel.in # ora2 edx-tincan-py35==1.0.0 # via edx-enterprise -edx-toggles==5.1.1 +edx-toggles==5.2.0 # via # -r requirements/edx/kernel.in # edx-completion @@ -546,7 +547,7 @@ edx-toggles==5.1.1 # ora2 edx-token-utils==0.2.1 # via -r requirements/edx/kernel.in -edx-when==2.4.0 +edx-when==2.5.0 # via # -r requirements/edx/kernel.in # edx-proctoring @@ -560,7 +561,7 @@ enmerkar==0.7.1 # via enmerkar-underscore enmerkar-underscore==2.2.0 # via -r requirements/edx/kernel.in -event-tracking==2.3.0 +event-tracking==2.4.0 # via # -r requirements/edx/kernel.in # edx-completion @@ -568,7 +569,7 @@ event-tracking==2.3.0 # edx-search fastavro==1.9.4 # via openedx-events -filelock==3.13.1 +filelock==3.13.4 # via snowflake-connector-python frozenlist==1.4.1 # via @@ -584,31 +585,33 @@ fs-s3fs==0.1.8 # via # -r requirements/edx/kernel.in # openedx-django-pyfs -future==0.18.3 +future==1.0.0 # via pyjwkest geoip2==4.8.0 # via -r requirements/edx/kernel.in glob2==0.7 # via -r requirements/edx/kernel.in -gunicorn==21.2.0 +gunicorn==22.0.0 # via -r requirements/edx/kernel.in -help-tokens==2.3.0 +help-tokens==2.4.0 # via -r requirements/edx/kernel.in html5lib==1.1 # via # -r requirements/edx/kernel.in # ora2 -icalendar==5.0.11 +icalendar==5.0.12 # via -r requirements/edx/kernel.in -idna==3.6 +idna==3.7 # via # -r requirements/edx/paver.txt # optimizely-sdk # requests # snowflake-connector-python # yarl -importlib-metadata==7.0.1 - # via markdown +importlib-metadata==6.11.0 + # via + # -c requirements/edx/../common_constraints.txt + # markdown importlib-resources==5.13.0 # via # jsonschema @@ -634,7 +637,7 @@ jmespath==1.0.1 # via # boto3 # botocore -joblib==1.3.2 +joblib==1.4.0 # via nltk jsondiff==2.0.0 # via edx-enterprise @@ -653,11 +656,11 @@ jsonschema==4.21.1 # optimizely-sdk jsonschema-specifications==2023.12.1 # via jsonschema -jwcrypto==1.5.4 +jwcrypto==1.5.6 # via # django-oauth-toolkit # pylti1p3 -kombu==5.3.5 +kombu==5.3.7 # via celery laboratory==1.0.2 # via -r requirements/edx/kernel.in @@ -691,7 +694,7 @@ lxml==4.9.4 # xmlsec mailsnake==1.6.4 # via -r requirements/edx/bundled.in -mako==1.3.2 +mako==1.3.3 # via # -r requirements/edx/kernel.in # acid-xblock @@ -715,11 +718,11 @@ markupsafe==2.1.5 # mako # openedx-calc # xblock -maxminddb==2.5.2 +maxminddb==2.6.1 # via geoip2 mock==5.1.0 # via -r requirements/edx/paver.txt -mongoengine==0.27.0 +mongoengine==0.28.2 # via -r requirements/edx/kernel.in monotonic==1.6 # via @@ -735,7 +738,7 @@ mysqlclient==2.2.4 # via # -r requirements/edx/kernel.in # openedx-blockstore -newrelic==9.6.0 +newrelic==9.9.0 # via # -r requirements/edx/bundled.in # edx-django-utils @@ -766,23 +769,23 @@ openedx-atlas==0.6.0 # via -r requirements/edx/kernel.in openedx-blockstore==1.4.0 # via -r requirements/edx/kernel.in -openedx-calc==3.0.1 +openedx-calc==3.1.0 # via -r requirements/edx/kernel.in -openedx-django-pyfs==3.5.0 +openedx-django-pyfs==3.6.0 # via # lti-consumer-xblock # xblock openedx-django-require==2.1.0 # via -r requirements/edx/kernel.in -openedx-django-wiki==2.0.3 +openedx-django-wiki==2.1.0 # via -r requirements/edx/kernel.in -openedx-events==9.5.2 +openedx-events==9.9.2 # via # -r requirements/edx/kernel.in # edx-event-bus-kafka # edx-event-bus-redis # event-tracking -openedx-filters==1.6.0 +openedx-filters==1.8.1 # via # -r requirements/edx/kernel.in # lti-consumer-xblock @@ -796,9 +799,9 @@ optimizely-sdk==4.1.1 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/bundled.in -ora2==6.0.34 +ora2==6.6.2 # via -r requirements/edx/bundled.in -packaging==23.2 +packaging==24.0 # via # drf-yasg # gunicorn @@ -806,7 +809,7 @@ packaging==23.2 # snowflake-connector-python pansi==2020.7.3 # via py2neo -path==16.10.0 +path==16.14.0 # via # -r requirements/edx/kernel.in # -r requirements/edx/paver.txt @@ -827,7 +830,7 @@ pgpy==0.6.0 # via edx-enterprise piexif==1.1.3 # via -r requirements/edx/kernel.in -pillow==10.2.0 +pillow==10.3.0 # via # -r requirements/edx/kernel.in # edx-enterprise @@ -835,7 +838,7 @@ pillow==10.2.0 # edxval pkgutil-resolve-name==1.3.10 # via jsonschema -platformdirs==3.11.0 +platformdirs==4.2.0 # via snowflake-connector-python polib==1.2.0 # via edx-i18n-tools @@ -849,11 +852,11 @@ py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo- # via # -c requirements/edx/../constraints.txt # -r requirements/edx/bundled.in -pyasn1==0.5.1 +pyasn1==0.6.0 # via pgpy pycountry==23.12.11 # via -r requirements/edx/kernel.in -pycparser==2.21 +pycparser==2.22 # via cffi pycryptodomex==3.20.0 # via @@ -905,7 +908,7 @@ pyopenssl==22.0.0 # -c requirements/edx/../constraints.txt # optimizely-sdk # snowflake-connector-python -pyparsing==3.1.1 +pyparsing==3.1.2 # via # chem # openedx-calc @@ -915,7 +918,7 @@ pysrt==1.1.2 # via # -r requirements/edx/kernel.in # edxval -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/edx/kernel.in # analytics-python @@ -928,13 +931,13 @@ python-dateutil==2.8.2 # olxcleaner # ora2 # xblock -python-ipware==2.0.1 +python-ipware==2.0.4 # via django-ipware python-memcached==1.62 # via -r requirements/edx/paver.txt python-slugify==8.0.4 # via code-annotations -python-swiftclient==4.4.0 +python-swiftclient==4.5.0 # via ora2 python3-openid==3.2.0 ; python_version >= "3" # via @@ -975,17 +978,17 @@ pyyaml==6.0.1 # xblock random2==1.0.2 # via -r requirements/edx/kernel.in -recommender-xblock==2.1.1 +recommender-xblock==2.2.0 # via -r requirements/edx/bundled.in -redis==5.0.1 +redis==5.0.3 # via # -r requirements/edx/kernel.in # walrus -referencing==0.33.0 +referencing==0.34.0 # via # jsonschema # jsonschema-specifications -regex==2023.12.25 +regex==2024.4.16 # via nltk requests==2.31.0 # via @@ -1011,7 +1014,7 @@ requests==2.31.0 # snowflake-connector-python # social-auth-core # xblock-google-drive -requests-oauthlib==1.3.1 +requests-oauthlib==2.0.0 # via # -r requirements/edx/kernel.in # social-auth-core @@ -1029,7 +1032,7 @@ rules==3.3 # edx-enterprise # edx-proctoring # openedx-learning -s3transfer==0.10.0 +s3transfer==0.10.1 # via boto3 sailthru-client==2.2.3 # via edx-ace @@ -1040,7 +1043,7 @@ scipy==1.7.3 # openedx-calc semantic-version==2.10.0 # via edx-drf-extensions -shapely==2.0.3 +shapely==2.0.4 # via -r requirements/edx/kernel.in simplejson==3.19.2 # via @@ -1084,7 +1087,7 @@ slumber==0.7.1 # edx-bulk-grades # edx-enterprise # edx-rest-api-client -snowflake-connector-python==3.7.0 +snowflake-connector-python==3.9.0 # via edx-enterprise social-auth-app-django==5.0.0 # via @@ -1107,14 +1110,14 @@ sortedcontainers==2.4.0 # snowflake-connector-python soupsieve==2.5 # via beautifulsoup4 -sqlparse==0.4.4 +sqlparse==0.5.0 # via # -r requirements/edx/kernel.in # django # openedx-blockstore -staff-graded-xblock==2.2.0 +staff-graded-xblock==2.3.0 # via -r requirements/edx/bundled.in -stevedore==5.1.0 +stevedore==5.2.0 # via # -r requirements/edx/kernel.in # -r requirements/edx/paver.txt @@ -1123,23 +1126,23 @@ stevedore==5.1.0 # edx-django-utils # edx-enterprise # edx-opaque-keys -super-csv==3.1.0 +super-csv==3.2.0 # via edx-bulk-grades sympy==1.12 # via openedx-calc -testfixtures==8.0.0 +testfixtures==8.1.0 # via edx-enterprise text-unidecode==1.3 # via python-slugify tinycss2==1.2.1 # via bleach -tomlkit==0.12.3 +tomlkit==0.12.4 # via snowflake-connector-python tqdm==4.66.2 # via # nltk # openai -typing-extensions==4.9.0 +typing-extensions==4.11.0 # via # -r requirements/edx/paver.txt # asgiref @@ -1172,7 +1175,7 @@ urllib3==1.26.18 # py2neo # requests # snowflake-connector-python -user-util==1.0.0 +user-util==1.1.0 # via -r requirements/edx/kernel.in vine==5.1.0 # via @@ -1187,7 +1190,7 @@ watchdog==4.0.0 # via -r requirements/edx/paver.txt wcwidth==0.2.13 # via prompt-toolkit -web-fragments==2.1.0 +web-fragments==2.2.0 # via # -r requirements/edx/kernel.in # crowdsourcehinter-xblock @@ -1206,7 +1209,7 @@ webob==1.8.7 # xblock wrapt==1.16.0 # via -r requirements/edx/paver.txt -xblock[django]==1.10.0 +xblock[django]==4.0.0 # via # -r requirements/edx/kernel.in # acid-xblock @@ -1222,21 +1225,21 @@ xblock[django]==1.10.0 # xblock-google-drive # xblock-poll # xblock-utils -xblock-drag-and-drop-v2==3.4.0 +xblock-drag-and-drop-v2==4.0.1 # via -r requirements/edx/bundled.in -xblock-google-drive==0.6.1 +xblock-google-drive==0.7.0 # via -r requirements/edx/bundled.in xblock-poll==1.13.0 # via -r requirements/edx/bundled.in xblock-utils==4.0.0 # via edx-sga -xmlsec==1.3.13 +xmlsec==1.3.14 # via python3-saml xss-utils==0.5.0 # via -r requirements/edx/kernel.in yarl==1.9.4 # via aiohttp -zipp==3.17.0 +zipp==3.18.1 # via # importlib-metadata # importlib-resources diff --git a/requirements/edx/coverage.txt b/requirements/edx/coverage.txt index ea5df0056947..ef24c99036c4 100644 --- a/requirements/edx/coverage.txt +++ b/requirements/edx/coverage.txt @@ -6,9 +6,9 @@ # chardet==5.2.0 # via diff-cover -coverage==7.4.1 +coverage==7.4.4 # via -r requirements/edx/coverage.in -diff-cover==8.0.3 +diff-cover==9.0.0 # via -r requirements/edx/coverage.in jinja2==3.1.3 # via diff-cover diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 92704a6f84e9..543af63e05a0 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -12,11 +12,11 @@ accessible-pygments==0.0.4 # via # -r requirements/edx/doc.txt # pydata-sphinx-theme -acid-xblock==0.2.1 +acid-xblock==0.3.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -aiohttp==3.9.3 +aiohttp==3.9.5 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -62,7 +62,7 @@ appdirs==1.4.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # fs -asgiref==3.7.2 +asgiref==3.8.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -116,6 +116,7 @@ backports-zoneinfo[tzdata]==0.2.1 # -r requirements/edx/testing.txt # celery # django + # edx-milestones # icalendar # kombu beautifulsoup4==4.12.3 @@ -143,14 +144,14 @@ boto==2.49.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -boto3==1.34.45 +boto3==1.34.87 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # django-ses # fs-s3fs # ora2 -botocore==1.34.45 +botocore==1.34.87 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -160,15 +161,15 @@ bridgekeeper==0.9 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -build==1.0.3 +build==1.2.1 # via # -r requirements/edx/../pip-tools.txt # pip-tools -cachetools==5.3.2 +cachetools==5.3.3 # via # -r requirements/edx/testing.txt # tox -celery==5.3.6 +celery==5.4.0 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/doc.txt @@ -192,6 +193,7 @@ cffi==1.16.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # cryptography + # pact-python # pynacl # snowflake-connector-python chardet==5.2.0 @@ -234,7 +236,7 @@ click==8.1.6 # pip-tools # user-util # uvicorn -click-didyoumean==0.3.0 +click-didyoumean==0.3.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -253,7 +255,7 @@ click-repl==0.3.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # celery -code-annotations==1.6.0 +code-annotations==1.8.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -279,11 +281,11 @@ coreschema==0.0.4 # -r requirements/edx/testing.txt # coreapi # drf-yasg -coverage[toml]==7.4.1 +coverage[toml]==7.4.4 # via # -r requirements/edx/testing.txt # pytest-cov -crowdsourcehinter-xblock==0.6 +crowdsourcehinter-xblock==0.7 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -305,12 +307,12 @@ cssselect==1.2.0 # via # -r requirements/edx/testing.txt # pyquery -cssutils==2.9.0 +cssutils==2.10.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # pynliner -ddt==1.7.1 +ddt==1.7.2 # via -r requirements/edx/testing.txt deepmerge==1.1.1 # via @@ -324,7 +326,7 @@ defusedxml==0.7.1 # ora2 # python3-openid # social-auth-core -diff-cover==8.0.3 +diff-cover==9.0.0 # via -r requirements/edx/testing.txt dill==0.3.8 # via @@ -334,7 +336,7 @@ distlib==0.3.8 # via # -r requirements/edx/testing.txt # virtualenv -django==4.2.10 +django==4.2.11 # via # -c requirements/edx/../common_constraints.txt # -c requirements/edx/../constraints.txt @@ -430,7 +432,7 @@ django-classy-tags==4.1.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # django-sekizai -django-config-models==2.5.1 +django-config-models==2.7.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -441,7 +443,7 @@ django-cors-headers==4.3.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -django-countries==7.5.1 +django-countries==7.6.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -468,14 +470,14 @@ django-fernet-fields-v2==0.9 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise -django-filter==23.5 +django-filter==24.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise # lti-consumer-xblock # openedx-blockstore -django-ipware==6.0.4 +django-ipware==6.0.5 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -490,7 +492,7 @@ django-method-override==1.0.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -django-model-utils==4.4.0 +django-model-utils==4.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -547,7 +549,7 @@ django-sekizai==4.1.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-django-wiki -django-ses==3.5.2 +django-ses==3.6.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -583,7 +585,7 @@ django-stubs==1.16.0 # djangorestframework-stubs django-stubs-ext==4.2.7 # via django-stubs -django-user-tasks==3.1.0 +django-user-tasks==3.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -641,7 +643,7 @@ docutils==0.19 # pydata-sphinx-theme # sphinx # sphinx-mdinclude -done-xblock==2.2.0 +done-xblock==2.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -655,7 +657,7 @@ drf-nested-routers==0.93.5 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-blockstore -drf-spectacular==0.27.1 +drf-spectacular==0.27.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -666,37 +668,37 @@ drf-yasg==1.21.5 # -r requirements/edx/testing.txt # django-user-tasks # edx-api-doc-tools -edx-ace==1.7.0 +edx-ace==1.8.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-api-doc-tools==1.7.0 +edx-api-doc-tools==1.8.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-name-affirmation # openedx-blockstore -edx-auth-backends==4.2.0 +edx-auth-backends==4.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-blockstore -edx-braze-client==0.2.2 +edx-braze-client==0.2.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise -edx-bulk-grades==1.0.2 +edx-bulk-grades==1.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # staff-graded-xblock -edx-ccx-keys==1.2.1 +edx-ccx-keys==1.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # lti-consumer-xblock -edx-celeryutils==1.2.5 +edx-celeryutils==1.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -706,21 +708,21 @@ edx-codejail==3.3.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-completion==4.4.0 +edx-completion==4.6.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-django-release-util==1.3.0 +edx-django-release-util==1.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edxval # openedx-blockstore -edx-django-sites-extensions==4.0.2 +edx-django-sites-extensions==4.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-django-utils==5.10.1 +edx-django-utils==5.12.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -738,7 +740,7 @@ edx-django-utils==5.10.1 # openedx-events # ora2 # super-csv -edx-drf-extensions==10.2.0 +edx-drf-extensions==10.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -756,22 +758,22 @@ edx-enterprise==4.13.3 # -c requirements/edx/../constraints.txt # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-event-bus-kafka==5.6.0 +edx-event-bus-kafka==5.7.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-event-bus-redis==0.3.3 +edx-event-bus-redis==0.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-i18n-tools==1.3.0 +edx-i18n-tools==1.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # ora2 edx-lint==5.3.6 # via -r requirements/edx/testing.txt -edx-milestones==0.5.0 +edx-milestones==0.6.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -795,7 +797,7 @@ edx-opaque-keys[django]==2.5.1 # lti-consumer-xblock # openedx-events # ora2 -edx-organizations==6.12.1 +edx-organizations==6.13.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -809,21 +811,21 @@ edx-rbac==1.8.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise -edx-rest-api-client==5.6.1 +edx-rest-api-client==5.7.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise # edx-proctoring -edx-search==3.8.2 +edx-search==3.9.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-sga==0.23.1 +edx-sga==0.24.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-submissions==3.6.0 +edx-submissions==3.7.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -833,7 +835,7 @@ edx-tincan-py35==1.0.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise -edx-toggles==5.1.1 +edx-toggles==5.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -850,7 +852,7 @@ edx-token-utils==0.2.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -edx-when==2.4.0 +edx-when==2.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -874,29 +876,29 @@ enmerkar-underscore==2.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -event-tracking==2.3.0 +event-tracking==2.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-completion # edx-proctoring # edx-search -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 # via # -r requirements/edx/testing.txt # anyio # pytest -execnet==2.0.2 +execnet==2.1.1 # via # -r requirements/edx/testing.txt # pytest-xdist factory-boy==3.3.0 # via -r requirements/edx/testing.txt -faker==23.2.1 +faker==24.11.0 # via # -r requirements/edx/testing.txt # factory-boy -fastapi==0.109.2 +fastapi==0.110.2 # via # -r requirements/edx/testing.txt # pact-python @@ -905,7 +907,7 @@ fastavro==1.9.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-events -filelock==3.13.1 +filelock==3.13.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -932,7 +934,7 @@ fs-s3fs==0.1.8 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-django-pyfs -future==0.18.3 +future==1.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -945,7 +947,7 @@ gitdb==4.0.11 # via # -r requirements/edx/doc.txt # gitpython -gitpython==3.1.42 +gitpython==3.1.43 # via -r requirements/edx/doc.txt glob2==0.7 # via @@ -955,7 +957,7 @@ grimp==3.2 # via # -r requirements/edx/testing.txt # import-linter -gunicorn==21.2.0 +gunicorn==22.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -963,7 +965,7 @@ h11==0.14.0 # via # -r requirements/edx/testing.txt # uvicorn -help-tokens==2.3.0 +help-tokens==2.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -974,11 +976,11 @@ html5lib==1.1 # ora2 httpretty==1.1.4 # via -r requirements/edx/testing.txt -icalendar==5.0.11 +icalendar==5.0.12 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -idna==3.6 +idna==3.7 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -993,8 +995,9 @@ imagesize==1.4.1 # sphinx import-linter==2.0 # via -r requirements/edx/testing.txt -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/edx/../common_constraints.txt # -r requirements/edx/../pip-tools.txt # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1056,7 +1059,7 @@ jmespath==1.0.1 # -r requirements/edx/testing.txt # boto3 # botocore -joblib==1.3.2 +joblib==1.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1088,13 +1091,13 @@ jsonschema-specifications==2023.12.1 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # jsonschema -jwcrypto==1.5.4 +jwcrypto==1.5.6 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # django-oauth-toolkit # pylti1p3 -kombu==5.3.5 +kombu==5.3.7 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1149,7 +1152,7 @@ mailsnake==1.6.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -mako==1.3.2 +mako==1.3.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1179,7 +1182,7 @@ markupsafe==2.1.5 # mako # openedx-calc # xblock -maxminddb==2.5.2 +maxminddb==2.6.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1196,7 +1199,7 @@ mock==5.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -mongoengine==0.27.0 +mongoengine==0.28.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1217,7 +1220,7 @@ multidict==6.0.5 # -r requirements/edx/testing.txt # aiohttp # yarl -mypy==1.8.0 +mypy==1.9.0 # via # -r requirements/edx/development.in # django-stubs @@ -1229,7 +1232,7 @@ mysqlclient==2.2.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-blockstore -newrelic==9.6.0 +newrelic==9.9.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1278,11 +1281,11 @@ openedx-blockstore==1.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-calc==3.0.1 +openedx-calc==3.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-django-pyfs==3.5.0 +openedx-django-pyfs==3.6.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1292,18 +1295,18 @@ openedx-django-require==2.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-django-wiki==2.0.3 +openedx-django-wiki==2.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-events==9.5.2 +openedx-events==9.9.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-event-bus-kafka # edx-event-bus-redis # event-tracking -openedx-filters==1.6.0 +openedx-filters==1.8.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1322,11 +1325,11 @@ optimizely-sdk==4.1.1 # -c requirements/edx/../constraints.txt # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -ora2==6.0.34 +ora2==6.6.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -packaging==23.2 +packaging==24.0 # via # -r requirements/edx/../pip-tools.txt # -r requirements/edx/doc.txt @@ -1341,14 +1344,14 @@ packaging==23.2 # snowflake-connector-python # sphinx # tox -pact-python==2.1.1 +pact-python==2.2.0 # via -r requirements/edx/testing.txt pansi==2020.7.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # py2neo -path==16.10.0 +path==16.14.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1383,21 +1386,21 @@ piexif==1.1.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -pillow==10.2.0 +pillow==10.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise # edx-organizations # edxval -pip-tools==7.4.0 +pip-tools==7.4.1 # via -r requirements/edx/../pip-tools.txt pkgutil-resolve-name==1.3.10 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # jsonschema -platformdirs==3.11.0 +platformdirs==4.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1435,7 +1438,7 @@ py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo- # -c requirements/edx/../constraints.txt # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -pyasn1==0.5.1 +pyasn1==0.6.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1448,7 +1451,7 @@ pycountry==23.12.11 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -pycparser==2.21 +pycparser==2.22 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1460,11 +1463,11 @@ pycryptodomex==3.20.0 # edx-proctoring # lti-consumer-xblock # pyjwkest -pydantic==2.6.1 +pydantic==2.7.0 # via # -r requirements/edx/testing.txt # fastapi -pydantic-core==2.16.2 +pydantic-core==2.18.1 # via # -r requirements/edx/testing.txt # pydantic @@ -1562,7 +1565,7 @@ pyopenssl==22.0.0 # -r requirements/edx/testing.txt # optimizely-sdk # snowflake-connector-python -pyparsing==3.1.1 +pyparsing==3.1.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1589,7 +1592,7 @@ pysrt==1.1.2 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edxval -pytest==8.0.1 +pytest==8.1.1 # via # -r requirements/edx/testing.txt # pylint-pytest @@ -1602,7 +1605,7 @@ pytest==8.0.1 # pytest-xdist pytest-attrib==0.1.3 # via -r requirements/edx/testing.txt -pytest-cov==4.1.0 +pytest-cov==5.0.0 # via -r requirements/edx/testing.txt pytest-django==4.8.0 # via -r requirements/edx/testing.txt @@ -1616,7 +1619,7 @@ pytest-randomly==3.15.0 # via -r requirements/edx/testing.txt pytest-xdist[psutil]==3.5.0 # via -r requirements/edx/testing.txt -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1632,7 +1635,7 @@ python-dateutil==2.8.2 # olxcleaner # ora2 # xblock -python-ipware==2.0.1 +python-ipware==2.0.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1646,7 +1649,7 @@ python-slugify==8.0.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # code-annotations -python-swiftclient==4.4.0 +python-swiftclient==4.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1686,7 +1689,7 @@ pyuca==1.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -pywatchman==1.4.1 +pywatchman==2.0.0 # via -r requirements/edx/development.in pyyaml==6.0.1 # via @@ -1702,22 +1705,22 @@ random2==1.0.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -recommender-xblock==2.1.1 +recommender-xblock==2.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -redis==5.0.1 +redis==5.0.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # walrus -referencing==0.33.0 +referencing==0.34.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # jsonschema # jsonschema-specifications -regex==2023.12.25 +regex==2024.4.16 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1750,11 +1753,13 @@ requests==2.31.0 # social-auth-core # sphinx # xblock-google-drive -requests-oauthlib==1.3.1 +requests-oauthlib==2.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # social-auth-core +requirements-parser==0.9.0 + # via -r requirements/edx/testing.txt rpds-py==0.18.0 # via # -r requirements/edx/doc.txt @@ -1778,7 +1783,7 @@ rules==3.3 # edx-enterprise # edx-proctoring # openedx-learning -s3transfer==0.10.0 +s3transfer==0.10.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1800,7 +1805,7 @@ semantic-version==2.10.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-drf-extensions -shapely==2.0.3 +shapely==2.0.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1858,7 +1863,7 @@ smmap==5.0.1 # via # -r requirements/edx/doc.txt # gitdb -sniffio==1.3.0 +sniffio==1.3.1 # via # -r requirements/edx/testing.txt # anyio @@ -1866,7 +1871,7 @@ snowballstemmer==2.2.0 # via # -r requirements/edx/doc.txt # sphinx -snowflake-connector-python==3.7.0 +snowflake-connector-python==3.9.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1913,7 +1918,7 @@ sphinx-book-theme==1.0.1 # via -r requirements/edx/doc.txt sphinx-design==0.5.0 # via -r requirements/edx/doc.txt -sphinx-mdinclude==0.5.3 +sphinx-mdinclude==0.5.4 # via # -r requirements/edx/doc.txt # sphinxcontrib-openapi @@ -1951,22 +1956,22 @@ sphinxcontrib-serializinghtml==1.1.5 # sphinx sphinxext-rediraffe==0.2.7 # via -r requirements/edx/doc.txt -sqlparse==0.4.4 +sqlparse==0.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # django # django-debug-toolbar # openedx-blockstore -staff-graded-xblock==2.2.0 +staff-graded-xblock==2.3.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -starlette==0.36.3 +starlette==0.37.2 # via # -r requirements/edx/testing.txt # fastapi -stevedore==5.1.0 +stevedore==5.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1975,7 +1980,7 @@ stevedore==5.1.0 # edx-django-utils # edx-enterprise # edx-opaque-keys -super-csv==3.1.0 +super-csv==3.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1985,7 +1990,7 @@ sympy==1.12 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-calc -testfixtures==8.0.0 +testfixtures==8.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2016,13 +2021,13 @@ tomli==2.0.1 # pytest # tox # vulture -tomlkit==0.12.3 +tomlkit==0.12.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # pylint # snowflake-connector-python -tox==4.11.4 +tox==4.14.2 # via -r requirements/edx/testing.txt tqdm==4.66.2 # via @@ -2030,17 +2035,21 @@ tqdm==4.66.2 # -r requirements/edx/testing.txt # nltk # openai -types-pytz==2024.1.0.20240203 +types-pytz==2024.1.0.20240417 # via django-stubs -types-pyyaml==6.0.12.12 +types-pyyaml==6.0.12.20240311 # via # django-stubs # djangorestframework-stubs types-requests==2.31.0.6 # via djangorestframework-stubs +types-setuptools==69.5.0.20240415 + # via + # -r requirements/edx/testing.txt + # requirements-parser types-urllib3==1.26.25.14 # via types-requests -typing-extensions==4.9.0 +typing-extensions==4.11.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2061,6 +2070,7 @@ typing-extensions==4.9.0 # jwcrypto # kombu # mypy + # pact-python # pydantic # pydantic-core # pydata-sphinx-theme @@ -2099,11 +2109,11 @@ urllib3==1.26.18 # py2neo # requests # snowflake-connector-python -user-util==1.0.0 +user-util==1.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -uvicorn==0.27.1 +uvicorn==0.29.0 # via # -r requirements/edx/testing.txt # pact-python @@ -2114,7 +2124,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.25.0 +virtualenv==20.25.3 # via # -r requirements/edx/testing.txt # tox @@ -2140,7 +2150,7 @@ wcwidth==0.2.13 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # prompt-toolkit -web-fragments==2.1.0 +web-fragments==2.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2161,7 +2171,7 @@ webob==1.8.7 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # xblock -wheel==0.42.0 +wheel==0.43.0 # via # -r requirements/edx/../pip-tools.txt # pip-tools @@ -2170,7 +2180,7 @@ wrapt==1.16.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # astroid -xblock[django]==1.10.0 +xblock[django]==4.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2187,11 +2197,11 @@ xblock[django]==1.10.0 # xblock-google-drive # xblock-poll # xblock-utils -xblock-drag-and-drop-v2==3.4.0 +xblock-drag-and-drop-v2==4.0.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -xblock-google-drive==0.6.1 +xblock-google-drive==0.7.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2204,7 +2214,7 @@ xblock-utils==4.0.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-sga -xmlsec==1.3.13 +xmlsec==1.3.14 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2218,7 +2228,8 @@ yarl==1.9.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # aiohttp -zipp==3.17.0 + # pact-python +zipp==3.18.1 # via # -r requirements/edx/../pip-tools.txt # -r requirements/edx/doc.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index f14a627dfdd0..c5ef833aa28d 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -8,9 +8,9 @@ # via -r requirements/edx/base.txt accessible-pygments==0.0.4 # via pydata-sphinx-theme -acid-xblock==0.2.1 +acid-xblock==0.3.1 # via -r requirements/edx/base.txt -aiohttp==3.9.3 +aiohttp==3.9.5 # via # -r requirements/edx/base.txt # geoip2 @@ -37,7 +37,7 @@ appdirs==1.4.4 # via # -r requirements/edx/base.txt # fs -asgiref==3.7.2 +asgiref==3.8.1 # via # -r requirements/edx/base.txt # django @@ -79,6 +79,7 @@ backports-zoneinfo[tzdata]==0.2.1 # -r requirements/edx/base.txt # celery # django + # edx-milestones # icalendar # kombu beautifulsoup4==4.12.3 @@ -101,20 +102,20 @@ bleach[css]==6.1.0 # xblock-poll boto==2.49.0 # via -r requirements/edx/base.txt -boto3==1.34.45 +boto3==1.34.87 # via # -r requirements/edx/base.txt # django-ses # fs-s3fs # ora2 -botocore==1.34.45 +botocore==1.34.87 # via # -r requirements/edx/base.txt # boto3 # s3transfer bridgekeeper==0.9 # via -r requirements/edx/base.txt -celery==5.3.6 +celery==5.4.0 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt @@ -161,7 +162,7 @@ click==8.1.6 # edx-django-utils # nltk # user-util -click-didyoumean==0.3.0 +click-didyoumean==0.3.1 # via # -r requirements/edx/base.txt # celery @@ -173,7 +174,7 @@ click-repl==0.3.0 # via # -r requirements/edx/base.txt # celery -code-annotations==1.6.0 +code-annotations==1.8.0 # via # -r requirements/edx/base.txt # -r requirements/edx/doc.in @@ -190,7 +191,7 @@ coreschema==0.0.4 # -r requirements/edx/base.txt # coreapi # drf-yasg -crowdsourcehinter-xblock==0.6 +crowdsourcehinter-xblock==0.7 # via -r requirements/edx/base.txt cryptography==38.0.4 # via @@ -205,7 +206,7 @@ cryptography==38.0.4 # pyopenssl # snowflake-connector-python # social-auth-core -cssutils==2.9.0 +cssutils==2.10.2 # via # -r requirements/edx/base.txt # pynliner @@ -218,7 +219,7 @@ defusedxml==0.7.1 # ora2 # python3-openid # social-auth-core -django==4.2.10 +django==4.2.11 # via # -c requirements/edx/../common_constraints.txt # -c requirements/edx/../constraints.txt @@ -305,7 +306,7 @@ django-classy-tags==4.1.0 # via # -r requirements/edx/base.txt # django-sekizai -django-config-models==2.5.1 +django-config-models==2.7.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -313,7 +314,7 @@ django-config-models==2.5.1 # lti-consumer-xblock django-cors-headers==4.3.1 # via -r requirements/edx/base.txt -django-countries==7.5.1 +django-countries==7.6.1 # via # -r requirements/edx/base.txt # edx-enterprise @@ -334,13 +335,13 @@ django-fernet-fields-v2==0.9 # via # -r requirements/edx/base.txt # edx-enterprise -django-filter==23.5 +django-filter==24.2 # via # -r requirements/edx/base.txt # edx-enterprise # lti-consumer-xblock # openedx-blockstore -django-ipware==6.0.4 +django-ipware==6.0.5 # via # -r requirements/edx/base.txt # edx-enterprise @@ -351,7 +352,7 @@ django-js-asset==2.2.0 # django-mptt django-method-override==1.0.4 # via -r requirements/edx/base.txt -django-model-utils==4.4.0 +django-model-utils==4.5.0 # via # -r requirements/edx/base.txt # django-user-tasks @@ -396,7 +397,7 @@ django-sekizai==4.1.0 # via # -r requirements/edx/base.txt # openedx-django-wiki -django-ses==3.5.2 +django-ses==3.6.0 # via -r requirements/edx/base.txt django-simple-history==3.4.0 # via @@ -418,7 +419,7 @@ django-storages==1.14.2 # via # -r requirements/edx/base.txt # edxval -django-user-tasks==3.1.0 +django-user-tasks==3.2.0 # via -r requirements/edx/base.txt django-waffle==4.1.0 # via @@ -465,7 +466,7 @@ docutils==0.19 # pydata-sphinx-theme # sphinx # sphinx-mdinclude -done-xblock==2.2.0 +done-xblock==2.3.0 # via -r requirements/edx/base.txt drf-jwt==1.19.2 # via @@ -475,7 +476,7 @@ drf-nested-routers==0.93.5 # via # -r requirements/edx/base.txt # openedx-blockstore -drf-spectacular==0.27.1 +drf-spectacular==0.27.2 # via -r requirements/edx/base.txt drf-yasg==1.21.5 # via @@ -483,46 +484,46 @@ drf-yasg==1.21.5 # -r requirements/edx/base.txt # django-user-tasks # edx-api-doc-tools -edx-ace==1.7.0 +edx-ace==1.8.0 # via -r requirements/edx/base.txt -edx-api-doc-tools==1.7.0 +edx-api-doc-tools==1.8.0 # via # -r requirements/edx/base.txt # edx-name-affirmation # openedx-blockstore -edx-auth-backends==4.2.0 +edx-auth-backends==4.3.0 # via # -r requirements/edx/base.txt # openedx-blockstore -edx-braze-client==0.2.2 +edx-braze-client==0.2.3 # via # -r requirements/edx/base.txt # edx-enterprise -edx-bulk-grades==1.0.2 +edx-bulk-grades==1.1.0 # via # -r requirements/edx/base.txt # staff-graded-xblock -edx-ccx-keys==1.2.1 +edx-ccx-keys==1.3.0 # via # -r requirements/edx/base.txt # lti-consumer-xblock -edx-celeryutils==1.2.5 +edx-celeryutils==1.3.0 # via # -r requirements/edx/base.txt # edx-name-affirmation # super-csv edx-codejail==3.3.3 # via -r requirements/edx/base.txt -edx-completion==4.4.0 +edx-completion==4.6.0 # via -r requirements/edx/base.txt -edx-django-release-util==1.3.0 +edx-django-release-util==1.4.0 # via # -r requirements/edx/base.txt # edxval # openedx-blockstore -edx-django-sites-extensions==4.0.2 +edx-django-sites-extensions==4.2.0 # via -r requirements/edx/base.txt -edx-django-utils==5.10.1 +edx-django-utils==5.12.0 # via # -r requirements/edx/base.txt # django-config-models @@ -539,7 +540,7 @@ edx-django-utils==5.10.1 # openedx-events # ora2 # super-csv -edx-drf-extensions==10.2.0 +edx-drf-extensions==10.3.0 # via # -r requirements/edx/base.txt # edx-completion @@ -555,15 +556,15 @@ edx-enterprise==4.13.3 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -edx-event-bus-kafka==5.6.0 +edx-event-bus-kafka==5.7.0 # via -r requirements/edx/base.txt -edx-event-bus-redis==0.3.3 +edx-event-bus-redis==0.5.0 # via -r requirements/edx/base.txt -edx-i18n-tools==1.3.0 +edx-i18n-tools==1.5.0 # via # -r requirements/edx/base.txt # ora2 -edx-milestones==0.5.0 +edx-milestones==0.6.0 # via -r requirements/edx/base.txt edx-name-affirmation==2.3.7 # via -r requirements/edx/base.txt @@ -582,7 +583,7 @@ edx-opaque-keys[django]==2.5.1 # lti-consumer-xblock # openedx-events # ora2 -edx-organizations==6.12.1 +edx-organizations==6.13.0 # via -r requirements/edx/base.txt edx-proctoring==4.16.1 # via @@ -592,16 +593,16 @@ edx-rbac==1.8.0 # via # -r requirements/edx/base.txt # edx-enterprise -edx-rest-api-client==5.6.1 +edx-rest-api-client==5.7.0 # via # -r requirements/edx/base.txt # edx-enterprise # edx-proctoring -edx-search==3.8.2 +edx-search==3.9.1 # via -r requirements/edx/base.txt -edx-sga==0.23.1 +edx-sga==0.24.1 # via -r requirements/edx/base.txt -edx-submissions==3.6.0 +edx-submissions==3.7.0 # via # -r requirements/edx/base.txt # ora2 @@ -609,7 +610,7 @@ edx-tincan-py35==1.0.0 # via # -r requirements/edx/base.txt # edx-enterprise -edx-toggles==5.1.1 +edx-toggles==5.2.0 # via # -r requirements/edx/base.txt # edx-completion @@ -623,7 +624,7 @@ edx-toggles==5.1.1 # ora2 edx-token-utils==0.2.1 # via -r requirements/edx/base.txt -edx-when==2.4.0 +edx-when==2.5.0 # via # -r requirements/edx/base.txt # edx-proctoring @@ -640,7 +641,7 @@ enmerkar==0.7.1 # enmerkar-underscore enmerkar-underscore==2.2.0 # via -r requirements/edx/base.txt -event-tracking==2.3.0 +event-tracking==2.4.0 # via # -r requirements/edx/base.txt # edx-completion @@ -650,7 +651,7 @@ fastavro==1.9.4 # via # -r requirements/edx/base.txt # openedx-events -filelock==3.13.1 +filelock==3.13.4 # via # -r requirements/edx/base.txt # snowflake-connector-python @@ -669,7 +670,7 @@ fs-s3fs==0.1.8 # via # -r requirements/edx/base.txt # openedx-django-pyfs -future==0.18.3 +future==1.0.0 # via # -r requirements/edx/base.txt # pyjwkest @@ -677,21 +678,21 @@ geoip2==4.8.0 # via -r requirements/edx/base.txt gitdb==4.0.11 # via gitpython -gitpython==3.1.42 +gitpython==3.1.43 # via -r requirements/edx/doc.in glob2==0.7 # via -r requirements/edx/base.txt -gunicorn==21.2.0 +gunicorn==22.0.0 # via -r requirements/edx/base.txt -help-tokens==2.3.0 +help-tokens==2.4.0 # via -r requirements/edx/base.txt html5lib==1.1 # via # -r requirements/edx/base.txt # ora2 -icalendar==5.0.11 +icalendar==5.0.12 # via -r requirements/edx/base.txt -idna==3.6 +idna==3.7 # via # -r requirements/edx/base.txt # optimizely-sdk @@ -700,8 +701,9 @@ idna==3.6 # yarl imagesize==1.4.1 # via sphinx -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/edx/../common_constraints.txt # -r requirements/edx/base.txt # markdown # sphinx @@ -741,7 +743,7 @@ jmespath==1.0.1 # -r requirements/edx/base.txt # boto3 # botocore -joblib==1.3.2 +joblib==1.4.0 # via # -r requirements/edx/base.txt # nltk @@ -768,12 +770,12 @@ jsonschema-specifications==2023.12.1 # via # -r requirements/edx/base.txt # jsonschema -jwcrypto==1.5.4 +jwcrypto==1.5.6 # via # -r requirements/edx/base.txt # django-oauth-toolkit # pylti1p3 -kombu==5.3.5 +kombu==5.3.7 # via # -r requirements/edx/base.txt # celery @@ -811,7 +813,7 @@ lxml==4.9.4 # xmlsec mailsnake==1.6.4 # via -r requirements/edx/base.txt -mako==1.3.2 +mako==1.3.3 # via # -r requirements/edx/base.txt # acid-xblock @@ -837,7 +839,7 @@ markupsafe==2.1.5 # mako # openedx-calc # xblock -maxminddb==2.5.2 +maxminddb==2.6.1 # via # -r requirements/edx/base.txt # geoip2 @@ -845,7 +847,7 @@ mistune==2.0.5 # via sphinx-mdinclude mock==5.1.0 # via -r requirements/edx/base.txt -mongoengine==0.27.0 +mongoengine==0.28.2 # via -r requirements/edx/base.txt monotonic==1.6 # via @@ -865,7 +867,7 @@ mysqlclient==2.2.4 # via # -r requirements/edx/base.txt # openedx-blockstore -newrelic==9.6.0 +newrelic==9.9.0 # via # -r requirements/edx/base.txt # edx-django-utils @@ -900,24 +902,24 @@ openedx-atlas==0.6.0 # via -r requirements/edx/base.txt openedx-blockstore==1.4.0 # via -r requirements/edx/base.txt -openedx-calc==3.0.1 +openedx-calc==3.1.0 # via -r requirements/edx/base.txt -openedx-django-pyfs==3.5.0 +openedx-django-pyfs==3.6.0 # via # -r requirements/edx/base.txt # lti-consumer-xblock # xblock openedx-django-require==2.1.0 # via -r requirements/edx/base.txt -openedx-django-wiki==2.0.3 +openedx-django-wiki==2.1.0 # via -r requirements/edx/base.txt -openedx-events==9.5.2 +openedx-events==9.9.2 # via # -r requirements/edx/base.txt # edx-event-bus-kafka # edx-event-bus-redis # event-tracking -openedx-filters==1.6.0 +openedx-filters==1.8.1 # via # -r requirements/edx/base.txt # lti-consumer-xblock @@ -931,9 +933,9 @@ optimizely-sdk==4.1.1 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -ora2==6.0.34 +ora2==6.6.2 # via -r requirements/edx/base.txt -packaging==23.2 +packaging==24.0 # via # -r requirements/edx/base.txt # drf-yasg @@ -946,7 +948,7 @@ pansi==2020.7.3 # via # -r requirements/edx/base.txt # py2neo -path==16.10.0 +path==16.14.0 # via # -r requirements/edx/base.txt # edx-i18n-tools @@ -971,7 +973,7 @@ picobox==4.0.0 # via sphinxcontrib-openapi piexif==1.1.3 # via -r requirements/edx/base.txt -pillow==10.2.0 +pillow==10.3.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -981,7 +983,7 @@ pkgutil-resolve-name==1.3.10 # via # -r requirements/edx/base.txt # jsonschema -platformdirs==3.11.0 +platformdirs==4.2.0 # via # -r requirements/edx/base.txt # snowflake-connector-python @@ -1001,13 +1003,13 @@ py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo- # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -pyasn1==0.5.1 +pyasn1==0.6.0 # via # -r requirements/edx/base.txt # pgpy pycountry==23.12.11 # via -r requirements/edx/base.txt -pycparser==2.21 +pycparser==2.22 # via # -r requirements/edx/base.txt # cffi @@ -1071,7 +1073,7 @@ pyopenssl==22.0.0 # -r requirements/edx/base.txt # optimizely-sdk # snowflake-connector-python -pyparsing==3.1.1 +pyparsing==3.1.2 # via # -r requirements/edx/base.txt # chem @@ -1084,7 +1086,7 @@ pysrt==1.1.2 # via # -r requirements/edx/base.txt # edxval -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/edx/base.txt # analytics-python @@ -1097,7 +1099,7 @@ python-dateutil==2.8.2 # olxcleaner # ora2 # xblock -python-ipware==2.0.1 +python-ipware==2.0.4 # via # -r requirements/edx/base.txt # django-ipware @@ -1107,7 +1109,7 @@ python-slugify==8.0.4 # via # -r requirements/edx/base.txt # code-annotations -python-swiftclient==4.4.0 +python-swiftclient==4.5.0 # via # -r requirements/edx/base.txt # ora2 @@ -1151,18 +1153,18 @@ pyyaml==6.0.1 # xblock random2==1.0.2 # via -r requirements/edx/base.txt -recommender-xblock==2.1.1 +recommender-xblock==2.2.0 # via -r requirements/edx/base.txt -redis==5.0.1 +redis==5.0.3 # via # -r requirements/edx/base.txt # walrus -referencing==0.33.0 +referencing==0.34.0 # via # -r requirements/edx/base.txt # jsonschema # jsonschema-specifications -regex==2023.12.25 +regex==2024.4.16 # via # -r requirements/edx/base.txt # nltk @@ -1191,7 +1193,7 @@ requests==2.31.0 # social-auth-core # sphinx # xblock-google-drive -requests-oauthlib==1.3.1 +requests-oauthlib==2.0.0 # via # -r requirements/edx/base.txt # social-auth-core @@ -1214,7 +1216,7 @@ rules==3.3 # edx-enterprise # edx-proctoring # openedx-learning -s3transfer==0.10.0 +s3transfer==0.10.1 # via # -r requirements/edx/base.txt # boto3 @@ -1232,7 +1234,7 @@ semantic-version==2.10.0 # via # -r requirements/edx/base.txt # edx-drf-extensions -shapely==2.0.3 +shapely==2.0.4 # via -r requirements/edx/base.txt simplejson==3.19.2 # via @@ -1280,7 +1282,7 @@ smmap==5.0.1 # via gitdb snowballstemmer==2.2.0 # via sphinx -snowflake-connector-python==3.7.0 +snowflake-connector-python==3.9.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -1321,7 +1323,7 @@ sphinx-book-theme==1.0.1 # via -r requirements/edx/doc.in sphinx-design==0.5.0 # via -r requirements/edx/doc.in -sphinx-mdinclude==0.5.3 +sphinx-mdinclude==0.5.4 # via sphinxcontrib-openapi sphinx-reredirects==0.1.3 # via -r requirements/edx/doc.in @@ -1343,14 +1345,14 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx sphinxext-rediraffe==0.2.7 # via -r requirements/edx/doc.in -sqlparse==0.4.4 +sqlparse==0.5.0 # via # -r requirements/edx/base.txt # django # openedx-blockstore -staff-graded-xblock==2.2.0 +staff-graded-xblock==2.3.0 # via -r requirements/edx/base.txt -stevedore==5.1.0 +stevedore==5.2.0 # via # -r requirements/edx/base.txt # code-annotations @@ -1358,7 +1360,7 @@ stevedore==5.1.0 # edx-django-utils # edx-enterprise # edx-opaque-keys -super-csv==3.1.0 +super-csv==3.2.0 # via # -r requirements/edx/base.txt # edx-bulk-grades @@ -1366,7 +1368,7 @@ sympy==1.12 # via # -r requirements/edx/base.txt # openedx-calc -testfixtures==8.0.0 +testfixtures==8.1.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -1378,7 +1380,7 @@ tinycss2==1.2.1 # via # -r requirements/edx/base.txt # bleach -tomlkit==0.12.3 +tomlkit==0.12.4 # via # -r requirements/edx/base.txt # snowflake-connector-python @@ -1387,7 +1389,7 @@ tqdm==4.66.2 # -r requirements/edx/base.txt # nltk # openai -typing-extensions==4.9.0 +typing-extensions==4.11.0 # via # -r requirements/edx/base.txt # asgiref @@ -1423,7 +1425,7 @@ urllib3==1.26.18 # py2neo # requests # snowflake-connector-python -user-util==1.0.0 +user-util==1.1.0 # via -r requirements/edx/base.txt vine==5.1.0 # via @@ -1445,7 +1447,7 @@ wcwidth==0.2.13 # via # -r requirements/edx/base.txt # prompt-toolkit -web-fragments==2.1.0 +web-fragments==2.2.0 # via # -r requirements/edx/base.txt # crowdsourcehinter-xblock @@ -1465,7 +1467,7 @@ webob==1.8.7 # xblock wrapt==1.16.0 # via -r requirements/edx/base.txt -xblock[django]==1.10.0 +xblock[django]==4.0.0 # via # -r requirements/edx/base.txt # acid-xblock @@ -1481,9 +1483,9 @@ xblock[django]==1.10.0 # xblock-google-drive # xblock-poll # xblock-utils -xblock-drag-and-drop-v2==3.4.0 +xblock-drag-and-drop-v2==4.0.1 # via -r requirements/edx/base.txt -xblock-google-drive==0.6.1 +xblock-google-drive==0.7.0 # via -r requirements/edx/base.txt xblock-poll==1.13.0 # via -r requirements/edx/base.txt @@ -1491,7 +1493,7 @@ xblock-utils==4.0.0 # via # -r requirements/edx/base.txt # edx-sga -xmlsec==1.3.13 +xmlsec==1.3.14 # via # -r requirements/edx/base.txt # python3-saml @@ -1501,7 +1503,7 @@ yarl==1.9.4 # via # -r requirements/edx/base.txt # aiohttp -zipp==3.17.0 +zipp==3.18.1 # via # -r requirements/edx/base.txt # importlib-metadata diff --git a/requirements/edx/paver.txt b/requirements/edx/paver.txt index cba069b3af7b..f4c89bcb4016 100644 --- a/requirements/edx/paver.txt +++ b/requirements/edx/paver.txt @@ -12,7 +12,7 @@ charset-normalizer==2.0.12 # requests edx-opaque-keys==2.5.1 # via -r requirements/edx/paver.in -idna==3.6 +idna==3.7 # via requests lazy==1.6 # via -r requirements/edx/paver.in @@ -24,7 +24,7 @@ markupsafe==2.1.5 # via -r requirements/edx/paver.in mock==5.1.0 # via -r requirements/edx/paver.in -path==16.10.0 +path==16.14.0 # via -r requirements/edx/paver.in paver==1.3.4 # via -r requirements/edx/paver.in @@ -47,11 +47,11 @@ six==1.16.0 # via # libsass # paver -stevedore==5.1.0 +stevedore==5.2.0 # via # -r requirements/edx/paver.in # edx-opaque-keys -typing-extensions==4.9.0 +typing-extensions==4.11.0 # via edx-opaque-keys urllib3==1.26.18 # via diff --git a/requirements/edx/semgrep.txt b/requirements/edx/semgrep.txt index a55ae438fa48..fb8459b2ad51 100644 --- a/requirements/edx/semgrep.txt +++ b/requirements/edx/semgrep.txt @@ -38,9 +38,9 @@ face==22.0.0 # via glom glom==22.1.0 # via semgrep -idna==3.6 +idna==3.7 # via requests -importlib-resources==6.1.1 +importlib-resources==6.4.0 # via # jsonschema # jsonschema-specifications @@ -52,21 +52,21 @@ markdown-it-py==3.0.0 # via rich mdurl==0.1.2 # via markdown-it-py -packaging==23.2 +packaging==24.0 # via semgrep -peewee==3.17.1 +peewee==3.17.3 # via semgrep pkgutil-resolve-name==1.3.10 # via jsonschema pygments==2.17.2 # via rich -referencing==0.33.0 +referencing==0.34.0 # via # jsonschema # jsonschema-specifications requests==2.31.0 # via semgrep -rich==13.7.0 +rich==13.7.1 # via semgrep rpds-py==0.18.0 # via @@ -80,7 +80,7 @@ semgrep==1.52.0 # via -r requirements/edx/semgrep.in tomli==2.0.1 # via semgrep -typing-extensions==4.9.0 +typing-extensions==4.11.0 # via # rich # semgrep @@ -89,7 +89,7 @@ urllib3==1.26.18 # -c requirements/edx/../constraints.txt # requests # semgrep -wcmatch==8.5 +wcmatch==8.5.1 # via semgrep -zipp==3.17.0 +zipp==3.18.1 # via importlib-resources diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index e463b0214603..3739d4b09fd6 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -6,9 +6,9 @@ # -e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack # via -r requirements/edx/base.txt -acid-xblock==0.2.1 +acid-xblock==0.3.1 # via -r requirements/edx/base.txt -aiohttp==3.9.3 +aiohttp==3.9.5 # via # -r requirements/edx/base.txt # geoip2 @@ -37,7 +37,7 @@ appdirs==1.4.4 # via # -r requirements/edx/base.txt # fs -asgiref==3.7.2 +asgiref==3.8.1 # via # -r requirements/edx/base.txt # django @@ -81,6 +81,7 @@ backports-zoneinfo[tzdata]==0.2.1 # -r requirements/edx/base.txt # celery # django + # edx-milestones # icalendar # kombu beautifulsoup4==4.12.3 @@ -103,22 +104,22 @@ bleach[css]==6.1.0 # xblock-poll boto==2.49.0 # via -r requirements/edx/base.txt -boto3==1.34.45 +boto3==1.34.87 # via # -r requirements/edx/base.txt # django-ses # fs-s3fs # ora2 -botocore==1.34.45 +botocore==1.34.87 # via # -r requirements/edx/base.txt # boto3 # s3transfer bridgekeeper==0.9 # via -r requirements/edx/base.txt -cachetools==5.3.2 +cachetools==5.3.3 # via tox -celery==5.3.6 +celery==5.4.0 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt @@ -139,6 +140,7 @@ cffi==1.16.0 # via # -r requirements/edx/base.txt # cryptography + # pact-python # pynacl # snowflake-connector-python chardet==5.2.0 @@ -173,7 +175,7 @@ click==8.1.6 # pact-python # user-util # uvicorn -click-didyoumean==0.3.0 +click-didyoumean==0.3.1 # via # -r requirements/edx/base.txt # celery @@ -187,7 +189,7 @@ click-repl==0.3.0 # via # -r requirements/edx/base.txt # celery -code-annotations==1.6.0 +code-annotations==1.8.0 # via # -r requirements/edx/base.txt # -r requirements/edx/testing.in @@ -207,11 +209,11 @@ coreschema==0.0.4 # -r requirements/edx/base.txt # coreapi # drf-yasg -coverage[toml]==7.4.1 +coverage[toml]==7.4.4 # via # -r requirements/edx/coverage.txt # pytest-cov -crowdsourcehinter-xblock==0.6 +crowdsourcehinter-xblock==0.7 # via -r requirements/edx/base.txt cryptography==38.0.4 # via @@ -230,11 +232,11 @@ cssselect==1.2.0 # via # -r requirements/edx/testing.in # pyquery -cssutils==2.9.0 +cssutils==2.10.2 # via # -r requirements/edx/base.txt # pynliner -ddt==1.7.1 +ddt==1.7.2 # via -r requirements/edx/testing.in defusedxml==0.7.1 # via @@ -243,13 +245,13 @@ defusedxml==0.7.1 # ora2 # python3-openid # social-auth-core -diff-cover==8.0.3 +diff-cover==9.0.0 # via -r requirements/edx/coverage.txt dill==0.3.8 # via pylint distlib==0.3.8 # via virtualenv -django==4.2.10 +django==4.2.11 # via # -c requirements/edx/../common_constraints.txt # -c requirements/edx/../constraints.txt @@ -336,7 +338,7 @@ django-classy-tags==4.1.0 # via # -r requirements/edx/base.txt # django-sekizai -django-config-models==2.5.1 +django-config-models==2.7.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -344,7 +346,7 @@ django-config-models==2.5.1 # lti-consumer-xblock django-cors-headers==4.3.1 # via -r requirements/edx/base.txt -django-countries==7.5.1 +django-countries==7.6.1 # via # -r requirements/edx/base.txt # edx-enterprise @@ -365,13 +367,13 @@ django-fernet-fields-v2==0.9 # via # -r requirements/edx/base.txt # edx-enterprise -django-filter==23.5 +django-filter==24.2 # via # -r requirements/edx/base.txt # edx-enterprise # lti-consumer-xblock # openedx-blockstore -django-ipware==6.0.4 +django-ipware==6.0.5 # via # -r requirements/edx/base.txt # edx-enterprise @@ -382,7 +384,7 @@ django-js-asset==2.2.0 # django-mptt django-method-override==1.0.4 # via -r requirements/edx/base.txt -django-model-utils==4.4.0 +django-model-utils==4.5.0 # via # -r requirements/edx/base.txt # django-user-tasks @@ -427,7 +429,7 @@ django-sekizai==4.1.0 # via # -r requirements/edx/base.txt # openedx-django-wiki -django-ses==3.5.2 +django-ses==3.6.0 # via -r requirements/edx/base.txt django-simple-history==3.4.0 # via @@ -449,7 +451,7 @@ django-storages==1.14.2 # via # -r requirements/edx/base.txt # edxval -django-user-tasks==3.1.0 +django-user-tasks==3.2.0 # via -r requirements/edx/base.txt django-waffle==4.1.0 # via @@ -491,7 +493,7 @@ djangorestframework-xml==2.0.0 # via # -r requirements/edx/base.txt # edx-enterprise -done-xblock==2.2.0 +done-xblock==2.3.0 # via -r requirements/edx/base.txt drf-jwt==1.19.2 # via @@ -501,7 +503,7 @@ drf-nested-routers==0.93.5 # via # -r requirements/edx/base.txt # openedx-blockstore -drf-spectacular==0.27.1 +drf-spectacular==0.27.2 # via -r requirements/edx/base.txt drf-yasg==1.21.5 # via @@ -509,46 +511,46 @@ drf-yasg==1.21.5 # -r requirements/edx/base.txt # django-user-tasks # edx-api-doc-tools -edx-ace==1.7.0 +edx-ace==1.8.0 # via -r requirements/edx/base.txt -edx-api-doc-tools==1.7.0 +edx-api-doc-tools==1.8.0 # via # -r requirements/edx/base.txt # edx-name-affirmation # openedx-blockstore -edx-auth-backends==4.2.0 +edx-auth-backends==4.3.0 # via # -r requirements/edx/base.txt # openedx-blockstore -edx-braze-client==0.2.2 +edx-braze-client==0.2.3 # via # -r requirements/edx/base.txt # edx-enterprise -edx-bulk-grades==1.0.2 +edx-bulk-grades==1.1.0 # via # -r requirements/edx/base.txt # staff-graded-xblock -edx-ccx-keys==1.2.1 +edx-ccx-keys==1.3.0 # via # -r requirements/edx/base.txt # lti-consumer-xblock -edx-celeryutils==1.2.5 +edx-celeryutils==1.3.0 # via # -r requirements/edx/base.txt # edx-name-affirmation # super-csv edx-codejail==3.3.3 # via -r requirements/edx/base.txt -edx-completion==4.4.0 +edx-completion==4.6.0 # via -r requirements/edx/base.txt -edx-django-release-util==1.3.0 +edx-django-release-util==1.4.0 # via # -r requirements/edx/base.txt # edxval # openedx-blockstore -edx-django-sites-extensions==4.0.2 +edx-django-sites-extensions==4.2.0 # via -r requirements/edx/base.txt -edx-django-utils==5.10.1 +edx-django-utils==5.12.0 # via # -r requirements/edx/base.txt # django-config-models @@ -565,7 +567,7 @@ edx-django-utils==5.10.1 # openedx-events # ora2 # super-csv -edx-drf-extensions==10.2.0 +edx-drf-extensions==10.3.0 # via # -r requirements/edx/base.txt # edx-completion @@ -581,17 +583,17 @@ edx-enterprise==4.13.3 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -edx-event-bus-kafka==5.6.0 +edx-event-bus-kafka==5.7.0 # via -r requirements/edx/base.txt -edx-event-bus-redis==0.3.3 +edx-event-bus-redis==0.5.0 # via -r requirements/edx/base.txt -edx-i18n-tools==1.3.0 +edx-i18n-tools==1.5.0 # via # -r requirements/edx/base.txt # ora2 edx-lint==5.3.6 # via -r requirements/edx/testing.in -edx-milestones==0.5.0 +edx-milestones==0.6.0 # via -r requirements/edx/base.txt edx-name-affirmation==2.3.7 # via -r requirements/edx/base.txt @@ -610,7 +612,7 @@ edx-opaque-keys[django]==2.5.1 # lti-consumer-xblock # openedx-events # ora2 -edx-organizations==6.12.1 +edx-organizations==6.13.0 # via -r requirements/edx/base.txt edx-proctoring==4.16.1 # via @@ -620,16 +622,16 @@ edx-rbac==1.8.0 # via # -r requirements/edx/base.txt # edx-enterprise -edx-rest-api-client==5.6.1 +edx-rest-api-client==5.7.0 # via # -r requirements/edx/base.txt # edx-enterprise # edx-proctoring -edx-search==3.8.2 +edx-search==3.9.1 # via -r requirements/edx/base.txt -edx-sga==0.23.1 +edx-sga==0.24.1 # via -r requirements/edx/base.txt -edx-submissions==3.6.0 +edx-submissions==3.7.0 # via # -r requirements/edx/base.txt # ora2 @@ -637,7 +639,7 @@ edx-tincan-py35==1.0.0 # via # -r requirements/edx/base.txt # edx-enterprise -edx-toggles==5.1.1 +edx-toggles==5.2.0 # via # -r requirements/edx/base.txt # edx-completion @@ -651,7 +653,7 @@ edx-toggles==5.1.1 # ora2 edx-token-utils==0.2.1 # via -r requirements/edx/base.txt -edx-when==2.4.0 +edx-when==2.5.0 # via # -r requirements/edx/base.txt # edx-proctoring @@ -668,29 +670,29 @@ enmerkar==0.7.1 # enmerkar-underscore enmerkar-underscore==2.2.0 # via -r requirements/edx/base.txt -event-tracking==2.3.0 +event-tracking==2.4.0 # via # -r requirements/edx/base.txt # edx-completion # edx-proctoring # edx-search -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 # via # anyio # pytest -execnet==2.0.2 +execnet==2.1.1 # via pytest-xdist factory-boy==3.3.0 # via -r requirements/edx/testing.in -faker==23.2.1 +faker==24.11.0 # via factory-boy -fastapi==0.109.2 +fastapi==0.110.2 # via pact-python fastavro==1.9.4 # via # -r requirements/edx/base.txt # openedx-events -filelock==3.13.1 +filelock==3.13.4 # via # -r requirements/edx/base.txt # snowflake-connector-python @@ -713,7 +715,7 @@ fs-s3fs==0.1.8 # via # -r requirements/edx/base.txt # openedx-django-pyfs -future==0.18.3 +future==1.0.0 # via # -r requirements/edx/base.txt # pyjwkest @@ -723,11 +725,11 @@ glob2==0.7 # via -r requirements/edx/base.txt grimp==3.2 # via import-linter -gunicorn==21.2.0 +gunicorn==22.0.0 # via -r requirements/edx/base.txt h11==0.14.0 # via uvicorn -help-tokens==2.3.0 +help-tokens==2.4.0 # via -r requirements/edx/base.txt html5lib==1.1 # via @@ -735,9 +737,9 @@ html5lib==1.1 # ora2 httpretty==1.1.4 # via -r requirements/edx/testing.in -icalendar==5.0.11 +icalendar==5.0.12 # via -r requirements/edx/base.txt -idna==3.6 +idna==3.7 # via # -r requirements/edx/base.txt # anyio @@ -747,8 +749,9 @@ idna==3.6 # yarl import-linter==2.0 # via -r requirements/edx/testing.in -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/edx/../common_constraints.txt # -r requirements/edx/base.txt # markdown # pytest-randomly @@ -795,7 +798,7 @@ jmespath==1.0.1 # -r requirements/edx/base.txt # boto3 # botocore -joblib==1.3.2 +joblib==1.4.0 # via # -r requirements/edx/base.txt # nltk @@ -821,12 +824,12 @@ jsonschema-specifications==2023.12.1 # via # -r requirements/edx/base.txt # jsonschema -jwcrypto==1.5.4 +jwcrypto==1.5.6 # via # -r requirements/edx/base.txt # django-oauth-toolkit # pylti1p3 -kombu==5.3.5 +kombu==5.3.7 # via # -r requirements/edx/base.txt # celery @@ -867,7 +870,7 @@ lxml==4.9.4 # xmlsec mailsnake==1.6.4 # via -r requirements/edx/base.txt -mako==1.3.2 +mako==1.3.3 # via # -r requirements/edx/base.txt # acid-xblock @@ -894,7 +897,7 @@ markupsafe==2.1.5 # mako # openedx-calc # xblock -maxminddb==2.5.2 +maxminddb==2.6.1 # via # -r requirements/edx/base.txt # geoip2 @@ -902,7 +905,7 @@ mccabe==0.7.0 # via pylint mock==5.1.0 # via -r requirements/edx/base.txt -mongoengine==0.27.0 +mongoengine==0.28.2 # via -r requirements/edx/base.txt monotonic==1.6 # via @@ -922,7 +925,7 @@ mysqlclient==2.2.4 # via # -r requirements/edx/base.txt # openedx-blockstore -newrelic==9.6.0 +newrelic==9.9.0 # via # -r requirements/edx/base.txt # edx-django-utils @@ -957,24 +960,24 @@ openedx-atlas==0.6.0 # via -r requirements/edx/base.txt openedx-blockstore==1.4.0 # via -r requirements/edx/base.txt -openedx-calc==3.0.1 +openedx-calc==3.1.0 # via -r requirements/edx/base.txt -openedx-django-pyfs==3.5.0 +openedx-django-pyfs==3.6.0 # via # -r requirements/edx/base.txt # lti-consumer-xblock # xblock openedx-django-require==2.1.0 # via -r requirements/edx/base.txt -openedx-django-wiki==2.0.3 +openedx-django-wiki==2.1.0 # via -r requirements/edx/base.txt -openedx-events==9.5.2 +openedx-events==9.9.2 # via # -r requirements/edx/base.txt # edx-event-bus-kafka # edx-event-bus-redis # event-tracking -openedx-filters==1.6.0 +openedx-filters==1.8.1 # via # -r requirements/edx/base.txt # lti-consumer-xblock @@ -988,9 +991,9 @@ optimizely-sdk==4.1.1 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -ora2==6.0.34 +ora2==6.6.2 # via -r requirements/edx/base.txt -packaging==23.2 +packaging==24.0 # via # -r requirements/edx/base.txt # drf-yasg @@ -1000,13 +1003,13 @@ packaging==23.2 # pytest # snowflake-connector-python # tox -pact-python==2.1.1 +pact-python==2.2.0 # via -r requirements/edx/testing.in pansi==2020.7.3 # via # -r requirements/edx/base.txt # py2neo -path==16.10.0 +path==16.14.0 # via # -r requirements/edx/base.txt # edx-i18n-tools @@ -1029,7 +1032,7 @@ pgpy==0.6.0 # edx-enterprise piexif==1.1.3 # via -r requirements/edx/base.txt -pillow==10.2.0 +pillow==10.3.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -1039,7 +1042,7 @@ pkgutil-resolve-name==1.3.10 # via # -r requirements/edx/base.txt # jsonschema -platformdirs==3.11.0 +platformdirs==4.2.0 # via # -r requirements/edx/base.txt # pylint @@ -1073,7 +1076,7 @@ py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo- # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -pyasn1==0.5.1 +pyasn1==0.6.0 # via # -r requirements/edx/base.txt # pgpy @@ -1083,7 +1086,7 @@ pycodestyle==2.8.0 # -r requirements/edx/testing.in pycountry==23.12.11 # via -r requirements/edx/base.txt -pycparser==2.21 +pycparser==2.22 # via # -r requirements/edx/base.txt # cffi @@ -1093,9 +1096,9 @@ pycryptodomex==3.20.0 # edx-proctoring # lti-consumer-xblock # pyjwkest -pydantic==2.6.1 +pydantic==2.7.0 # via fastapi -pydantic-core==2.16.2 +pydantic-core==2.18.1 # via pydantic pygments==2.17.2 # via @@ -1165,7 +1168,7 @@ pyopenssl==22.0.0 # -r requirements/edx/base.txt # optimizely-sdk # snowflake-connector-python -pyparsing==3.1.1 +pyparsing==3.1.2 # via # -r requirements/edx/base.txt # chem @@ -1182,7 +1185,7 @@ pysrt==1.1.2 # via # -r requirements/edx/base.txt # edxval -pytest==8.0.1 +pytest==8.1.1 # via # -r requirements/edx/testing.in # pylint-pytest @@ -1195,7 +1198,7 @@ pytest==8.0.1 # pytest-xdist pytest-attrib==0.1.3 # via -r requirements/edx/testing.in -pytest-cov==4.1.0 +pytest-cov==5.0.0 # via -r requirements/edx/testing.in pytest-django==4.8.0 # via -r requirements/edx/testing.in @@ -1209,7 +1212,7 @@ pytest-randomly==3.15.0 # via -r requirements/edx/testing.in pytest-xdist[psutil]==3.5.0 # via -r requirements/edx/testing.in -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/edx/base.txt # analytics-python @@ -1224,7 +1227,7 @@ python-dateutil==2.8.2 # olxcleaner # ora2 # xblock -python-ipware==2.0.1 +python-ipware==2.0.4 # via # -r requirements/edx/base.txt # django-ipware @@ -1234,7 +1237,7 @@ python-slugify==8.0.4 # via # -r requirements/edx/base.txt # code-annotations -python-swiftclient==4.4.0 +python-swiftclient==4.5.0 # via # -r requirements/edx/base.txt # ora2 @@ -1277,18 +1280,18 @@ pyyaml==6.0.1 # xblock random2==1.0.2 # via -r requirements/edx/base.txt -recommender-xblock==2.1.1 +recommender-xblock==2.2.0 # via -r requirements/edx/base.txt -redis==5.0.1 +redis==5.0.3 # via # -r requirements/edx/base.txt # walrus -referencing==0.33.0 +referencing==0.34.0 # via # -r requirements/edx/base.txt # jsonschema # jsonschema-specifications -regex==2023.12.25 +regex==2024.4.16 # via # -r requirements/edx/base.txt # nltk @@ -1317,10 +1320,12 @@ requests==2.31.0 # snowflake-connector-python # social-auth-core # xblock-google-drive -requests-oauthlib==1.3.1 +requests-oauthlib==2.0.0 # via # -r requirements/edx/base.txt # social-auth-core +requirements-parser==0.9.0 + # via -r requirements/edx/testing.in rpds-py==0.18.0 # via # -r requirements/edx/base.txt @@ -1340,7 +1345,7 @@ rules==3.3 # edx-enterprise # edx-proctoring # openedx-learning -s3transfer==0.10.0 +s3transfer==0.10.1 # via # -r requirements/edx/base.txt # boto3 @@ -1358,7 +1363,7 @@ semantic-version==2.10.0 # via # -r requirements/edx/base.txt # edx-drf-extensions -shapely==2.0.3 +shapely==2.0.4 # via -r requirements/edx/base.txt simplejson==3.19.2 # via @@ -1405,9 +1410,9 @@ slumber==0.7.1 # edx-bulk-grades # edx-enterprise # edx-rest-api-client -sniffio==1.3.0 +sniffio==1.3.1 # via anyio -snowflake-connector-python==3.7.0 +snowflake-connector-python==3.9.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -1434,16 +1439,16 @@ soupsieve==2.5 # via # -r requirements/edx/base.txt # beautifulsoup4 -sqlparse==0.4.4 +sqlparse==0.5.0 # via # -r requirements/edx/base.txt # django # openedx-blockstore -staff-graded-xblock==2.2.0 +staff-graded-xblock==2.3.0 # via -r requirements/edx/base.txt -starlette==0.36.3 +starlette==0.37.2 # via fastapi -stevedore==5.1.0 +stevedore==5.2.0 # via # -r requirements/edx/base.txt # code-annotations @@ -1451,7 +1456,7 @@ stevedore==5.1.0 # edx-django-utils # edx-enterprise # edx-opaque-keys -super-csv==3.1.0 +super-csv==3.2.0 # via # -r requirements/edx/base.txt # edx-bulk-grades @@ -1459,7 +1464,7 @@ sympy==1.12 # via # -r requirements/edx/base.txt # openedx-calc -testfixtures==8.0.0 +testfixtures==8.1.0 # via # -r requirements/edx/base.txt # -r requirements/edx/testing.in @@ -1480,19 +1485,21 @@ tomli==2.0.1 # pyproject-api # pytest # tox -tomlkit==0.12.3 +tomlkit==0.12.4 # via # -r requirements/edx/base.txt # pylint # snowflake-connector-python -tox==4.11.4 +tox==4.14.2 # via -r requirements/edx/testing.in tqdm==4.66.2 # via # -r requirements/edx/base.txt # nltk # openai -typing-extensions==4.9.0 +types-setuptools==69.5.0.20240415 + # via requirements-parser +typing-extensions==4.11.0 # via # -r requirements/edx/base.txt # annotated-types @@ -1508,6 +1515,7 @@ typing-extensions==4.9.0 # import-linter # jwcrypto # kombu + # pact-python # pydantic # pydantic-core # pylint @@ -1541,9 +1549,9 @@ urllib3==1.26.18 # py2neo # requests # snowflake-connector-python -user-util==1.0.0 +user-util==1.1.0 # via -r requirements/edx/base.txt -uvicorn==0.27.1 +uvicorn==0.29.0 # via pact-python vine==5.1.0 # via @@ -1551,7 +1559,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.25.0 +virtualenv==20.25.3 # via tox voluptuous==0.14.2 # via @@ -1567,7 +1575,7 @@ wcwidth==0.2.13 # via # -r requirements/edx/base.txt # prompt-toolkit -web-fragments==2.1.0 +web-fragments==2.2.0 # via # -r requirements/edx/base.txt # crowdsourcehinter-xblock @@ -1589,7 +1597,7 @@ wrapt==1.16.0 # via # -r requirements/edx/base.txt # astroid -xblock[django]==1.10.0 +xblock[django]==4.0.0 # via # -r requirements/edx/base.txt # acid-xblock @@ -1605,9 +1613,9 @@ xblock[django]==1.10.0 # xblock-google-drive # xblock-poll # xblock-utils -xblock-drag-and-drop-v2==3.4.0 +xblock-drag-and-drop-v2==4.0.1 # via -r requirements/edx/base.txt -xblock-google-drive==0.6.1 +xblock-google-drive==0.7.0 # via -r requirements/edx/base.txt xblock-poll==1.13.0 # via -r requirements/edx/base.txt @@ -1615,7 +1623,7 @@ xblock-utils==4.0.0 # via # -r requirements/edx/base.txt # edx-sga -xmlsec==1.3.13 +xmlsec==1.3.14 # via # -r requirements/edx/base.txt # python3-saml @@ -1625,7 +1633,8 @@ yarl==1.9.4 # via # -r requirements/edx/base.txt # aiohttp -zipp==3.17.0 + # pact-python +zipp==3.18.1 # via # -r requirements/edx/base.txt # importlib-metadata diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 309aa42bc055..823447abf2c1 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -4,17 +4,19 @@ # # make upgrade # -build==1.0.3 +build==1.2.1 # via pip-tools click==8.1.6 # via # -c requirements/constraints.txt # pip-tools -importlib-metadata==7.0.1 - # via build -packaging==23.2 +importlib-metadata==6.11.0 + # via + # -c requirements/common_constraints.txt + # build +packaging==24.0 # via build -pip-tools==7.4.0 +pip-tools==7.4.1 # via -r requirements/pip-tools.in pyproject-hooks==1.0.0 # via @@ -25,9 +27,9 @@ tomli==2.0.1 # build # pip-tools # pyproject-hooks -wheel==0.42.0 +wheel==0.43.0 # via pip-tools -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pip.txt b/requirements/pip.txt index 71954cc66a6f..e3ffcc7b6daf 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -4,11 +4,11 @@ # # make upgrade # -wheel==0.42.0 +wheel==0.43.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: pip==24.0 # via -r requirements/pip.in -setuptools==69.1.0 +setuptools==69.5.1 # via -r requirements/pip.in diff --git a/scripts/user_retirement/requirements/base.txt b/scripts/user_retirement/requirements/base.txt index 94aefc2dcbc5..df9d514a5ebc 100644 --- a/scripts/user_retirement/requirements/base.txt +++ b/scripts/user_retirement/requirements/base.txt @@ -4,25 +4,23 @@ # # make upgrade # -asgiref==3.7.2 +asgiref==3.8.1 # via django attrs==23.2.0 # via zeep backoff==2.2.1 # via -r scripts/user_retirement/requirements/base.in backports-zoneinfo==0.2.1 - # via - # django - # pendulum -boto3==1.34.26 + # via django +boto3==1.34.87 # via -r scripts/user_retirement/requirements/base.in -botocore==1.34.26 +botocore==1.34.87 # via # boto3 # s3transfer -cachetools==5.3.2 +cachetools==5.3.3 # via google-auth -certifi==2023.11.17 +certifi==2024.2.2 # via requests cffi==1.16.0 # via @@ -34,9 +32,9 @@ click==8.1.7 # via # -r scripts/user_retirement/requirements/base.in # edx-django-utils -cryptography==42.0.0 - # via simple-salesforce -django==4.2.9 +cryptography==42.0.5 + # via pyjwt +django==4.2.11 # via # django-crum # django-waffle @@ -45,31 +43,29 @@ django-crum==0.7.9 # via edx-django-utils django-waffle==4.1.0 # via edx-django-utils -edx-django-utils==5.10.1 +edx-django-utils==5.12.0 # via edx-rest-api-client -edx-rest-api-client==5.6.1 +edx-rest-api-client==5.7.0 # via -r scripts/user_retirement/requirements/base.in -google-api-core==2.15.0 +google-api-core==2.18.0 # via google-api-python-client -google-api-python-client==2.115.0 +google-api-python-client==2.126.0 # via -r scripts/user_retirement/requirements/base.in -google-auth==2.26.2 +google-auth==2.29.0 # via # google-api-core # google-api-python-client # google-auth-httplib2 google-auth-httplib2==0.2.0 # via google-api-python-client -googleapis-common-protos==1.62.0 +googleapis-common-protos==1.63.0 # via google-api-core httplib2==0.22.0 # via # google-api-python-client # google-auth-httplib2 -idna==3.6 +idna==3.7 # via requests -importlib-resources==6.1.1 - # via pendulum isodate==0.6.1 # via zeep jenkinsapi==0.3.13 @@ -78,46 +74,44 @@ jmespath==1.0.1 # via # boto3 # botocore -lxml==4.9.3 +lxml==5.2.1 # via zeep more-itertools==10.2.0 # via simple-salesforce -newrelic==9.5.0 +newrelic==9.9.0 # via edx-django-utils pbr==6.0.0 # via stevedore -pendulum==3.0.0 - # via simple-salesforce -platformdirs==4.1.0 +platformdirs==4.2.0 # via zeep -protobuf==4.25.2 +proto-plus==1.23.0 + # via google-api-core +protobuf==4.25.3 # via # google-api-core # googleapis-common-protos + # proto-plus psutil==5.9.8 # via edx-django-utils -pyasn1==0.5.1 +pyasn1==0.6.0 # via # pyasn1-modules # rsa -pyasn1-modules==0.3.0 +pyasn1-modules==0.4.0 # via google-auth -pycparser==2.21 +pycparser==2.22 # via cffi -pyjwt==2.8.0 +pyjwt[crypto]==2.8.0 # via # edx-rest-api-client # simple-salesforce pynacl==1.5.0 # via edx-django-utils -pyparsing==3.1.1 +pyparsing==3.1.2 # via httplib2 -python-dateutil==2.8.2 - # via - # botocore - # pendulum - # time-machine -pytz==2023.3.post1 +python-dateutil==2.9.0.post0 + # via botocore +pytz==2024.1 # via # jenkinsapi # zeep @@ -134,15 +128,15 @@ requests==2.31.0 # simple-salesforce # slumber # zeep -requests-file==1.5.1 +requests-file==2.0.0 # via zeep requests-toolbelt==1.0.0 # via zeep rsa==4.9 # via google-auth -s3transfer==0.10.0 +s3transfer==0.10.1 # via boto3 -simple-salesforce==1.12.5 +simple-salesforce==1.12.6 # via -r scripts/user_retirement/requirements/base.in simplejson==3.19.2 # via -r scripts/user_retirement/requirements/base.in @@ -151,19 +145,16 @@ six==1.16.0 # isodate # jenkinsapi # python-dateutil - # requests-file slumber==0.7.1 # via edx-rest-api-client -sqlparse==0.4.4 +sqlparse==0.5.0 # via django -stevedore==5.1.0 +stevedore==5.2.0 # via edx-django-utils -time-machine==2.13.0 - # via pendulum -typing-extensions==4.9.0 - # via asgiref -tzdata==2023.4 - # via pendulum +typing-extensions==4.11.0 + # via + # asgiref + # simple-salesforce unicodecsv==0.14.1 # via -r scripts/user_retirement/requirements/base.in uritemplate==4.1.1 @@ -174,5 +165,3 @@ urllib3==1.26.18 # requests zeep==4.2.1 # via simple-salesforce -zipp==3.17.0 - # via importlib-resources diff --git a/scripts/user_retirement/requirements/testing.txt b/scripts/user_retirement/requirements/testing.txt index 233f83a4911e..e8dfc6c8e5b8 100644 --- a/scripts/user_retirement/requirements/testing.txt +++ b/scripts/user_retirement/requirements/testing.txt @@ -4,7 +4,7 @@ # # make upgrade # -asgiref==3.7.2 +asgiref==3.8.1 # via # -r scripts/user_retirement/requirements/base.txt # django @@ -18,22 +18,21 @@ backports-zoneinfo==0.2.1 # via # -r scripts/user_retirement/requirements/base.txt # django - # pendulum -boto3==1.34.26 +boto3==1.34.87 # via # -r scripts/user_retirement/requirements/base.txt # moto -botocore==1.34.26 +botocore==1.34.87 # via # -r scripts/user_retirement/requirements/base.txt # boto3 # moto # s3transfer -cachetools==5.3.2 +cachetools==5.3.3 # via # -r scripts/user_retirement/requirements/base.txt # google-auth -certifi==2023.11.17 +certifi==2024.2.2 # via # -r scripts/user_retirement/requirements/base.txt # requests @@ -50,14 +49,14 @@ click==8.1.7 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -cryptography==42.0.0 +cryptography==42.0.5 # via # -r scripts/user_retirement/requirements/base.txt # moto - # simple-salesforce -ddt==1.7.1 + # pyjwt +ddt==1.7.2 # via -r scripts/user_retirement/requirements/testing.in -django==4.2.9 +django==4.2.11 # via # -r scripts/user_retirement/requirements/base.txt # django-crum @@ -71,21 +70,21 @@ django-waffle==4.1.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -edx-django-utils==5.10.1 +edx-django-utils==5.12.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-rest-api-client -edx-rest-api-client==5.6.1 +edx-rest-api-client==5.7.0 # via -r scripts/user_retirement/requirements/base.txt -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 # via pytest -google-api-core==2.15.0 +google-api-core==2.18.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-python-client -google-api-python-client==2.115.0 +google-api-python-client==2.126.0 # via -r scripts/user_retirement/requirements/base.txt -google-auth==2.26.2 +google-auth==2.29.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core @@ -95,7 +94,7 @@ google-auth-httplib2==0.2.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-python-client -googleapis-common-protos==1.62.0 +googleapis-common-protos==1.63.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core @@ -104,14 +103,10 @@ httplib2==0.22.0 # -r scripts/user_retirement/requirements/base.txt # google-api-python-client # google-auth-httplib2 -idna==3.6 +idna==3.7 # via # -r scripts/user_retirement/requirements/base.txt # requests -importlib-resources==6.1.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # pendulum iniconfig==2.0.0 # via pytest isodate==0.6.1 @@ -127,11 +122,11 @@ jmespath==1.0.1 # -r scripts/user_retirement/requirements/base.txt # boto3 # botocore -lxml==4.9.3 +lxml==5.2.1 # via # -r scripts/user_retirement/requirements/base.txt # zeep -markupsafe==2.1.4 +markupsafe==2.1.5 # via # jinja2 # werkzeug @@ -141,51 +136,52 @@ more-itertools==10.2.0 # via # -r scripts/user_retirement/requirements/base.txt # simple-salesforce -moto==4.2.13 +moto==5.0.5 # via -r scripts/user_retirement/requirements/testing.in -newrelic==9.5.0 +newrelic==9.9.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -packaging==23.2 +packaging==24.0 # via pytest pbr==6.0.0 # via # -r scripts/user_retirement/requirements/base.txt # stevedore -pendulum==3.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # simple-salesforce -platformdirs==4.1.0 +platformdirs==4.2.0 # via # -r scripts/user_retirement/requirements/base.txt # zeep -pluggy==1.3.0 +pluggy==1.4.0 # via pytest -protobuf==4.25.2 +proto-plus==1.23.0 + # via + # -r scripts/user_retirement/requirements/base.txt + # google-api-core +protobuf==4.25.3 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core # googleapis-common-protos + # proto-plus psutil==5.9.8 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -pyasn1==0.5.1 +pyasn1==0.6.0 # via # -r scripts/user_retirement/requirements/base.txt # pyasn1-modules # rsa -pyasn1-modules==0.3.0 +pyasn1-modules==0.4.0 # via # -r scripts/user_retirement/requirements/base.txt # google-auth -pycparser==2.21 +pycparser==2.22 # via # -r scripts/user_retirement/requirements/base.txt # cffi -pyjwt==2.8.0 +pyjwt[crypto]==2.8.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-rest-api-client @@ -194,20 +190,18 @@ pynacl==1.5.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -pyparsing==3.1.1 +pyparsing==3.1.2 # via # -r scripts/user_retirement/requirements/base.txt # httplib2 -pytest==7.4.4 +pytest==8.1.1 # via -r scripts/user_retirement/requirements/testing.in -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r scripts/user_retirement/requirements/base.txt # botocore # moto - # pendulum - # time-machine -pytz==2023.3.post1 +pytz==2024.1 # via # -r scripts/user_retirement/requirements/base.txt # jenkinsapi @@ -230,17 +224,17 @@ requests==2.31.0 # simple-salesforce # slumber # zeep -requests-file==1.5.1 +requests-file==2.0.0 # via # -r scripts/user_retirement/requirements/base.txt # zeep -requests-mock==1.11.0 +requests-mock==1.12.1 # via -r scripts/user_retirement/requirements/testing.in requests-toolbelt==1.0.0 # via # -r scripts/user_retirement/requirements/base.txt # zeep -responses==0.24.1 +responses==0.25.0 # via # -r scripts/user_retirement/requirements/testing.in # moto @@ -248,11 +242,11 @@ rsa==4.9 # via # -r scripts/user_retirement/requirements/base.txt # google-auth -s3transfer==0.10.0 +s3transfer==0.10.1 # via # -r scripts/user_retirement/requirements/base.txt # boto3 -simple-salesforce==1.12.5 +simple-salesforce==1.12.6 # via -r scripts/user_retirement/requirements/base.txt simplejson==3.19.2 # via -r scripts/user_retirement/requirements/base.txt @@ -262,34 +256,25 @@ six==1.16.0 # isodate # jenkinsapi # python-dateutil - # requests-file - # requests-mock slumber==0.7.1 # via # -r scripts/user_retirement/requirements/base.txt # edx-rest-api-client -sqlparse==0.4.4 +sqlparse==0.5.0 # via # -r scripts/user_retirement/requirements/base.txt # django -stevedore==5.1.0 +stevedore==5.2.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -time-machine==2.13.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # pendulum tomli==2.0.1 # via pytest -typing-extensions==4.9.0 +typing-extensions==4.11.0 # via # -r scripts/user_retirement/requirements/base.txt # asgiref -tzdata==2023.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # pendulum + # simple-salesforce unicodecsv==0.14.1 # via -r scripts/user_retirement/requirements/base.txt uritemplate==4.1.1 @@ -302,7 +287,7 @@ urllib3==1.26.18 # botocore # requests # responses -werkzeug==3.0.1 +werkzeug==3.0.2 # via moto xmltodict==0.13.0 # via moto @@ -310,7 +295,3 @@ zeep==4.2.1 # via # -r scripts/user_retirement/requirements/base.txt # simple-salesforce -zipp==3.17.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # importlib-resources diff --git a/scripts/xblock/requirements.txt b/scripts/xblock/requirements.txt index 6f0ae247c9f0..c45fa795b577 100644 --- a/scripts/xblock/requirements.txt +++ b/scripts/xblock/requirements.txt @@ -8,7 +8,7 @@ certifi==2024.2.2 # via requests charset-normalizer==3.3.2 # via requests -idna==3.6 +idna==3.7 # via requests requests==2.31.0 # via -r scripts/xblock/requirements.in