Skip to main content

rupy

Random Useful Python stuff

What's inside?

A collection of utilities I find useful.

buf

A bytearray-derived class with many useful methods, supporting bitwise operations and much more.

>>> buf(10)
buf(hex='00000000000000000000')

>>> str(buf(b'hello'))  # utf-8 decode
'hello'

>>> buf([1,2,3,4])
buf(hex='01020304')

>>> buf(hex="deadbeef")
buf(hex='deadbeef')

>>> print(buf.random(100).hexdump())
#000000| 6568 15de cf7a ce7e  fb66 d9f3 cad4 d144 |eh...z.~.f.....D|
#000010| bc0b c4fd 05c0 5fb5  eca1 870c 94e6 5b73 |......_.......[s|
#000020| 3a86 322c 0ede de2e  dd4b d1a6 331d 3c1b |:.2,.....K..3.<.|
#000030| 6eb2 27c4 3246 1526  56a8 85a6 8c06 2d91 |n.'.2F.&V.....-.|
#000040| a8fc 821d f806 a442  93ff 3503 27fe b3dd |.......B..5.'...|
#000050| 1a8e 0aef da63 8eba  8d4f 6da5 fd44 8634 |.....c...Om..D.4|
#000060| 3a6e 2395                                |:n#.            |

>>> b = buf(b"hello")
>>> s = b.to_stream()
>>> s.seek(0, 2)
>>> s.write(b" world")
>>> print(b)
hello world

Also available: hexdump, which produces nice hexdumps.

bitview

Allows for bit addressing and manipulation in-memory.

>>> b = buf(hex='aa55')
>>> print(b.bits)
1010101001010101

>>> print(b.bits[4:-4])  # bit views support slicing
10100101

>>> b.bits.invert()
>>> b
buf(hex='55aa')

>>> b.bits[:8].set()  # set bits to 1
>>> b
buf(hex='ffaa')

fields

A small binary structure manipulation library, integrated nicely with the buf structure, allowing for stuff like:

>>> from rupy import buf
>>> b=buf(hex='12345678aabbccdd')
>>> b.fields('i32 u8[4]')
<2 fields:
   [0]: 2018915346
   [1]: (170, 187, 204, 221)
>

>>> b.fields('foo: i32 bar: u8[4]')  # named fields
Out[4]:
<2 fields:
   foo = 2018915346
   bar = (170, 187, 204, 221)
>

>>> b.fields('foo: i32 bar: u8[4]').foo = 5  # in-memory change
>>> b
buf(hex='05000000aabbccdd')

>>> b.fields('foo: i32b bar: u8[4]').foo = 5  # big endian
>>> b
buf(hex='00000005aabbccdd')

>>> b.fields('foo: i32b bar: {a: u16 b: u16}')  # nested structs
<2 fields:
   foo = 5
   bar = <2 fields:
      a = 48042
      b = 56780
   >
>

Seq

Integer sequences. a class that behaves like a normal range() but also enables slicing, infinite ranges, intuitive notation (e.g: Seq[1, 2, ..., 100] is like Seq(1, 101)) and more.

Seq is similar to builtin range() functions, except it also supports: * Sub-slicing * Unbounded ranges * Series notation using ellipsis * Arithmetic operations on ranges * And much more!

Usage examples:

>>> print(Seq(10))  # like range()
Seq[0, 1, ..., 9]

>>> print(Seq(None))  # no upper bound, infinite range
Seq[0, 1, 2, ...]

>>> print(Seq(step=-1))
Seq[0, -1, -2, ...]

>>> for i in Seq[1, 2, ..., 10]:  # sequence notation
...    print(i)
1
2
3
4
5
6
7
8
9
10

>>> 1024 in Seq[2:32768:2]  # fast containment check
True

>>> for i in Seq[1, 2, ...]:
...    if i == 2**16:
...        print("No more!")
...        break
No more!

>>> print(Seq[0, ...][2:12:2])  # Seqs support slicing
Seq[2, 4, ..., 10]

Stream

A stream wrapper that allows blockwise iteration as well as slicing and single-byte indexing.

>>> s = Stream.open("foo.bin", "rb")
>>> x = s[10:30]
>>> x
<StreamSlice [10:30] of '/tmp/bla.bin'>
>>> buf(x)
buf(hex='63a7349ca38cc6319f3430c72e9659e8aca27705')
>>> s[:1000].copy(open('/tmp/bar.bi', 'wb'))  # Write stream data to other stream (buffered)

pp

Pretty-printing for large nested structures with Unicode trees and colors.

Compatibility

This package is compatible with Python versions 2.7 and 3.3+.

Metadata

Release files for rupy 0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rupy 0.6
File Size Uploaded Provenance Actions
rupy-0.6.tar.gz 28.0 kB Without provenance Details for rupy-0.6.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rupy 0.6
File Interpreter ABI Platform Actions
rupy-0.6-py3-none-any.whl Python 3 none any Details for rupy-0.6-py3-none-any.whl

Total release size: 57.0 kB

Release files / rupy-0.6.tar.gz

Download URL rupy-0.6.tar.gz
Size 28.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4a6e41bdc426672c064197ebe5d79a55acabb93d9bffaca09d2832e9192b4bd7
BLAKE2b-256 checksum
How to use checksums
a7a6344a0ba069bc21faf11da128ff7ff0426be2433c1ba306368bf334869def
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / rupy-0.6-py3-none-any.whl

Download URL rupy-0.6-py3-none-any.whl
Size 28.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5a5f3b19399294b9485309f533de3330ab5cf40a21a13860f87252231b184e4c
BLAKE2b-256 checksum
How to use checksums
9f8b39244ba9251748ebd3a161e8fd18217f87ca992c51b22e5fe840ddfed552
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Security for rupy 0.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page