Summary
RedisPriorityQueue currently serializes values using json.dumps, which limits supported value types to JSON-serializable ones (str, int, float, bool). This issue tracks adding support for non-JSON-native types such as None, bytes, dict, list, and Pydantic models as priority queue values.
Features / Details
- Support
None as a priority queue value
- Support
bytes values (with proper encoding/decoding)
- Support
dict values
- Support
list values
- Support Pydantic model instances as values
- Ensure round-trip serialization/deserialization works correctly for all types
- Maintain backward compatibility with existing JSON-serializable types
Use Cases
- Storing complex structured data (dicts, lists) as priority queue entries
- Using Pydantic models as queue items for typed, validated payloads
- Supporting
None as a sentinel or placeholder value
- Storing binary data (
bytes) in priority-ordered queues
Implementation Considerations
- The current
_serialize_value / _deserialize_value pipeline in rapyer/types/priority_queue.py relies on json.dumps/json.loads
- Pydantic's
TypeAdapter with mode="json" already handles model serialization, but the pipeline needs to handle edge cases for None, bytes, etc.
bytes values may need base64 encoding or a custom serialization strategy since Redis sorted set members are strings
- Consider aligning the approach with how
RedisDict and other data structures handle non-JSON types
Related Issues
List tasks
Summary
RedisPriorityQueuecurrently serializes values usingjson.dumps, which limits supported value types to JSON-serializable ones (str,int,float,bool). This issue tracks adding support for non-JSON-native types such asNone,bytes,dict,list, and Pydantic models as priority queue values.Features / Details
Noneas a priority queue valuebytesvalues (with proper encoding/decoding)dictvalueslistvaluesUse Cases
Noneas a sentinel or placeholder valuebytes) in priority-ordered queuesImplementation Considerations
_serialize_value/_deserialize_valuepipeline inrapyer/types/priority_queue.pyrelies onjson.dumps/json.loadsTypeAdapterwithmode="json"already handles model serialization, but the pipeline needs to handle edge cases forNone,bytes, etc.bytesvalues may need base64 encoding or a custom serialization strategy since Redis sorted set members are stringsRedisDictand other data structures handle non-JSON typesRelated Issues
List tasks
Nonevalues in serialization/deserializationbytesvalues (e.g., base64 encoding)dictvalueslistvalues