Source code for planemo.training

"""Module contains code for gtdk: Galaxy training development kit."""

from planemo.io import info
from .topic import Topic
from .tutorial import Tutorial


[docs]class Training: """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
[docs] 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(f"The tutorial {self.tuto.name} in topic {self.topic.name} does not exist. It will be created.") 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")
[docs] 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"]
[docs] 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)
[docs] 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" )