summaryrefslogtreecommitdiff
path: root/rq/serializers.py
diff options
context:
space:
mode:
authorBabatunde Olusola <solababatunde12@gmail.com>2020-04-16 13:53:48 +0100
committerGitHub <noreply@github.com>2020-04-16 19:53:48 +0700
commite1cbc3736c55d7a72be121a170d1b8c811619dc2 (patch)
tree5c4a0a42ed68b110158d2255b3d0995afa15d25a /rq/serializers.py
parentd914343e7c6b5f28e76840838ebc0e100d62e07a (diff)
downloadrq-e1cbc3736c55d7a72be121a170d1b8c811619dc2.tar.gz
Implement Customizable Serializer Support (#1219)
* Implement Customizable Serializer Support * Refractor serializer instance methods * Update tests with other serializers * Edit function description * Edit function description * Raise appropriate exception * Update tests for better code coverage * Remove un-used imports and un-necessary code * Refractor resolve_serializer * Remove un-necessary alias from imports * Add documentation * Refractor tests, improve documentation
Diffstat (limited to 'rq/serializers.py')
-rw-r--r--rq/serializers.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/rq/serializers.py b/rq/serializers.py
new file mode 100644
index 0000000..c4b0e54
--- /dev/null
+++ b/rq/serializers.py
@@ -0,0 +1,25 @@
+import pickle
+
+from .compat import string_types
+from .utils import import_attribute
+
+
+def resolve_serializer(serializer):
+ """This function checks the user defined serializer for ('dumps', 'loads') methods
+ It returns a default pickle serializer if not found else it returns a MySerializer
+ The returned serializer objects implement ('dumps', 'loads') methods
+ Also accepts a string path to serializer that will be loaded as the serializer
+ """
+ if not serializer:
+ return pickle
+
+ if isinstance(serializer, string_types):
+ serializer = import_attribute(serializer)
+
+ default_serializer_methods = ('dumps', 'loads')
+
+ for instance_method in default_serializer_methods:
+ if not hasattr(serializer, instance_method):
+ raise NotImplementedError('Serializer should have (dumps, loads) methods.')
+
+ return serializer