in Providers/Scripts/3.x/Scripts/nxIPAddress.py [0:0]
def UpdateValuesInFile(self,fname,src_dict,re_dict,Ensure):
if len(src_dict) == 0:
return [0]
removing=False
if self.inet in src_dict.keys() and Ensure=='Absent': # we are trying to remove
removing=True
if removing == False and os.path.exists(fname) != True:
# if this file is not here - we will create it
with open(fname,'w+') as F:
F.write('# Created by nxIPAddress DSC PRovider\n')
F.close()
with open(fname,'r') as F:
txt=F.read()
if 'iface ' in src_dict.keys():
srch=r'(^auto '+src_dict['iface ']+'$.*?^iface '+src_dict['iface ']+'.*?$|^iface '+src_dict['iface ']+'.*?$).*?((^auto )|(^iface )|(^$))'
updated=''
r=re.search(srch,txt,flags=re.S|re.M)
if r == None:
if removing: #nothing to remove
return [0]
else : # append values to the end
l='auto ' + src_dict['iface '] + '\niface '+src_dict['iface '] + ' ' + self.inet+src_dict[self.inet] + '\n'
if len(updated) > 0 and updated[-1] != '\n':
updated+='\n'
updated+=l
re_dict['iface ']=None
re_dict[self.inet]=None
for k in re_dict:
if re_dict[k] != None and len(src_dict[k]) > 0 :
l=k+src_dict[k]+'\n'
updated+=l
txt=txt+updated
else: #matched
if removing:
tail=''
rpl=re.compile(r.group(0),flags=re.S|re.M)
txt=rpl.sub(tail,txt)
if txt[-2:] == '\n\n':
txt=txt[:-1]
else : # replace tags - preserve unknown tags
t=r.group(0)
for l in t.splitlines():
if len(l)>1:
l+='\n'
else:
continue
if 'iface ' in re_dict.keys() and re_dict['iface '] != None :
if re.match(re_dict['iface '],l) :
l='iface '+src_dict['iface '] + ' ' + self.inet+src_dict[self.inet] + '\n'
re_dict['iface ']=None
re_dict[self.inet]=None
updated+=l
continue
for k in re_dict.keys():
if re_dict[k]!=None:
if re.match(re_dict[k],l): # re.match is anchored to the line start.
if len(src_dict[k])==0 :
l=''
else:
l=re.sub(re_dict[k],k+src_dict[k],l)
if len(l)>0 and l[-1]!='\n':
l+='\n'
re_dict[k]=None
break
if len(l)>2:
updated+=l
for k in re_dict:
if re_dict[k] != None and len(src_dict[k]) > 0 :
l=k+src_dict[k]+'\n'
updated+=l
tail=''
if updated[-1] != '\n':
tail='\n'
updated+=tail
rpl=re.compile(r.group(0),flags=re.S|re.M)
txt=rpl.sub(updated,txt)
if txt[-2:] == '\n\n':
txt=txt[:-1]
ReplaceFileContentsAtomic(fname,txt)
return [0]