1+ # -*- coding: utf-8 -*-
12try :
23 unicode # Python 2
34except NameError :
@@ -150,9 +151,8 @@ def __convert_Jloads_to_Jobj(Jloads, Jobj):
150151# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
151152def load (Jfilepath , dupSign_start = "{{{" , dupSign_end = "}}}" , ordered_dict = False , _isDebug_ = False ):
152153 try :
153- Jfile = open (Jfilepath )
154- Jstr = Jfile .read ()
155- Jfile .close ()
154+ with open (Jfilepath ) as Jfile :
155+ Jstr = Jfile .read ()
156156
157157 return loads (Jstr , dupSign_start = dupSign_start , dupSign_end = dupSign_end , ordered_dict = ordered_dict , _isDebug_ = _isDebug_ )
158158 except Exception as e :
@@ -307,16 +307,20 @@ def set(self, name, value, case_insensitive=False, separator="||", parse_index="
307307 else :
308308 if self .get (separator .join (name .split (separator )[:- 1 ]), case_insensitive = case_insensitive , separator = separator , parse_index = parse_index )["value" ] != "JSON_DUPLICATE_KEYS_ERROR" :
309309 Jget = self .get (separator .join (name .split (separator )[:- 1 ]), case_insensitive = case_insensitive , separator = separator , parse_index = parse_index )
310- exec_expression = "self.getObject()"
310+ if type (Jget ["value" ]) in [dict , OrderedDict ]:
311+ exec_expression = "self.getObject()"
311312
312- for k in Jget ["name" ].split (separator ):
313- if re .search ("^" + re .escape (parse_index )+ "\\ d+" + re .escape (parse_index )+ "$" , k ):
314- exec_expression += "[" + k .split (parse_index )[1 ]+ "]"
315- else :
316- exec_expression += "[" + repr (k )+ "]"
313+ for k in Jget ["name" ].split (separator )+ [ name . split ( separator )[ - 1 ]] :
314+ if re .search ("^" + re .escape (parse_index )+ "\\ d+" + re .escape (parse_index )+ "$" , k ):
315+ exec_expression += "[" + k .split (parse_index )[1 ]+ "]"
316+ else :
317+ exec_expression += "[" + repr (k )+ "]"
317318
318- exec (exec_expression + "=" + repr (value ))
319- return True
319+ exec (exec_expression + "=" + repr (value ))
320+ return True
321+ else :
322+ if _isDebug_ : print ("\x1b [31m[-] KeyNameInvalidError: \x1b [0m" + name )
323+ return False
320324 else :
321325 if _isDebug_ : print ("\x1b [31m[-] KeyNameNotExistError: {}\x1b [0m" .format (separator .join (Jget ["name" ].split (separator )[:- 1 ])))
322326 return False
@@ -328,7 +332,7 @@ def set(self, name, value, case_insensitive=False, separator="||", parse_index="
328332 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
329333 # # # # # # # # # # # # # # update # # # # # # # # # # # # # #
330334 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
331- def update (self , name , value , case_insensitive = False , separator = "||" , parse_index = "$" , _isDebug_ = False ):
335+ def update (self , name , value , case_insensitive = False , allow_new_key = False , separator = "||" , parse_index = "$" , dupSign_start = "{{{" , dupSign_end = "}}}" , ordered_dict = False , _isDebug_ = False ):
332336 import re
333337
334338 # User input data type validation
@@ -344,7 +348,10 @@ def update(self, name, value, case_insensitive=False, separator="||", parse_inde
344348
345349 if type (parse_index ) not in [str , unicode ]: parse_index = "$"
346350
347- if self .get (name , case_insensitive = case_insensitive , separator = separator , parse_index = parse_index , _isDebug_ = _isDebug_ )["value" ] != "JSON_DUPLICATE_KEYS_ERROR" :
351+ _debug_ = _isDebug_
352+ if allow_new_key : _debug_ = False
353+
354+ if self .get (name , case_insensitive = case_insensitive , separator = separator , parse_index = parse_index , _isDebug_ = _debug_ )["value" ] != "JSON_DUPLICATE_KEYS_ERROR" :
348355 Jname = self .get (name , case_insensitive = case_insensitive , separator = separator , parse_index = parse_index )["name" ]
349356 try :
350357 exec_expression = "self.getObject()"
@@ -359,6 +366,8 @@ def update(self, name, value, case_insensitive=False, separator="||", parse_inde
359366 return True
360367 except Exception as e :
361368 if _isDebug_ : print ("\x1b [31m[-] ExceptionError: {}\x1b [0m" .format (e ))
369+ elif allow_new_key :
370+ return self .set (name , value , case_insensitive = case_insensitive , separator = separator , parse_index = parse_index , dupSign_start = dupSign_start , dupSign_end = dupSign_end , ordered_dict = ordered_dict , _isDebug_ = _isDebug_ )
362371
363372 return False
364373 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -420,10 +429,10 @@ def filter_keys(self, name, separator="||", parse_index="$", ordered_dict=False)
420429 for k , v in JDKSObject .getObject ().items ():
421430 if type (k ) == str and type (name ) == str :
422431 if re .search (name , k ):
423- newJDKSObject .set (k , v , separator = "!! " + separator + "!! " , parse_index = "!! " + parse_index + "!! " , ordered_dict = ordered_dict )
432+ newJDKSObject .set (k , v , separator = "§§ " + separator + "§§ " , parse_index = "§§ " + parse_index + "§§ " , ordered_dict = ordered_dict )
424433 else :
425434 if name == k :
426- newJDKSObject .set (k , v , separator = "!! " + separator + "!! " , parse_index = "!! " + parse_index + "!! " , ordered_dict = ordered_dict )
435+ newJDKSObject .set (k , v , separator = "§§ " + separator + "§§ " , parse_index = "§§ " + parse_index + "§§ " , ordered_dict = ordered_dict )
427436
428437 return newJDKSObject
429438 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -444,10 +453,10 @@ def filter_values(self, value, separator="||", parse_index="$", ordered_dict=Fal
444453 for k , v in JDKSObject .getObject ().items ():
445454 if type (v ) == str and type (value ) == str :
446455 if re .search (value , v ):
447- newJDKSObject .set (k , v , separator = "!! " + separator + "!! " , parse_index = "!! " + parse_index + "!! " , ordered_dict = ordered_dict )
456+ newJDKSObject .set (k , v , separator = "§§ " + separator + "§§ " , parse_index = "§§ " + parse_index + "§§ " , ordered_dict = ordered_dict )
448457 else :
449458 if value == v :
450- newJDKSObject .set (k , v , separator = "!! " + separator + "!! " , parse_index = "!! " + parse_index + "!! " , ordered_dict = ordered_dict )
459+ newJDKSObject .set (k , v , separator = "§§ " + separator + "§§ " , parse_index = "§§ " + parse_index + "§§ " , ordered_dict = ordered_dict )
451460
452461 return newJDKSObject
453462 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
0 commit comments