Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/planemo/training/topic.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/planemo/training/topic.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -"""Module contains code for the Topic class, dealing with the creation of a training topic.""" - -import collections -import os - -from planemo import templates -from .utils import ( - load_yaml, - Requirement, - save_to_yaml -) - - -INDEX_FILE_TEMPLATE = """--- -layout: topic -topic_name: {{ topic }} ---- -""" - -README_FILE_TEMPLATE = """ -{{ topic }} -========== - -Please refer to the [CONTRIBUTING.md](../../CONTRIBUTING.md) before adding or updating any material -""" - - -DOCKER_FILE_TEMPLATE = """ -# Galaxy - {{ topic_title }} -# -# to build the docker image, go to root of training repo and -# docker build -t {{ topic_name }} -f topics/{{ topic_name }}/docker/Dockerfile . -# -# to run image: -# docker run -p "8080:80" -t {{ topic_name }} -# use -d to automatically dowload the datalibraries in the container - -FROM bgruening/galaxy-stable:latest - -MAINTAINER Galaxy Training Material - -ENV GALAXY_CONFIG_BRAND "GTN: {{ topic_title }}" - -# copy the tutorials directory for your topic -ADD topics/{{ topic_name }}/tutorials/ /tutorials/ - -# install everything for tutorials -ADD bin/docker-install-tutorials.sh /setup-tutorials.sh -ADD bin/mergeyaml.py /mergeyaml.py -ADD bin/data_libarary_download.sh /data_libarary_download.sh -RUN /setup-tutorials.sh - -ENTRYPOINT ["/data_libarary_download.sh"] -""" - - -INTRO_SLIDES_FILE_TEMPLATE = """--- -layout: introduction_slides -logo: "GTN" - -title: {{ title }} -type: {{ type }} -contributors: -- contributor ---- - -### How to fill the slide decks? - -Please follow our -[tutorial to learn how to fill the slides]({{ '{{' }} site.baseurl {{ '}}' }}/topics/contributing/tutorials/create-new-tutorial-slides/slides.html) -""" - - -class Topic(object): - """Class to describe a training topic.""" - - def __init__(self, name="new_topic", target="use", title="The new topic", summary="Summary", parent_dir="topics"): - """Init a topic instance.""" - self.name = name - self.type = target - self.title = title - self.summary = summary - self.docker_image = "" - self.maintainers = ["maintainers"] - self.parent_dir = parent_dir - self.set_default_requirement() - self.set_paths() - - def init_from_kwds(self, kwds): - """Init a topic instance from a kwds dictionary.""" - self.name = kwds["topic_name"] - self.type = kwds["topic_target"] - self.title = kwds["topic_title"] - self.summary = kwds["topic_summary"] - self.set_default_requirement() - self.set_paths() - - def init_from_metadata(self): - """Init a topic instance from the metadata file.""" - metadata = load_yaml(self.metadata_fp) - self.name = metadata['name'] - self.type = metadata['type'] - self.title = metadata['title'] - self.summary = metadata['summary'] - self.requirements = [] - if 'requirements' in metadata: - for r in metadata['requirements']: - req = Requirement() - req.init_from_dict(r) - self.requirements.append(req) - if 'docker_image' in metadata: - self.docker_image = metadata['docker_image'] - self.maintainers = metadata['maintainers'] - self.set_paths() - - # GETTERS - def get_requirements(self): - """Get the requirements as a list of ordered dictionaries.""" - reqs = [] - for req in self.requirements: - reqs.append(req.export_to_ordered_dict()) - return reqs - - def export_metadata_to_ordered_dict(self): - """Export the topic metadata into an ordered dictionary.""" - metadata = collections.OrderedDict() - metadata['name'] = self.name - metadata['type'] = self.type - metadata['title'] = self.title - metadata['summary'] = self.summary - metadata['requirements'] = self.get_requirements() - metadata['docker_image'] = self.docker_image - metadata['maintainers'] = self.maintainers - return metadata - - # SETTERS - def set_default_requirement(self): - """Set default requirement: Galaxy introduction.""" - self.requirements = [] - if self.type == 'use': - self.requirements.append(Requirement()) - - def set_paths(self): - """Set the paths to folder and files.""" - self.dir = os.path.join(self.parent_dir, self.name) - self.img_folder = os.path.join(self.dir, "images") - self.tuto_folder = os.path.join(self.dir, "tutorials") - self.index_fp = os.path.join(self.dir, "index.md") - self.readme_fp = os.path.join(self.dir, "README.md") - self.metadata_fp = os.path.join(self.dir, "metadata.yaml") - self.docker_folder = os.path.join(self.dir, "docker") - self.dockerfile_fp = os.path.join(self.docker_folder, "Dockerfile") - self.slides_folder = os.path.join(self.dir, "slides") - - # TESTS - def exists(self): - """Test if the topic exists.""" - return os.path.isdir(self.dir) - - # OTHER METHODS - def create_topic_structure(self): - """Create the skeleton of a new topic. - - 1. create the folder and its structure - 2. update the index.md to match your topic's name - 3. fill the metadata - 4. add a symbolic link to the metadata.yaml from the metadata folder - """ - # create the folder and its structure - os.makedirs(self.dir) - self.img_folder = os.path.join(self.dir, "images") - os.makedirs(self.img_folder) - self.tuto_folder = os.path.join(self.dir, "tutorials") - os.makedirs(self.tuto_folder) - - # create the index.md and add the topic name - self.index_fp = os.path.join(self.dir, "index.md") - with open(self.index_fp, 'w') as index_f: - index_f.write( - templates.render(INDEX_FILE_TEMPLATE, **{'topic': self.name})) - - # create the README file - self.readme_fp = os.path.join(self.dir, "README.md") - with open(self.readme_fp, 'w') as readme_f: - readme_f.write( - templates.render(README_FILE_TEMPLATE, **{'topic': self.title})) - - # create the metadata file - self.metadata_fp = os.path.join(self.dir, "metadata.yaml") - save_to_yaml(self.export_metadata_to_ordered_dict(), self.metadata_fp) - - # create Dockerfile - self.docker_folder = os.path.join(self.dir, "docker") - os.makedirs(self.docker_folder) - self.dockerfile_fp = os.path.join(self.docker_folder, "Dockerfile") - with open(self.dockerfile_fp, 'w') as dockerfile: - dockerfile.write( - templates.render( - DOCKER_FILE_TEMPLATE, - **{'topic_name': self.name, 'topic_title': self.title})) - - # create empty introduction slides - self.slides_folder = os.path.join(self.dir, "slides") - os.makedirs(self.slides_folder) - self.intro_slide_fp = os.path.join(self.slides_folder, "introduction.html") - with open(self.intro_slide_fp, 'w') as intro_slide_f: - intro_slide_f.write( - templates.render( - INTRO_SLIDES_FILE_TEMPLATE, - **{'title': "Introduction to %s" % self.title, 'type': "introduction"})) - - # add a symbolic link to the metadata.yaml - metadata_dir = "metadata" - if not os.path.isdir(metadata_dir): - os.makedirs(metadata_dir) - os.chdir(metadata_dir) - os.symlink(os.path.join("..", self.metadata_fp), "%s.yaml" % self.name) - os.chdir("..")