vyro 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. vyro-0.1.0/.github/CODE_OF_CONDUCT.md +121 -0
  2. vyro-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +60 -0
  3. vyro-0.1.0/.github/ISSUE_TEMPLATE/config.yml +1 -0
  4. vyro-0.1.0/.github/ISSUE_TEMPLATE/documentation.yml +39 -0
  5. vyro-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +46 -0
  6. vyro-0.1.0/.github/ISSUE_TEMPLATE/question.yml +37 -0
  7. vyro-0.1.0/.github/workflows/ci.yml +54 -0
  8. vyro-0.1.0/.github/workflows/release.yml +137 -0
  9. vyro-0.1.0/.gitignore +7 -0
  10. vyro-0.1.0/ARCHITECTURE.md +21 -0
  11. vyro-0.1.0/CHANGELOG.md +13 -0
  12. vyro-0.1.0/CODE_OF_CONDUCT.md +126 -0
  13. vyro-0.1.0/CONTRIBUTING.md +76 -0
  14. vyro-0.1.0/Cargo.lock +1526 -0
  15. vyro-0.1.0/Cargo.toml +60 -0
  16. vyro-0.1.0/LICENSE +164 -0
  17. vyro-0.1.0/PKG-INFO +98 -0
  18. vyro-0.1.0/README.md +77 -0
  19. vyro-0.1.0/SECURITY.md +31 -0
  20. vyro-0.1.0/examples/README.md +15 -0
  21. vyro-0.1.0/examples/hello_world.py +12 -0
  22. vyro-0.1.0/examples/middleware_stub.py +21 -0
  23. vyro-0.1.0/examples/routing_basic.py +17 -0
  24. vyro-0.1.0/examples/tuple_response.py +12 -0
  25. vyro-0.1.0/pyproject.toml +31 -0
  26. vyro-0.1.0/python/README.md +16 -0
  27. vyro-0.1.0/python/vyro/__init__.py +4 -0
  28. vyro-0.1.0/python/vyro/_native.pyi +8 -0
  29. vyro-0.1.0/python/vyro/app.py +38 -0
  30. vyro-0.1.0/python/vyro/errors.py +10 -0
  31. vyro-0.1.0/python/vyro/http/README.md +15 -0
  32. vyro-0.1.0/python/vyro/http/__init__.py +3 -0
  33. vyro-0.1.0/python/vyro/http/context.py +30 -0
  34. vyro-0.1.0/python/vyro/http/headers.py +7 -0
  35. vyro-0.1.0/python/vyro/http/query.py +9 -0
  36. vyro-0.1.0/python/vyro/http/request.py +13 -0
  37. vyro-0.1.0/python/vyro/http/response.py +11 -0
  38. vyro-0.1.0/python/vyro/internal/README.md +14 -0
  39. vyro-0.1.0/python/vyro/internal/__init__.py +2 -0
  40. vyro-0.1.0/python/vyro/internal/bridge_types.py +6 -0
  41. vyro-0.1.0/python/vyro/internal/guards.py +7 -0
  42. vyro-0.1.0/python/vyro/internal/serialization.py +8 -0
  43. vyro-0.1.0/python/vyro/middleware/README.md +15 -0
  44. vyro-0.1.0/python/vyro/middleware/__init__.py +5 -0
  45. vyro-0.1.0/python/vyro/middleware/base.py +11 -0
  46. vyro-0.1.0/python/vyro/middleware/chain.py +20 -0
  47. vyro-0.1.0/python/vyro/middleware/registry.py +14 -0
  48. vyro-0.1.0/python/vyro/routing/README.md +16 -0
  49. vyro-0.1.0/python/vyro/routing/__init__.py +4 -0
  50. vyro-0.1.0/python/vyro/routing/dispatch.py +19 -0
  51. vyro-0.1.0/python/vyro/routing/dsl.py +7 -0
  52. vyro-0.1.0/python/vyro/routing/normalize.py +62 -0
  53. vyro-0.1.0/python/vyro/routing/registry.py +35 -0
  54. vyro-0.1.0/python/vyro/routing/signature.py +40 -0
  55. vyro-0.1.0/python/vyro/routing/validate.py +16 -0
  56. vyro-0.1.0/python/vyro/runtime/README.md +14 -0
  57. vyro-0.1.0/python/vyro/runtime/__init__.py +3 -0
  58. vyro-0.1.0/python/vyro/runtime/bootstrap.py +7 -0
  59. vyro-0.1.0/python/vyro/runtime/server.py +14 -0
  60. vyro-0.1.0/python/vyro/settings.py +3 -0
  61. vyro-0.1.0/python/vyro/typing.py +15 -0
  62. vyro-0.1.0/release_notes.md +9 -0
  63. vyro-0.1.0/rust/README.md +16 -0
  64. vyro-0.1.0/rust/benches/README.md +14 -0
  65. vyro-0.1.0/rust/benches/json_bench.rs +20 -0
  66. vyro-0.1.0/rust/benches/routing_bench.rs +17 -0
  67. vyro-0.1.0/rust/src/bridge/README.md +16 -0
  68. vyro-0.1.0/rust/src/bridge/callback.rs +24 -0
  69. vyro-0.1.0/rust/src/bridge/context_map.rs +18 -0
  70. vyro-0.1.0/rust/src/bridge/mod.rs +5 -0
  71. vyro-0.1.0/rust/src/bridge/py_entry.rs +23 -0
  72. vyro-0.1.0/rust/src/bridge/response_map.rs +93 -0
  73. vyro-0.1.0/rust/src/bridge/route_map.rs +31 -0
  74. vyro-0.1.0/rust/src/errors/README.md +15 -0
  75. vyro-0.1.0/rust/src/errors/core_error.rs +43 -0
  76. vyro-0.1.0/rust/src/errors/mod.rs +2 -0
  77. vyro-0.1.0/rust/src/errors/py_error.rs +8 -0
  78. vyro-0.1.0/rust/src/http/README.md +15 -0
  79. vyro-0.1.0/rust/src/http/headers.rs +13 -0
  80. vyro-0.1.0/rust/src/http/mod.rs +6 -0
  81. vyro-0.1.0/rust/src/http/query.rs +13 -0
  82. vyro-0.1.0/rust/src/http/request.rs +9 -0
  83. vyro-0.1.0/rust/src/http/response.rs +18 -0
  84. vyro-0.1.0/rust/src/http/server.rs +141 -0
  85. vyro-0.1.0/rust/src/http/status.rs +13 -0
  86. vyro-0.1.0/rust/src/lib.rs +17 -0
  87. vyro-0.1.0/rust/src/lifecycle/README.md +14 -0
  88. vyro-0.1.0/rust/src/lifecycle/bootstrap.rs +11 -0
  89. vyro-0.1.0/rust/src/lifecycle/mod.rs +2 -0
  90. vyro-0.1.0/rust/src/lifecycle/runtime.rs +16 -0
  91. vyro-0.1.0/rust/src/middleware/README.md +13 -0
  92. vyro-0.1.0/rust/src/middleware/chain.rs +10 -0
  93. vyro-0.1.0/rust/src/middleware/hooks.rs +9 -0
  94. vyro-0.1.0/rust/src/middleware/mod.rs +2 -0
  95. vyro-0.1.0/rust/src/mod.rs +7 -0
  96. vyro-0.1.0/rust/src/routing/README.md +16 -0
  97. vyro-0.1.0/rust/src/routing/errors.rs +1 -0
  98. vyro-0.1.0/rust/src/routing/method_table.rs +60 -0
  99. vyro-0.1.0/rust/src/routing/mod.rs +4 -0
  100. vyro-0.1.0/rust/src/routing/params.rs +9 -0
  101. vyro-0.1.0/rust/src/routing/radix.rs +14 -0
  102. vyro-0.1.0/rust/src/serialization/README.md +14 -0
  103. vyro-0.1.0/rust/src/serialization/content_type.rs +2 -0
  104. vyro-0.1.0/rust/src/serialization/json.rs +37 -0
  105. vyro-0.1.0/rust/src/serialization/mod.rs +2 -0
  106. vyro-0.1.0/scripts/README.md +14 -0
  107. vyro-0.1.0/scripts/__init__.py +2 -0
  108. vyro-0.1.0/scripts/release/README.md +16 -0
  109. vyro-0.1.0/scripts/release/__init__.py +1 -0
  110. vyro-0.1.0/scripts/release/changelog.py +126 -0
  111. vyro-0.1.0/scripts/release/gitmeta.py +18 -0
  112. vyro-0.1.0/scripts/release/release.py +62 -0
  113. vyro-0.1.0/scripts/release/render.py +13 -0
  114. vyro-0.1.0/scripts/release/versioning.py +48 -0
  115. vyro-0.1.0/tests/README.md +16 -0
  116. vyro-0.1.0/tests/integration/test_404_405.py +6 -0
  117. vyro-0.1.0/tests/integration/test_hello_world.py +11 -0
  118. vyro-0.1.0/tests/integration/test_release_notes_script.py +13 -0
  119. vyro-0.1.0/tests/integration/test_route_params.py +5 -0
  120. vyro-0.1.0/tests/integration/test_wildcard.py +5 -0
  121. vyro-0.1.0/tests/py/test_app_contract.py +14 -0
  122. vyro-0.1.0/tests/py/test_context_contract.py +16 -0
  123. vyro-0.1.0/tests/py/test_middleware_contract.py +14 -0
  124. vyro-0.1.0/tests/py/test_routing_normalize.py +13 -0
  125. vyro-0.1.0/tests/py/test_routing_signature.py +12 -0
  126. vyro-0.1.0/tests/rust/test_response_map.rs +16 -0
  127. vyro-0.1.0/tests/rust/test_router_match.rs +14 -0
  128. vyro-0.1.0/tests/rust/test_runtime_bootstrap.rs +7 -0
  129. vyro-0.1.0/tests/rust/test_status_mapping.rs +5 -0
@@ -0,0 +1,121 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ This file mirrors [`/CODE_OF_CONDUCT.md`](../CODE_OF_CONDUCT.md).
4
+
5
+ ## Our Pledge
6
+
7
+ We as members, contributors, and leaders pledge to make participation in our
8
+ community a harassment-free experience for everyone, regardless of age, body
9
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
10
+ identity and expression, level of experience, education, socio-economic status,
11
+ nationality, personal appearance, race, religion, or sexual identity and
12
+ orientation.
13
+
14
+ We pledge to act and interact in ways that contribute to an open, welcoming,
15
+ diverse, inclusive, and healthy community.
16
+
17
+ ## Our Standards
18
+
19
+ Examples of behavior that contributes to a positive environment for our
20
+ community include:
21
+
22
+ - Demonstrating empathy and kindness toward other people
23
+ - Being respectful of differing opinions, viewpoints, and experiences
24
+ - Giving and gracefully accepting constructive feedback
25
+ - Accepting responsibility and apologizing to those affected by our mistakes
26
+ - Focusing on what is best not just for us as individuals, but for the
27
+ overall community
28
+
29
+ Examples of unacceptable behavior include:
30
+
31
+ - The use of sexualized language or imagery, and sexual attention or
32
+ advances of any kind
33
+ - Trolling, insulting or derogatory comments, and personal or political attacks
34
+ - Public or private harassment
35
+ - Publishing others' private information, such as a physical or email
36
+ address, without their explicit permission
37
+ - Other conduct which could reasonably be considered inappropriate in a
38
+ professional setting
39
+
40
+ ## Enforcement Responsibilities
41
+
42
+ Community leaders are responsible for clarifying and enforcing our standards of
43
+ acceptable behavior and will take appropriate and fair corrective action in
44
+ response to any behavior that they deem inappropriate, threatening, offensive,
45
+ or harmful.
46
+
47
+ Community leaders have the right and responsibility to remove, edit, or reject
48
+ comments, commits, code, wiki edits, issues, and other contributions that are
49
+ not aligned to this Code of Conduct, and will communicate reasons for
50
+ moderation decisions when appropriate.
51
+
52
+ ## Scope
53
+
54
+ This Code of Conduct applies within all community spaces, and also applies when
55
+ an individual is officially representing the community in public spaces.
56
+ Examples of representing our community include using an official email address,
57
+ posting via an official social media account, or acting as an appointed
58
+ representative at an online or offline event.
59
+
60
+ ## Enforcement
61
+
62
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
63
+ reported to the community leaders by opening a private report to repository
64
+ maintainers in GitHub or by contacting maintainers in the Vietrix organization.
65
+ All complaints will be reviewed and investigated promptly and fairly.
66
+
67
+ All community leaders are obligated to respect the privacy and security of the
68
+ reporter of any incident.
69
+
70
+ ## Enforcement Guidelines
71
+
72
+ Community leaders will follow these Community Impact Guidelines in determining
73
+ the consequences for any action they deem in violation of this Code of Conduct:
74
+
75
+ ### 1. Correction
76
+
77
+ **Community Impact**: Use of inappropriate language or other behavior deemed
78
+ unprofessional or unwelcome in the community.
79
+
80
+ **Consequence**: A private, written warning from community leaders, providing
81
+ clarity around the nature of the violation and an explanation of why the
82
+ behavior was inappropriate. A public apology may be requested.
83
+
84
+ ### 2. Warning
85
+
86
+ **Community Impact**: A violation through a single incident or series of
87
+ actions.
88
+
89
+ **Consequence**: A warning with consequences for continued behavior. No
90
+ interaction with the people involved, including unsolicited interaction with
91
+ those enforcing the Code of Conduct, for a specified period. This includes
92
+ avoiding interactions in community spaces as well as external channels like
93
+ social media. Violating these terms may lead to a temporary or permanent ban.
94
+
95
+ ### 3. Temporary Ban
96
+
97
+ **Community Impact**: A serious violation of community standards, including
98
+ sustained inappropriate behavior.
99
+
100
+ **Consequence**: A temporary ban from any sort of interaction or public
101
+ communication with the community for a specified period. No public or private
102
+ interaction with the people involved, including unsolicited interaction with
103
+ those enforcing the Code of Conduct, is allowed during this period. Violating
104
+ these terms may lead to a permanent ban.
105
+
106
+ ### 4. Permanent Ban
107
+
108
+ **Community Impact**: Demonstrating a pattern of violation of community
109
+ standards, including sustained inappropriate behavior, harassment of an
110
+ individual, or aggression toward or disparagement of classes of individuals.
111
+
112
+ **Consequence**: A permanent ban from any sort of public interaction within
113
+ the community.
114
+
115
+ ## Attribution
116
+
117
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118
+ version 2.1, available at
119
+ https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
120
+
121
+ [homepage]: https://www.contributor-covenant.org
@@ -0,0 +1,60 @@
1
+ name: "Bug report"
2
+ description: "Report incorrect behavior or runtime errors"
3
+ title: "[Bug] "
4
+ labels: ["bug", "needs-triage"]
5
+ body:
6
+ - type: checkboxes
7
+ id: existing
8
+ attributes:
9
+ label: Existing issue check
10
+ description: Please verify this was not reported already.
11
+ options:
12
+ - label: I searched existing issues and did not find a duplicate.
13
+ required: true
14
+ - type: textarea
15
+ id: current_behavior
16
+ attributes:
17
+ label: Current behavior
18
+ description: What is currently happening?
19
+ placeholder: Describe the observed behavior.
20
+ validations:
21
+ required: true
22
+ - type: textarea
23
+ id: expected_behavior
24
+ attributes:
25
+ label: Expected behavior
26
+ description: What should happen instead?
27
+ placeholder: Describe the expected behavior.
28
+ validations:
29
+ required: true
30
+ - type: textarea
31
+ id: steps
32
+ attributes:
33
+ label: Steps to reproduce
34
+ description: Provide minimal, reproducible steps.
35
+ placeholder: |
36
+ 1. Install...
37
+ 2. Run...
38
+ 3. Observe...
39
+ validations:
40
+ required: true
41
+ - type: textarea
42
+ id: environment
43
+ attributes:
44
+ label: Environment
45
+ description: Include runtime and platform details.
46
+ value: |
47
+ - OS:
48
+ - Python:
49
+ - vyro version:
50
+ - Rust toolchain (if building from source):
51
+ validations:
52
+ required: true
53
+ - type: textarea
54
+ id: logs
55
+ attributes:
56
+ label: Logs and traceback
57
+ description: Paste relevant logs, stack traces, or command output.
58
+ render: shell
59
+ validations:
60
+ required: false
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,39 @@
1
+ name: "Documentation"
2
+ description: "Report docs gaps or propose documentation improvements"
3
+ title: "[Docs] "
4
+ labels: ["documentation", "needs-triage"]
5
+ body:
6
+ - type: input
7
+ id: location
8
+ attributes:
9
+ label: Documentation location
10
+ description: File path or URL that needs changes.
11
+ placeholder: README.md, docs/..., wiki page URL...
12
+ validations:
13
+ required: true
14
+ - type: textarea
15
+ id: current_gap
16
+ attributes:
17
+ label: Current gap
18
+ description: What is missing, inaccurate, or unclear?
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: proposed_text
23
+ attributes:
24
+ label: Proposed update
25
+ description: Suggest wording or structure.
26
+ validations:
27
+ required: false
28
+ - type: dropdown
29
+ id: audience
30
+ attributes:
31
+ label: Target audience
32
+ options:
33
+ - New users
34
+ - Contributors
35
+ - Maintainers
36
+ - All of the above
37
+ default: 0
38
+ validations:
39
+ required: true
@@ -0,0 +1,46 @@
1
+ name: "Feature request"
2
+ description: "Propose an enhancement for Vyro"
3
+ title: "[Feature] "
4
+ labels: ["enhancement", "needs-triage"]
5
+ body:
6
+ - type: textarea
7
+ id: problem
8
+ attributes:
9
+ label: Problem statement
10
+ description: What problem are you trying to solve?
11
+ placeholder: Describe the limitation or pain point.
12
+ validations:
13
+ required: true
14
+ - type: textarea
15
+ id: proposal
16
+ attributes:
17
+ label: Proposed solution
18
+ description: Describe your preferred solution.
19
+ placeholder: Explain the API/behavior you want.
20
+ validations:
21
+ required: true
22
+ - type: textarea
23
+ id: alternatives
24
+ attributes:
25
+ label: Alternatives considered
26
+ description: What alternatives did you evaluate?
27
+ validations:
28
+ required: false
29
+ - type: textarea
30
+ id: use_case
31
+ attributes:
32
+ label: Use case and impact
33
+ description: Who benefits and how?
34
+ validations:
35
+ required: true
36
+ - type: dropdown
37
+ id: breaking_change
38
+ attributes:
39
+ label: Potential breaking change?
40
+ options:
41
+ - "No"
42
+ - "Yes"
43
+ - "Not sure"
44
+ default: 0
45
+ validations:
46
+ required: true
@@ -0,0 +1,37 @@
1
+ name: "Question"
2
+ description: "Ask usage or implementation questions (Issues-only support mode)"
3
+ title: "[Question] "
4
+ labels: ["question", "needs-triage"]
5
+ body:
6
+ - type: textarea
7
+ id: goal
8
+ attributes:
9
+ label: What are you trying to achieve?
10
+ description: Describe the final outcome you want.
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: attempted
15
+ attributes:
16
+ label: What have you tried so far?
17
+ description: Share attempts and observed results.
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: snippet
22
+ attributes:
23
+ label: Relevant code or configuration
24
+ description: Paste the smallest useful snippet.
25
+ render: python
26
+ validations:
27
+ required: false
28
+ - type: textarea
29
+ id: environment
30
+ attributes:
31
+ label: Environment
32
+ value: |
33
+ - OS:
34
+ - Python:
35
+ - vyro version:
36
+ validations:
37
+ required: true
@@ -0,0 +1,54 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ lint-rust:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: dtolnay/rust-toolchain@stable
13
+ - name: Rust fmt check
14
+ run: cargo fmt --all -- --check
15
+ - name: Rust clippy
16
+ run: cargo clippy --all-targets -- -D warnings
17
+
18
+ test-rust:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: dtolnay/rust-toolchain@stable
23
+ - name: Rust tests
24
+ run: cargo test
25
+
26
+ test-python:
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ matrix:
30
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
31
+ steps:
32
+ - uses: actions/checkout@v4
33
+ - uses: actions/setup-python@v5
34
+ with:
35
+ python-version: ${{ matrix.python-version }}
36
+ - name: Install tooling
37
+ run: |
38
+ python -m pip install --upgrade pip
39
+ pip install maturin pytest
40
+ - name: Build wheel
41
+ run: maturin build --release
42
+ - name: Install wheel
43
+ run: pip install --force-reinstall target/wheels/*.whl
44
+ - name: Python tests
45
+ run: pytest tests/py tests/integration -q
46
+
47
+ build-wheel:
48
+ runs-on: ubuntu-latest
49
+ steps:
50
+ - uses: actions/checkout@v4
51
+ - uses: PyO3/maturin-action@v1
52
+ with:
53
+ command: build
54
+ manylinux: auto
@@ -0,0 +1,137 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*.*.*"
7
+ - "v*.*.*-rc.*"
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ quality-gate:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+
20
+ - uses: dtolnay/rust-toolchain@stable
21
+
22
+ - uses: actions/setup-python@v5
23
+ with:
24
+ python-version: "3.12"
25
+
26
+ - name: Install tooling
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install maturin pytest
30
+
31
+ - name: Rust fmt check
32
+ run: cargo fmt --all -- --check
33
+
34
+ - name: Rust clippy
35
+ run: cargo clippy --all-targets -- -D warnings
36
+
37
+ - name: Rust tests
38
+ run: cargo test
39
+
40
+ - name: Build wheel for test
41
+ run: maturin build --release
42
+
43
+ - name: Install built package
44
+ run: pip install --force-reinstall target/wheels/*.whl
45
+
46
+ - name: Python tests
47
+ run: pytest tests/py tests/integration -q
48
+
49
+ prepare-release:
50
+ runs-on: ubuntu-latest
51
+ needs: quality-gate
52
+ steps:
53
+ - uses: actions/checkout@v4
54
+ with:
55
+ fetch-depth: 0
56
+
57
+ - uses: dtolnay/rust-toolchain@stable
58
+
59
+ - uses: actions/setup-python@v5
60
+ with:
61
+ python-version: "3.12"
62
+
63
+ - name: Install tooling
64
+ run: |
65
+ python -m pip install --upgrade pip
66
+ pip install maturin
67
+
68
+ - name: Generate release notes and changelog block
69
+ run: |
70
+ python -m scripts.release.release notes \
71
+ --tag "${GITHUB_REF_NAME}" \
72
+ --out release_notes.md \
73
+ --update-changelog CHANGELOG.md
74
+
75
+ - name: Build artifacts
76
+ run: maturin build --release --sdist
77
+
78
+ - name: Upload dist artifacts
79
+ uses: actions/upload-artifact@v4
80
+ with:
81
+ name: dist
82
+ path: target/wheels/*
83
+
84
+ - name: Upload release notes
85
+ uses: actions/upload-artifact@v4
86
+ with:
87
+ name: release-notes
88
+ path: |
89
+ release_notes.md
90
+ CHANGELOG.md
91
+
92
+ publish-pypi:
93
+ runs-on: ubuntu-latest
94
+ needs: prepare-release
95
+ permissions:
96
+ id-token: write
97
+ steps:
98
+ - name: Download dist artifacts
99
+ uses: actions/download-artifact@v4
100
+ with:
101
+ name: dist
102
+ path: dist
103
+
104
+ - name: Publish to PyPI
105
+ uses: pypa/gh-action-pypi-publish@release/v1
106
+ with:
107
+ packages-dir: dist
108
+
109
+ github-release:
110
+ runs-on: ubuntu-latest
111
+ needs: [quality-gate, prepare-release, publish-pypi]
112
+ permissions:
113
+ contents: write
114
+ steps:
115
+ - name: Download dist artifacts
116
+ uses: actions/download-artifact@v4
117
+ with:
118
+ name: dist
119
+ path: dist
120
+
121
+ - name: Download release notes
122
+ uses: actions/download-artifact@v4
123
+ with:
124
+ name: release-notes
125
+ path: release-notes
126
+
127
+ - name: Create GitHub release
128
+ uses: softprops/action-gh-release@v2
129
+ with:
130
+ tag_name: ${{ github.ref_name }}
131
+ prerelease: ${{ contains(github.ref_name, '-rc.') }}
132
+ body_path: release-notes/release_notes.md
133
+ files: |
134
+ dist/*
135
+ release-notes/release_notes.md
136
+ release-notes/CHANGELOG.md
137
+ generate_release_notes: true
vyro-0.1.0/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .pytest_cache/
4
+ target/
5
+ dist/
6
+ build/
7
+ *.egg-info/
@@ -0,0 +1,21 @@
1
+ # vyro Architecture
2
+
3
+ ## Purpose
4
+ vyro separates developer-facing Python APIs from the Rust execution engine.
5
+
6
+ ## Layers
7
+ - Python API: route declarations, context wrappers, middleware contracts.
8
+ - Rust Engine: runtime, HTTP serving, route matching, callback bridging.
9
+ - Release Automation: Python scripts for changelog and release notes.
10
+
11
+ ## Request Flow
12
+ 1. User registers routes with `App`.
13
+ 2. `App.run()` exports route table to Rust.
14
+ 3. Rust server matches request with `matchit`.
15
+ 4. Rust calls Python async handler.
16
+ 5. Rust maps handler output back to HTTP response.
17
+
18
+ ## Folder Rules
19
+ - Feature folders own one concern only.
20
+ - Every feature folder includes a short `README.md`.
21
+ - Public Python API stays under `python/vyro`.
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ ## v0.1.0 - 2026-02-09
4
+
5
+ ### Chores
6
+ - No user-facing changes.
7
+
8
+ ---
9
+
10
+ ### Auto Generated Notes
11
+ The GitHub workflow appends generated release notes to this release.
12
+
13
+ # Changelog
@@ -0,0 +1,126 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ - Demonstrating empathy and kindness toward other people
21
+ - Being respectful of differing opinions, viewpoints, and experiences
22
+ - Giving and gracefully accepting constructive feedback
23
+ - Accepting responsibility and apologizing to those affected by our mistakes
24
+ - Focusing on what is best not just for us as individuals, but for the
25
+ overall community
26
+
27
+ Examples of unacceptable behavior include:
28
+
29
+ - The use of sexualized language or imagery, and sexual attention or
30
+ advances of any kind
31
+ - Trolling, insulting or derogatory comments, and personal or political attacks
32
+ - Public or private harassment
33
+ - Publishing others' private information, such as a physical or email
34
+ address, without their explicit permission
35
+ - Other conduct which could reasonably be considered inappropriate in a
36
+ professional setting
37
+
38
+ ## Enforcement Responsibilities
39
+
40
+ Community leaders are responsible for clarifying and enforcing our standards of
41
+ acceptable behavior and will take appropriate and fair corrective action in
42
+ response to any behavior that they deem inappropriate, threatening, offensive,
43
+ or harmful.
44
+
45
+ Community leaders have the right and responsibility to remove, edit, or reject
46
+ comments, commits, code, wiki edits, issues, and other contributions that are
47
+ not aligned to this Code of Conduct, and will communicate reasons for
48
+ moderation decisions when appropriate.
49
+
50
+ ## Scope
51
+
52
+ This Code of Conduct applies within all community spaces, and also applies when
53
+ an individual is officially representing the community in public spaces.
54
+ Examples of representing our community include using an official email address,
55
+ posting via an official social media account, or acting as an appointed
56
+ representative at an online or offline event.
57
+
58
+ ## Enforcement
59
+
60
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
61
+ reported to the community leaders by opening a private report to repository
62
+ maintainers in GitHub or by contacting maintainers in the Vietrix organization.
63
+ All complaints will be reviewed and investigated promptly and fairly.
64
+
65
+ All community leaders are obligated to respect the privacy and security of the
66
+ reporter of any incident.
67
+
68
+ ## Enforcement Guidelines
69
+
70
+ Community leaders will follow these Community Impact Guidelines in determining
71
+ the consequences for any action they deem in violation of this Code of Conduct:
72
+
73
+ ### 1. Correction
74
+
75
+ **Community Impact**: Use of inappropriate language or other behavior deemed
76
+ unprofessional or unwelcome in the community.
77
+
78
+ **Consequence**: A private, written warning from community leaders, providing
79
+ clarity around the nature of the violation and an explanation of why the
80
+ behavior was inappropriate. A public apology may be requested.
81
+
82
+ ### 2. Warning
83
+
84
+ **Community Impact**: A violation through a single incident or series of
85
+ actions.
86
+
87
+ **Consequence**: A warning with consequences for continued behavior. No
88
+ interaction with the people involved, including unsolicited interaction with
89
+ those enforcing the Code of Conduct, for a specified period. This includes
90
+ avoiding interactions in community spaces as well as external channels like
91
+ social media. Violating these terms may lead to a temporary or permanent ban.
92
+
93
+ ### 3. Temporary Ban
94
+
95
+ **Community Impact**: A serious violation of community standards, including
96
+ sustained inappropriate behavior.
97
+
98
+ **Consequence**: A temporary ban from any sort of interaction or public
99
+ communication with the community for a specified period. No public or private
100
+ interaction with the people involved, including unsolicited interaction with
101
+ those enforcing the Code of Conduct, is allowed during this period. Violating
102
+ these terms may lead to a permanent ban.
103
+
104
+ ### 4. Permanent Ban
105
+
106
+ **Community Impact**: Demonstrating a pattern of violation of community
107
+ standards, including sustained inappropriate behavior, harassment of an
108
+ individual, or aggression toward or disparagement of classes of individuals.
109
+
110
+ **Consequence**: A permanent ban from any sort of public interaction within
111
+ the community.
112
+
113
+ ## Attribution
114
+
115
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
116
+ version 2.1, available at
117
+ https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
118
+
119
+ Community Impact Guidelines were inspired by Mozilla's code of conduct
120
+ enforcement ladder.
121
+
122
+ For answers to common questions about this code of conduct, see the FAQ at
123
+ https://www.contributor-covenant.org/faq. Translations are available at
124
+ https://www.contributor-covenant.org/translations.
125
+
126
+ [homepage]: https://www.contributor-covenant.org