1
+ # -*- coding: utf-8 -*-
1
2
try :
2
3
unicode # Python 2
3
4
except NameError :
@@ -150,9 +151,8 @@ def __convert_Jloads_to_Jobj(Jloads, Jobj):
150
151
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
151
152
def load (Jfilepath , dupSign_start = "{{{" , dupSign_end = "}}}" , ordered_dict = False , _isDebug_ = False ):
152
153
try :
153
- Jfile = open (Jfilepath )
154
- Jstr = Jfile .read ()
155
- Jfile .close ()
154
+ with open (Jfilepath ) as Jfile :
155
+ Jstr = Jfile .read ()
156
156
157
157
return loads (Jstr , dupSign_start = dupSign_start , dupSign_end = dupSign_end , ordered_dict = ordered_dict , _isDebug_ = _isDebug_ )
158
158
except Exception as e :
@@ -307,16 +307,20 @@ def set(self, name, value, case_insensitive=False, separator="||", parse_index="
307
307
else :
308
308
if self .get (separator .join (name .split (separator )[:- 1 ]), case_insensitive = case_insensitive , separator = separator , parse_index = parse_index )["value" ] != "JSON_DUPLICATE_KEYS_ERROR" :
309
309
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()"
311
312
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 )+ "]"
317
318
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
320
324
else :
321
325
if _isDebug_ : print ("\x1b [31m[-] KeyNameNotExistError: {}\x1b [0m" .format (separator .join (Jget ["name" ].split (separator )[:- 1 ])))
322
326
return False
@@ -328,7 +332,7 @@ def set(self, name, value, case_insensitive=False, separator="||", parse_index="
328
332
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
329
333
# # # # # # # # # # # # # # update # # # # # # # # # # # # # #
330
334
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
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 ):
332
336
import re
333
337
334
338
# User input data type validation
@@ -344,7 +348,10 @@ def update(self, name, value, case_insensitive=False, separator="||", parse_inde
344
348
345
349
if type (parse_index ) not in [str , unicode ]: parse_index = "$"
346
350
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" :
348
355
Jname = self .get (name , case_insensitive = case_insensitive , separator = separator , parse_index = parse_index )["name" ]
349
356
try :
350
357
exec_expression = "self.getObject()"
@@ -359,6 +366,8 @@ def update(self, name, value, case_insensitive=False, separator="||", parse_inde
359
366
return True
360
367
except Exception as e :
361
368
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_ )
362
371
363
372
return False
364
373
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -420,10 +429,10 @@ def filter_keys(self, name, separator="||", parse_index="$", ordered_dict=False)
420
429
for k , v in JDKSObject .getObject ().items ():
421
430
if type (k ) == str and type (name ) == str :
422
431
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 )
424
433
else :
425
434
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 )
427
436
428
437
return newJDKSObject
429
438
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -444,10 +453,10 @@ def filter_values(self, value, separator="||", parse_index="$", ordered_dict=Fal
444
453
for k , v in JDKSObject .getObject ().items ():
445
454
if type (v ) == str and type (value ) == str :
446
455
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 )
448
457
else :
449
458
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 )
451
460
452
461
return newJDKSObject
453
462
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
0 commit comments