Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/planemo/training/__init__.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/planemo/training/__init__.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,100 @@ +"""Module contains code for gtdk: Galaxy training development kit.""" + +from planemo.io import info +from .topic import Topic +from .tutorial import Tutorial + + +class Training(object): + """Class to describe a training.""" + + def __init__(self, kwds): + """Init an instance of Training.""" + self.kwds = kwds + self.topics_dir = "topics" + self.topic = Topic(parent_dir=self.topics_dir, name=kwds['topic_name']) + self.galaxy_url = kwds['galaxy_url'] if 'galaxy_url' in kwds else '' + self.galaxy_api_key = kwds['galaxy_api_key'] if 'galaxy_api_key' in kwds else '' + self.tuto = None + + def init_training(self, ctx): + """Create/update a topic/tutorial.""" + if not self.topic.exists(): + info("The topic %s does not exist. It will be created" % self.topic.name) + self.topic.init_from_kwds(self.kwds) + self.topic.create_topic_structure() + + if not self.kwds['tutorial_name']: + if self.kwds["slides"]: + raise Exception("A tutorial name is needed to create the skeleton of a tutorial slide deck") + if self.kwds['workflow'] or self.kwds['workflow_id']: + raise Exception("A tutorial name is needed to create the skeleton of the tutorial from a workflow") + if self.kwds['zenodo_link']: + raise Exception("A tutorial name is needed to add Zenodo information") + else: + self.tuto = Tutorial(training=self, topic=self.topic) + self.tuto.init_from_kwds(self.kwds) + if not self.tuto.exists(): + info("The tutorial %s in topic %s does not exist. It will be created." % (self.tuto.name, self.topic.name)) + self.tuto.create_tutorial(ctx) + info("WARNING: Change the contributors/maintainers listed in the metadata of the new training ") + info("before serving the website to fit the one listed in the CONTRIBUTORS.yaml file") + + def check_topic_init_tuto(self): + """Check that the topic and tutorial are already there and retrieve them.""" + # check topic + if not self.topic.exists(): + raise Exception("The topic %s does not exists. It should be created" % self.topic.name) + self.topic.init_from_metadata() + # initiate the tutorial + self.tuto = Tutorial(training=self, topic=self.topic) + self.tuto.init_from_existing_tutorial(self.kwds['tutorial_name']) + if 'datatypes' in self.kwds: + self.tuto.datatype_fp = self.kwds['datatypes'] + if 'workflow' in self.kwds: + self.tuto.init_wf_fp = self.kwds['workflow'] + if 'workflow_id' in self.kwds: + self.tuto.init_wf_id = self.kwds['workflow_id'] + + def fill_data_library(self, ctx): + """Fill a data library for a tutorial.""" + self.check_topic_init_tuto() + # get the zenodo link + z_link = '' + update_metadata = False + if self.tuto.zenodo_link != '': + if self.kwds['zenodo_link']: + info("The data library and the metadata will be updated with the new Zenodo link") + z_link = self.kwds['zenodo_link'] + self.tuto.zenodo_link = z_link + update_metadata = True + else: + info("The data library will be extracted using the Zenodo link in the metadata of the tutorial") + z_link = self.tuto.zenodo_link + elif self.kwds['zenodo_link']: + info("The data library will be created and the metadata will be filled with the new Zenodo link") + z_link = self.kwds['zenodo_link'] + self.tuto.zenodo_link = z_link + update_metadata = True + + if z_link == '' or z_link is None: + raise Exception("A Zenodo link should be provided either in the metadata file or as argument of the command") + + # extract the data library from Zenodo + self.tuto.prepare_data_library_from_zenodo() + + # update the metadata + if update_metadata: + self.tuto.write_hands_on_tutorial(add_z_file_links=False) + + def generate_tuto_from_wf(self, ctx): + """Generate the skeleton of a tutorial from a workflow.""" + self.check_topic_init_tuto() + if self.tuto.has_workflow(): + info("Create tutorial skeleton from workflow") + self.tuto.create_hands_on_tutorial(ctx) + self.tuto.export_workflow_file() + else: + raise Exception( + "A path to a local workflow or the id of a workflow on a running Galaxy instance should be provided" + )