xrdclient 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- xrdclient-0.1.0/.github/workflows/ci.yml +125 -0
- xrdclient-0.1.0/.github/workflows/publish.yml +37 -0
- xrdclient-0.1.0/.gitignore +22 -0
- xrdclient-0.1.0/COPYING +674 -0
- xrdclient-0.1.0/LICENSE +165 -0
- xrdclient-0.1.0/PKG-INFO +387 -0
- xrdclient-0.1.0/README.md +349 -0
- xrdclient-0.1.0/SECURITY.md +151 -0
- xrdclient-0.1.0/benchmarks/bench.py +339 -0
- xrdclient-0.1.0/benchmarks/compare.py +582 -0
- xrdclient-0.1.0/docs/api.md +213 -0
- xrdclient-0.1.0/docs/async.md +178 -0
- xrdclient-0.1.0/docs/auth.md +329 -0
- xrdclient-0.1.0/docs/cli.md +232 -0
- xrdclient-0.1.0/docs/compat-cookbook.md +829 -0
- xrdclient-0.1.0/docs/compat-reference.md +578 -0
- xrdclient-0.1.0/docs/compat-troubleshooting.md +290 -0
- xrdclient-0.1.0/docs/compat.md +140 -0
- xrdclient-0.1.0/docs/config.md +261 -0
- xrdclient-0.1.0/docs/copying.md +401 -0
- xrdclient-0.1.0/docs/easy.md +169 -0
- xrdclient-0.1.0/docs/errors.md +168 -0
- xrdclient-0.1.0/docs/files.md +359 -0
- xrdclient-0.1.0/docs/filesystem.md +359 -0
- xrdclient-0.1.0/docs/fsspec.md +106 -0
- xrdclient-0.1.0/docs/http.md +215 -0
- xrdclient-0.1.0/docs/index.md +102 -0
- xrdclient-0.1.0/docs/interop.md +198 -0
- xrdclient-0.1.0/docs/maintainability.md +88 -0
- xrdclient-0.1.0/docs/migrating.md +216 -0
- xrdclient-0.1.0/docs/performance.md +301 -0
- xrdclient-0.1.0/docs/porting.md +386 -0
- xrdclient-0.1.0/docs/quickstart.md +147 -0
- xrdclient-0.1.0/docs/s3.md +170 -0
- xrdclient-0.1.0/docs/safety.md +150 -0
- xrdclient-0.1.0/docs/security.md +1 -0
- xrdclient-0.1.0/docs/superpowers/plans/2026-07-31-pyxrootd-client-roadmap.md +644 -0
- xrdclient-0.1.0/docs/superpowers/plans/2026-09-29-xrdcl-functionality-plan.md +150 -0
- xrdclient-0.1.0/docs/superpowers/specs/2026-07-31-pyxrootd-client-design.md +1036 -0
- xrdclient-0.1.0/docs/testing.md +335 -0
- xrdclient-0.1.0/docs/typing.md +68 -0
- xrdclient-0.1.0/examples/gsi_copy_benchmark.py +493 -0
- xrdclient-0.1.0/examples/pyxrootd/README.md +115 -0
- xrdclient-0.1.0/examples/pyxrootd/async_callbacks.py +85 -0
- xrdclient-0.1.0/examples/pyxrootd/checksum_query.py +48 -0
- xrdclient-0.1.0/examples/pyxrootd/copy_process.py +88 -0
- xrdclient-0.1.0/examples/pyxrootd/dirlist.py +52 -0
- xrdclient-0.1.0/examples/pyxrootd/env_settings.py +36 -0
- xrdclient-0.1.0/examples/pyxrootd/error_handling.py +68 -0
- xrdclient-0.1.0/examples/pyxrootd/file_io.py +64 -0
- xrdclient-0.1.0/examples/pyxrootd/glob_files.py +50 -0
- xrdclient-0.1.0/examples/pyxrootd/install_hook.py +47 -0
- xrdclient-0.1.0/examples/pyxrootd/locate.py +41 -0
- xrdclient-0.1.0/examples/pyxrootd/namespace_ops.py +62 -0
- xrdclient-0.1.0/examples/pyxrootd/open_flags.py +50 -0
- xrdclient-0.1.0/examples/pyxrootd/read_chunks.py +41 -0
- xrdclient-0.1.0/examples/pyxrootd/read_lines.py +46 -0
- xrdclient-0.1.0/examples/pyxrootd/run_all.py +349 -0
- xrdclient-0.1.0/examples/pyxrootd/simple_copy.py +48 -0
- xrdclient-0.1.0/examples/pyxrootd/stat_and_ping.py +57 -0
- xrdclient-0.1.0/examples/pyxrootd/sync_changed.py +109 -0
- xrdclient-0.1.0/examples/pyxrootd/timeouts.py +51 -0
- xrdclient-0.1.0/examples/pyxrootd/url_parsing.py +41 -0
- xrdclient-0.1.0/examples/pyxrootd/vector_read.py +39 -0
- xrdclient-0.1.0/examples/pyxrootd/xattrs.py +60 -0
- xrdclient-0.1.0/maintainability.json +18 -0
- xrdclient-0.1.0/mkdocs.yml +94 -0
- xrdclient-0.1.0/pyproject.toml +128 -0
- xrdclient-0.1.0/src/xrdclient/__init__.py +249 -0
- xrdclient-0.1.0/src/xrdclient/_compat.py +86 -0
- xrdclient-0.1.0/src/xrdclient/_log.py +96 -0
- xrdclient-0.1.0/src/xrdclient/aio.py +1040 -0
- xrdclient-0.1.0/src/xrdclient/auth/__init__.py +399 -0
- xrdclient-0.1.0/src/xrdclient/auth/base.py +107 -0
- xrdclient-0.1.0/src/xrdclient/auth/gsi.py +678 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/__init__.py +22 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/asn1.py +524 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/caches.py +99 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/ccache.py +303 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/kcm.py +254 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/kdc.py +152 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/keyring.py +334 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/model.py +119 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/profile.py +256 -0
- xrdclient-0.1.0/src/xrdclient/auth/kerberos/tgs.py +234 -0
- xrdclient-0.1.0/src/xrdclient/auth/krb5.py +272 -0
- xrdclient-0.1.0/src/xrdclient/auth/prompt.py +196 -0
- xrdclient-0.1.0/src/xrdclient/auth/simple.py +51 -0
- xrdclient-0.1.0/src/xrdclient/auth/sss.py +251 -0
- xrdclient-0.1.0/src/xrdclient/auth/ztn.py +206 -0
- xrdclient-0.1.0/src/xrdclient/cli/__init__.py +214 -0
- xrdclient-0.1.0/src/xrdclient/cli/cp.py +598 -0
- xrdclient-0.1.0/src/xrdclient/cli/fs.py +721 -0
- xrdclient-0.1.0/src/xrdclient/client/__init__.py +9 -0
- xrdclient-0.1.0/src/xrdclient/client/_fattr.py +70 -0
- xrdclient-0.1.0/src/xrdclient/client/_zip.py +203 -0
- xrdclient-0.1.0/src/xrdclient/client/bulk.py +494 -0
- xrdclient-0.1.0/src/xrdclient/client/file.py +1461 -0
- xrdclient-0.1.0/src/xrdclient/client/filesystem.py +1252 -0
- xrdclient-0.1.0/src/xrdclient/compat/__init__.py +59 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/__init__.py +86 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/_args.py +67 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/_channels.py +54 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/_convert.py +275 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/_dispatch.py +217 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/_status.py +171 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/_version.py +7 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/copyprocess.py +489 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/env.py +455 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/file.py +557 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/filesystem.py +599 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/finalize.py +30 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/flags.py +174 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/glob_funcs.py +89 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/responses.py +458 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/tape.py +393 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/url.py +114 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/utils.py +81 -0
- xrdclient-0.1.0/src/xrdclient/compat/client/xattr.py +53 -0
- xrdclient-0.1.0/src/xrdclient/config.py +538 -0
- xrdclient-0.1.0/src/xrdclient/copy/__init__.py +28 -0
- xrdclient-0.1.0/src/xrdclient/copy/engine.py +1300 -0
- xrdclient-0.1.0/src/xrdclient/copy/limits.py +149 -0
- xrdclient-0.1.0/src/xrdclient/copy/replicas.py +270 -0
- xrdclient-0.1.0/src/xrdclient/copy/tpc.py +290 -0
- xrdclient-0.1.0/src/xrdclient/crypto/__init__.py +124 -0
- xrdclient-0.1.0/src/xrdclient/crypto/aes.py +238 -0
- xrdclient-0.1.0/src/xrdclient/crypto/blowfish.py +188 -0
- xrdclient-0.1.0/src/xrdclient/crypto/checksum.py +122 -0
- xrdclient-0.1.0/src/xrdclient/crypto/crc32c.py +136 -0
- xrdclient-0.1.0/src/xrdclient/crypto/crc64.py +58 -0
- xrdclient-0.1.0/src/xrdclient/crypto/delegation.py +281 -0
- xrdclient-0.1.0/src/xrdclient/crypto/der.py +234 -0
- xrdclient-0.1.0/src/xrdclient/crypto/rfc3961.py +340 -0
- xrdclient-0.1.0/src/xrdclient/crypto/rsa.py +412 -0
- xrdclient-0.1.0/src/xrdclient/crypto/sigver.py +191 -0
- xrdclient-0.1.0/src/xrdclient/crypto/trust.py +139 -0
- xrdclient-0.1.0/src/xrdclient/crypto/x509.py +431 -0
- xrdclient-0.1.0/src/xrdclient/doctor.py +416 -0
- xrdclient-0.1.0/src/xrdclient/easy.py +391 -0
- xrdclient-0.1.0/src/xrdclient/errors.py +366 -0
- xrdclient-0.1.0/src/xrdclient/flags.py +453 -0
- xrdclient-0.1.0/src/xrdclient/fsspec_impl.py +499 -0
- xrdclient-0.1.0/src/xrdclient/http/__init__.py +35 -0
- xrdclient-0.1.0/src/xrdclient/http/client.py +654 -0
- xrdclient-0.1.0/src/xrdclient/http/dav.py +744 -0
- xrdclient-0.1.0/src/xrdclient/http/file.py +493 -0
- xrdclient-0.1.0/src/xrdclient/http/tape.py +256 -0
- xrdclient-0.1.0/src/xrdclient/http/tpc.py +341 -0
- xrdclient-0.1.0/src/xrdclient/io/__init__.py +207 -0
- xrdclient-0.1.0/src/xrdclient/io/raw.py +222 -0
- xrdclient-0.1.0/src/xrdclient/path.py +303 -0
- xrdclient-0.1.0/src/xrdclient/proto/__init__.py +25 -0
- xrdclient-0.1.0/src/xrdclient/proto/buffer.py +174 -0
- xrdclient-0.1.0/src/xrdclient/proto/constants.py +320 -0
- xrdclient-0.1.0/src/xrdclient/proto/frames.py +164 -0
- xrdclient-0.1.0/src/xrdclient/proto/machine.py +945 -0
- xrdclient-0.1.0/src/xrdclient/proto/requests.py +1011 -0
- xrdclient-0.1.0/src/xrdclient/proto/responses.py +675 -0
- xrdclient-0.1.0/src/xrdclient/py.typed +0 -0
- xrdclient-0.1.0/src/xrdclient/s3/__init__.py +34 -0
- xrdclient-0.1.0/src/xrdclient/s3/fs.py +837 -0
- xrdclient-0.1.0/src/xrdclient/s3/sigv4.py +219 -0
- xrdclient-0.1.0/src/xrdclient/session/__init__.py +9 -0
- xrdclient-0.1.0/src/xrdclient/session/bulk.py +639 -0
- xrdclient-0.1.0/src/xrdclient/session/deadline.py +93 -0
- xrdclient-0.1.0/src/xrdclient/session/pool.py +345 -0
- xrdclient-0.1.0/src/xrdclient/session/router.py +732 -0
- xrdclient-0.1.0/src/xrdclient/session/sync.py +800 -0
- xrdclient-0.1.0/src/xrdclient/testing/__init__.py +35 -0
- xrdclient-0.1.0/src/xrdclient/testing/__main__.py +13 -0
- xrdclient-0.1.0/src/xrdclient/testing/faults.py +363 -0
- xrdclient-0.1.0/src/xrdclient/testing/http.py +724 -0
- xrdclient-0.1.0/src/xrdclient/testing/s3.py +522 -0
- xrdclient-0.1.0/src/xrdclient/testing/server.py +1482 -0
- xrdclient-0.1.0/src/xrdclient/transport/__init__.py +27 -0
- xrdclient-0.1.0/src/xrdclient/transport/base.py +84 -0
- xrdclient-0.1.0/src/xrdclient/transport/memory.py +79 -0
- xrdclient-0.1.0/src/xrdclient/transport/sync.py +95 -0
- xrdclient-0.1.0/src/xrdclient/types.py +425 -0
- xrdclient-0.1.0/src/xrdclient/url.py +363 -0
- xrdclient-0.1.0/tests/_gsi.py +191 -0
- xrdclient-0.1.0/tests/_kcmd.py +330 -0
- xrdclient-0.1.0/tests/_keys.py +107 -0
- xrdclient-0.1.0/tests/_krb5_mit.py +35 -0
- xrdclient-0.1.0/tests/_krb5kdc.py +493 -0
- xrdclient-0.1.0/tests/_pki.py +311 -0
- xrdclient-0.1.0/tests/_xrootd.py +151 -0
- xrdclient-0.1.0/tests/conftest.py +199 -0
- xrdclient-0.1.0/tests/test_aes.py +136 -0
- xrdclient-0.1.0/tests/test_aio.py +759 -0
- xrdclient-0.1.0/tests/test_aio_surface.py +90 -0
- xrdclient-0.1.0/tests/test_append.py +97 -0
- xrdclient-0.1.0/tests/test_auth.py +712 -0
- xrdclient-0.1.0/tests/test_benchmarks.py +70 -0
- xrdclient-0.1.0/tests/test_buffer.py +95 -0
- xrdclient-0.1.0/tests/test_bulk.py +552 -0
- xrdclient-0.1.0/tests/test_bulk_integrity.py +244 -0
- xrdclient-0.1.0/tests/test_cli.py +1118 -0
- xrdclient-0.1.0/tests/test_client.py +1754 -0
- xrdclient-0.1.0/tests/test_compat.py +246 -0
- xrdclient-0.1.0/tests/test_compat_xrdcl.py +933 -0
- xrdclient-0.1.0/tests/test_config.py +323 -0
- xrdclient-0.1.0/tests/test_conformance_http.py +850 -0
- xrdclient-0.1.0/tests/test_conformance_io.py +350 -0
- xrdclient-0.1.0/tests/test_conformance_opaque.py +271 -0
- xrdclient-0.1.0/tests/test_conformance_semantics.py +468 -0
- xrdclient-0.1.0/tests/test_conformance_session.py +191 -0
- xrdclient-0.1.0/tests/test_conformance_wire.py +385 -0
- xrdclient-0.1.0/tests/test_copy.py +1026 -0
- xrdclient-0.1.0/tests/test_copy_integrity.py +175 -0
- xrdclient-0.1.0/tests/test_copy_options.py +1082 -0
- xrdclient-0.1.0/tests/test_coverage_core.py +368 -0
- xrdclient-0.1.0/tests/test_coverage_misc.py +255 -0
- xrdclient-0.1.0/tests/test_crypto.py +461 -0
- xrdclient-0.1.0/tests/test_data_streams_default.py +312 -0
- xrdclient-0.1.0/tests/test_datapath.py +445 -0
- xrdclient-0.1.0/tests/test_deadline.py +364 -0
- xrdclient-0.1.0/tests/test_default_config_interop.py +98 -0
- xrdclient-0.1.0/tests/test_delegation.py +610 -0
- xrdclient-0.1.0/tests/test_der.py +110 -0
- xrdclient-0.1.0/tests/test_doctor.py +288 -0
- xrdclient-0.1.0/tests/test_easy.py +316 -0
- xrdclient-0.1.0/tests/test_errors.py +157 -0
- xrdclient-0.1.0/tests/test_faults.py +475 -0
- xrdclient-0.1.0/tests/test_fcntl_template_zip.py +467 -0
- xrdclient-0.1.0/tests/test_flags.py +176 -0
- xrdclient-0.1.0/tests/test_frames.py +447 -0
- xrdclient-0.1.0/tests/test_fsspec.py +329 -0
- xrdclient-0.1.0/tests/test_gsi.py +708 -0
- xrdclient-0.1.0/tests/test_gsi_delegation_interop.py +238 -0
- xrdclient-0.1.0/tests/test_http.py +1212 -0
- xrdclient-0.1.0/tests/test_http_names.py +125 -0
- xrdclient-0.1.0/tests/test_http_redirect_credentials.py +157 -0
- xrdclient-0.1.0/tests/test_http_timeouts.py +99 -0
- xrdclient-0.1.0/tests/test_interop.py +504 -0
- xrdclient-0.1.0/tests/test_io.py +345 -0
- xrdclient-0.1.0/tests/test_krb5.py +632 -0
- xrdclient-0.1.0/tests/test_krb5_crypto.py +439 -0
- xrdclient-0.1.0/tests/test_krb5_interop.py +201 -0
- xrdclient-0.1.0/tests/test_krb5_kcm.py +586 -0
- xrdclient-0.1.0/tests/test_krb5_keyring.py +558 -0
- xrdclient-0.1.0/tests/test_krb5_mit.py +351 -0
- xrdclient-0.1.0/tests/test_krb5_protocol.py +696 -0
- xrdclient-0.1.0/tests/test_machine.py +889 -0
- xrdclient-0.1.0/tests/test_maintainability.py +175 -0
- xrdclient-0.1.0/tests/test_mtls.py +130 -0
- xrdclient-0.1.0/tests/test_parity.py +312 -0
- xrdclient-0.1.0/tests/test_path.py +312 -0
- xrdclient-0.1.0/tests/test_plane.py +704 -0
- xrdclient-0.1.0/tests/test_plane_interop.py +72 -0
- xrdclient-0.1.0/tests/test_pool.py +556 -0
- xrdclient-0.1.0/tests/test_prompt.py +711 -0
- xrdclient-0.1.0/tests/test_pyxrootd_compat.py +1924 -0
- xrdclient-0.1.0/tests/test_pyxrootd_compat_newapi.py +796 -0
- xrdclient-0.1.0/tests/test_pyxrootd_examples.py +124 -0
- xrdclient-0.1.0/tests/test_redirects.py +458 -0
- xrdclient-0.1.0/tests/test_request_path.py +340 -0
- xrdclient-0.1.0/tests/test_responses.py +638 -0
- xrdclient-0.1.0/tests/test_rmtree_symlinks.py +222 -0
- xrdclient-0.1.0/tests/test_rsa.py +253 -0
- xrdclient-0.1.0/tests/test_s3.py +900 -0
- xrdclient-0.1.0/tests/test_safety.py +195 -0
- xrdclient-0.1.0/tests/test_session.py +301 -0
- xrdclient-0.1.0/tests/test_surface.py +635 -0
- xrdclient-0.1.0/tests/test_testing.py +602 -0
- xrdclient-0.1.0/tests/test_transport.py +363 -0
- xrdclient-0.1.0/tests/test_typing.py +94 -0
- xrdclient-0.1.0/tests/test_url.py +255 -0
- xrdclient-0.1.0/tests/test_x509.py +387 -0
- xrdclient-0.1.0/tools/maintainability.py +733 -0
- xrdclient-0.1.0/tools/pyxrootd_upstream.py +238 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
env:
|
|
14
|
+
FORCE_COLOR: "1"
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
lint:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
- run: pip install -e ".[dev]"
|
|
25
|
+
- name: ruff
|
|
26
|
+
run: ruff check src tests benchmarks tools examples
|
|
27
|
+
- name: mypy --strict
|
|
28
|
+
run: mypy
|
|
29
|
+
- name: maintainability burn-down (must reach zero)
|
|
30
|
+
run: python tools/maintainability.py check
|
|
31
|
+
|
|
32
|
+
test:
|
|
33
|
+
runs-on: ${{ matrix.os }}
|
|
34
|
+
strategy:
|
|
35
|
+
fail-fast: false
|
|
36
|
+
matrix:
|
|
37
|
+
os: [ubuntu-latest]
|
|
38
|
+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
|
39
|
+
include:
|
|
40
|
+
- os: macos-latest
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
- uses: actions/setup-python@v5
|
|
45
|
+
with:
|
|
46
|
+
python-version: ${{ matrix.python-version }}
|
|
47
|
+
# The point of the library is that it needs nothing compiled; installing
|
|
48
|
+
# the fsspec extra as well keeps that adapter's tests from silently
|
|
49
|
+
# skipping on every run.
|
|
50
|
+
- run: pip install -e ".[dev]"
|
|
51
|
+
# pytest-cov rather than `coverage run`, because the workers xdist
|
|
52
|
+
# spawns are separate processes and only pytest-cov collects them all.
|
|
53
|
+
# `fail_under = 100` on proto/, crypto/ and client/ comes from
|
|
54
|
+
# pyproject.toml, so the gate lives with the configuration.
|
|
55
|
+
- name: pytest
|
|
56
|
+
run: >-
|
|
57
|
+
pytest -q -p no:cacheprovider -n auto
|
|
58
|
+
-m "not interop and not parity"
|
|
59
|
+
--cov=xrdclient --cov-report=term-missing
|
|
60
|
+
|
|
61
|
+
interop:
|
|
62
|
+
# A real daemon, because a fake written from the same reading of the
|
|
63
|
+
# specification as the client would agree with a misreading.
|
|
64
|
+
runs-on: ubuntu-latest
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@v4
|
|
67
|
+
- uses: conda-incubator/setup-miniconda@v3
|
|
68
|
+
with:
|
|
69
|
+
python-version: "3.12"
|
|
70
|
+
channels: conda-forge
|
|
71
|
+
auto-activate-base: false
|
|
72
|
+
activate-environment: interop
|
|
73
|
+
- name: install xrootd and the official bindings
|
|
74
|
+
shell: bash -el {0}
|
|
75
|
+
run: conda install -y xrootd
|
|
76
|
+
- name: install
|
|
77
|
+
shell: bash -el {0}
|
|
78
|
+
run: pip install -e ".[dev]"
|
|
79
|
+
- name: interop and parity
|
|
80
|
+
shell: bash -el {0}
|
|
81
|
+
run: |
|
|
82
|
+
xrootd -v
|
|
83
|
+
pytest -q -p no:cacheprovider -m "interop or parity"
|
|
84
|
+
|
|
85
|
+
docs:
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/checkout@v4
|
|
89
|
+
- uses: actions/setup-python@v5
|
|
90
|
+
with:
|
|
91
|
+
python-version: "3.12"
|
|
92
|
+
- run: pip install -e ".[docs]"
|
|
93
|
+
# --strict turns a broken link or a page missing from the nav into a
|
|
94
|
+
# failure, which is the only way documentation stays true.
|
|
95
|
+
- run: mkdocs build --strict
|
|
96
|
+
|
|
97
|
+
performance:
|
|
98
|
+
# A gate, not a report: every case in benchmarks/compare.py must be won
|
|
99
|
+
# against the official XRootD bindings on the same runner, by both the
|
|
100
|
+
# native API and xrdclient.compat. Rounds are paired and interleaved and
|
|
101
|
+
# a win must pass a one-sided sign test, so a noisy runner cannot turn a
|
|
102
|
+
# loss into a pass by luck - only into a failure, which is re-runnable.
|
|
103
|
+
runs-on: ubuntu-latest
|
|
104
|
+
steps:
|
|
105
|
+
- uses: actions/checkout@v4
|
|
106
|
+
- uses: conda-incubator/setup-miniconda@v3
|
|
107
|
+
with:
|
|
108
|
+
python-version: "3.12"
|
|
109
|
+
channels: conda-forge
|
|
110
|
+
activate-environment: bench
|
|
111
|
+
- shell: bash -el {0}
|
|
112
|
+
run: conda install -y xrootd
|
|
113
|
+
- shell: bash -el {0}
|
|
114
|
+
run: pip install -e .
|
|
115
|
+
- name: loopback
|
|
116
|
+
shell: bash -el {0}
|
|
117
|
+
run: python benchmarks/compare.py --gate --size 64 --rounds 15 --json loopback.json
|
|
118
|
+
- name: 2 ms round trip
|
|
119
|
+
shell: bash -el {0}
|
|
120
|
+
run: python benchmarks/compare.py --gate --size 64 --rounds 15 --rtt 2 --json rtt2.json
|
|
121
|
+
- if: always()
|
|
122
|
+
uses: actions/upload-artifact@v4
|
|
123
|
+
with:
|
|
124
|
+
name: performance
|
|
125
|
+
path: "*.json"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Builds the sdist and wheel on a version tag and uploads them to PyPI through
|
|
2
|
+
# trusted publishing (no API token: PyPI trusts this workflow's OIDC identity,
|
|
3
|
+
# registered under the project's "Publishing" settings).
|
|
4
|
+
name: Publish
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
tags: ["v*"]
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
- run: pip install build twine
|
|
19
|
+
- run: python -m build
|
|
20
|
+
- run: twine check dist/*
|
|
21
|
+
- uses: actions/upload-artifact@v4
|
|
22
|
+
with:
|
|
23
|
+
name: dist
|
|
24
|
+
path: dist/
|
|
25
|
+
|
|
26
|
+
publish:
|
|
27
|
+
needs: build
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
environment: pypi
|
|
30
|
+
permissions:
|
|
31
|
+
id-token: write
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/download-artifact@v4
|
|
34
|
+
with:
|
|
35
|
+
name: dist
|
|
36
|
+
path: dist/
|
|
37
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
|
|
4
|
+
# Build artefacts
|
|
5
|
+
build/
|
|
6
|
+
dist/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
site/
|
|
9
|
+
|
|
10
|
+
# Tooling caches and coverage data
|
|
11
|
+
.coverage
|
|
12
|
+
.coverage.*
|
|
13
|
+
htmlcov/
|
|
14
|
+
.mypy_cache/
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
.ruff_cache/
|
|
17
|
+
.tox/
|
|
18
|
+
.venv/
|
|
19
|
+
venv/
|
|
20
|
+
|
|
21
|
+
# Generated datasets
|
|
22
|
+
/datasets/
|