diff options
Diffstat (limited to 'redis/commands/json')
-rw-r--r-- | redis/commands/json/commands.py | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/redis/commands/json/commands.py b/redis/commands/json/commands.py index 92b018c..626f2c1 100644 --- a/redis/commands/json/commands.py +++ b/redis/commands/json/commands.py @@ -1,11 +1,12 @@ +import os +from json import JSONDecodeError, loads + from deprecated import deprecated from redis.exceptions import DataError from .decoders import decode_dict_keys from .path import Path -from json import loads, JSONDecodeError -import os class JSONCommands: @@ -217,7 +218,8 @@ class JSONCommands: def set_file(self, name, path, file_name, nx=False, xx=False, decode_keys=False): """ - Set the JSON value at key ``name`` under the ``path`` to the contents of the json file ``file_name``. + Set the JSON value at key ``name`` under the ``path`` to the content + of the json file ``file_name``. ``nx`` if set to True, set ``value`` only if it does not exist. ``xx`` if set to True, set ``value`` only if it exists. @@ -225,23 +227,28 @@ class JSONCommands: with utf-8. """ - try: - file_content = loads(file_name) - except JSONDecodeError: - raise JSONDecodeError("Inappropriate file type, set_file() requires json file") - + + with open(file_name, "r") as fp: + file_content = loads(fp.read()) + return self.set(name, path, file_content, nx, xx, decode_keys) + def set_path(self, json_path, root_folder, nx=False, xx=False, decode_keys=False): + """ + Iterate over ``root_folder`` and set each JSON file to a value + under ``json_path`` with the file name as the key. - def set_path(self, json_path, root_directory , nx=False, xx=False, decode_keys=False): - """ + ``nx`` if set to True, set ``value`` only if it does not exist. + ``xx`` if set to True, set ``value`` only if it exists. + ``decode_keys`` If set to True, the keys of ``obj`` will be decoded + with utf-8. """ set_files_result = {} - for root, dirs, files in os.walk(root_directory): + for root, dirs, files in os.walk(root_folder): for file in files: try: - file_name = file.rsplit('.')[0] + file_name = os.path.join(root, file).rsplit(".")[0] file_path = os.path.join(root, file) self.set_file(file_name, json_path, file_path, nx, xx, decode_keys) set_files_result[os.path.join(root, file)] = True @@ -250,8 +257,6 @@ class JSONCommands: return set_files_result - - def strlen(self, name, path=None): """Return the length of the string JSON value under ``path`` at key ``name``. |