refix-engine 0.2.1__tar.gz → 0.2.2__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 (55) hide show
  1. {refix_engine-0.2.1 → refix_engine-0.2.2}/Cargo.lock +6 -6
  2. refix_engine-0.2.2/PKG-INFO +45 -0
  3. refix_engine-0.2.2/README.md +26 -0
  4. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/CHANGELOG.md +6 -0
  5. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/Cargo.toml +1 -1
  6. refix_engine-0.2.2/crates/refix-message/README.md +31 -0
  7. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/lib.rs +2 -0
  8. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/CHANGELOG.md +6 -0
  9. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/Cargo.toml +1 -1
  10. refix_engine-0.2.2/python/refix-engine/README.md +26 -0
  11. refix_engine-0.2.1/PKG-INFO +0 -39
  12. refix_engine-0.2.1/README.md +0 -20
  13. refix_engine-0.2.1/crates/refix-message/README.md +0 -58
  14. refix_engine-0.2.1/python/refix-engine/README.md +0 -20
  15. {refix_engine-0.2.1 → refix_engine-0.2.2}/Cargo.toml +0 -0
  16. {refix_engine-0.2.1 → refix_engine-0.2.2}/LICENSE-APACHE +0 -0
  17. {refix_engine-0.2.1 → refix_engine-0.2.2}/LICENSE-MIT +0 -0
  18. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/LICENSE-APACHE +0 -0
  19. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/LICENSE-MIT +0 -0
  20. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/framing.rs +0 -0
  21. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/group/error.rs +0 -0
  22. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/group.rs +0 -0
  23. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/length_tags.rs +0 -0
  24. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/message.rs +0 -0
  25. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/multiple_values.rs +0 -0
  26. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/stream.rs +0 -0
  27. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/tag.rs +0 -0
  28. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/test_utils.rs +0 -0
  29. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/tokenizer.rs +0 -0
  30. {refix_engine-0.2.1 → refix_engine-0.2.2}/crates/refix-message/src/value.rs +0 -0
  31. {refix_engine-0.2.1 → refix_engine-0.2.2}/pyproject.toml +0 -0
  32. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix/__init__.py +0 -0
  33. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix/_core.pyi +0 -0
  34. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix/enums.py +0 -0
  35. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix/errors.py +0 -0
  36. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix/log.py +0 -0
  37. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix/py.typed +0 -0
  38. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/.python-version +0 -0
  39. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/LICENSE-APACHE +0 -0
  40. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/LICENSE-MIT +0 -0
  41. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/src/group.rs +0 -0
  42. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/src/lib.rs +0 -0
  43. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/src/message.rs +0 -0
  44. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/src/stream.rs +0 -0
  45. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/src/tokenizer.rs +0 -0
  46. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_benchmarks.py +0 -0
  47. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_enums.py +0 -0
  48. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_groups.py +0 -0
  49. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_log.py +0 -0
  50. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_raw_message.py +0 -0
  51. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_stream.py +0 -0
  52. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_tokenizer.py +0 -0
  53. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/test_toy_generated.py +0 -0
  54. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/tests/toy_generated.py +0 -0
  55. {refix_engine-0.2.1 → refix_engine-0.2.2}/python/refix-engine/uv.lock +0 -0
@@ -223,14 +223,14 @@ dependencies = [
223
223
 
224
224
  [[package]]
225
225
  name = "refix"
226
- version = "0.1.1"
226
+ version = "0.1.2"
227
227
  dependencies = [
228
228
  "refix-message",
229
229
  ]
230
230
 
231
231
  [[package]]
232
232
  name = "refix-cli"
233
- version = "0.1.0"
233
+ version = "0.1.1"
234
234
  dependencies = [
235
235
  "clap",
236
236
  "refix-codegen",
@@ -239,7 +239,7 @@ dependencies = [
239
239
 
240
240
  [[package]]
241
241
  name = "refix-codegen"
242
- version = "0.1.0"
242
+ version = "0.1.1"
243
243
  dependencies = [
244
244
  "bytes",
245
245
  "refix-dictionary",
@@ -248,7 +248,7 @@ dependencies = [
248
248
 
249
249
  [[package]]
250
250
  name = "refix-dictionary"
251
- version = "0.1.0"
251
+ version = "0.1.1"
252
252
  dependencies = [
253
253
  "refix-message",
254
254
  "roxmltree",
@@ -256,7 +256,7 @@ dependencies = [
256
256
 
257
257
  [[package]]
258
258
  name = "refix-engine"
259
- version = "0.2.1"
259
+ version = "0.2.2"
260
260
  dependencies = [
261
261
  "bytes",
262
262
  "pyo3",
@@ -273,7 +273,7 @@ dependencies = [
273
273
 
274
274
  [[package]]
275
275
  name = "refix-message"
276
- version = "0.3.1"
276
+ version = "0.3.2"
277
277
  dependencies = [
278
278
  "bytes",
279
279
  ]
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.4
2
+ Name: refix-engine
3
+ Version: 0.2.2
4
+ Classifier: Development Status :: 2 - Pre-Alpha
5
+ Classifier: Intended Audience :: Financial and Insurance Industry
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Programming Language :: Rust
8
+ Classifier: Topic :: Office/Business :: Financial
9
+ Classifier: Typing :: Typed
10
+ License-File: LICENSE-MIT
11
+ License-File: LICENSE-APACHE
12
+ Summary: FIX message processing for Python, powered by Rust
13
+ Author-email: David Steiner <david@davidsteiner.dev>
14
+ License-Expression: MIT OR Apache-2.0
15
+ Requires-Python: >=3.12
16
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
+ Project-URL: Repository, https://github.com/refixhq/refix
18
+
19
+ # refix-engine
20
+
21
+ FIX message processing for Python, powered by Rust. These are the Python bindings
22
+ of [ReFIX](https://github.com/refixhq/refix). The import name is `refix`. Requires Python 3.12 or later.
23
+
24
+ > ReFIX is in early development. It reads FIX messages and types them through
25
+ > generated code. Building messages and the session layer are not implemented
26
+ > yet, and APIs change between 0.x releases.
27
+
28
+ ```python
29
+ import refix
30
+
31
+ for message in refix.read_log("fix.log"):
32
+ if isinstance(message, refix.RawMessage):
33
+ print(message.get(35), message.get(49))
34
+ ```
35
+
36
+ Anything between frames that isn't FIX comes back as `refix.Garble`.
37
+ `refix.Tokenizer` reads a single frame, and `refix.MessageStream` reads frames as bytes arrive.
38
+
39
+ Typed messages come from generated code: `refix-fix44` for FIX 4.4, or
40
+ `refix-cli` for your own dictionary.
41
+
42
+ ## License
43
+
44
+ Licensed under either of Apache License, Version 2.0 or MIT license at your option.
45
+
@@ -0,0 +1,26 @@
1
+ # refix-engine
2
+
3
+ FIX message processing for Python, powered by Rust. These are the Python bindings
4
+ of [ReFIX](https://github.com/refixhq/refix). The import name is `refix`. Requires Python 3.12 or later.
5
+
6
+ > ReFIX is in early development. It reads FIX messages and types them through
7
+ > generated code. Building messages and the session layer are not implemented
8
+ > yet, and APIs change between 0.x releases.
9
+
10
+ ```python
11
+ import refix
12
+
13
+ for message in refix.read_log("fix.log"):
14
+ if isinstance(message, refix.RawMessage):
15
+ print(message.get(35), message.get(49))
16
+ ```
17
+
18
+ Anything between frames that isn't FIX comes back as `refix.Garble`.
19
+ `refix.Tokenizer` reads a single frame, and `refix.MessageStream` reads frames as bytes arrive.
20
+
21
+ Typed messages come from generated code: `refix-fix44` for FIX 4.4, or
22
+ `refix-cli` for your own dictionary.
23
+
24
+ ## License
25
+
26
+ Licensed under either of Apache License, Version 2.0 or MIT license at your option.
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.2](https://github.com/refixhq/refix/compare/refix-message-v0.3.1...refix-message-v0.3.2) - 2026-10-10
11
+
12
+ ### Other
13
+
14
+ - give each package its own README ([#87](https://github.com/refixhq/refix/pull/87))
15
+
10
16
  ## [0.3.1](https://github.com/refixhq/refix/compare/refix-message-v0.3.0...refix-message-v0.3.1) - 2026-10-10
11
17
 
12
18
  ### Fixed
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "refix-message"
3
3
  description = "Framing, tokenisation and raw message representation for the ReFIX engine"
4
- version = "0.3.1"
4
+ version = "0.3.2"
5
5
  authors.workspace = true
6
6
  edition.workspace = true
7
7
  license.workspace = true
@@ -0,0 +1,31 @@
1
+ # refix-message
2
+
3
+ Framing, tokenising and raw FIX messages for [ReFIX](https://github.com/refixhq/refix). A `RawMessage` indexes a frame's
4
+ fields and reads them on demand, without copying.
5
+
6
+ > ReFIX is in early development, and APIs change between 0.x releases.
7
+
8
+ ```rust
9
+ use refix_message::stream::Outcome;
10
+ use refix_message::{MessageStream, Tag, Tokenizer};
11
+
12
+ fn main() {
13
+ let log = b"2026-10-10 09:30:00 IN 8=FIX.4.4\x019=5\x0135=0\x0110=163\x01\n";
14
+ let mut stream = MessageStream::new(Tokenizer::default());
15
+ stream.feed(log);
16
+ loop {
17
+ match stream.next_message() {
18
+ Outcome::Message(message) => println!("{:?}", message.get_str(Tag(35))),
19
+ Outcome::Garbled { bytes, .. } => println!("skipped {} bytes", bytes.len()),
20
+ Outcome::Incomplete => break,
21
+ }
22
+ }
23
+ }
24
+ ```
25
+
26
+ `Tokenizer::tokenize` reads a single frame. Typed messages are generated on top of it: `refix-fix44` for FIX 4.4, or
27
+ `refix-cli` for your own dictionary.
28
+
29
+ ## License
30
+
31
+ Licensed under either of Apache License, Version 2.0 or MIT license at your option.
@@ -1,3 +1,5 @@
1
+ #![doc = include_str!("../README.md")]
2
+
1
3
  pub mod framing;
2
4
  pub mod group;
3
5
  mod length_tags;
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.2](https://github.com/refixhq/refix/compare/python-v0.2.1...python-v0.2.2) - 2026-10-10
11
+
12
+ ### Other
13
+
14
+ - give each package its own README ([#87](https://github.com/refixhq/refix/pull/87))
15
+
10
16
  ## [0.2.1](https://github.com/refixhq/refix/compare/python-v0.2.0...python-v0.2.1) - 2026-10-10
11
17
 
12
18
  ### Other
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "refix-engine"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  publish = false
5
5
  authors.workspace = true
6
6
  edition.workspace = true
@@ -0,0 +1,26 @@
1
+ # refix-engine
2
+
3
+ FIX message processing for Python, powered by Rust. These are the Python bindings
4
+ of [ReFIX](https://github.com/refixhq/refix). The import name is `refix`. Requires Python 3.12 or later.
5
+
6
+ > ReFIX is in early development. It reads FIX messages and types them through
7
+ > generated code. Building messages and the session layer are not implemented
8
+ > yet, and APIs change between 0.x releases.
9
+
10
+ ```python
11
+ import refix
12
+
13
+ for message in refix.read_log("fix.log"):
14
+ if isinstance(message, refix.RawMessage):
15
+ print(message.get(35), message.get(49))
16
+ ```
17
+
18
+ Anything between frames that isn't FIX comes back as `refix.Garble`.
19
+ `refix.Tokenizer` reads a single frame, and `refix.MessageStream` reads frames as bytes arrive.
20
+
21
+ Typed messages come from generated code: `refix-fix44` for FIX 4.4, or
22
+ `refix-cli` for your own dictionary.
23
+
24
+ ## License
25
+
26
+ Licensed under either of Apache License, Version 2.0 or MIT license at your option.
@@ -1,39 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: refix-engine
3
- Version: 0.2.1
4
- Classifier: Development Status :: 2 - Pre-Alpha
5
- Classifier: Intended Audience :: Financial and Insurance Industry
6
- Classifier: Programming Language :: Python :: 3
7
- Classifier: Programming Language :: Rust
8
- Classifier: Topic :: Office/Business :: Financial
9
- Classifier: Typing :: Typed
10
- License-File: LICENSE-MIT
11
- License-File: LICENSE-APACHE
12
- Summary: FIX message processing for Python, powered by Rust
13
- Author-email: David Steiner <david@davidsteiner.dev>
14
- License-Expression: MIT OR Apache-2.0
15
- Requires-Python: >=3.12
16
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
- Project-URL: Repository, https://github.com/refixhq/refix
18
-
19
- # refix-engine
20
-
21
- FIX message processing for Python, powered by Rust.
22
-
23
- This package provides the Python bindings for
24
- [ReFIX](https://github.com/refixhq/refix), a FIX engine written in pure Rust
25
- with first-party Python support. The import name is `refix`:
26
-
27
- ```python
28
- import refix
29
-
30
- message = refix.Tokenizer().tokenize(frame)
31
- print(message.get(35))
32
- ```
33
-
34
- > Development on ReFIX has just started. In its current state, the project
35
- > isn't useful, but make sure to check back later to monitor progress.
36
-
37
- See the [project repository](https://github.com/refixhq/refix) for
38
- documentation, roadmap and licensing (MIT OR Apache-2.0).
39
-
@@ -1,20 +0,0 @@
1
- # refix-engine
2
-
3
- FIX message processing for Python, powered by Rust.
4
-
5
- This package provides the Python bindings for
6
- [ReFIX](https://github.com/refixhq/refix), a FIX engine written in pure Rust
7
- with first-party Python support. The import name is `refix`:
8
-
9
- ```python
10
- import refix
11
-
12
- message = refix.Tokenizer().tokenize(frame)
13
- print(message.get(35))
14
- ```
15
-
16
- > Development on ReFIX has just started. In its current state, the project
17
- > isn't useful, but make sure to check back later to monitor progress.
18
-
19
- See the [project repository](https://github.com/refixhq/refix) for
20
- documentation, roadmap and licensing (MIT OR Apache-2.0).
@@ -1,58 +0,0 @@
1
- <div align="center">
2
-
3
- # ReFIX
4
-
5
- [![crates-badge]](https://crates.io/crates/refix)
6
- [![docs-badge]](https://docs.rs/refix)
7
- [![codecov](https://codecov.io/gh/refixhq/refix/graph/badge.svg?token=S738KU2U1K)](https://codecov.io/gh/refixhq/refix)
8
- [![CI](https://github.com/refixhq/refix/actions/workflows/ci.yml/badge.svg)](https://github.com/refixhq/refix/actions/workflows/ci.yml)
9
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE-MIT)
10
- [![License: Apache 2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE-APACHE)
11
-
12
- **ReFIX is a FIX engine written in pure Rust with first-party bindings for Python.**
13
-
14
- </div>
15
-
16
- > [!WARNING]
17
- > Development on ReFIX has just started. In its current state, the project
18
- > isn't useful, but make sure to check back later to monitor progress.
19
-
20
- ## Why ReFIX?
21
-
22
- I previously built [HotFIX](https://github.com/Validus-Risk-Management/hotfix)
23
- (also in pure Rust) with a very specific objective:
24
- a robust FIX engine for buy-side use cases supporting FIX 4.4. HotFIX is feature complete, and if you need an engine
25
- now, I recommend you check it out to see if it fits your use case.
26
-
27
- ReFIX has different goals - to build high-quality building blocks with first-class support for both Python and Rust. The
28
- aim is still a functional engine working end-to-end, but the design philosophy is different.
29
-
30
- I've written a
31
- [longer blog post](https://davidsteiner.dev/writing/refix-a-new-fix-engine)
32
- on my motivations for ReFIX.
33
-
34
- ## Near-term goals
35
-
36
- The first milestone is a message layer which natively supports Python, with fully typed messages and minimal compromises
37
- on performance in either language.
38
-
39
- ## License
40
-
41
- Licensed under either of
42
-
43
- - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
44
- https://www.apache.org/licenses/LICENSE-2.0)
45
- - MIT license ([LICENSE-MIT](LICENSE-MIT) or
46
- https://opensource.org/licenses/MIT)
47
-
48
- at your option.
49
-
50
- ### Contribution
51
-
52
- Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as
53
- defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
54
-
55
-
56
- [crates-badge]: https://img.shields.io/crates/v/refix.svg
57
-
58
- [docs-badge]: https://docs.rs/refix/badge.svg
@@ -1,20 +0,0 @@
1
- # refix-engine
2
-
3
- FIX message processing for Python, powered by Rust.
4
-
5
- This package provides the Python bindings for
6
- [ReFIX](https://github.com/refixhq/refix), a FIX engine written in pure Rust
7
- with first-party Python support. The import name is `refix`:
8
-
9
- ```python
10
- import refix
11
-
12
- message = refix.Tokenizer().tokenize(frame)
13
- print(message.get(35))
14
- ```
15
-
16
- > Development on ReFIX has just started. In its current state, the project
17
- > isn't useful, but make sure to check back later to monitor progress.
18
-
19
- See the [project repository](https://github.com/refixhq/refix) for
20
- documentation, roadmap and licensing (MIT OR Apache-2.0).
File without changes
File without changes