Skip to content
Snippets Groups Projects
Commit 30ba9c19 authored by Guido Sterbini's avatar Guido Sterbini
Browse files

status

parent 5d27d72f
No related branches found
No related tags found
2 merge requests!2Dev v0.0.1,!1Dev v0.0.1
Pipeline #3004849 passed
...@@ -24,7 +24,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -24,7 +24,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
path=None, path=None,
template_path=None, template_path=None,
submit_command=None, submit_command=None,
log_file=None, log_file='log.json',
dictionary=None): dictionary=None):
super(NodeJobBase, self).__init__() super(NodeJobBase, self).__init__()
self.name = name self.name = name
...@@ -38,6 +38,14 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -38,6 +38,14 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
if children: # set children only if given if children: # set children only if given
self.children = children self.children = children
def get_abs(self, attribute):
if attribute == 'path':
return f"{self.root.dictionary['abs_path']}/{getattr(self, attribute)}"
else:
return f"{self.root.dictionary['abs_path']}/{self.path}/{getattr(self, attribute)}"
def print_it(self): def print_it(self):
''' '''
An easy way to print the tree. An easy way to print the tree.
...@@ -46,26 +54,26 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -46,26 +54,26 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
print(f"{pre}{node.name}") print(f"{pre}{node.name}")
def submit(self): def submit(self):
subprocess.call(f'cd {self.path};{self.submit_command}', shell=True) subprocess.call(f'cd {self.get_abs("path")};{self.submit_command}', shell=True)
def clone(self): def clone(self):
if not self.template_path==None: if not self.template_path==None:
copytree(self.template_path+'/config.yaml', child.path) copytree(self.get_abs(template_path)+'/config.yaml', child.get_abs('path'))
else: else:
subprocess.call(f'mkdir {self.path}', shell=True) subprocess.call(f'mkdir {self.get_abs(template_path)}', shell=True)
self.to_json() #self.to_json()
def clone_children(self): def clone_children(self):
for child in self.children: for child in self.children:
os.makedirs(child.path, exist_ok=True) os.makedirs(child.get_abs('path'), exist_ok=True)
copy(child.template_path+'/config.yaml', child.path+'/config.yaml') copy(child.get_abs('template_path')+'/config.yaml', child.get_abs('path')+'/config.yaml')
child.to_json() #child.to_json()
def rm_children_folders(self,): def rm_children_folders(self,):
for child in self.children: for child in self.children:
# https://stackoverflow.com/questions/31977833/rm-all-files-under-a-directory-using-python-subprocess-call # https://stackoverflow.com/questions/31977833/rm-all-files-under-a-directory-using-python-subprocess-call
subprocess.call(f'rm -rf {child.path}', shell=True) subprocess.call(f'rm -rf {child.get_abs("path")}', shell=True)
def mutate(self): def mutate(self):
#https://stackoverflow.com/questions/7255885/save-dump-a-yaml-file-with-comments-in-pyyaml #https://stackoverflow.com/questions/7255885/save-dump-a-yaml-file-with-comments-in-pyyaml
...@@ -74,7 +82,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -74,7 +82,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
self.dictionary['parent'] = self.parent.path self.dictionary['parent'] = self.parent.path
self.dictionary['log_file'] = self.log_file self.dictionary['log_file'] = self.log_file
with open(self.path+'/config.yaml', 'r') as file: with open(self.get_abs('path')+'/config.yaml', 'r') as file:
cfg = ryaml.load(file) cfg = ryaml.load(file)
for ii in self.dictionary.keys(): for ii in self.dictionary.keys():
if not type(self.dictionary[ii])==dict: if not type(self.dictionary[ii])==dict:
...@@ -85,7 +93,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -85,7 +93,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
# TODO: this works only for 1-depth dict # TODO: this works only for 1-depth dict
cfg[ii]={**cfg[ii], **self.dictionary[ii]} cfg[ii]={**cfg[ii], **self.dictionary[ii]}
with open(self.path+'/config.yaml', 'w') as file: with open(self.get_abs('path')+'/config.yaml', 'w') as file:
ryaml.dump(cfg, file) ryaml.dump(cfg, file)
def clean_log(self): def clean_log(self):
...@@ -98,17 +106,20 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -98,17 +106,20 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
def mutate_children(self): def mutate_children(self):
for child in self.children: for child in self.children:
child.mutate() child.mutate()
child.tag_as('mutated')
def to_yaml(self, filename='tree.yaml'): def to_yaml(self, filename='tree.yaml'):
if not Path(self.path).is_dir(): path = self.get_abs('path')
subprocess.call(f'mkdir {self.path}', shell=True) if not Path(path).is_dir():
with open(f"{self.path}/{filename}", "w") as file: subprocess.call(f'mkdir {path}', shell=True)
with open(f"{path}/{filename}", "w") as file:
yaml.dump(DictExporter().export(self), file) yaml.dump(DictExporter().export(self), file)
def to_json(self, filename='tree.json'): def to_json(self, filename='tree.json'):
if not Path(self.path).is_dir(): path = self.get_abs('path')
subprocess.call(f'mkdir {self.path}', shell=True) if not Path(path).is_dir():
with open(f"{self.path}/{filename}", "w") as file: subprocess.call(f'mkdir {path}', shell=True)
with open(f"{path}/{filename}", "w") as file:
file.write(JsonExporter(indent=2, sort_keys=True).export(self)) file.write(JsonExporter(indent=2, sort_keys=True).export(self))
def generation(self, number): def generation(self, number):
...@@ -124,7 +135,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -124,7 +135,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
def has_been(self, tag): def has_been(self, tag):
#if self._is_logging_file(): #if self._is_logging_file():
if tag in tree_maker.from_json(self.log_file).keys(): if tag in tree_maker.from_json(self.get_abs('path')+'/'+self.log_file).keys():
return True return True
else: else:
return False return False
...@@ -138,7 +149,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature ...@@ -138,7 +149,7 @@ class NodeJob(NodeJobBase, NodeMixin): # Add Node feature
''' '''
This is to tag the node's activity. This is to tag the node's activity.
''' '''
tree_maker.tag_json.tag_it(self.log_file, tag) tree_maker.tag_json.tag_it(self.get_abs('path')+'/'+self.log_file, tag)
def find(self, **kwargs): def find(self, **kwargs):
return anytree.search.findall(self,**kwargs) return anytree.search.findall(self,**kwargs)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment