From a1ab19e60993763f2bb2f21d462787d6a6783716 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Tue, 25 Nov 2025 23:04:26 +0100 Subject: [PATCH 01/11] add feature branch audit file --- .audit/oberstet_modernization-phase-12.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .audit/oberstet_modernization-phase-12.md diff --git a/.audit/oberstet_modernization-phase-12.md b/.audit/oberstet_modernization-phase-12.md new file mode 100644 index 000000000..2ce43a4c0 --- /dev/null +++ b/.audit/oberstet_modernization-phase-12.md @@ -0,0 +1,8 @@ +- [ ] I did **not** use any AI-assistance tools to help create this pull request. +- [x] I **did** use AI-assistance tools to *help* create this pull request. +- [x] I have read, understood and followed the project's AI_POLICY.md when creating code, documentation etc. for this pull request. + +Submitted by: @oberstet +Date: 2025-11-25 +Related issue(s): #1787 +Branch: oberstet:modernization-phase-1.2 From 563b7509892ab39b9e06d6593208a28a3660828f Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Wed, 26 Nov 2025 02:30:00 +0100 Subject: [PATCH 02/11] Add tracking document for issue #1789 and Rust rewrite analysis Document NULL pointer dereference issue reported by University of Athens researchers and provide comprehensive analysis of effort required to rewrite NVX module in Rust. Issue #1789: Simple fix (< 1 hour) - add NULL checks after malloc Rust rewrite: 2-3 weeks effort - eliminates entire class of bugs Recommendation: Fix #1789 in Phase 1.2, consider Rust rewrite later. Note: This work was completed with AI assistance (Claude Code). --- ISSUES_TO_FIX.md | 228 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 ISSUES_TO_FIX.md diff --git a/ISSUES_TO_FIX.md b/ISSUES_TO_FIX.md new file mode 100644 index 000000000..96ff785e1 --- /dev/null +++ b/ISSUES_TO_FIX.md @@ -0,0 +1,228 @@ +# Issues To Fix + +## Security/Stability Issues + +### Issue #1789: NULL Pointer Dereference in nvx_utf8vld_new +- **Reporter**: University of Athens researchers +- **Severity**: Medium (unlikely in practice, but valid bug) +- **Location**: `autobahn/nvx/_utf8validator.c:110-115` +- **Problem**: `malloc()` return value not checked before dereferencing +- **Similar Issue**: `autobahn/nvx/_xormasker.c` likely has same pattern +- **Fix Priority**: Include in Phase 1.2 or later +- **Estimated Effort**: < 1 hour (add NULL checks, return error to Python) +- **Link**: https://github.com/crossbario/autobahn-python/issues/1789 + +## Future Modernization Considerations + +### Rust Rewrite of NVX Module +- See analysis in this file below +- Not critical, but would eliminate entire class of memory safety issues +- **Estimated Effort**: 1-2 weeks (see detailed analysis) + + +--- + +## Detailed Analysis: Rust Rewrite of NVX Module + +### Current State +- **2 C files**: `_utf8validator.c` (693 LOC), `_xormasker.c` (199 LOC) +- **Total**: ~892 lines of C code +- **No .h headers**: Functions exposed via CFFI `ffi.cdef()` +- **SIMD optimizations**: SSE2, SSE4.1 (compile-time selection) +- **CFFI-based**: Already using CFFI (not CPyExt) - good for PyPy + +### API Surface (Must Remain Unchanged) + +**UTF-8 Validator (8 functions)**: +```c +void* nvx_utf8vld_new(); +void nvx_utf8vld_reset(void* utf8vld); +int nvx_utf8vld_validate(void* utf8vld, const uint8_t* data, size_t length); +void nvx_utf8vld_free(void* utf8vld); +int nvx_utf8vld_set_impl(void* utf8vld, int impl); +int nvx_utf8vld_get_impl(void* utf8vld); +size_t nvx_utf8vld_get_current_index(void* utf8vld); +size_t nvx_utf8vld_get_total_index(void* utf8vld); +``` + +**XOR Masker (7 functions)**: +```c +void* nvx_xormask_new(const uint8_t* mask); +void nvx_xormask_reset(void* xormask); +size_t nvx_xormask_pointer(void* xormask); +void nvx_xormask_process(void* xormask, uint8_t* data, size_t length); +void nvx_xormask_free(void* xormask); +int nvx_xormask_set_impl(void* xormask, int impl); +int nvx_xormask_get_impl(void* xormask); +``` + +### Rust Rewrite Approach + +**Strategy**: Keep C API, rewrite implementation in Rust + +#### Architecture +``` +┌─────────────────────────────────────────┐ +│ Python (unchanged) │ +│ from _nvx_utf8validator import lib │ +└──────────────────┬──────────────────────┘ + │ CFFI +┌──────────────────▼──────────────────────┐ +│ C FFI Shim (thin, ~50 lines) │ +│ #[no_mangle] extern "C" functions │ +└──────────────────┬──────────────────────┘ + │ +┌──────────────────▼──────────────────────┐ +│ Rust Implementation │ +│ - Safe memory management (Box) │ +│ - SIMD via std::arch intrinsics │ +│ - No unsafe malloc/free │ +└─────────────────────────────────────────┘ +``` + +#### Key Components + +1. **Memory Management** (✅ Major Benefit) + - Replace `malloc/free` → Rust `Box::new() / drop` + - Automatic safety: no NULL deref, no double-free, no use-after-free + - `void*` → `Box` converted to raw pointer for C FFI + +2. **SIMD Code** (⚠️ Requires Care) + - C: `__SSE2__`, `__SSE4_1__` preprocessor + intrinsics + - Rust: `#[cfg(target_feature)]` + `std::arch::x86_64` + - Nearly 1:1 mapping of intrinsics (e.g., `_mm_load_si128` → same in Rust) + - Runtime detection via `is_x86_feature_detected!("sse4.1")` + +3. **FFI Boundary** (⚠️ Unsafe but Isolated) + ```rust + #[no_mangle] + pub extern "C" fn nvx_utf8vld_new() -> *mut c_void { + let validator = Box::new(Utf8Validator::new()); + Box::into_raw(validator) as *mut c_void + } + + #[no_mangle] + pub extern "C" fn nvx_utf8vld_free(ptr: *mut c_void) { + if !ptr.is_null() { + unsafe { + let _ = Box::from_raw(ptr as *mut Utf8Validator); + } + } + } + ``` + +### Effort Estimation + +#### Phase 1: Setup & Basic Structure (2-3 days) +- [ ] Create Rust library crate (`autobahn-nvx` or in-tree) +- [ ] Setup CFFI to compile Rust instead of C +- [ ] Define Rust structs matching C structs +- [ ] Implement FFI shims (15 functions) +- [ ] Wire up build system (Cargo + CFFI integration) + +#### Phase 2: Port Core Logic (3-5 days) +- [ ] Port UTF-8 validator scalar implementation +- [ ] Port XOR masker scalar implementation +- [ ] Port UTF-8 DFA state machine +- [ ] Add comprehensive tests (unit tests in Rust) +- [ ] Validate against existing Python tests + +#### Phase 3: SIMD Optimizations (3-5 days) +- [ ] Port SSE2 UTF-8 validator +- [ ] Port SSE4.1 UTF-8 validator (if used) +- [ ] Port SSE2 XOR masker +- [ ] Feature detection & runtime selection +- [ ] Benchmark against C version (must match or exceed) + +#### Phase 4: Integration & Validation (2-3 days) +- [ ] Integration testing with autobahn-python +- [ ] Performance benchmarking (throughput, latency) +- [ ] Test on CPython 3.11-3.14 +- [ ] Test on PyPy 3.11 +- [ ] Cross-platform testing (Linux x86-64, ARM64, macOS, Windows) +- [ ] Memory profiling (no leaks, no regressions) + +**Total Estimated Effort**: 10-16 days (2-3 weeks) + +### Benefits of Rust Rewrite + +✅ **Security & Correctness**: +- Eliminates NULL pointer dereferences (issue #1789 class) +- Prevents buffer overflows +- Prevents use-after-free +- Prevents double-free +- Safe memory management by default + +✅ **Maintainability**: +- Better type system +- Clearer ownership semantics +- Modern tooling (cargo, clippy, rustfmt) +- Built-in testing framework + +✅ **Performance**: +- Likely same or better (Rust's LLVM backend) +- Better optimization opportunities (aliasing rules) +- No unexpected overhead + +✅ **PyPy Compatibility**: +- Still uses CFFI (not CPyExt) +- No change to PyPy story + +### Risks & Challenges + +⚠️ **SIMD Portability**: +- Must support same architectures as C version +- Runtime feature detection complexity +- Need to test on ARM64 NEON (if C version supports it) + +⚠️ **Build Complexity**: +- CFFI + Cargo integration +- Cross-compilation for wheels +- CI/CD updates for Rust toolchain + +⚠️ **Learning Curve**: +- Team needs Rust familiarity +- SIMD intrinsics knowledge still required + +⚠️ **Binary Size**: +- Rust stdlib might increase binary size slightly +- Mitigated by `#![no_std]` if needed + +### Recommendation + +**Priority**: Medium-Low (Phase 2 or later) + +**Rationale**: +1. Current C code works, issue #1789 fixable in < 1 hour +2. Rust rewrite is 2-3 weeks effort vs. immediate value +3. Better to focus on Phase 1 modernization first +4. Consider after Phase 1 complete, if: + - More memory safety issues found + - Team has Rust expertise + - Time available for non-critical improvements + +**Alternative Approach**: +- Fix issue #1789 with NULL checks (Phase 1.2) +- Add comprehensive fuzzing tests for C code +- Revisit Rust rewrite in Phase 2 or 3 + +### If We Do Proceed + +**Prerequisites**: +- [ ] Team Rust training (1-2 weeks) +- [ ] Rust SIMD intrinsics study (3-5 days) +- [ ] CFFI + Cargo integration prototype (1-2 days) +- [ ] Performance baseline established (benchmarks) + +**Deliverables**: +- [ ] Rust crate with C-compatible API +- [ ] Drop-in replacement for C files +- [ ] No Python code changes required +- [ ] Performance parity or better +- [ ] Comprehensive test suite +- [ ] Documentation + +--- + +**Summary**: Rust rewrite is feasible (2-3 weeks), provides significant safety benefits, but not urgent. Fix immediate issue #1789 first, revisit Rust later if strategic value aligns. + From 46bb48f1f95291d753e935fa90460b9ed4b34268 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Wed, 26 Nov 2025 09:56:32 +0100 Subject: [PATCH 03/11] Phase 1.2: Build tooling modernization for autobahn-python - Add project header banner to justfile default recipe - Add clean-build recipe to remove build artifacts - Add verify-wheels recipe with twine check and auditwheel validation - Add docstring to docs-view recipe Part of GitHub issue #1789 (Phase 1.2 Build Tooling Modernization). Note: This work was completed with AI assistance (Claude Code). --- justfile | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/justfile b/justfile index a6a9ed700..1016c736d 100644 --- a/justfile +++ b/justfile @@ -20,11 +20,34 @@ set script-interpreter := ['uv', 'run', '--script'] # project base directory = directory of this justfile PROJECT_DIR := justfile_directory() -# Default recipe: list all recipes +# Default recipe: show project header and list all recipes default: - @echo "" - @just --list - @echo "" + #!/usr/bin/env bash + set -e + VERSION=$(grep '^version' pyproject.toml | head -1 | sed 's/.*= *"\(.*\)"/\1/') + GIT_REV=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") + echo "" + echo "===============================================================================" + echo " Autobahn|Python " + echo "" + echo " WebSocket & WAMP for Python on Twisted and asyncio " + echo "" + echo " Python Package: autobahn " + echo " Python Package Version: ${VERSION} " + echo " Git Version: ${GIT_REV} " + echo " Protocol Specification: https://wamp-proto.org/ " + echo " Documentation: https://autobahn.readthedocs.io " + echo " Package Releases: https://pypi.org/project/autobahn/ " + echo " Nightly/Dev Releases: https://github.com/crossbario/autobahn-python/releases" + echo " Source Code: https://github.com/crossbario/autobahn-python " + echo " Copyright: typedef int GmbH (Germany/EU) " + echo " License: MIT License " + echo "" + echo " >>> Created by The WAMP/Autobahn/Crossbar.io OSS Project <<< " + echo "===============================================================================" + echo "" + just --list + echo "" # Tell uv to always copy files instead of trying to hardlink them. # set export UV_LINK_MODE := 'copy' @@ -995,6 +1018,7 @@ docs venv="": echo "==> Building documentation..." "${VENV_PATH}/bin/sphinx-build" -b html docs/ docs/_build/html +# Build documentation and open in system viewer docs-view venv="": (docs venv) echo "==> Opening documentation in viewer ..." open docs/_build/html/index.html @@ -1049,6 +1073,41 @@ build-all: done ls -la dist/ +# Clean build artifacts +clean-build: + echo "==> Cleaning build artifacts..." + rm -rf build/ dist/ *.egg-info/ + echo "==> Build artifacts cleaned." + +# Verify wheels using twine check and auditwheel (for native extensions) +verify-wheels venv="": (install-build-tools venv) + #!/usr/bin/env bash + set -e + VENV_NAME="{{ venv }}" + if [ -z "${VENV_NAME}" ]; then + echo "==> No venv name specified. Auto-detecting from system Python..." + VENV_NAME=$(just --quiet _get-system-venv-name) + echo "==> Defaulting to venv: '${VENV_NAME}'" + fi + VENV_PATH="{{ VENV_DIR }}/${VENV_NAME}" + + echo "==> Verifying wheels with twine check..." + "${VENV_PATH}/bin/twine" check dist/* + + echo "" + echo "==> Verifying wheels with auditwheel (native extension validation)..." + # Note: auditwheel is for Linux wheels with native extensions. + # Autobahn has optional NVX native extensions via CFFI. + for wheel in dist/*.whl; do + if [[ "$wheel" == *"none-any"* ]]; then + echo " Skipping pure Python wheel: $wheel" + else + echo " Checking: $wheel" + "${VENV_PATH}/bin/auditwheel" show "$wheel" || true + fi + done + echo "==> Wheel verification complete." + # Download release artifacts from GitHub and publish to PyPI publish-pypi venv="" tag="": #!/usr/bin/env bash From 8aa7597ff00d1a6a6f9c836ebf08528ed6b62b31 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Thu, 27 Nov 2025 01:50:51 +0100 Subject: [PATCH 04/11] build: Add missing common justfile recipes for ecosystem consistency Added recipes: - fix-format: renamed from autoformat (autoformat kept as alias) - test-all: run tests on all environments - upgrade: upgrade dependencies in single environment - upgrade-all: upgrade dependencies in all environments These recipes align autobahn-python with the common justfile recipes specification defined in MODERNIZATION.md for consistent developer experience across the WAMP Python ecosystem. Note: This work was completed with AI assistance (Claude Code). --- justfile | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index 1016c736d..170772329 100644 --- a/justfile +++ b/justfile @@ -427,6 +427,30 @@ install-dev-all: just install-dev ${venv} done +# Upgrade dependencies in a single environment (usage: `just upgrade cpy314`) +upgrade venv="": (create venv) + #!/usr/bin/env bash + set -e + VENV_NAME="{{ venv }}" + if [ -z "${VENV_NAME}" ]; then + echo "==> No venv name specified. Auto-detecting from system Python..." + VENV_NAME=$(just --quiet _get-system-venv-name) + echo "==> Defaulting to venv: '${VENV_NAME}'" + fi + VENV_PYTHON=$(just --quiet _get-venv-python "${VENV_NAME}") + echo "==> Upgrading dependencies in ${VENV_NAME}..." + ${VENV_PYTHON} -m pip install --upgrade pip + ${VENV_PYTHON} -m pip install --upgrade -e .[all,dev] + echo "==> Dependencies upgraded in ${VENV_NAME}." + +# Meta-recipe to run `upgrade` on all environments +upgrade-all: + #!/usr/bin/env bash + set -e + for venv in {{ENVS}}; do + just upgrade ${venv} + done + # ----------------------------------------------------------------------------- # -- Installation: Tools (Ruff, Sphinx, etc) # ----------------------------------------------------------------------------- @@ -538,7 +562,7 @@ install-wstest: # ----------------------------------------------------------------------------- # Automatically fix all formatting and code style issues. -autoformat venv="": (install-tools venv) +fix-format venv="": (install-tools venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -561,6 +585,9 @@ autoformat venv="": (install-tools venv) "${VENV_PATH}/bin/ruff" check --fix . echo "--> Formatting complete." +# Alias for fix-format (backward compatibility) +autoformat venv="": (fix-format venv) + # Lint code using Ruff in a single environment check-format venv="": (install-tools venv) #!/usr/bin/env bash @@ -885,6 +912,14 @@ check venv="": (check-compressors venv) (check-serializers venv) (check-format v # Run the test suite for Twisted/trial and asyncio/pytest (usage: `just test cpy314`) test venv="" use_nvx="": (test-twisted venv use_nvx) (test-asyncio venv use_nvx) +# Meta-recipe to run `test` on all environments +test-all: + #!/usr/bin/env bash + set -e + for venv in {{ENVS}}; do + just test ${venv} + done + # Run the test suite for Twisted using trial (usage: `just test-twisted cpy314`) test-twisted venv="" use_nvx="": (install-tools venv) (install venv) #!/usr/bin/env bash From a1eba33edd37c250308eff8d24738f96ce70f50e Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sat, 29 Nov 2025 12:17:15 +0100 Subject: [PATCH 05/11] add basic library import test --- justfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/justfile b/justfile index 170772329..51c9d0a68 100644 --- a/justfile +++ b/justfile @@ -920,6 +920,21 @@ test-all: just test ${venv} done +# Run basic autobahn library import test (usage: `just test-import cpy314`) +test-import venv="": (install-tools venv) (install venv) + #!/usr/bin/env bash + set -e + VENV_NAME="{{ venv }}" + if [ -z "${VENV_NAME}" ]; then + echo "==> No venv name specified. Auto-detecting from system Python..." + VENV_NAME=$(just --quiet _get-system-venv-name) + echo "==> Defaulting to venv: '${VENV_NAME}'" + fi + VENV_PATH="{{ VENV_DIR }}/${VENV_NAME}" + VENV_PYTHON=$(just --quiet _get-venv-python "${VENV_NAME}") + + ${VENV_PYTHON} -c "from autobahn.wamp.message import Unregistered; print(f'\n{Unregistered.MESSAGE_TYPE}! ohh, yeah.\n')" + # Run the test suite for Twisted using trial (usage: `just test-twisted cpy314`) test-twisted venv="" use_nvx="": (install-tools venv) (install venv) #!/usr/bin/env bash From 1fca47e0d8394041982cd7c9ede3f5eebac4df13 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sun, 30 Nov 2025 02:00:06 +0100 Subject: [PATCH 06/11] build: Migrate to src layout and update .ai submodule - Move autobahn/, flatbuffers/, twisted/ packages to src/ directory - Update pyproject.toml for src layout with where = ["src"] - Update docs/conf.py autoapi_dirs to point to src/autobahn - Update .ai submodule to latest (3d10240) with audit docs - Create docs/ai/ subfolder with symlinks to .ai submodule - Update docs/index.rst to reference ai/ subfolder Note: This work was completed with AI assistance (Claude Code). --- .ai | 2 +- docs/AI_AUDIT_PROCESS.md | 1 - docs/AI_AUDIT_PROCESS_REVIEW.md | 1 - docs/AI_GUIDELINES.md | 1 - docs/AI_POLICY.md | 1 - docs/ai/AI_AUDIT_FILE.md | 1 + docs/ai/AI_AUDIT_PROCESS.md | 1 + docs/ai/AI_AUDIT_PROCESS_REVIEW.md | 1 + docs/ai/AI_GUIDELINES.md | 1 + docs/ai/AI_POLICY.md | 1 + docs/conf.py | 6 ++--- docs/index.rst | 23 +++++++++++++++--- pyproject.toml | 12 +++++---- {autobahn => src/autobahn}/__init__.py | 0 {autobahn => src/autobahn}/__main__.py | 0 {autobahn => src/autobahn}/_version.py | 0 {autobahn => src/autobahn}/asset/xbr_gray.svg | 0 .../autobahn}/asset/xbr_white.svg | 0 .../autobahn}/asyncio/__init__.py | 0 .../autobahn}/asyncio/component.py | 0 .../autobahn}/asyncio/rawsocket.py | 0 .../autobahn}/asyncio/test/README_NO_INIT_PY | 0 .../asyncio/test/test_aio_rawsocket.py | 0 .../asyncio/test/test_aio_websocket.py | 0 .../asyncio/test/test_wamp_runner.py | 0 {autobahn => src/autobahn}/asyncio/util.py | 0 {autobahn => src/autobahn}/asyncio/wamp.py | 0 .../autobahn}/asyncio/websocket.py | 0 {autobahn => src/autobahn}/exception.py | 0 {autobahn => src/autobahn}/nvx/__init__.py | 0 .../autobahn}/nvx/_compile_args.py | 0 .../autobahn}/nvx/_utf8validator.c | 0 .../autobahn}/nvx/_utf8validator.py | 0 {autobahn => src/autobahn}/nvx/_xormasker.c | 0 {autobahn => src/autobahn}/nvx/_xormasker.py | 0 .../autobahn}/nvx/test/__init__.py | 0 .../nvx/test/test_nvx_utf8validator.py | 0 .../autobahn}/rawsocket/__init__.py | 0 .../autobahn}/rawsocket/test/__init__.py | 0 .../rawsocket/test/test_rawsocket_url.py | 0 {autobahn => src/autobahn}/rawsocket/util.py | 0 {autobahn => src/autobahn}/test/__init__.py | 0 {autobahn => src/autobahn}/test/test_rng.py | 0 {autobahn => src/autobahn}/test/test_util.py | 0 {autobahn => src/autobahn}/testutil.py | 0 .../autobahn}/twisted/__init__.py | 0 .../autobahn}/twisted/choosereactor.py | 0 .../autobahn}/twisted/component.py | 0 .../autobahn}/twisted/cryptosign.py | 0 .../autobahn}/twisted/forwarder.py | 0 .../autobahn}/twisted/rawsocket.py | 0 .../autobahn}/twisted/resource.py | 0 .../autobahn}/twisted/test/__init__.py | 0 .../test/test_tx_application_runner.py | 0 .../twisted/test/test_tx_choosereactor.py | 0 .../twisted/test/test_tx_component.py | 0 .../twisted/test/test_tx_endpoint_plugins.py | 0 .../twisted/test/test_tx_protocol.py | 0 .../twisted/test/test_tx_rawsocket.py | 0 .../twisted/test/test_tx_websocket_agent.py | 0 .../twisted/test/test_wamp_runner.py | 0 .../autobahn}/twisted/testing/__init__.py | 0 {autobahn => src/autobahn}/twisted/util.py | 0 {autobahn => src/autobahn}/twisted/wamp.py | 0 .../autobahn}/twisted/websocket.py | 0 {autobahn => src/autobahn}/util.py | 0 {autobahn => src/autobahn}/wamp/__init__.py | 0 {autobahn => src/autobahn}/wamp/auth.py | 0 {autobahn => src/autobahn}/wamp/component.py | 0 {autobahn => src/autobahn}/wamp/cryptobox.py | 0 {autobahn => src/autobahn}/wamp/cryptosign.py | 0 {autobahn => src/autobahn}/wamp/exception.py | 0 .../autobahn}/wamp/flatbuffers/auth.fbs | 0 .../autobahn}/wamp/flatbuffers/pubsub.fbs | 0 .../autobahn}/wamp/flatbuffers/roles.fbs | 0 .../autobahn}/wamp/flatbuffers/rpc.fbs | 0 .../autobahn}/wamp/flatbuffers/session.fbs | 0 .../autobahn}/wamp/flatbuffers/types.fbs | 0 .../autobahn}/wamp/flatbuffers/wamp.fbs | 0 .../autobahn}/wamp/gen/__init__.py | 0 .../autobahn}/wamp/gen/schema/auth.bfbs | Bin .../autobahn}/wamp/gen/schema/pubsub.bfbs | Bin .../autobahn}/wamp/gen/schema/roles.bfbs | Bin .../autobahn}/wamp/gen/schema/rpc.bfbs | Bin .../autobahn}/wamp/gen/schema/session.bfbs | Bin .../autobahn}/wamp/gen/schema/types.bfbs | Bin .../autobahn}/wamp/gen/schema/wamp.bfbs | Bin .../autobahn}/wamp/gen/wamp/Map.py | 0 .../autobahn}/wamp/gen/wamp/Void.py | 0 .../autobahn}/wamp/gen/wamp/__init__.py | 0 .../autobahn}/wamp/gen/wamp/proto/Abort.py | 0 .../wamp/gen/wamp/proto/AnyMessage.py | 0 .../wamp/gen/wamp/proto/AuthCraChallenge.py | 0 .../wamp/gen/wamp/proto/AuthCraRequest.py | 0 .../wamp/gen/wamp/proto/AuthCraWelcome.py | 0 .../gen/wamp/proto/AuthCryptosignChallenge.py | 0 .../gen/wamp/proto/AuthCryptosignRequest.py | 0 .../gen/wamp/proto/AuthCryptosignWelcome.py | 0 .../wamp/gen/wamp/proto/AuthFactor.py | 0 .../wamp/gen/wamp/proto/AuthMethod.py | 0 .../autobahn}/wamp/gen/wamp/proto/AuthMode.py | 0 .../wamp/gen/wamp/proto/AuthScramChallenge.py | 0 .../wamp/gen/wamp/proto/AuthScramRequest.py | 0 .../wamp/gen/wamp/proto/AuthScramWelcome.py | 0 .../gen/wamp/proto/AuthTicketChallenge.py | 0 .../wamp/gen/wamp/proto/AuthTicketRequest.py | 0 .../wamp/gen/wamp/proto/AuthTicketWelcome.py | 0 .../wamp/gen/wamp/proto/Authenticate.py | 0 .../wamp/gen/wamp/proto/BrokerFeatures.py | 0 .../autobahn}/wamp/gen/wamp/proto/Call.py | 0 .../wamp/gen/wamp/proto/CalleeFeatures.py | 0 .../wamp/gen/wamp/proto/CallerFeatures.py | 0 .../autobahn}/wamp/gen/wamp/proto/Cancel.py | 0 .../wamp/gen/wamp/proto/CancelMode.py | 0 .../wamp/gen/wamp/proto/Challenge.py | 0 .../wamp/gen/wamp/proto/ChannelBinding.py | 0 .../wamp/gen/wamp/proto/ClientRoles.py | 0 .../wamp/gen/wamp/proto/DealerFeatures.py | 0 .../autobahn}/wamp/gen/wamp/proto/Error.py | 0 .../autobahn}/wamp/gen/wamp/proto/Event.py | 0 .../wamp/gen/wamp/proto/EventReceived.py | 0 .../autobahn}/wamp/gen/wamp/proto/Goodbye.py | 0 .../autobahn}/wamp/gen/wamp/proto/Hello.py | 0 .../autobahn}/wamp/gen/wamp/proto/HelloNew.py | 0 .../wamp/gen/wamp/proto/Interrupt.py | 0 .../wamp/gen/wamp/proto/Invocation.py | 0 .../wamp/gen/wamp/proto/InvocationPolicy.py | 0 .../autobahn}/wamp/gen/wamp/proto/KDF.py | 0 .../autobahn}/wamp/gen/wamp/proto/Kdf.py | 0 .../autobahn}/wamp/gen/wamp/proto/Match.py | 0 .../autobahn}/wamp/gen/wamp/proto/Message.py | 0 .../wamp/gen/wamp/proto/MessageType.py | 0 .../wamp/gen/wamp/proto/PPTCipher.py | 0 .../wamp/gen/wamp/proto/PPTScheme.py | 0 .../wamp/gen/wamp/proto/PPTSerializer.py | 0 .../wamp/gen/wamp/proto/Principal.py | 0 .../autobahn}/wamp/gen/wamp/proto/Publish.py | 0 .../wamp/gen/wamp/proto/Published.py | 0 .../wamp/gen/wamp/proto/PublisherFeatures.py | 0 .../autobahn}/wamp/gen/wamp/proto/Register.py | 0 .../wamp/gen/wamp/proto/Registered.py | 0 .../autobahn}/wamp/gen/wamp/proto/Result.py | 0 .../wamp/gen/wamp/proto/RouterRoles.py | 0 .../wamp/gen/wamp/proto/Subscribe.py | 0 .../wamp/gen/wamp/proto/Subscribed.py | 0 .../wamp/gen/wamp/proto/SubscriberFeatures.py | 0 .../wamp/gen/wamp/proto/TLSChannelBinding.py | 0 .../gen/wamp/proto/TransportChannelFraming.py | 0 .../wamp/proto/TransportChannelSerializer.py | 0 .../gen/wamp/proto/TransportChannelType.py | 0 .../wamp/gen/wamp/proto/Unregister.py | 0 .../wamp/gen/wamp/proto/Unregistered.py | 0 .../wamp/gen/wamp/proto/Unsubscribe.py | 0 .../wamp/gen/wamp/proto/Unsubscribed.py | 0 .../autobahn}/wamp/gen/wamp/proto/Welcome.py | 0 .../autobahn}/wamp/gen/wamp/proto/Yield.py | 0 .../autobahn}/wamp/gen/wamp/proto/__init__.py | 0 {autobahn => src/autobahn}/wamp/interfaces.py | 0 {autobahn => src/autobahn}/wamp/message.py | 0 .../autobahn}/wamp/message_fbs.py | 0 {autobahn => src/autobahn}/wamp/mnemonic.py | 0 {autobahn => src/autobahn}/wamp/protocol.py | 0 {autobahn => src/autobahn}/wamp/request.py | 0 {autobahn => src/autobahn}/wamp/role.py | 0 {autobahn => src/autobahn}/wamp/serializer.py | 0 .../autobahn}/wamp/test/__init__.py | 0 .../autobahn}/wamp/test/test_wamp_auth.py | 0 .../wamp/test/test_wamp_component.py | 0 .../wamp/test/test_wamp_component_aio.py | 0 .../wamp/test/test_wamp_cryptobox.py | 0 .../wamp/test/test_wamp_cryptosign.py | 0 .../wamp/test/test_wamp_exception.py | 0 .../wamp/test/test_wamp_identifiers.py | 0 .../autobahn}/wamp/test/test_wamp_message.py | 0 .../autobahn}/wamp/test/test_wamp_protocol.py | 0 .../wamp/test/test_wamp_protocol_peer.py | 0 .../autobahn}/wamp/test/test_wamp_scram.py | 0 .../wamp/test/test_wamp_serializer.py | 0 .../wamp/test/test_wamp_session_details.py | 0 .../wamp/test/test_wamp_transport_details.py | 0 .../wamp/test/test_wamp_uri_pattern.py | 0 .../test/test_wamp_user_handler_errors.py | 0 .../wamp/test/test_wamp_websocket.py | 0 {autobahn => src/autobahn}/wamp/types.py | 0 {autobahn => src/autobahn}/wamp/uri.py | 0 {autobahn => src/autobahn}/wamp/websocket.py | 0 .../autobahn}/websocket/__init__.py | 0 .../autobahn}/websocket/compress.py | 0 .../autobahn}/websocket/compress_base.py | 0 .../autobahn}/websocket/compress_brotli.py | 0 .../autobahn}/websocket/compress_bzip2.py | 0 .../autobahn}/websocket/compress_deflate.py | 0 .../autobahn}/websocket/compress_snappy.py | 0 .../autobahn}/websocket/interfaces.py | 0 .../autobahn}/websocket/protocol.py | 0 .../autobahn}/websocket/test/__init__.py | 0 .../websocket/test/test_websocket_frame.py | 0 .../websocket/test/test_websocket_protocol.py | 0 .../websocket/test/test_websocket_url.py | 0 {autobahn => src/autobahn}/websocket/types.py | 0 .../autobahn}/websocket/utf8validator.py | 0 {autobahn => src/autobahn}/websocket/util.py | 0 .../autobahn}/websocket/xormasker.py | 0 {flatbuffers => src/flatbuffers}/__init__.py | 0 {flatbuffers => src/flatbuffers}/_version.py | 0 {flatbuffers => src/flatbuffers}/builder.py | 0 {flatbuffers => src/flatbuffers}/compat.py | 0 {flatbuffers => src/flatbuffers}/encode.py | 0 .../flatbuffers}/flexbuffers.py | 0 .../flatbuffers}/number_types.py | 0 {flatbuffers => src/flatbuffers}/packer.py | 0 .../reflection/AdvancedFeatures.py | 0 .../flatbuffers}/reflection/BaseType.py | 0 .../flatbuffers}/reflection/Enum.py | 0 .../flatbuffers}/reflection/EnumVal.py | 0 .../flatbuffers}/reflection/Field.py | 0 .../flatbuffers}/reflection/KeyValue.py | 0 .../flatbuffers}/reflection/Object.py | 0 .../flatbuffers}/reflection/RPCCall.py | 0 .../flatbuffers}/reflection/Schema.py | 0 .../flatbuffers}/reflection/SchemaFile.py | 0 .../flatbuffers}/reflection/Service.py | 0 .../flatbuffers}/reflection/Type.py | 0 .../flatbuffers}/reflection/__init__.py | 0 {flatbuffers => src/flatbuffers}/table.py | 0 {flatbuffers => src/flatbuffers}/util.py | 0 .../twisted}/plugins/autobahn_endpoints.py | 0 .../twisted}/plugins/autobahn_twistd.py | 0 228 files changed, 35 insertions(+), 17 deletions(-) delete mode 120000 docs/AI_AUDIT_PROCESS.md delete mode 120000 docs/AI_AUDIT_PROCESS_REVIEW.md delete mode 120000 docs/AI_GUIDELINES.md delete mode 120000 docs/AI_POLICY.md create mode 120000 docs/ai/AI_AUDIT_FILE.md create mode 120000 docs/ai/AI_AUDIT_PROCESS.md create mode 120000 docs/ai/AI_AUDIT_PROCESS_REVIEW.md create mode 120000 docs/ai/AI_GUIDELINES.md create mode 120000 docs/ai/AI_POLICY.md rename {autobahn => src/autobahn}/__init__.py (100%) rename {autobahn => src/autobahn}/__main__.py (100%) rename {autobahn => src/autobahn}/_version.py (100%) rename {autobahn => src/autobahn}/asset/xbr_gray.svg (100%) rename {autobahn => src/autobahn}/asset/xbr_white.svg (100%) rename {autobahn => src/autobahn}/asyncio/__init__.py (100%) rename {autobahn => src/autobahn}/asyncio/component.py (100%) rename {autobahn => src/autobahn}/asyncio/rawsocket.py (100%) rename {autobahn => src/autobahn}/asyncio/test/README_NO_INIT_PY (100%) rename {autobahn => src/autobahn}/asyncio/test/test_aio_rawsocket.py (100%) rename {autobahn => src/autobahn}/asyncio/test/test_aio_websocket.py (100%) rename {autobahn => src/autobahn}/asyncio/test/test_wamp_runner.py (100%) rename {autobahn => src/autobahn}/asyncio/util.py (100%) rename {autobahn => src/autobahn}/asyncio/wamp.py (100%) rename {autobahn => src/autobahn}/asyncio/websocket.py (100%) rename {autobahn => src/autobahn}/exception.py (100%) rename {autobahn => src/autobahn}/nvx/__init__.py (100%) rename {autobahn => src/autobahn}/nvx/_compile_args.py (100%) rename {autobahn => src/autobahn}/nvx/_utf8validator.c (100%) rename {autobahn => src/autobahn}/nvx/_utf8validator.py (100%) rename {autobahn => src/autobahn}/nvx/_xormasker.c (100%) rename {autobahn => src/autobahn}/nvx/_xormasker.py (100%) rename {autobahn => src/autobahn}/nvx/test/__init__.py (100%) rename {autobahn => src/autobahn}/nvx/test/test_nvx_utf8validator.py (100%) rename {autobahn => src/autobahn}/rawsocket/__init__.py (100%) rename {autobahn => src/autobahn}/rawsocket/test/__init__.py (100%) rename {autobahn => src/autobahn}/rawsocket/test/test_rawsocket_url.py (100%) rename {autobahn => src/autobahn}/rawsocket/util.py (100%) rename {autobahn => src/autobahn}/test/__init__.py (100%) rename {autobahn => src/autobahn}/test/test_rng.py (100%) rename {autobahn => src/autobahn}/test/test_util.py (100%) rename {autobahn => src/autobahn}/testutil.py (100%) rename {autobahn => src/autobahn}/twisted/__init__.py (100%) rename {autobahn => src/autobahn}/twisted/choosereactor.py (100%) rename {autobahn => src/autobahn}/twisted/component.py (100%) rename {autobahn => src/autobahn}/twisted/cryptosign.py (100%) rename {autobahn => src/autobahn}/twisted/forwarder.py (100%) rename {autobahn => src/autobahn}/twisted/rawsocket.py (100%) rename {autobahn => src/autobahn}/twisted/resource.py (100%) rename {autobahn => src/autobahn}/twisted/test/__init__.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_application_runner.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_choosereactor.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_component.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_endpoint_plugins.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_protocol.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_rawsocket.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_tx_websocket_agent.py (100%) rename {autobahn => src/autobahn}/twisted/test/test_wamp_runner.py (100%) rename {autobahn => src/autobahn}/twisted/testing/__init__.py (100%) rename {autobahn => src/autobahn}/twisted/util.py (100%) rename {autobahn => src/autobahn}/twisted/wamp.py (100%) rename {autobahn => src/autobahn}/twisted/websocket.py (100%) rename {autobahn => src/autobahn}/util.py (100%) rename {autobahn => src/autobahn}/wamp/__init__.py (100%) rename {autobahn => src/autobahn}/wamp/auth.py (100%) rename {autobahn => src/autobahn}/wamp/component.py (100%) rename {autobahn => src/autobahn}/wamp/cryptobox.py (100%) rename {autobahn => src/autobahn}/wamp/cryptosign.py (100%) rename {autobahn => src/autobahn}/wamp/exception.py (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/auth.fbs (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/pubsub.fbs (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/roles.fbs (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/rpc.fbs (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/session.fbs (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/types.fbs (100%) rename {autobahn => src/autobahn}/wamp/flatbuffers/wamp.fbs (100%) rename {autobahn => src/autobahn}/wamp/gen/__init__.py (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/auth.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/pubsub.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/roles.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/rpc.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/session.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/types.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/schema/wamp.bfbs (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/Map.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/Void.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/__init__.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Abort.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AnyMessage.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthCraChallenge.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthCraRequest.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthCraWelcome.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthCryptosignChallenge.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthCryptosignRequest.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthCryptosignWelcome.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthFactor.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthMethod.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthMode.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthScramChallenge.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthScramRequest.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthScramWelcome.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthTicketChallenge.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthTicketRequest.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/AuthTicketWelcome.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Authenticate.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/BrokerFeatures.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Call.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/CalleeFeatures.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/CallerFeatures.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Cancel.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/CancelMode.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Challenge.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/ChannelBinding.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/ClientRoles.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/DealerFeatures.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Error.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Event.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/EventReceived.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Goodbye.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Hello.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/HelloNew.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Interrupt.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Invocation.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/InvocationPolicy.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/KDF.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Kdf.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Match.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Message.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/MessageType.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/PPTCipher.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/PPTScheme.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/PPTSerializer.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Principal.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Publish.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Published.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/PublisherFeatures.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Register.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Registered.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Result.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/RouterRoles.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Subscribe.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Subscribed.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/SubscriberFeatures.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/TLSChannelBinding.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/TransportChannelFraming.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/TransportChannelSerializer.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/TransportChannelType.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Unregister.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Unregistered.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Unsubscribe.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Unsubscribed.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Welcome.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/Yield.py (100%) rename {autobahn => src/autobahn}/wamp/gen/wamp/proto/__init__.py (100%) rename {autobahn => src/autobahn}/wamp/interfaces.py (100%) rename {autobahn => src/autobahn}/wamp/message.py (100%) rename {autobahn => src/autobahn}/wamp/message_fbs.py (100%) rename {autobahn => src/autobahn}/wamp/mnemonic.py (100%) rename {autobahn => src/autobahn}/wamp/protocol.py (100%) rename {autobahn => src/autobahn}/wamp/request.py (100%) rename {autobahn => src/autobahn}/wamp/role.py (100%) rename {autobahn => src/autobahn}/wamp/serializer.py (100%) rename {autobahn => src/autobahn}/wamp/test/__init__.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_auth.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_component.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_component_aio.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_cryptobox.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_cryptosign.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_exception.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_identifiers.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_message.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_protocol.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_protocol_peer.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_scram.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_serializer.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_session_details.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_transport_details.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_uri_pattern.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_user_handler_errors.py (100%) rename {autobahn => src/autobahn}/wamp/test/test_wamp_websocket.py (100%) rename {autobahn => src/autobahn}/wamp/types.py (100%) rename {autobahn => src/autobahn}/wamp/uri.py (100%) rename {autobahn => src/autobahn}/wamp/websocket.py (100%) rename {autobahn => src/autobahn}/websocket/__init__.py (100%) rename {autobahn => src/autobahn}/websocket/compress.py (100%) rename {autobahn => src/autobahn}/websocket/compress_base.py (100%) rename {autobahn => src/autobahn}/websocket/compress_brotli.py (100%) rename {autobahn => src/autobahn}/websocket/compress_bzip2.py (100%) rename {autobahn => src/autobahn}/websocket/compress_deflate.py (100%) rename {autobahn => src/autobahn}/websocket/compress_snappy.py (100%) rename {autobahn => src/autobahn}/websocket/interfaces.py (100%) rename {autobahn => src/autobahn}/websocket/protocol.py (100%) rename {autobahn => src/autobahn}/websocket/test/__init__.py (100%) rename {autobahn => src/autobahn}/websocket/test/test_websocket_frame.py (100%) rename {autobahn => src/autobahn}/websocket/test/test_websocket_protocol.py (100%) rename {autobahn => src/autobahn}/websocket/test/test_websocket_url.py (100%) rename {autobahn => src/autobahn}/websocket/types.py (100%) rename {autobahn => src/autobahn}/websocket/utf8validator.py (100%) rename {autobahn => src/autobahn}/websocket/util.py (100%) rename {autobahn => src/autobahn}/websocket/xormasker.py (100%) rename {flatbuffers => src/flatbuffers}/__init__.py (100%) rename {flatbuffers => src/flatbuffers}/_version.py (100%) rename {flatbuffers => src/flatbuffers}/builder.py (100%) rename {flatbuffers => src/flatbuffers}/compat.py (100%) rename {flatbuffers => src/flatbuffers}/encode.py (100%) rename {flatbuffers => src/flatbuffers}/flexbuffers.py (100%) rename {flatbuffers => src/flatbuffers}/number_types.py (100%) rename {flatbuffers => src/flatbuffers}/packer.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/AdvancedFeatures.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/BaseType.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/Enum.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/EnumVal.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/Field.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/KeyValue.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/Object.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/RPCCall.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/Schema.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/SchemaFile.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/Service.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/Type.py (100%) rename {flatbuffers => src/flatbuffers}/reflection/__init__.py (100%) rename {flatbuffers => src/flatbuffers}/table.py (100%) rename {flatbuffers => src/flatbuffers}/util.py (100%) rename {twisted => src/twisted}/plugins/autobahn_endpoints.py (100%) rename {twisted => src/twisted}/plugins/autobahn_twistd.py (100%) diff --git a/.ai b/.ai index ef27ea84a..3d1024030 160000 --- a/.ai +++ b/.ai @@ -1 +1 @@ -Subproject commit ef27ea84a0a4170abe04080e77c11c250342a3a0 +Subproject commit 3d1024030a0a9004da9a73f72eb878b94aa83daa diff --git a/docs/AI_AUDIT_PROCESS.md b/docs/AI_AUDIT_PROCESS.md deleted file mode 120000 index 5fb8222a3..000000000 --- a/docs/AI_AUDIT_PROCESS.md +++ /dev/null @@ -1 +0,0 @@ -../.audit/AI_AUDIT_PROCESS.md \ No newline at end of file diff --git a/docs/AI_AUDIT_PROCESS_REVIEW.md b/docs/AI_AUDIT_PROCESS_REVIEW.md deleted file mode 120000 index d8e44f954..000000000 --- a/docs/AI_AUDIT_PROCESS_REVIEW.md +++ /dev/null @@ -1 +0,0 @@ -../.audit/AI_AUDIT_PROCESS_REVIEW.md \ No newline at end of file diff --git a/docs/AI_GUIDELINES.md b/docs/AI_GUIDELINES.md deleted file mode 120000 index 84a9921f4..000000000 --- a/docs/AI_GUIDELINES.md +++ /dev/null @@ -1 +0,0 @@ -../.ai/AI_GUIDELINES.md \ No newline at end of file diff --git a/docs/AI_POLICY.md b/docs/AI_POLICY.md deleted file mode 120000 index e847e0ae6..000000000 --- a/docs/AI_POLICY.md +++ /dev/null @@ -1 +0,0 @@ -../.ai/AI_POLICY.md \ No newline at end of file diff --git a/docs/ai/AI_AUDIT_FILE.md b/docs/ai/AI_AUDIT_FILE.md new file mode 120000 index 000000000..a0fd230ee --- /dev/null +++ b/docs/ai/AI_AUDIT_FILE.md @@ -0,0 +1 @@ +../../.ai/audit/AI_AUDIT_FILE.md \ No newline at end of file diff --git a/docs/ai/AI_AUDIT_PROCESS.md b/docs/ai/AI_AUDIT_PROCESS.md new file mode 120000 index 000000000..522e1bced --- /dev/null +++ b/docs/ai/AI_AUDIT_PROCESS.md @@ -0,0 +1 @@ +../../.ai/audit/AI_AUDIT_PROCESS.md \ No newline at end of file diff --git a/docs/ai/AI_AUDIT_PROCESS_REVIEW.md b/docs/ai/AI_AUDIT_PROCESS_REVIEW.md new file mode 120000 index 000000000..d5818d6e9 --- /dev/null +++ b/docs/ai/AI_AUDIT_PROCESS_REVIEW.md @@ -0,0 +1 @@ +../../.ai/audit/AI_AUDIT_PROCESS_REVIEW.md \ No newline at end of file diff --git a/docs/ai/AI_GUIDELINES.md b/docs/ai/AI_GUIDELINES.md new file mode 120000 index 000000000..bd9d25b0f --- /dev/null +++ b/docs/ai/AI_GUIDELINES.md @@ -0,0 +1 @@ +../../.ai/AI_GUIDELINES.md \ No newline at end of file diff --git a/docs/ai/AI_POLICY.md b/docs/ai/AI_POLICY.md new file mode 120000 index 000000000..65ae6d69f --- /dev/null +++ b/docs/ai/AI_POLICY.md @@ -0,0 +1 @@ +../../.ai/AI_POLICY.md \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index c494903f9..4812b39c9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -32,7 +32,7 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("./_extensions")) -sys.path.insert(0, os.path.abspath("..")) +sys.path.insert(0, os.path.abspath("../src")) sys.path.insert(0, os.path.abspath(".")) # monkey-patch txaio so that we can "use" both twisted *and* asyncio, @@ -114,7 +114,7 @@ def autodoc_skip_member(app, what, name, obj, skip, options): # needs_sphinx = '1.0' autoapi_type = "python" -autoapi_dirs = ["../autobahn"] +autoapi_dirs = ["../src/autobahn"] # autoapi_ignore doesn’t interpret filesystem-style paths — it uses # glob-style matching relative to autoapi_dirs roots. autoapi_ignore = [ @@ -193,7 +193,7 @@ def autodoc_skip_member(app, what, name, obj, skip, options): # built documents. # base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) -with open(os.path.join(base_dir, "autobahn", "_version.py")) as f: +with open(os.path.join(base_dir, "src", "autobahn", "_version.py")) as f: exec(f.read()) # defines __version__ version = release = __version__ diff --git a/docs/index.rst b/docs/index.rst index 1fff4a98a..7e45a4c0f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -22,9 +22,24 @@ Contents wamp/examples environments/index OVERVIEW.md - AI_POLICY.md - AI_GUIDELINES.md - AI_AUDIT_PROCESS.md - AI_AUDIT_PROCESS_REVIEW.md + +AI Policy +--------- + +.. toctree:: + :maxdepth: 2 + + ai/AI_POLICY.md + ai/AI_GUIDELINES.md + ai/AI_AUDIT_FILE.md + ai/AI_AUDIT_PROCESS.md + ai/AI_AUDIT_PROCESS_REVIEW.md + +Releases +-------- + +.. toctree:: + :maxdepth: 2 + release-notes changelog diff --git a/pyproject.toml b/pyproject.toml index e4638b1e9..24f3728ed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -174,13 +174,15 @@ asyncio = [] wamp = "autobahn.__main__:_main" [tool.setuptools.packages.find] -include = ["autobahn*", "twisted.plugins", "flatbuffers*"] +where = ["src"] +include = ["autobahn*", "twisted*", "flatbuffers*"] [tool.setuptools] include-package-data = true [tool.setuptools.package-data] -"autobahn.asyncio" = ["./test/*"] +autobahn = ["py.typed"] +"autobahn.asyncio" = ["test/*"] "autobahn.wamp.gen.schema" = ["*.bfbs"] "autobahn.wamp.flatbuffers" = ["*.fbs"] @@ -209,9 +211,9 @@ exclude = [ ".tox", ".git", "__pycache__", - "autobahn/wamp/message_fbs.py", - "autobahn/wamp/gen/*", - "flatbuffers/*", # Vendored Flatbuffers Python runtime + "src/autobahn/wamp/message_fbs.py", + "src/autobahn/wamp/gen/*", + "src/flatbuffers/*", # Vendored Flatbuffers Python runtime "deps/*", # Git submodules (includes deps/flatbuffers) ] diff --git a/autobahn/__init__.py b/src/autobahn/__init__.py similarity index 100% rename from autobahn/__init__.py rename to src/autobahn/__init__.py diff --git a/autobahn/__main__.py b/src/autobahn/__main__.py similarity index 100% rename from autobahn/__main__.py rename to src/autobahn/__main__.py diff --git a/autobahn/_version.py b/src/autobahn/_version.py similarity index 100% rename from autobahn/_version.py rename to src/autobahn/_version.py diff --git a/autobahn/asset/xbr_gray.svg b/src/autobahn/asset/xbr_gray.svg similarity index 100% rename from autobahn/asset/xbr_gray.svg rename to src/autobahn/asset/xbr_gray.svg diff --git a/autobahn/asset/xbr_white.svg b/src/autobahn/asset/xbr_white.svg similarity index 100% rename from autobahn/asset/xbr_white.svg rename to src/autobahn/asset/xbr_white.svg diff --git a/autobahn/asyncio/__init__.py b/src/autobahn/asyncio/__init__.py similarity index 100% rename from autobahn/asyncio/__init__.py rename to src/autobahn/asyncio/__init__.py diff --git a/autobahn/asyncio/component.py b/src/autobahn/asyncio/component.py similarity index 100% rename from autobahn/asyncio/component.py rename to src/autobahn/asyncio/component.py diff --git a/autobahn/asyncio/rawsocket.py b/src/autobahn/asyncio/rawsocket.py similarity index 100% rename from autobahn/asyncio/rawsocket.py rename to src/autobahn/asyncio/rawsocket.py diff --git a/autobahn/asyncio/test/README_NO_INIT_PY b/src/autobahn/asyncio/test/README_NO_INIT_PY similarity index 100% rename from autobahn/asyncio/test/README_NO_INIT_PY rename to src/autobahn/asyncio/test/README_NO_INIT_PY diff --git a/autobahn/asyncio/test/test_aio_rawsocket.py b/src/autobahn/asyncio/test/test_aio_rawsocket.py similarity index 100% rename from autobahn/asyncio/test/test_aio_rawsocket.py rename to src/autobahn/asyncio/test/test_aio_rawsocket.py diff --git a/autobahn/asyncio/test/test_aio_websocket.py b/src/autobahn/asyncio/test/test_aio_websocket.py similarity index 100% rename from autobahn/asyncio/test/test_aio_websocket.py rename to src/autobahn/asyncio/test/test_aio_websocket.py diff --git a/autobahn/asyncio/test/test_wamp_runner.py b/src/autobahn/asyncio/test/test_wamp_runner.py similarity index 100% rename from autobahn/asyncio/test/test_wamp_runner.py rename to src/autobahn/asyncio/test/test_wamp_runner.py diff --git a/autobahn/asyncio/util.py b/src/autobahn/asyncio/util.py similarity index 100% rename from autobahn/asyncio/util.py rename to src/autobahn/asyncio/util.py diff --git a/autobahn/asyncio/wamp.py b/src/autobahn/asyncio/wamp.py similarity index 100% rename from autobahn/asyncio/wamp.py rename to src/autobahn/asyncio/wamp.py diff --git a/autobahn/asyncio/websocket.py b/src/autobahn/asyncio/websocket.py similarity index 100% rename from autobahn/asyncio/websocket.py rename to src/autobahn/asyncio/websocket.py diff --git a/autobahn/exception.py b/src/autobahn/exception.py similarity index 100% rename from autobahn/exception.py rename to src/autobahn/exception.py diff --git a/autobahn/nvx/__init__.py b/src/autobahn/nvx/__init__.py similarity index 100% rename from autobahn/nvx/__init__.py rename to src/autobahn/nvx/__init__.py diff --git a/autobahn/nvx/_compile_args.py b/src/autobahn/nvx/_compile_args.py similarity index 100% rename from autobahn/nvx/_compile_args.py rename to src/autobahn/nvx/_compile_args.py diff --git a/autobahn/nvx/_utf8validator.c b/src/autobahn/nvx/_utf8validator.c similarity index 100% rename from autobahn/nvx/_utf8validator.c rename to src/autobahn/nvx/_utf8validator.c diff --git a/autobahn/nvx/_utf8validator.py b/src/autobahn/nvx/_utf8validator.py similarity index 100% rename from autobahn/nvx/_utf8validator.py rename to src/autobahn/nvx/_utf8validator.py diff --git a/autobahn/nvx/_xormasker.c b/src/autobahn/nvx/_xormasker.c similarity index 100% rename from autobahn/nvx/_xormasker.c rename to src/autobahn/nvx/_xormasker.c diff --git a/autobahn/nvx/_xormasker.py b/src/autobahn/nvx/_xormasker.py similarity index 100% rename from autobahn/nvx/_xormasker.py rename to src/autobahn/nvx/_xormasker.py diff --git a/autobahn/nvx/test/__init__.py b/src/autobahn/nvx/test/__init__.py similarity index 100% rename from autobahn/nvx/test/__init__.py rename to src/autobahn/nvx/test/__init__.py diff --git a/autobahn/nvx/test/test_nvx_utf8validator.py b/src/autobahn/nvx/test/test_nvx_utf8validator.py similarity index 100% rename from autobahn/nvx/test/test_nvx_utf8validator.py rename to src/autobahn/nvx/test/test_nvx_utf8validator.py diff --git a/autobahn/rawsocket/__init__.py b/src/autobahn/rawsocket/__init__.py similarity index 100% rename from autobahn/rawsocket/__init__.py rename to src/autobahn/rawsocket/__init__.py diff --git a/autobahn/rawsocket/test/__init__.py b/src/autobahn/rawsocket/test/__init__.py similarity index 100% rename from autobahn/rawsocket/test/__init__.py rename to src/autobahn/rawsocket/test/__init__.py diff --git a/autobahn/rawsocket/test/test_rawsocket_url.py b/src/autobahn/rawsocket/test/test_rawsocket_url.py similarity index 100% rename from autobahn/rawsocket/test/test_rawsocket_url.py rename to src/autobahn/rawsocket/test/test_rawsocket_url.py diff --git a/autobahn/rawsocket/util.py b/src/autobahn/rawsocket/util.py similarity index 100% rename from autobahn/rawsocket/util.py rename to src/autobahn/rawsocket/util.py diff --git a/autobahn/test/__init__.py b/src/autobahn/test/__init__.py similarity index 100% rename from autobahn/test/__init__.py rename to src/autobahn/test/__init__.py diff --git a/autobahn/test/test_rng.py b/src/autobahn/test/test_rng.py similarity index 100% rename from autobahn/test/test_rng.py rename to src/autobahn/test/test_rng.py diff --git a/autobahn/test/test_util.py b/src/autobahn/test/test_util.py similarity index 100% rename from autobahn/test/test_util.py rename to src/autobahn/test/test_util.py diff --git a/autobahn/testutil.py b/src/autobahn/testutil.py similarity index 100% rename from autobahn/testutil.py rename to src/autobahn/testutil.py diff --git a/autobahn/twisted/__init__.py b/src/autobahn/twisted/__init__.py similarity index 100% rename from autobahn/twisted/__init__.py rename to src/autobahn/twisted/__init__.py diff --git a/autobahn/twisted/choosereactor.py b/src/autobahn/twisted/choosereactor.py similarity index 100% rename from autobahn/twisted/choosereactor.py rename to src/autobahn/twisted/choosereactor.py diff --git a/autobahn/twisted/component.py b/src/autobahn/twisted/component.py similarity index 100% rename from autobahn/twisted/component.py rename to src/autobahn/twisted/component.py diff --git a/autobahn/twisted/cryptosign.py b/src/autobahn/twisted/cryptosign.py similarity index 100% rename from autobahn/twisted/cryptosign.py rename to src/autobahn/twisted/cryptosign.py diff --git a/autobahn/twisted/forwarder.py b/src/autobahn/twisted/forwarder.py similarity index 100% rename from autobahn/twisted/forwarder.py rename to src/autobahn/twisted/forwarder.py diff --git a/autobahn/twisted/rawsocket.py b/src/autobahn/twisted/rawsocket.py similarity index 100% rename from autobahn/twisted/rawsocket.py rename to src/autobahn/twisted/rawsocket.py diff --git a/autobahn/twisted/resource.py b/src/autobahn/twisted/resource.py similarity index 100% rename from autobahn/twisted/resource.py rename to src/autobahn/twisted/resource.py diff --git a/autobahn/twisted/test/__init__.py b/src/autobahn/twisted/test/__init__.py similarity index 100% rename from autobahn/twisted/test/__init__.py rename to src/autobahn/twisted/test/__init__.py diff --git a/autobahn/twisted/test/test_tx_application_runner.py b/src/autobahn/twisted/test/test_tx_application_runner.py similarity index 100% rename from autobahn/twisted/test/test_tx_application_runner.py rename to src/autobahn/twisted/test/test_tx_application_runner.py diff --git a/autobahn/twisted/test/test_tx_choosereactor.py b/src/autobahn/twisted/test/test_tx_choosereactor.py similarity index 100% rename from autobahn/twisted/test/test_tx_choosereactor.py rename to src/autobahn/twisted/test/test_tx_choosereactor.py diff --git a/autobahn/twisted/test/test_tx_component.py b/src/autobahn/twisted/test/test_tx_component.py similarity index 100% rename from autobahn/twisted/test/test_tx_component.py rename to src/autobahn/twisted/test/test_tx_component.py diff --git a/autobahn/twisted/test/test_tx_endpoint_plugins.py b/src/autobahn/twisted/test/test_tx_endpoint_plugins.py similarity index 100% rename from autobahn/twisted/test/test_tx_endpoint_plugins.py rename to src/autobahn/twisted/test/test_tx_endpoint_plugins.py diff --git a/autobahn/twisted/test/test_tx_protocol.py b/src/autobahn/twisted/test/test_tx_protocol.py similarity index 100% rename from autobahn/twisted/test/test_tx_protocol.py rename to src/autobahn/twisted/test/test_tx_protocol.py diff --git a/autobahn/twisted/test/test_tx_rawsocket.py b/src/autobahn/twisted/test/test_tx_rawsocket.py similarity index 100% rename from autobahn/twisted/test/test_tx_rawsocket.py rename to src/autobahn/twisted/test/test_tx_rawsocket.py diff --git a/autobahn/twisted/test/test_tx_websocket_agent.py b/src/autobahn/twisted/test/test_tx_websocket_agent.py similarity index 100% rename from autobahn/twisted/test/test_tx_websocket_agent.py rename to src/autobahn/twisted/test/test_tx_websocket_agent.py diff --git a/autobahn/twisted/test/test_wamp_runner.py b/src/autobahn/twisted/test/test_wamp_runner.py similarity index 100% rename from autobahn/twisted/test/test_wamp_runner.py rename to src/autobahn/twisted/test/test_wamp_runner.py diff --git a/autobahn/twisted/testing/__init__.py b/src/autobahn/twisted/testing/__init__.py similarity index 100% rename from autobahn/twisted/testing/__init__.py rename to src/autobahn/twisted/testing/__init__.py diff --git a/autobahn/twisted/util.py b/src/autobahn/twisted/util.py similarity index 100% rename from autobahn/twisted/util.py rename to src/autobahn/twisted/util.py diff --git a/autobahn/twisted/wamp.py b/src/autobahn/twisted/wamp.py similarity index 100% rename from autobahn/twisted/wamp.py rename to src/autobahn/twisted/wamp.py diff --git a/autobahn/twisted/websocket.py b/src/autobahn/twisted/websocket.py similarity index 100% rename from autobahn/twisted/websocket.py rename to src/autobahn/twisted/websocket.py diff --git a/autobahn/util.py b/src/autobahn/util.py similarity index 100% rename from autobahn/util.py rename to src/autobahn/util.py diff --git a/autobahn/wamp/__init__.py b/src/autobahn/wamp/__init__.py similarity index 100% rename from autobahn/wamp/__init__.py rename to src/autobahn/wamp/__init__.py diff --git a/autobahn/wamp/auth.py b/src/autobahn/wamp/auth.py similarity index 100% rename from autobahn/wamp/auth.py rename to src/autobahn/wamp/auth.py diff --git a/autobahn/wamp/component.py b/src/autobahn/wamp/component.py similarity index 100% rename from autobahn/wamp/component.py rename to src/autobahn/wamp/component.py diff --git a/autobahn/wamp/cryptobox.py b/src/autobahn/wamp/cryptobox.py similarity index 100% rename from autobahn/wamp/cryptobox.py rename to src/autobahn/wamp/cryptobox.py diff --git a/autobahn/wamp/cryptosign.py b/src/autobahn/wamp/cryptosign.py similarity index 100% rename from autobahn/wamp/cryptosign.py rename to src/autobahn/wamp/cryptosign.py diff --git a/autobahn/wamp/exception.py b/src/autobahn/wamp/exception.py similarity index 100% rename from autobahn/wamp/exception.py rename to src/autobahn/wamp/exception.py diff --git a/autobahn/wamp/flatbuffers/auth.fbs b/src/autobahn/wamp/flatbuffers/auth.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/auth.fbs rename to src/autobahn/wamp/flatbuffers/auth.fbs diff --git a/autobahn/wamp/flatbuffers/pubsub.fbs b/src/autobahn/wamp/flatbuffers/pubsub.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/pubsub.fbs rename to src/autobahn/wamp/flatbuffers/pubsub.fbs diff --git a/autobahn/wamp/flatbuffers/roles.fbs b/src/autobahn/wamp/flatbuffers/roles.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/roles.fbs rename to src/autobahn/wamp/flatbuffers/roles.fbs diff --git a/autobahn/wamp/flatbuffers/rpc.fbs b/src/autobahn/wamp/flatbuffers/rpc.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/rpc.fbs rename to src/autobahn/wamp/flatbuffers/rpc.fbs diff --git a/autobahn/wamp/flatbuffers/session.fbs b/src/autobahn/wamp/flatbuffers/session.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/session.fbs rename to src/autobahn/wamp/flatbuffers/session.fbs diff --git a/autobahn/wamp/flatbuffers/types.fbs b/src/autobahn/wamp/flatbuffers/types.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/types.fbs rename to src/autobahn/wamp/flatbuffers/types.fbs diff --git a/autobahn/wamp/flatbuffers/wamp.fbs b/src/autobahn/wamp/flatbuffers/wamp.fbs similarity index 100% rename from autobahn/wamp/flatbuffers/wamp.fbs rename to src/autobahn/wamp/flatbuffers/wamp.fbs diff --git a/autobahn/wamp/gen/__init__.py b/src/autobahn/wamp/gen/__init__.py similarity index 100% rename from autobahn/wamp/gen/__init__.py rename to src/autobahn/wamp/gen/__init__.py diff --git a/autobahn/wamp/gen/schema/auth.bfbs b/src/autobahn/wamp/gen/schema/auth.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/auth.bfbs rename to src/autobahn/wamp/gen/schema/auth.bfbs diff --git a/autobahn/wamp/gen/schema/pubsub.bfbs b/src/autobahn/wamp/gen/schema/pubsub.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/pubsub.bfbs rename to src/autobahn/wamp/gen/schema/pubsub.bfbs diff --git a/autobahn/wamp/gen/schema/roles.bfbs b/src/autobahn/wamp/gen/schema/roles.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/roles.bfbs rename to src/autobahn/wamp/gen/schema/roles.bfbs diff --git a/autobahn/wamp/gen/schema/rpc.bfbs b/src/autobahn/wamp/gen/schema/rpc.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/rpc.bfbs rename to src/autobahn/wamp/gen/schema/rpc.bfbs diff --git a/autobahn/wamp/gen/schema/session.bfbs b/src/autobahn/wamp/gen/schema/session.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/session.bfbs rename to src/autobahn/wamp/gen/schema/session.bfbs diff --git a/autobahn/wamp/gen/schema/types.bfbs b/src/autobahn/wamp/gen/schema/types.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/types.bfbs rename to src/autobahn/wamp/gen/schema/types.bfbs diff --git a/autobahn/wamp/gen/schema/wamp.bfbs b/src/autobahn/wamp/gen/schema/wamp.bfbs similarity index 100% rename from autobahn/wamp/gen/schema/wamp.bfbs rename to src/autobahn/wamp/gen/schema/wamp.bfbs diff --git a/autobahn/wamp/gen/wamp/Map.py b/src/autobahn/wamp/gen/wamp/Map.py similarity index 100% rename from autobahn/wamp/gen/wamp/Map.py rename to src/autobahn/wamp/gen/wamp/Map.py diff --git a/autobahn/wamp/gen/wamp/Void.py b/src/autobahn/wamp/gen/wamp/Void.py similarity index 100% rename from autobahn/wamp/gen/wamp/Void.py rename to src/autobahn/wamp/gen/wamp/Void.py diff --git a/autobahn/wamp/gen/wamp/__init__.py b/src/autobahn/wamp/gen/wamp/__init__.py similarity index 100% rename from autobahn/wamp/gen/wamp/__init__.py rename to src/autobahn/wamp/gen/wamp/__init__.py diff --git a/autobahn/wamp/gen/wamp/proto/Abort.py b/src/autobahn/wamp/gen/wamp/proto/Abort.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Abort.py rename to src/autobahn/wamp/gen/wamp/proto/Abort.py diff --git a/autobahn/wamp/gen/wamp/proto/AnyMessage.py b/src/autobahn/wamp/gen/wamp/proto/AnyMessage.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AnyMessage.py rename to src/autobahn/wamp/gen/wamp/proto/AnyMessage.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthCraChallenge.py b/src/autobahn/wamp/gen/wamp/proto/AuthCraChallenge.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthCraChallenge.py rename to src/autobahn/wamp/gen/wamp/proto/AuthCraChallenge.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthCraRequest.py b/src/autobahn/wamp/gen/wamp/proto/AuthCraRequest.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthCraRequest.py rename to src/autobahn/wamp/gen/wamp/proto/AuthCraRequest.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthCraWelcome.py b/src/autobahn/wamp/gen/wamp/proto/AuthCraWelcome.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthCraWelcome.py rename to src/autobahn/wamp/gen/wamp/proto/AuthCraWelcome.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthCryptosignChallenge.py b/src/autobahn/wamp/gen/wamp/proto/AuthCryptosignChallenge.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthCryptosignChallenge.py rename to src/autobahn/wamp/gen/wamp/proto/AuthCryptosignChallenge.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthCryptosignRequest.py b/src/autobahn/wamp/gen/wamp/proto/AuthCryptosignRequest.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthCryptosignRequest.py rename to src/autobahn/wamp/gen/wamp/proto/AuthCryptosignRequest.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthCryptosignWelcome.py b/src/autobahn/wamp/gen/wamp/proto/AuthCryptosignWelcome.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthCryptosignWelcome.py rename to src/autobahn/wamp/gen/wamp/proto/AuthCryptosignWelcome.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthFactor.py b/src/autobahn/wamp/gen/wamp/proto/AuthFactor.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthFactor.py rename to src/autobahn/wamp/gen/wamp/proto/AuthFactor.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthMethod.py b/src/autobahn/wamp/gen/wamp/proto/AuthMethod.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthMethod.py rename to src/autobahn/wamp/gen/wamp/proto/AuthMethod.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthMode.py b/src/autobahn/wamp/gen/wamp/proto/AuthMode.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthMode.py rename to src/autobahn/wamp/gen/wamp/proto/AuthMode.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthScramChallenge.py b/src/autobahn/wamp/gen/wamp/proto/AuthScramChallenge.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthScramChallenge.py rename to src/autobahn/wamp/gen/wamp/proto/AuthScramChallenge.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthScramRequest.py b/src/autobahn/wamp/gen/wamp/proto/AuthScramRequest.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthScramRequest.py rename to src/autobahn/wamp/gen/wamp/proto/AuthScramRequest.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthScramWelcome.py b/src/autobahn/wamp/gen/wamp/proto/AuthScramWelcome.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthScramWelcome.py rename to src/autobahn/wamp/gen/wamp/proto/AuthScramWelcome.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py b/src/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py rename to src/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py b/src/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py rename to src/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py diff --git a/autobahn/wamp/gen/wamp/proto/AuthTicketWelcome.py b/src/autobahn/wamp/gen/wamp/proto/AuthTicketWelcome.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/AuthTicketWelcome.py rename to src/autobahn/wamp/gen/wamp/proto/AuthTicketWelcome.py diff --git a/autobahn/wamp/gen/wamp/proto/Authenticate.py b/src/autobahn/wamp/gen/wamp/proto/Authenticate.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Authenticate.py rename to src/autobahn/wamp/gen/wamp/proto/Authenticate.py diff --git a/autobahn/wamp/gen/wamp/proto/BrokerFeatures.py b/src/autobahn/wamp/gen/wamp/proto/BrokerFeatures.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/BrokerFeatures.py rename to src/autobahn/wamp/gen/wamp/proto/BrokerFeatures.py diff --git a/autobahn/wamp/gen/wamp/proto/Call.py b/src/autobahn/wamp/gen/wamp/proto/Call.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Call.py rename to src/autobahn/wamp/gen/wamp/proto/Call.py diff --git a/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py b/src/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/CalleeFeatures.py rename to src/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py diff --git a/autobahn/wamp/gen/wamp/proto/CallerFeatures.py b/src/autobahn/wamp/gen/wamp/proto/CallerFeatures.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/CallerFeatures.py rename to src/autobahn/wamp/gen/wamp/proto/CallerFeatures.py diff --git a/autobahn/wamp/gen/wamp/proto/Cancel.py b/src/autobahn/wamp/gen/wamp/proto/Cancel.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Cancel.py rename to src/autobahn/wamp/gen/wamp/proto/Cancel.py diff --git a/autobahn/wamp/gen/wamp/proto/CancelMode.py b/src/autobahn/wamp/gen/wamp/proto/CancelMode.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/CancelMode.py rename to src/autobahn/wamp/gen/wamp/proto/CancelMode.py diff --git a/autobahn/wamp/gen/wamp/proto/Challenge.py b/src/autobahn/wamp/gen/wamp/proto/Challenge.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Challenge.py rename to src/autobahn/wamp/gen/wamp/proto/Challenge.py diff --git a/autobahn/wamp/gen/wamp/proto/ChannelBinding.py b/src/autobahn/wamp/gen/wamp/proto/ChannelBinding.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/ChannelBinding.py rename to src/autobahn/wamp/gen/wamp/proto/ChannelBinding.py diff --git a/autobahn/wamp/gen/wamp/proto/ClientRoles.py b/src/autobahn/wamp/gen/wamp/proto/ClientRoles.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/ClientRoles.py rename to src/autobahn/wamp/gen/wamp/proto/ClientRoles.py diff --git a/autobahn/wamp/gen/wamp/proto/DealerFeatures.py b/src/autobahn/wamp/gen/wamp/proto/DealerFeatures.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/DealerFeatures.py rename to src/autobahn/wamp/gen/wamp/proto/DealerFeatures.py diff --git a/autobahn/wamp/gen/wamp/proto/Error.py b/src/autobahn/wamp/gen/wamp/proto/Error.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Error.py rename to src/autobahn/wamp/gen/wamp/proto/Error.py diff --git a/autobahn/wamp/gen/wamp/proto/Event.py b/src/autobahn/wamp/gen/wamp/proto/Event.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Event.py rename to src/autobahn/wamp/gen/wamp/proto/Event.py diff --git a/autobahn/wamp/gen/wamp/proto/EventReceived.py b/src/autobahn/wamp/gen/wamp/proto/EventReceived.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/EventReceived.py rename to src/autobahn/wamp/gen/wamp/proto/EventReceived.py diff --git a/autobahn/wamp/gen/wamp/proto/Goodbye.py b/src/autobahn/wamp/gen/wamp/proto/Goodbye.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Goodbye.py rename to src/autobahn/wamp/gen/wamp/proto/Goodbye.py diff --git a/autobahn/wamp/gen/wamp/proto/Hello.py b/src/autobahn/wamp/gen/wamp/proto/Hello.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Hello.py rename to src/autobahn/wamp/gen/wamp/proto/Hello.py diff --git a/autobahn/wamp/gen/wamp/proto/HelloNew.py b/src/autobahn/wamp/gen/wamp/proto/HelloNew.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/HelloNew.py rename to src/autobahn/wamp/gen/wamp/proto/HelloNew.py diff --git a/autobahn/wamp/gen/wamp/proto/Interrupt.py b/src/autobahn/wamp/gen/wamp/proto/Interrupt.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Interrupt.py rename to src/autobahn/wamp/gen/wamp/proto/Interrupt.py diff --git a/autobahn/wamp/gen/wamp/proto/Invocation.py b/src/autobahn/wamp/gen/wamp/proto/Invocation.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Invocation.py rename to src/autobahn/wamp/gen/wamp/proto/Invocation.py diff --git a/autobahn/wamp/gen/wamp/proto/InvocationPolicy.py b/src/autobahn/wamp/gen/wamp/proto/InvocationPolicy.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/InvocationPolicy.py rename to src/autobahn/wamp/gen/wamp/proto/InvocationPolicy.py diff --git a/autobahn/wamp/gen/wamp/proto/KDF.py b/src/autobahn/wamp/gen/wamp/proto/KDF.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/KDF.py rename to src/autobahn/wamp/gen/wamp/proto/KDF.py diff --git a/autobahn/wamp/gen/wamp/proto/Kdf.py b/src/autobahn/wamp/gen/wamp/proto/Kdf.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Kdf.py rename to src/autobahn/wamp/gen/wamp/proto/Kdf.py diff --git a/autobahn/wamp/gen/wamp/proto/Match.py b/src/autobahn/wamp/gen/wamp/proto/Match.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Match.py rename to src/autobahn/wamp/gen/wamp/proto/Match.py diff --git a/autobahn/wamp/gen/wamp/proto/Message.py b/src/autobahn/wamp/gen/wamp/proto/Message.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Message.py rename to src/autobahn/wamp/gen/wamp/proto/Message.py diff --git a/autobahn/wamp/gen/wamp/proto/MessageType.py b/src/autobahn/wamp/gen/wamp/proto/MessageType.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/MessageType.py rename to src/autobahn/wamp/gen/wamp/proto/MessageType.py diff --git a/autobahn/wamp/gen/wamp/proto/PPTCipher.py b/src/autobahn/wamp/gen/wamp/proto/PPTCipher.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/PPTCipher.py rename to src/autobahn/wamp/gen/wamp/proto/PPTCipher.py diff --git a/autobahn/wamp/gen/wamp/proto/PPTScheme.py b/src/autobahn/wamp/gen/wamp/proto/PPTScheme.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/PPTScheme.py rename to src/autobahn/wamp/gen/wamp/proto/PPTScheme.py diff --git a/autobahn/wamp/gen/wamp/proto/PPTSerializer.py b/src/autobahn/wamp/gen/wamp/proto/PPTSerializer.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/PPTSerializer.py rename to src/autobahn/wamp/gen/wamp/proto/PPTSerializer.py diff --git a/autobahn/wamp/gen/wamp/proto/Principal.py b/src/autobahn/wamp/gen/wamp/proto/Principal.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Principal.py rename to src/autobahn/wamp/gen/wamp/proto/Principal.py diff --git a/autobahn/wamp/gen/wamp/proto/Publish.py b/src/autobahn/wamp/gen/wamp/proto/Publish.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Publish.py rename to src/autobahn/wamp/gen/wamp/proto/Publish.py diff --git a/autobahn/wamp/gen/wamp/proto/Published.py b/src/autobahn/wamp/gen/wamp/proto/Published.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Published.py rename to src/autobahn/wamp/gen/wamp/proto/Published.py diff --git a/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py b/src/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/PublisherFeatures.py rename to src/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py diff --git a/autobahn/wamp/gen/wamp/proto/Register.py b/src/autobahn/wamp/gen/wamp/proto/Register.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Register.py rename to src/autobahn/wamp/gen/wamp/proto/Register.py diff --git a/autobahn/wamp/gen/wamp/proto/Registered.py b/src/autobahn/wamp/gen/wamp/proto/Registered.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Registered.py rename to src/autobahn/wamp/gen/wamp/proto/Registered.py diff --git a/autobahn/wamp/gen/wamp/proto/Result.py b/src/autobahn/wamp/gen/wamp/proto/Result.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Result.py rename to src/autobahn/wamp/gen/wamp/proto/Result.py diff --git a/autobahn/wamp/gen/wamp/proto/RouterRoles.py b/src/autobahn/wamp/gen/wamp/proto/RouterRoles.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/RouterRoles.py rename to src/autobahn/wamp/gen/wamp/proto/RouterRoles.py diff --git a/autobahn/wamp/gen/wamp/proto/Subscribe.py b/src/autobahn/wamp/gen/wamp/proto/Subscribe.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Subscribe.py rename to src/autobahn/wamp/gen/wamp/proto/Subscribe.py diff --git a/autobahn/wamp/gen/wamp/proto/Subscribed.py b/src/autobahn/wamp/gen/wamp/proto/Subscribed.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Subscribed.py rename to src/autobahn/wamp/gen/wamp/proto/Subscribed.py diff --git a/autobahn/wamp/gen/wamp/proto/SubscriberFeatures.py b/src/autobahn/wamp/gen/wamp/proto/SubscriberFeatures.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/SubscriberFeatures.py rename to src/autobahn/wamp/gen/wamp/proto/SubscriberFeatures.py diff --git a/autobahn/wamp/gen/wamp/proto/TLSChannelBinding.py b/src/autobahn/wamp/gen/wamp/proto/TLSChannelBinding.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/TLSChannelBinding.py rename to src/autobahn/wamp/gen/wamp/proto/TLSChannelBinding.py diff --git a/autobahn/wamp/gen/wamp/proto/TransportChannelFraming.py b/src/autobahn/wamp/gen/wamp/proto/TransportChannelFraming.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/TransportChannelFraming.py rename to src/autobahn/wamp/gen/wamp/proto/TransportChannelFraming.py diff --git a/autobahn/wamp/gen/wamp/proto/TransportChannelSerializer.py b/src/autobahn/wamp/gen/wamp/proto/TransportChannelSerializer.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/TransportChannelSerializer.py rename to src/autobahn/wamp/gen/wamp/proto/TransportChannelSerializer.py diff --git a/autobahn/wamp/gen/wamp/proto/TransportChannelType.py b/src/autobahn/wamp/gen/wamp/proto/TransportChannelType.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/TransportChannelType.py rename to src/autobahn/wamp/gen/wamp/proto/TransportChannelType.py diff --git a/autobahn/wamp/gen/wamp/proto/Unregister.py b/src/autobahn/wamp/gen/wamp/proto/Unregister.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Unregister.py rename to src/autobahn/wamp/gen/wamp/proto/Unregister.py diff --git a/autobahn/wamp/gen/wamp/proto/Unregistered.py b/src/autobahn/wamp/gen/wamp/proto/Unregistered.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Unregistered.py rename to src/autobahn/wamp/gen/wamp/proto/Unregistered.py diff --git a/autobahn/wamp/gen/wamp/proto/Unsubscribe.py b/src/autobahn/wamp/gen/wamp/proto/Unsubscribe.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Unsubscribe.py rename to src/autobahn/wamp/gen/wamp/proto/Unsubscribe.py diff --git a/autobahn/wamp/gen/wamp/proto/Unsubscribed.py b/src/autobahn/wamp/gen/wamp/proto/Unsubscribed.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Unsubscribed.py rename to src/autobahn/wamp/gen/wamp/proto/Unsubscribed.py diff --git a/autobahn/wamp/gen/wamp/proto/Welcome.py b/src/autobahn/wamp/gen/wamp/proto/Welcome.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Welcome.py rename to src/autobahn/wamp/gen/wamp/proto/Welcome.py diff --git a/autobahn/wamp/gen/wamp/proto/Yield.py b/src/autobahn/wamp/gen/wamp/proto/Yield.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/Yield.py rename to src/autobahn/wamp/gen/wamp/proto/Yield.py diff --git a/autobahn/wamp/gen/wamp/proto/__init__.py b/src/autobahn/wamp/gen/wamp/proto/__init__.py similarity index 100% rename from autobahn/wamp/gen/wamp/proto/__init__.py rename to src/autobahn/wamp/gen/wamp/proto/__init__.py diff --git a/autobahn/wamp/interfaces.py b/src/autobahn/wamp/interfaces.py similarity index 100% rename from autobahn/wamp/interfaces.py rename to src/autobahn/wamp/interfaces.py diff --git a/autobahn/wamp/message.py b/src/autobahn/wamp/message.py similarity index 100% rename from autobahn/wamp/message.py rename to src/autobahn/wamp/message.py diff --git a/autobahn/wamp/message_fbs.py b/src/autobahn/wamp/message_fbs.py similarity index 100% rename from autobahn/wamp/message_fbs.py rename to src/autobahn/wamp/message_fbs.py diff --git a/autobahn/wamp/mnemonic.py b/src/autobahn/wamp/mnemonic.py similarity index 100% rename from autobahn/wamp/mnemonic.py rename to src/autobahn/wamp/mnemonic.py diff --git a/autobahn/wamp/protocol.py b/src/autobahn/wamp/protocol.py similarity index 100% rename from autobahn/wamp/protocol.py rename to src/autobahn/wamp/protocol.py diff --git a/autobahn/wamp/request.py b/src/autobahn/wamp/request.py similarity index 100% rename from autobahn/wamp/request.py rename to src/autobahn/wamp/request.py diff --git a/autobahn/wamp/role.py b/src/autobahn/wamp/role.py similarity index 100% rename from autobahn/wamp/role.py rename to src/autobahn/wamp/role.py diff --git a/autobahn/wamp/serializer.py b/src/autobahn/wamp/serializer.py similarity index 100% rename from autobahn/wamp/serializer.py rename to src/autobahn/wamp/serializer.py diff --git a/autobahn/wamp/test/__init__.py b/src/autobahn/wamp/test/__init__.py similarity index 100% rename from autobahn/wamp/test/__init__.py rename to src/autobahn/wamp/test/__init__.py diff --git a/autobahn/wamp/test/test_wamp_auth.py b/src/autobahn/wamp/test/test_wamp_auth.py similarity index 100% rename from autobahn/wamp/test/test_wamp_auth.py rename to src/autobahn/wamp/test/test_wamp_auth.py diff --git a/autobahn/wamp/test/test_wamp_component.py b/src/autobahn/wamp/test/test_wamp_component.py similarity index 100% rename from autobahn/wamp/test/test_wamp_component.py rename to src/autobahn/wamp/test/test_wamp_component.py diff --git a/autobahn/wamp/test/test_wamp_component_aio.py b/src/autobahn/wamp/test/test_wamp_component_aio.py similarity index 100% rename from autobahn/wamp/test/test_wamp_component_aio.py rename to src/autobahn/wamp/test/test_wamp_component_aio.py diff --git a/autobahn/wamp/test/test_wamp_cryptobox.py b/src/autobahn/wamp/test/test_wamp_cryptobox.py similarity index 100% rename from autobahn/wamp/test/test_wamp_cryptobox.py rename to src/autobahn/wamp/test/test_wamp_cryptobox.py diff --git a/autobahn/wamp/test/test_wamp_cryptosign.py b/src/autobahn/wamp/test/test_wamp_cryptosign.py similarity index 100% rename from autobahn/wamp/test/test_wamp_cryptosign.py rename to src/autobahn/wamp/test/test_wamp_cryptosign.py diff --git a/autobahn/wamp/test/test_wamp_exception.py b/src/autobahn/wamp/test/test_wamp_exception.py similarity index 100% rename from autobahn/wamp/test/test_wamp_exception.py rename to src/autobahn/wamp/test/test_wamp_exception.py diff --git a/autobahn/wamp/test/test_wamp_identifiers.py b/src/autobahn/wamp/test/test_wamp_identifiers.py similarity index 100% rename from autobahn/wamp/test/test_wamp_identifiers.py rename to src/autobahn/wamp/test/test_wamp_identifiers.py diff --git a/autobahn/wamp/test/test_wamp_message.py b/src/autobahn/wamp/test/test_wamp_message.py similarity index 100% rename from autobahn/wamp/test/test_wamp_message.py rename to src/autobahn/wamp/test/test_wamp_message.py diff --git a/autobahn/wamp/test/test_wamp_protocol.py b/src/autobahn/wamp/test/test_wamp_protocol.py similarity index 100% rename from autobahn/wamp/test/test_wamp_protocol.py rename to src/autobahn/wamp/test/test_wamp_protocol.py diff --git a/autobahn/wamp/test/test_wamp_protocol_peer.py b/src/autobahn/wamp/test/test_wamp_protocol_peer.py similarity index 100% rename from autobahn/wamp/test/test_wamp_protocol_peer.py rename to src/autobahn/wamp/test/test_wamp_protocol_peer.py diff --git a/autobahn/wamp/test/test_wamp_scram.py b/src/autobahn/wamp/test/test_wamp_scram.py similarity index 100% rename from autobahn/wamp/test/test_wamp_scram.py rename to src/autobahn/wamp/test/test_wamp_scram.py diff --git a/autobahn/wamp/test/test_wamp_serializer.py b/src/autobahn/wamp/test/test_wamp_serializer.py similarity index 100% rename from autobahn/wamp/test/test_wamp_serializer.py rename to src/autobahn/wamp/test/test_wamp_serializer.py diff --git a/autobahn/wamp/test/test_wamp_session_details.py b/src/autobahn/wamp/test/test_wamp_session_details.py similarity index 100% rename from autobahn/wamp/test/test_wamp_session_details.py rename to src/autobahn/wamp/test/test_wamp_session_details.py diff --git a/autobahn/wamp/test/test_wamp_transport_details.py b/src/autobahn/wamp/test/test_wamp_transport_details.py similarity index 100% rename from autobahn/wamp/test/test_wamp_transport_details.py rename to src/autobahn/wamp/test/test_wamp_transport_details.py diff --git a/autobahn/wamp/test/test_wamp_uri_pattern.py b/src/autobahn/wamp/test/test_wamp_uri_pattern.py similarity index 100% rename from autobahn/wamp/test/test_wamp_uri_pattern.py rename to src/autobahn/wamp/test/test_wamp_uri_pattern.py diff --git a/autobahn/wamp/test/test_wamp_user_handler_errors.py b/src/autobahn/wamp/test/test_wamp_user_handler_errors.py similarity index 100% rename from autobahn/wamp/test/test_wamp_user_handler_errors.py rename to src/autobahn/wamp/test/test_wamp_user_handler_errors.py diff --git a/autobahn/wamp/test/test_wamp_websocket.py b/src/autobahn/wamp/test/test_wamp_websocket.py similarity index 100% rename from autobahn/wamp/test/test_wamp_websocket.py rename to src/autobahn/wamp/test/test_wamp_websocket.py diff --git a/autobahn/wamp/types.py b/src/autobahn/wamp/types.py similarity index 100% rename from autobahn/wamp/types.py rename to src/autobahn/wamp/types.py diff --git a/autobahn/wamp/uri.py b/src/autobahn/wamp/uri.py similarity index 100% rename from autobahn/wamp/uri.py rename to src/autobahn/wamp/uri.py diff --git a/autobahn/wamp/websocket.py b/src/autobahn/wamp/websocket.py similarity index 100% rename from autobahn/wamp/websocket.py rename to src/autobahn/wamp/websocket.py diff --git a/autobahn/websocket/__init__.py b/src/autobahn/websocket/__init__.py similarity index 100% rename from autobahn/websocket/__init__.py rename to src/autobahn/websocket/__init__.py diff --git a/autobahn/websocket/compress.py b/src/autobahn/websocket/compress.py similarity index 100% rename from autobahn/websocket/compress.py rename to src/autobahn/websocket/compress.py diff --git a/autobahn/websocket/compress_base.py b/src/autobahn/websocket/compress_base.py similarity index 100% rename from autobahn/websocket/compress_base.py rename to src/autobahn/websocket/compress_base.py diff --git a/autobahn/websocket/compress_brotli.py b/src/autobahn/websocket/compress_brotli.py similarity index 100% rename from autobahn/websocket/compress_brotli.py rename to src/autobahn/websocket/compress_brotli.py diff --git a/autobahn/websocket/compress_bzip2.py b/src/autobahn/websocket/compress_bzip2.py similarity index 100% rename from autobahn/websocket/compress_bzip2.py rename to src/autobahn/websocket/compress_bzip2.py diff --git a/autobahn/websocket/compress_deflate.py b/src/autobahn/websocket/compress_deflate.py similarity index 100% rename from autobahn/websocket/compress_deflate.py rename to src/autobahn/websocket/compress_deflate.py diff --git a/autobahn/websocket/compress_snappy.py b/src/autobahn/websocket/compress_snappy.py similarity index 100% rename from autobahn/websocket/compress_snappy.py rename to src/autobahn/websocket/compress_snappy.py diff --git a/autobahn/websocket/interfaces.py b/src/autobahn/websocket/interfaces.py similarity index 100% rename from autobahn/websocket/interfaces.py rename to src/autobahn/websocket/interfaces.py diff --git a/autobahn/websocket/protocol.py b/src/autobahn/websocket/protocol.py similarity index 100% rename from autobahn/websocket/protocol.py rename to src/autobahn/websocket/protocol.py diff --git a/autobahn/websocket/test/__init__.py b/src/autobahn/websocket/test/__init__.py similarity index 100% rename from autobahn/websocket/test/__init__.py rename to src/autobahn/websocket/test/__init__.py diff --git a/autobahn/websocket/test/test_websocket_frame.py b/src/autobahn/websocket/test/test_websocket_frame.py similarity index 100% rename from autobahn/websocket/test/test_websocket_frame.py rename to src/autobahn/websocket/test/test_websocket_frame.py diff --git a/autobahn/websocket/test/test_websocket_protocol.py b/src/autobahn/websocket/test/test_websocket_protocol.py similarity index 100% rename from autobahn/websocket/test/test_websocket_protocol.py rename to src/autobahn/websocket/test/test_websocket_protocol.py diff --git a/autobahn/websocket/test/test_websocket_url.py b/src/autobahn/websocket/test/test_websocket_url.py similarity index 100% rename from autobahn/websocket/test/test_websocket_url.py rename to src/autobahn/websocket/test/test_websocket_url.py diff --git a/autobahn/websocket/types.py b/src/autobahn/websocket/types.py similarity index 100% rename from autobahn/websocket/types.py rename to src/autobahn/websocket/types.py diff --git a/autobahn/websocket/utf8validator.py b/src/autobahn/websocket/utf8validator.py similarity index 100% rename from autobahn/websocket/utf8validator.py rename to src/autobahn/websocket/utf8validator.py diff --git a/autobahn/websocket/util.py b/src/autobahn/websocket/util.py similarity index 100% rename from autobahn/websocket/util.py rename to src/autobahn/websocket/util.py diff --git a/autobahn/websocket/xormasker.py b/src/autobahn/websocket/xormasker.py similarity index 100% rename from autobahn/websocket/xormasker.py rename to src/autobahn/websocket/xormasker.py diff --git a/flatbuffers/__init__.py b/src/flatbuffers/__init__.py similarity index 100% rename from flatbuffers/__init__.py rename to src/flatbuffers/__init__.py diff --git a/flatbuffers/_version.py b/src/flatbuffers/_version.py similarity index 100% rename from flatbuffers/_version.py rename to src/flatbuffers/_version.py diff --git a/flatbuffers/builder.py b/src/flatbuffers/builder.py similarity index 100% rename from flatbuffers/builder.py rename to src/flatbuffers/builder.py diff --git a/flatbuffers/compat.py b/src/flatbuffers/compat.py similarity index 100% rename from flatbuffers/compat.py rename to src/flatbuffers/compat.py diff --git a/flatbuffers/encode.py b/src/flatbuffers/encode.py similarity index 100% rename from flatbuffers/encode.py rename to src/flatbuffers/encode.py diff --git a/flatbuffers/flexbuffers.py b/src/flatbuffers/flexbuffers.py similarity index 100% rename from flatbuffers/flexbuffers.py rename to src/flatbuffers/flexbuffers.py diff --git a/flatbuffers/number_types.py b/src/flatbuffers/number_types.py similarity index 100% rename from flatbuffers/number_types.py rename to src/flatbuffers/number_types.py diff --git a/flatbuffers/packer.py b/src/flatbuffers/packer.py similarity index 100% rename from flatbuffers/packer.py rename to src/flatbuffers/packer.py diff --git a/flatbuffers/reflection/AdvancedFeatures.py b/src/flatbuffers/reflection/AdvancedFeatures.py similarity index 100% rename from flatbuffers/reflection/AdvancedFeatures.py rename to src/flatbuffers/reflection/AdvancedFeatures.py diff --git a/flatbuffers/reflection/BaseType.py b/src/flatbuffers/reflection/BaseType.py similarity index 100% rename from flatbuffers/reflection/BaseType.py rename to src/flatbuffers/reflection/BaseType.py diff --git a/flatbuffers/reflection/Enum.py b/src/flatbuffers/reflection/Enum.py similarity index 100% rename from flatbuffers/reflection/Enum.py rename to src/flatbuffers/reflection/Enum.py diff --git a/flatbuffers/reflection/EnumVal.py b/src/flatbuffers/reflection/EnumVal.py similarity index 100% rename from flatbuffers/reflection/EnumVal.py rename to src/flatbuffers/reflection/EnumVal.py diff --git a/flatbuffers/reflection/Field.py b/src/flatbuffers/reflection/Field.py similarity index 100% rename from flatbuffers/reflection/Field.py rename to src/flatbuffers/reflection/Field.py diff --git a/flatbuffers/reflection/KeyValue.py b/src/flatbuffers/reflection/KeyValue.py similarity index 100% rename from flatbuffers/reflection/KeyValue.py rename to src/flatbuffers/reflection/KeyValue.py diff --git a/flatbuffers/reflection/Object.py b/src/flatbuffers/reflection/Object.py similarity index 100% rename from flatbuffers/reflection/Object.py rename to src/flatbuffers/reflection/Object.py diff --git a/flatbuffers/reflection/RPCCall.py b/src/flatbuffers/reflection/RPCCall.py similarity index 100% rename from flatbuffers/reflection/RPCCall.py rename to src/flatbuffers/reflection/RPCCall.py diff --git a/flatbuffers/reflection/Schema.py b/src/flatbuffers/reflection/Schema.py similarity index 100% rename from flatbuffers/reflection/Schema.py rename to src/flatbuffers/reflection/Schema.py diff --git a/flatbuffers/reflection/SchemaFile.py b/src/flatbuffers/reflection/SchemaFile.py similarity index 100% rename from flatbuffers/reflection/SchemaFile.py rename to src/flatbuffers/reflection/SchemaFile.py diff --git a/flatbuffers/reflection/Service.py b/src/flatbuffers/reflection/Service.py similarity index 100% rename from flatbuffers/reflection/Service.py rename to src/flatbuffers/reflection/Service.py diff --git a/flatbuffers/reflection/Type.py b/src/flatbuffers/reflection/Type.py similarity index 100% rename from flatbuffers/reflection/Type.py rename to src/flatbuffers/reflection/Type.py diff --git a/flatbuffers/reflection/__init__.py b/src/flatbuffers/reflection/__init__.py similarity index 100% rename from flatbuffers/reflection/__init__.py rename to src/flatbuffers/reflection/__init__.py diff --git a/flatbuffers/table.py b/src/flatbuffers/table.py similarity index 100% rename from flatbuffers/table.py rename to src/flatbuffers/table.py diff --git a/flatbuffers/util.py b/src/flatbuffers/util.py similarity index 100% rename from flatbuffers/util.py rename to src/flatbuffers/util.py diff --git a/twisted/plugins/autobahn_endpoints.py b/src/twisted/plugins/autobahn_endpoints.py similarity index 100% rename from twisted/plugins/autobahn_endpoints.py rename to src/twisted/plugins/autobahn_endpoints.py diff --git a/twisted/plugins/autobahn_twistd.py b/src/twisted/plugins/autobahn_twistd.py similarity index 100% rename from twisted/plugins/autobahn_twistd.py rename to src/twisted/plugins/autobahn_twistd.py From 5c6745273cf07f651f910abd3670c9f91206a0ab Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sun, 30 Nov 2025 02:11:27 +0100 Subject: [PATCH 07/11] fix: Update setup.py cffi_modules paths for src layout - Update paths from autobahn/nvx/ to src/autobahn/nvx/ - Add detailed comment explaining why setup.py is still needed (CFFI has no pyproject.toml support for cffi_modules) Note: This work was completed with AI assistance (Claude Code). --- setup.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 689ae133c..20bf8c39f 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,23 @@ #!/usr/bin/env python3 """ -Modern setup.py that works with pyproject.toml for CFFI module building. -This handles the conditional CFFI module compilation based on environment variables. +IMPORTANT: Why does this file still exist? + +This setup.py is ONLY needed for CFFI extension module building (NVX). +All other package configuration is in pyproject.toml. + +The cffi_modules parameter cannot be specified in pyproject.toml - there is +no standard PEP-defined way to declare CFFI build hooks. The CFFI library +requires this setup.py hook to: + +1. Read the FFI definitions from _utf8validator.py and _xormasker.py +2. Compile the C code into platform-specific .so/.pyd shared libraries +3. Package the compiled extensions into the wheel + +Without this file, the NVX (Native Vector Extensions) for WebSocket +frame masking and UTF-8 validation would not be built. + +If CFFI ever gets pyproject.toml support, this file can be removed. +See: https://cffi.readthedocs.io/en/latest/cdef.html#ffi-set-source-preparing-out-of-line-modules """ import os @@ -13,8 +29,8 @@ "0", "false", ]: - cffi_modules.append("autobahn/nvx/_utf8validator.py:ffi") - cffi_modules.append("autobahn/nvx/_xormasker.py:ffi") + cffi_modules.append("src/autobahn/nvx/_utf8validator.py:ffi") + cffi_modules.append("src/autobahn/nvx/_xormasker.py:ffi") # Include package data from MANIFEST.in include_package_data = True From dba230f7d1d72af33143932aefb40654c9f6f6f8 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sun, 30 Nov 2025 02:15:46 +0100 Subject: [PATCH 08/11] fix: Update mypy.ini and justfile paths for src layout - Update mypy.ini python_version from 3.7 to 3.11 - Update justfile paths from autobahn/ to src/autobahn/ - check-typing mypy path - check-coverage-asyncio pytest paths - test-asyncio pytest paths - clean-fbs, build-fbs FlatBuffers paths Note: This work was completed with AI assistance (Claude Code). --- justfile | 28 ++++++++++++++-------------- mypy.ini | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/justfile b/justfile index 51c9d0a68..39ce1fc9f 100644 --- a/justfile +++ b/justfile @@ -614,7 +614,7 @@ check-typing venv="": (install-tools venv) (install venv) fi VENV_PATH="{{ VENV_DIR }}/${VENV_NAME}" echo "==> Running static type checks with ${VENV_NAME}..." - "${VENV_PATH}/bin/mypy" autobahn/ + "${VENV_PATH}/bin/mypy" src/autobahn/ # Run coverage for Twisted tests only check-coverage-twisted venv="" use_nvx="": (install-tools venv) (install venv) @@ -682,10 +682,10 @@ check-coverage-asyncio venv="" use_nvx="": (install-tools venv) (install venv) # Run asyncio tests with coverage (parallel mode to combine later) USE_ASYNCIO=1 "${VENV_PATH}/bin/coverage" run \ - --source=autobahn \ + --source=src/autobahn \ --parallel-mode \ -m pytest -s -v -rfP \ - --ignore=./autobahn/twisted ./autobahn + --ignore=./src/autobahn/twisted ./src/autobahn # Combined coverage report from both Twisted and asyncio tests check-coverage-combined venv="" use_nvx="": (check-coverage-twisted venv use_nvx) (check-coverage-asyncio venv use_nvx) @@ -1003,7 +1003,7 @@ test-asyncio venv="" use_nvx="": (install-tools venv) (install venv) # IMPORTANT: we need to exclude all twisted tests USE_ASYNCIO=1 ${VENV_PYTHON} -m pytest -s -v -rfP \ - --ignore=./autobahn/twisted ./autobahn + --ignore=./src/autobahn/twisted ./src/autobahn # Run WAMP message serdes conformance tests (usage: `just test-serdes cpy311`) test-serdes venv="": (install-tools venv) (install venv) @@ -1356,7 +1356,7 @@ install-flatc: # Clean generated FlatBuffers files clean-fbs: echo "==> Cleaning FlatBuffers generated files..." - rm -rf ./autobahn/wamp/gen/ + rm -rf ./src/autobahn/wamp/gen/ # Build FlatBuffers schema files and Python bindings build-fbs venv="": (install-tools venv) @@ -1370,28 +1370,28 @@ build-fbs venv="": (install-tools venv) fi VENV_PATH="{{ VENV_DIR }}/${VENV_NAME}" - FBSFILES="./autobahn/wamp/flatbuffers/*.fbs" + FBSFILES="./src/autobahn/wamp/flatbuffers/*.fbs" FLATC="flatc" echo "==> Generating FlatBuffers binary schema and Python wrappers using $(${FLATC} --version)..." # Generate schema binary type library (*.bfbs files) - ${FLATC} -o ./autobahn/wamp/gen/schema/ --binary --schema --bfbs-comments --bfbs-builtins ${FBSFILES} - echo "--> Generated $(find ./autobahn/wamp/gen/schema/ -name '*.bfbs' | wc -l) .bfbs files" + ${FLATC} -o ./src/autobahn/wamp/gen/schema/ --binary --schema --bfbs-comments --bfbs-builtins ${FBSFILES} + echo "--> Generated $(find ./src/autobahn/wamp/gen/schema/ -name '*.bfbs' | wc -l) .bfbs files" # Generate schema Python bindings (*.py files) - ${FLATC} -o ./autobahn/wamp/gen/ --python ${FBSFILES} - touch ./autobahn/wamp/gen/__init__.py - echo "--> Generated $(find ./autobahn/wamp/gen/ -name '*.py' | wc -l) .py files" + ${FLATC} -o ./src/autobahn/wamp/gen/ --python ${FBSFILES} + touch ./src/autobahn/wamp/gen/__init__.py + echo "--> Generated $(find ./src/autobahn/wamp/gen/ -name '*.py' | wc -l) .py files" # Fix import paths in generated files (flatc generates relative imports) # Change: from wamp.proto.X import X # To: from autobahn.wamp.gen.wamp.proto.X import X - find ./autobahn/wamp/gen/wamp/proto/ -name "*.py" -exec sed -i 's/from wamp\.proto\./from autobahn.wamp.gen.wamp.proto./g' {} + + find ./src/autobahn/wamp/gen/wamp/proto/ -name "*.py" -exec sed -i 's/from wamp\.proto\./from autobahn.wamp.gen.wamp.proto./g' {} + echo "--> Fixed import paths in generated files" echo "Auto-formatting code using ruff after flatc code generation .." - "${VENV_PATH}/bin/ruff" format ./autobahn/wamp/gen/ - "${VENV_PATH}/bin/ruff" check --fix ./autobahn/wamp/gen/ + "${VENV_PATH}/bin/ruff" format ./src/autobahn/wamp/gen/ + "${VENV_PATH}/bin/ruff" check --fix ./src/autobahn/wamp/gen/ # ----------------------------------------------------------------------------- # -- File Management Utilities diff --git a/mypy.ini b/mypy.ini index f4d58917f..b79dc1496 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,5 +1,5 @@ [mypy] -python_version = 3.7 +python_version = 3.11 [mypy-autobahn.*] ignore_missing_imports = True From 5c345a9a2faaa26859e93e6c0cff46a61dcc8a0c Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sun, 30 Nov 2025 02:26:43 +0100 Subject: [PATCH 09/11] fix: Include NVX C source files in package data The _utf8validator.c and _xormasker.c files are needed at runtime for CFFI to compile the native extensions. Note: This work was completed with AI assistance (Claude Code). --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 24f3728ed..a36754dff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -183,6 +183,7 @@ include-package-data = true [tool.setuptools.package-data] autobahn = ["py.typed"] "autobahn.asyncio" = ["test/*"] +"autobahn.nvx" = ["*.c"] "autobahn.wamp.gen.schema" = ["*.bfbs"] "autobahn.wamp.flatbuffers" = ["*.fbs"] From d30917ca0c7d5caffdca700b8aee2bad547c91f2 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sun, 30 Nov 2025 02:36:51 +0100 Subject: [PATCH 10/11] fix: Use editable install for test/check recipes With src layout, tests run from src/ directory. Using non-editable install copies files to site-packages, causing pytest to find both locations and fail with "import file mismatch". Changed all test/check recipes to use install-dev (editable mode) instead of install (non-editable): - check-typing, check-coverage-*, check-coverage - test-import, test-twisted, test-asyncio, test-serdes - wstest-testeeclient-*, wstest-testeeserver-* Note: This work was completed with AI assistance (Claude Code). --- justfile | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/justfile b/justfile index 39ce1fc9f..8213a5121 100644 --- a/justfile +++ b/justfile @@ -603,7 +603,7 @@ check-format venv="": (install-tools venv) "${VENV_PATH}/bin/ruff" check . # Run static type checking with mypy -check-typing venv="": (install-tools venv) (install venv) +check-typing venv="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -617,7 +617,7 @@ check-typing venv="": (install-tools venv) (install venv) "${VENV_PATH}/bin/mypy" src/autobahn/ # Run coverage for Twisted tests only -check-coverage-twisted venv="" use_nvx="": (install-tools venv) (install venv) +check-coverage-twisted venv="" use_nvx="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -657,7 +657,7 @@ check-coverage-twisted venv="" use_nvx="": (install-tools venv) (install venv) autobahn.nvx.test # Run coverage for asyncio tests only -check-coverage-asyncio venv="" use_nvx="": (install-tools venv) (install venv) +check-coverage-asyncio venv="" use_nvx="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -726,7 +726,7 @@ check-coverage-combined venv="" use_nvx="": (check-coverage-twisted venv use_nvx echo " Text: above summary" # Legacy coverage recipe (DEPRECATED - use check-coverage-combined instead) -check-coverage venv="" use_nvx="": (install-tools venv) (install venv) +check-coverage venv="" use_nvx="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e echo "⚠️ DEPRECATED: Use 'just check-coverage-combined' for comprehensive coverage" @@ -921,7 +921,7 @@ test-all: done # Run basic autobahn library import test (usage: `just test-import cpy314`) -test-import venv="": (install-tools venv) (install venv) +test-import venv="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -936,7 +936,7 @@ test-import venv="": (install-tools venv) (install venv) ${VENV_PYTHON} -c "from autobahn.wamp.message import Unregistered; print(f'\n{Unregistered.MESSAGE_TYPE}! ohh, yeah.\n')" # Run the test suite for Twisted using trial (usage: `just test-twisted cpy314`) -test-twisted venv="" use_nvx="": (install-tools venv) (install venv) +test-twisted venv="" use_nvx="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -977,7 +977,7 @@ test-twisted venv="" use_nvx="": (install-tools venv) (install venv) autobahn.nvx.test # Run the test suite for asyncio using pytest (usage: `just test-asyncio cpy314`) -test-asyncio venv="" use_nvx="": (install-tools venv) (install venv) +test-asyncio venv="" use_nvx="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -1006,7 +1006,7 @@ test-asyncio venv="" use_nvx="": (install-tools venv) (install venv) --ignore=./src/autobahn/twisted ./src/autobahn # Run WAMP message serdes conformance tests (usage: `just test-serdes cpy311`) -test-serdes venv="": (install-tools venv) (install venv) +test-serdes venv="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -1703,7 +1703,7 @@ wstest-fuzzingclient config_dir="" output_dir="" mode="quick": wstest -m fuzzingclient -s /config/fuzzingclient-${TEST_MODE}.json # Run Autobahn|Python WebSocket client on Twisted -wstest-testeeclient-twisted venv="": (install-tools venv) (install venv) +wstest-testeeclient-twisted venv="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -1719,7 +1719,7 @@ wstest-testeeclient-twisted venv="": (install-tools venv) (install venv) ${VENV_PYTHON} ./wstest/testee_client_tx.py # Run Autobahn|Python WebSocket client on asyncio -wstest-testeeclient-asyncio venv="": (install-tools venv) (install venv) +wstest-testeeclient-asyncio venv="": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -1735,7 +1735,7 @@ wstest-testeeclient-asyncio venv="": (install-tools venv) (install venv) ${VENV_PYTHON} ./wstest/testee_client_aio.py # Run Autobahn|Python WebSocket server on Twisted -wstest-testeeserver-twisted venv="" url="ws://127.0.0.1:9011": (install-tools venv) (install venv) +wstest-testeeserver-twisted venv="" url="ws://127.0.0.1:9011": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" @@ -1750,7 +1750,7 @@ wstest-testeeserver-twisted venv="" url="ws://127.0.0.1:9011": (install-tools ve ${VENV_PYTHON} ./wstest/testee_server_tx.py --url "{{ url }}" # Run Autobahn|Python WebSocket server on asyncio -wstest-testeeserver-asyncio venv="" url="ws://127.0.0.1:9012": (install-tools venv) (install venv) +wstest-testeeserver-asyncio venv="" url="ws://127.0.0.1:9012": (install-tools venv) (install-dev venv) #!/usr/bin/env bash set -e VENV_NAME="{{ venv }}" From 60e25d39298b041f4d42dae54d831bffd6113e30 Mon Sep 17 00:00:00 2001 From: Tobias Oberstein Date: Sun, 30 Nov 2025 02:49:58 +0100 Subject: [PATCH 11/11] chore: Bump version to 25.12.1 Note: This work was completed with AI assistance (Claude Code). --- pyproject.toml | 2 +- src/autobahn/_version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a36754dff..6268523c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "autobahn" -version = "25.11.1" +version = "25.12.1" description = "WebSocket client & server library, WAMP real-time framework" readme = "README.md" requires-python = ">=3.11" diff --git a/src/autobahn/_version.py b/src/autobahn/_version.py index a7bba3b12..4972d7baa 100644 --- a/src/autobahn/_version.py +++ b/src/autobahn/_version.py @@ -24,6 +24,6 @@ # ############################################################################### -__version__ = "25.11.1" +__version__ = "25.12.1" __build__ = "00000000-0000000"