Skip to content

Updating requirements and fixing models.#90

Open
zanpak wants to merge 30 commits into
developfrom
updating-requirements
Open

Updating requirements and fixing models.#90
zanpak wants to merge 30 commits into
developfrom
updating-requirements

Conversation

@zanpak
Copy link
Copy Markdown
Collaborator

@zanpak zanpak commented Oct 10, 2024

Description

Updates the requirement lists. The code changes are only to adapt the code to changes in the imported packages.

New dependencies:

Fixes vikinganalytics/daeploy-issues# (potential issues that are fixed by this PR)

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update

Checklist

  • I have added tests that prove that my fix/feature works
  • Linters pass locally and I have followed PEP8 code style
  • New and existing tests pass locally
  • I have updated the documentation if needed
  • I have included any significant changes in CHANGES.md
  • I have commented hard-to-understand areas in the code

zanpak and others added 18 commits October 10, 2024 00:13
- requirements_manager.txt: bump all 14 packages (SQLAlchemy 1.3→2.0,
  cryptography 3.3→46.0, bcrypt 3.2→5.0, dash 2.18→4.1, cookiecutter 1.7→2.7,
  fastapi 0.110→0.135, uvicorn 0.20→0.44, semver 2.13→3.0, pyjwt 2.0→2.12,
  python-multipart 0.0.5→0.0.26, jinja2→3.1.6, aiodocker 0.23→0.26, docker 7.0→7.1)
- requirements_dev.txt: unpin pylint (was stuck at 2.7.4)
- setup.py: raise python_requires to >=3.9 (drop EOL 3.6-3.8)
- CI matrix: upgrade test versions to Python 3.9-3.12

SQLAlchemy 2.0: move declarative_base import to sqlalchemy.orm,
  remove deprecated mapper() call from _service/db.py,
  remove unused global QUEUE from remove_db()

Pydantic v2: validate_arguments→validate_call, @validator→@field_validator,
  schema_extra→model_config/json_schema_extra, custom types rewritten
  to use __get_pydantic_core_schema__ / __get_pydantic_json_schema__

semver 3.x: VersionInfo.isvalid()→Version.is_valid()
bcrypt 5.x: store hash as str (.decode()), re-encode on checkpw
Dash 4.x: replace removed dash_core_components/dash_html_components imports
click 8.x: replace removed click.get_os_args() with sys.argv
pylintrc: remove obsolete C0330/C0326 codes, add ignored-modules=IPython

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix black formatting in two test files (pre-existing issues caught by latest black)
- Suppress pylint unused-argument warnings in data_types.py (args required by Pydantic v2 protocol)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The old pylint==2.7.4 did not have these checks. Adding them to the
disable list preserves the prior passing behavior without modifying
unrelated code in this dependency-upgrade PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The job was still using Python 3.8, which can't install fastapi==0.135.3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Newer Starlette/FastAPI requires httpx for TestClient.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Lazy-init aiodocker.Docker() to avoid "no running event loop" error
  with newer aiohttp (required by aiodocker 0.26)
- Replace Pydantic v1 .schema() with v2 .model_json_schema() in tests
- Replace pydantic.error_wrappers.ValidationError with pydantic.ValidationError

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add engine.dispose() in remove_db() for SQLAlchemy 2.0 connection pool
- Add default None to NotificationRequest.emails (Pydantic v2 requires it)
- Use client.request("DELETE",...) instead of client.delete(json=...) for httpx
- Fix mock assertion: called_once() -> assert_called_once() (Python 3.12)
- Handle Pydantic v2 Url type in git_request test assertions
- Catch ResponseValidationError in inspection test (FastAPI + Pydantic v2)
- Lazy-init aiodocker.Docker() to avoid "no running event loop" error
- Replace Pydantic v1 .schema() with v2 .model_json_schema() in tests
- Replace pydantic.error_wrappers.ValidationError with pydantic.ValidationError

All 101 non-infrastructure tests pass locally (remaining 11
failures require traefik/s2i which are installed in CI).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace allow_redirects with follow_redirects (removed in httpx 0.28)
- Use context= keyword in TemplateResponse (fixes unhashable dict in Jinja2 3.1.6)

Verified locally: 101/112 tests pass (11 require traefik/s2i infra).
All linters pass: black, flake8, pylint 10/10.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use explicit keyword arguments for TemplateResponse to fix pylint
E1120 error caused by Starlette's updated constructor signature.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Drop Python 3.9 from pytest-sdk matrix (fastapi 0.135.3 requires >=3.10)
- Migrate service DB from automap_base to declarative_base for SQLAlchemy 2.0
  compatibility with dynamic table creation
- Fix httpx GET json= incompatibility in test_entrypoint_get
- Fix test_version_flag_without_manager assertion to match actual CLI output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
setuptools 82+ removed pkg_resources from the default install.
Use importlib.metadata (stdlib since Python 3.8) instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The pytest-sdk job was hanging for 6 hours with no output when an
infrastructure-dependent test got stuck. Set a 180s per-test timeout
so hangs surface as clear failures instead of timing out the runner.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Convert HttpUrl to str before passing to s2i subprocess (Pydantic v2
  no longer returns a string subclass for HttpUrl).
- Add explicit None defaults to Optional response fields
  (StateResponse.Health, NetworkSettingsResponse.Secondary*,
  ConfigResponse.ExecIDs). Pydantic v2 no longer treats Optional
  as an implicit default.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Click 8.2+ sends validation error messages to stderr by default, so
the error text doesn't appear in result.stdout. result.output contains
both stdout and stderr.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
setuptools.sandbox was removed in modern setuptools releases. Invoke
setup.py bdist_wheel via subprocess instead, which achieves the same
goal without depending on the deprecated sandbox API.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
kavehtoyser and others added 11 commits May 5, 2026 11:33
- Replace 'sklearn' with 'scikit-learn' in pickle service test;
  pip blocks the deprecated sklearn meta-package since Dec 2023.
- Add ipykernel to dev requirements and register the python3 kernel
  in the e2e CI step so ExecutePreprocessor can find it for the
  notebook service test.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The autogenerated pickle service template pinned daeploy==0.4.6 (from
2021), which does not install on Python 3.12 in the new s2i builder.
Pin to 1.3.1, the latest release on PyPI, so /services/~pickle deploys
again.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Capture the manager's response and container logs so we can see why
the pickle service deploy is failing in CI. Also bump grace period
to 30s in case the build is slow. To be reverted once the underlying
issue is identified.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The pickle service installs daeploy + pandas + scikit-learn during
s2i build, which can take several minutes -- much longer than the
upstream/downstream services that only install daeploy. The fixed
30-second grace was not enough, so the test asserted before the
container existed.

Replace the sleep with a 10-minute poll for the container name to
appear, and assert the manager actually accepted the request.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
After the container appears, the daeploy service inside still takes
time to import the model and start FastAPI. Poll the openapi.json
endpoint until it returns 200 so the test only proceeds once the
service is actually reachable through traefik.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The pickle service installs daeploy + pandas + scikit-learn during
s2i build, which exceeds the global 180s pytest-timeout. Override
just for this test so the polling loop has time to wait for the
build to finish.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Poll for 800s and, on timeout, print the running container list and
the last 200 lines of manager logs so we can diagnose whether the
build is just slow or actually failing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Previous diagnostics show the container exists in list(all=True) but
not list() -- meaning it started and crashed. Print its logs so we
can see the actual import/runtime error inside the service.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The old pickle referenced sklearn.metrics._dist_metrics.EuclideanDistance,
which was renamed in newer scikit-learn versions. Pickling with the
current version (1.8.0) produces a model that can be unpickled by the
scikit-learn that the s2i builder installs at deploy time.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The test sends a DataFrame with columns named 1/2/3/4, but training
on iris.data (a DataFrame) recorded the iris feature names on the
model. Newer scikit-learn raises a warning -- and in some cases an
error -- when feature names mismatch. Train on numpy arrays so the
model has no feature_names_in_ recorded.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
If /predict returns non-200, dump pickle service container logs and
include the response body in the assertion so we can diagnose any
remaining runtime errors.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Pydantic v2 (under FastAPI) refuses to serialize numpy.int64 etc.
in JSON responses. numpy.ndarray.tolist() converts both the array
and its elements to native Python types, so the response serializes
correctly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@kavehtoyser kavehtoyser marked this pull request as ready for review May 5, 2026 20:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants