From ced38bb92b1fef0b998e5da40010fcad77d47990 Mon Sep 17 00:00:00 2001 From: Cameron Hyde Date: Mon, 11 Nov 2024 16:36:59 +1000 Subject: [PATCH] Deprecate exported labs --- webapp/home/admin.py | 3 +- webapp/home/lab_cache.py | 62 -- webapp/home/lab_export.py | 374 ------------ webapp/home/lab_schema.py | 116 ---- webapp/home/labs/.gitignore | 1 - webapp/home/labs/docs/CONTRIBUTORS | 2 - webapp/home/labs/docs/base.yml | 23 - webapp/home/labs/docs/section_1.yml | 91 --- webapp/home/labs/docs/section_2.yml | 155 ----- webapp/home/labs/docs/static/custom.css | 34 -- webapp/home/labs/docs/static/flask.svg | 1 - .../home/labs/docs/templates/conclusion.html | 0 webapp/home/labs/docs/templates/footer.html | 11 - webapp/home/labs/docs/templates/intro.html | 213 ------- webapp/home/labs/genome/CONTRIBUTORS | 3 - webapp/home/labs/genome/annotation.yml | 361 ------------ webapp/home/labs/genome/assembly.yml | 411 -------------- webapp/home/labs/genome/base.yml | 36 -- webapp/home/labs/genome/data.yml | 160 ------ .../genome/static/annotation-overview.png | Bin 129906 -> 0 bytes .../labs/genome/static/assembly-overview.png | Bin 157857 -> 0 bytes webapp/home/labs/genome/static/custom.css | 0 webapp/home/labs/genome/static/logo.png | Bin 8296 -> 0 bytes .../labs/genome/templates/conclusion.html | 163 ------ webapp/home/labs/genome/templates/footer.html | 10 - webapp/home/labs/genome/templates/intro.html | 40 -- webapp/home/labs/proteomics/CONTRIBUTORS | 3 - webapp/home/labs/proteomics/base.yml | 38 -- .../sections/conversion_modification.yml | 49 -- webapp/home/labs/proteomics/sections/data.yml | 55 -- .../sections/database_searching.yml | 78 --- .../sections/dda_standardised_tools.yml | 71 --- .../home/labs/proteomics/sections/dda_tmt.yml | 60 -- .../sections/dia_standardised_tools.yml | 43 -- webapp/home/labs/proteomics/static/custom.css | 21 - webapp/home/labs/proteomics/static/logo.png | Bin 2845 -> 0 bytes .../labs/proteomics/templates/conclusion.html | 1 - .../labs/proteomics/templates/footer.html | 9 - .../home/labs/proteomics/templates/intro.html | 155 ----- webapp/home/labs/simple/base.yml | 24 - webapp/home/labs/simple/section_1.yml | 100 ---- webapp/home/labs/simple/section_2.yml | 132 ----- webapp/home/labs/simple/static/custom.css | 6 - webapp/home/labs/simple/static/pillar.svg | 18 - .../home/labs/simple/templates/conclusion.md | 4 - webapp/home/labs/simple/templates/footer.md | 6 - webapp/home/labs/simple/templates/intro.md | 13 - ...ubsites_remove_notice_subsites_and_more.py | 24 + webapp/home/models.py | 40 +- webapp/home/static/home/labs | 1 - webapp/home/subdomains/DEPRECATED | 4 - webapp/home/subdomains/__init__.py | 1 - webapp/home/subdomains/genome/__init__.py | 3 - .../subdomains/genome/content/__init__.py | 1 - .../subdomains/genome/content/annotation.py | 304 ---------- .../subdomains/genome/content/assembly.py | 534 ------------------ webapp/home/subdomains/genome/content/data.py | 216 ------- webapp/home/subdomains/genome/sections.py | 83 --- webapp/home/subdomains/proteomics/__init__.py | 3 - .../subdomains/proteomics/content/__init__.py | 6 - .../subdomains/proteomics/content/data.py | 82 --- .../proteomics/content/database_searching.py | 73 --- .../content/dda_standardised_tools.py | 99 ---- .../subdomains/proteomics/content/dda_tmt.py | 87 --- .../content/dia_standardised_tools.py | 44 -- webapp/home/subdomains/proteomics/sections.py | 78 --- webapp/home/subdomains/python_to_yml.py | 68 --- webapp/home/templates/home/header-export.html | 66 --- .../home/templates/home/labs-deprecated.html | 13 + .../home/subdomains/components/accordion.html | 78 --- .../subdomains/components/contributors.html | 29 - .../subdomains/components/feedback-modal.html | 135 ----- .../home/subdomains/components/feedback.html | 117 ---- .../components/genome-community-modal.html | 20 - .../home/subdomains/components/gtn-modal.html | 33 -- .../subdomains/components/info-modal.html | 29 - .../home/subdomains/components/inputs.html | 16 - .../proteomics-community-modal.html | 19 - .../home/subdomains/components/section.html | 54 -- .../home/subdomains/export-error.html | 109 ---- .../templates/home/subdomains/exported.html | 90 --- webapp/home/templatetags/markdown.py | 56 -- webapp/home/test/data/__init__.py | 1 - webapp/home/test/data/notices.py | 16 +- webapp/home/test/data/subsites.py | 64 --- webapp/home/tests.py | 130 +---- webapp/home/views.py | 100 +--- webapp/utils/exceptions.py | 74 --- 88 files changed, 49 insertions(+), 6107 deletions(-) delete mode 100644 webapp/home/lab_cache.py delete mode 100644 webapp/home/lab_export.py delete mode 100644 webapp/home/lab_schema.py delete mode 100644 webapp/home/labs/.gitignore delete mode 100644 webapp/home/labs/docs/CONTRIBUTORS delete mode 100644 webapp/home/labs/docs/base.yml delete mode 100644 webapp/home/labs/docs/section_1.yml delete mode 100644 webapp/home/labs/docs/section_2.yml delete mode 100644 webapp/home/labs/docs/static/custom.css delete mode 100644 webapp/home/labs/docs/static/flask.svg delete mode 100644 webapp/home/labs/docs/templates/conclusion.html delete mode 100644 webapp/home/labs/docs/templates/footer.html delete mode 100644 webapp/home/labs/docs/templates/intro.html delete mode 100644 webapp/home/labs/genome/CONTRIBUTORS delete mode 100644 webapp/home/labs/genome/annotation.yml delete mode 100644 webapp/home/labs/genome/assembly.yml delete mode 100644 webapp/home/labs/genome/base.yml delete mode 100644 webapp/home/labs/genome/data.yml delete mode 100644 webapp/home/labs/genome/static/annotation-overview.png delete mode 100644 webapp/home/labs/genome/static/assembly-overview.png delete mode 100644 webapp/home/labs/genome/static/custom.css delete mode 100644 webapp/home/labs/genome/static/logo.png delete mode 100644 webapp/home/labs/genome/templates/conclusion.html delete mode 100644 webapp/home/labs/genome/templates/footer.html delete mode 100644 webapp/home/labs/genome/templates/intro.html delete mode 100644 webapp/home/labs/proteomics/CONTRIBUTORS delete mode 100644 webapp/home/labs/proteomics/base.yml delete mode 100644 webapp/home/labs/proteomics/sections/conversion_modification.yml delete mode 100644 webapp/home/labs/proteomics/sections/data.yml delete mode 100644 webapp/home/labs/proteomics/sections/database_searching.yml delete mode 100644 webapp/home/labs/proteomics/sections/dda_standardised_tools.yml delete mode 100644 webapp/home/labs/proteomics/sections/dda_tmt.yml delete mode 100644 webapp/home/labs/proteomics/sections/dia_standardised_tools.yml delete mode 100644 webapp/home/labs/proteomics/static/custom.css delete mode 100644 webapp/home/labs/proteomics/static/logo.png delete mode 100644 webapp/home/labs/proteomics/templates/conclusion.html delete mode 100644 webapp/home/labs/proteomics/templates/footer.html delete mode 100644 webapp/home/labs/proteomics/templates/intro.html delete mode 100644 webapp/home/labs/simple/base.yml delete mode 100644 webapp/home/labs/simple/section_1.yml delete mode 100644 webapp/home/labs/simple/section_2.yml delete mode 100644 webapp/home/labs/simple/static/custom.css delete mode 100644 webapp/home/labs/simple/static/pillar.svg delete mode 100644 webapp/home/labs/simple/templates/conclusion.md delete mode 100644 webapp/home/labs/simple/templates/footer.md delete mode 100644 webapp/home/labs/simple/templates/intro.md create mode 100644 webapp/home/migrations/0044_remove_coverimage_subsites_remove_notice_subsites_and_more.py delete mode 120000 webapp/home/static/home/labs delete mode 100644 webapp/home/subdomains/DEPRECATED delete mode 100644 webapp/home/subdomains/__init__.py delete mode 100644 webapp/home/subdomains/genome/__init__.py delete mode 100644 webapp/home/subdomains/genome/content/__init__.py delete mode 100644 webapp/home/subdomains/genome/content/annotation.py delete mode 100644 webapp/home/subdomains/genome/content/assembly.py delete mode 100644 webapp/home/subdomains/genome/content/data.py delete mode 100644 webapp/home/subdomains/genome/sections.py delete mode 100644 webapp/home/subdomains/proteomics/__init__.py delete mode 100644 webapp/home/subdomains/proteomics/content/__init__.py delete mode 100644 webapp/home/subdomains/proteomics/content/data.py delete mode 100644 webapp/home/subdomains/proteomics/content/database_searching.py delete mode 100644 webapp/home/subdomains/proteomics/content/dda_standardised_tools.py delete mode 100644 webapp/home/subdomains/proteomics/content/dda_tmt.py delete mode 100644 webapp/home/subdomains/proteomics/content/dia_standardised_tools.py delete mode 100644 webapp/home/subdomains/proteomics/sections.py delete mode 100644 webapp/home/subdomains/python_to_yml.py delete mode 100644 webapp/home/templates/home/header-export.html create mode 100644 webapp/home/templates/home/labs-deprecated.html delete mode 100644 webapp/home/templates/home/subdomains/components/accordion.html delete mode 100644 webapp/home/templates/home/subdomains/components/contributors.html delete mode 100644 webapp/home/templates/home/subdomains/components/feedback-modal.html delete mode 100644 webapp/home/templates/home/subdomains/components/feedback.html delete mode 100644 webapp/home/templates/home/subdomains/components/genome-community-modal.html delete mode 100644 webapp/home/templates/home/subdomains/components/gtn-modal.html delete mode 100644 webapp/home/templates/home/subdomains/components/info-modal.html delete mode 100644 webapp/home/templates/home/subdomains/components/inputs.html delete mode 100644 webapp/home/templates/home/subdomains/components/proteomics-community-modal.html delete mode 100644 webapp/home/templates/home/subdomains/components/section.html delete mode 100644 webapp/home/templates/home/subdomains/export-error.html delete mode 100644 webapp/home/templates/home/subdomains/exported.html delete mode 100644 webapp/home/test/data/subsites.py diff --git a/webapp/home/admin.py b/webapp/home/admin.py index 8b70e4e6..135926bd 100644 --- a/webapp/home/admin.py +++ b/webapp/home/admin.py @@ -5,7 +5,7 @@ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.conf import settings -from .models import CoverImage, MediaImage, Notice, Subsite, User +from .models import CoverImage, MediaImage, Notice, User from .admin_forms import NoticeAdminForm, UserCreationForm, UserChangeForm @@ -113,4 +113,3 @@ class CoverImageAdmin(admin.ModelAdmin): admin.site.unregister(Group) admin.site.register(MediaImage, MediaImageAdmin) admin.site.register(CoverImage, CoverImageAdmin) -admin.site.register(Subsite) diff --git a/webapp/home/lab_cache.py b/webapp/home/lab_cache.py deleted file mode 100644 index e916e030..00000000 --- a/webapp/home/lab_cache.py +++ /dev/null @@ -1,62 +0,0 @@ -"""Cache lab pages because rendering is expensive.""" - -from django.core.cache import cache -from django.utils.http import urlencode -from django.http import HttpResponse -from hashlib import md5 - -CACHE_KEY_IGNORE_GET_PARAMS = ( - 'cache', -) - - -class LabCache: - @classmethod - def get(cls, request): - if request.GET.get('cache', '').lower() == 'false': - return - - cache_key = cls._generate_cache_key(request) - body = cache.get(cache_key) - if body: - response = HttpResponse(body) - response['X-Cache-Status'] = 'HIT' - return response - - @classmethod - def put(cls, request, body): - cache_key = cls._generate_cache_key(request) - cache.set(cache_key, body, timeout=3600) - response = HttpResponse(body) - response['X-Cache-Status'] = 'MISS' - return response - - @classmethod - def _generate_cache_key(cls, request): - """Create a unique cache key from request path.""" - params = { - k: v for k, v in request.GET.items() - if k not in CACHE_KEY_IGNORE_GET_PARAMS - } - key = f"{request.path}?{urlencode(params)}" - return md5(key.encode('utf-8')).hexdigest() - - -class WebCache: - """Cache content from web requests.""" - - @classmethod - def get(cls, url): - cache_key = cls._generate_cache_key(url) - data = cache.get(cache_key) - if data: - return data - - @classmethod - def put(cls, url, data, timeout=3600): - cache_key = cls._generate_cache_key(url) - cache.set(cache_key, data, timeout=timeout) - - @classmethod - def _generate_cache_key(cls, url): - return md5(url.encode('utf-8')).hexdigest() diff --git a/webapp/home/lab_export.py b/webapp/home/lab_export.py deleted file mode 100644 index 6612539d..00000000 --- a/webapp/home/lab_export.py +++ /dev/null @@ -1,374 +0,0 @@ -"""Exported landing pages to be requested by external Galaxy servers. - -Example with local YAML: -http://127.0.0.1:8000/landing/export?content_root=http://127.0.0.1:8000/static/home/labs/genome/base.yml - -Example URL with remote YAML: -http://127.0.0.1:8000/landing/export?content_root=https://raw.githubusercontent.com/usegalaxy-au/galaxy-media-site/dev/webapp/home/static/home/labs/genome/base.yml - -""" - -import concurrent.futures -import logging -import requests -import warnings -import yaml -from bs4 import BeautifulSoup, MarkupResemblesLocatorWarning -from django.conf import settings -from markdown2 import Markdown -from pydantic import ValidationError - -from types import SimpleNamespace -from utils.exceptions import SubsiteBuildError -from .lab_schema import LabSchema, LabSectionSchema -from .lab_cache import WebCache - -logger = logging.getLogger('django') - -ACCEPTED_IMG_EXTENSIONS = ('png', 'jpg', 'jpeg', 'svg', 'webp') -CONTRIBUTORS_FILE = 'CONTRIBUTORS' -GITHUB_USERNAME_URL = "https://api.github.com/users/{username}" -CONTENT_TYPES = SimpleNamespace( - WEBPAGE='webpage', - YAML='yaml', - TEXT='text', -) - - -class ExportSubsiteContext(dict): - """Build and validate render context for exported subsite landing page. - - These page are intended to be displayed externally to the host Galaxy - (i.e. on a different Galaxy server). - - The context can be built from GET params or from an externally hosted YAML - context specified by a ``content_root`` GET param. - """ - - FETCH_SNIPPETS = ( - 'header_logo', - 'intro_md', - 'footer_md', - 'conclusion_md', - 'custom_css', - ) - - def __init__(self, content_root): - """Init context from dict.""" - super().__init__(self) - self['snippets'] = {} - self.content_root = content_root - self.parent_url = content_root.rsplit('/', 1)[0] + '/' - self.update({ - 'export': True, - 'extend_template': 'home/header-export.html', - }) - self._fetch_yaml_context() - self._fetch_sections() - self._fetch_contributors() - - def _clean(self): - """Format params for rendering.""" - self['galaxy_base_url'] = self['galaxy_base_url'].rstrip('/') - self._filter_sections() - - def validate(self): - """Validate against required params.""" - self._validate_sections() - self._clean() - - def _validate_sections(self): - """Validate sections against Pydantic schema.""" - for section in self['sections']: - try: - LabSectionSchema(**section) - except ValidationError as e: - raise SubsiteBuildError( - e, - section_id=section["id"], - source='YAML', - ) - - def _get( - self, - url, - expected_type=None, - ignore_404=False, - ): - """Fetch content from URL and validate returned content.""" - url = self._make_raw(url) - self._validate_url(url, expected_type) - try: - res = requests.get(url) - except requests.exceptions.RequestException as exc: - raise SubsiteBuildError(exc, url=url) - if res.status_code >= 300: - if ignore_404 and res.status_code == 404: - return - raise SubsiteBuildError( - f'HTTP {res.status_code} fetching file.', - url=url) - if expected_type != CONTENT_TYPES.WEBPAGE: - self._validate_not_webpage(url, res, expected_type) - return res - - def _validate_not_webpage(self, url, response, expected_type=None): - """Assert that the response body is not a webpage.""" - def looks_like_a_webpage(response): - body = response.content.decode('utf-8') - lines = [ - x.strip() - for x in body.split('\n') - if x.strip() - ] - return any([ - # raw.githubusercontent.com does not set content-type - 'text/html' in response.headers.get('content-type', ''), - lines and '' in lines[0].lower(), - lines and lines[0].lower().startswith('.yml or base.yml. - """ - if not self.content_root: - raise ValueError( - "GET parameter 'content_root' required for root URL") - - context = self._fetch_yaml_content(self.content_root, extend=False) - - if not self.content_root.endswith('base.yml'): - # Attempt to extend base.yml with self.content_root - base_content_url = (self.parent_url + 'base.yml') - base_context = self._fetch_yaml_content( - base_content_url, ignore_404=True, extend=False) - if base_context: - base_context.update(context) - context = base_context - - try: - LabSchema(**context) - except ValidationError as exc: - raise SubsiteBuildError(exc, url=self.content_root, source='YAML') - - self.update(context) - self._fetch_snippets() - - def _fetch_sections(self): - """Fetch webpage sections content from remote YAML file.""" - sections = self.get('sections') - if isinstance(sections, str): - self['sections'] = self._fetch_yaml_content(self.get('sections')) - elif isinstance(sections, list): - self['sections'] = [ - self._fetch_yaml_content(s) - for s in sections - ] - return sections - - def _filter_sections(self): - """Iterate over sections and remove items based on exclusion tags.""" - def filter_excluded_items(data): - def is_excluded_item(item): - return ( - isinstance(item, dict) - and 'exclude_from' in item - and self['root_domain'] in item['exclude_from'] - ) - - if isinstance(data, dict): - data = { - k: filter_excluded_items(v) - for k, v in data.items() - } - elif isinstance(data, list): - data = [ - filter_excluded_items(item) - for item in data - if not is_excluded_item(item) - ] - return data - - if self.get('root_domain'): - self['sections'] = filter_excluded_items(self['sections']) - - def _fetch_yaml_content(self, relpath, ignore_404=False, extend=True): - """Recursively fetch web content from remote YAML file.""" - yaml_url = self.content_root - if not (yaml_url and relpath): - return - url = ( - relpath if relpath.startswith('http') - else yaml_url.rsplit('/', 1)[0] + '/' + relpath.lstrip('./') - ) - res = self._get( - url, - expected_type=CONTENT_TYPES.YAML, - ignore_404=ignore_404, - ) - if not res: - return - yaml_str = res.content.decode('utf-8') - - try: - data = yaml.safe_load(yaml_str) - except yaml.YAMLError as exc: - raise SubsiteBuildError(exc, url=url, source='YAML') - if isinstance(data, str): - raise SubsiteBuildError( - 'YAML file must contain a dictionary or list.' - f' Got a string instead:\n{data}', - url=url, - source='YAML', - ) - - if extend and isinstance(data, dict): - data = { - # Fetch remote YAML if value is .yml - k: self._fetch_yaml_content(v) or v - if isinstance(v, str) and v.split('.')[-1] in ('yml', 'yaml') - else v - for k, v in data.items() - } - - return data - - def _fetch_contributors(self): - """Attempt to fetch list of contributors from repo.""" - url = self.parent_url + CONTRIBUTORS_FILE - res = self._get(url, ignore_404=True, expected_type=CONTENT_TYPES.TEXT) - if res: - usernames_list = [ - x.strip() for x in res.content.decode('utf-8').split('\n') - if x.strip() - and not x.strip().startswith('#') - ] - self['contributors'] = fetch_names(usernames_list) - else: - self['contributors'] = [] - - def _fetch_snippets(self): - """Fetch HTML snippets and add to context.snippets.""" - for name in self.FETCH_SNIPPETS: - if relpath := self.get(name): - if relpath.rsplit('.', 1)[1] in ACCEPTED_IMG_EXTENSIONS: - self['snippets'][name] = self._fetch_img_src(relpath) - else: - self['snippets'][name] = self._fetch_snippet(relpath) - - def _fetch_img_src(self, relpath): - """Build URL for image.""" - if self.content_root: - return self._make_raw(self.parent_url + relpath.lstrip('./')) - - def _fetch_snippet(self, relpath): - """Fetch HTML snippet from remote URL.""" - url = (self.parent_url + relpath.lstrip('./')) - res = self._get(url, expected_type=CONTENT_TYPES.WEBPAGE) - body = res.content.decode('utf-8') - if url.endswith('.md'): - body = self._convert_md(body) - if url.rsplit('.', 1)[1] in ('html', 'md'): - self._validate_html(body) - return body - - def _convert_md(self, text): - """Render markdown to HTML.""" - engine = Markdown(extras={ - "tables": True, - "code-friendly": True, - "html-classes": { - 'table': 'table table-striped', - }, - }) - return engine.convert(text) - - def _validate_html(self, body): - """Validate HTML content.""" - try: - with warnings.catch_warnings(): - warnings.simplefilter('ignore', MarkupResemblesLocatorWarning) - BeautifulSoup(body, 'html.parser') - except Exception as exc: - raise SubsiteBuildError(exc, source='HTML') - - -def get_github_user(username): - url = GITHUB_USERNAME_URL.format(username=username) - if cached := WebCache.get(url): - return cached - headers = { - 'X-GitHub-Api-Version': '2022-11-28', - } - token = settings.GITHUB_API_TOKEN - if token: - headers['Authorization'] = f'Bearer {token}' - response = requests.get(url, headers=headers) - if response.status_code == 200: - user_data = response.json() - WebCache.put(url, user_data, timeout=2_592_000) - return user_data - elif response.status_code == 401: - logger.warning( - 'GitHub API token unauthorized. Request blocked by rate-limiting.') - elif response.status_code == 404: - logger.warning(f'GitHub user not found: {username}') - WebCache.put(url, {'login': username}, timeout=2_592_000) - return {'login': username} - - -def fetch_names(usernames): - def fetch_name(username): - return (username, get_github_user(username)) - - users = [] - with concurrent.futures.ThreadPoolExecutor() as executor: - future_to_username = { - executor.submit(fetch_name, username): username - for username in usernames - } - for future in concurrent.futures.as_completed(future_to_username): - _, user_data = future.result() - users.append(user_data) - users.sort(key=lambda x: - usernames.index(x.get('login')) - if x and x.get('avatar_url') - else 9999) - - return users diff --git a/webapp/home/lab_schema.py b/webapp/home/lab_schema.py deleted file mode 100644 index 88cd33e7..00000000 --- a/webapp/home/lab_schema.py +++ /dev/null @@ -1,116 +0,0 @@ -"""Schema for validating Galaxy Lab content.""" - -import re -from enum import Enum -from pydantic import BaseModel, Field, field_validator -from pydantic.types import Annotated -from typing import Optional, Union - - -def html_tags(v: str) -> str: - """Validate markdown content.""" - if "<" not in v: - return v - # Remove self closing tags - v = ( - re.sub(r'(<.*?/>)|()', '', v, flags=re.MULTILINE) - .replace('
', '') - .replace('
', '') - ) - # Enumerate open/close tags - open_tags = re.findall(r'<[^/][\s\S]*?>', v, flags=re.MULTILINE) - close_tags = re.findall(r'', v, flags=re.MULTILINE) - assert len(open_tags) == len(close_tags), ( - f'Unclosed HTML tag in section content:\n{v}') - return v - - -MarkdownStr = Annotated[ - str, - Field(description='Markdown or HTML formatted string.'), -] - - -class IconEnum(str, Enum): - """Define material icon types for buttons.""" - run = 'run' # play_arrow - tutorial = 'tutorial' # school - social = 'social' # group - help = 'help' # help - view = 'view' # visibility - - -class TabContentEnum(str, Enum): - """Define the type of content in a tab item.""" - subsections = 'subsections' - - -class TabItem(BaseModel): - """Validate Galaxy Lab section tab item. - - In the UI this will be rendered as an "accordion" item. - """ - title_md: MarkdownStr - description_md: MarkdownStr - button_link: Optional[str] = None - button_tip: Optional[str] = None - button_md: Optional[MarkdownStr] = None - button_icon: Optional[IconEnum] = None - view_link: Optional[str] = None - view_tip: Optional[str] = None - view_md: Optional[MarkdownStr] = None - view_icon: Optional[IconEnum] = None - exclude_from: Optional[list[str]] = [] - - @field_validator( - 'title_md', 'description_md', 'button_md', 'view_md', - mode='before', - ) - def validate_md(cls, value): - return html_tags(value) - - -class TabSubsection(BaseModel): - """Validate Galaxy Lab section tab subsection.""" - id: str - title: str - content: list[TabItem] - - -class SectionTab(BaseModel): - """Validate Galaxy Lab section tab.""" - id: str - title: Optional[str] = None - content: Optional[ - Union[ - list[TabItem], - dict[TabContentEnum, list[TabSubsection]] - ] - ] = None - heading_md: Optional[MarkdownStr] = None - - @field_validator('heading_md', mode='before') - def validate_md(cls, value): - return html_tags(value) - - -class LabSectionSchema(BaseModel): - """Validate Galaxy Lab section.""" - id: str - tabs: list[SectionTab] - - -class LabSchema(BaseModel): - """Validate Galaxy Lab content.""" - site_name: str - lab_name: str - nationality: str - galaxy_base_url: str - subdomain: str - root_domain: str - sections: list[str] | str - header_logo: Optional[str] = None - custom_css: Optional[str] = None - intro_md: Optional[str] = None - conclusion_md: Optional[str] = None - footer_md: Optional[str] = None diff --git a/webapp/home/labs/.gitignore b/webapp/home/labs/.gitignore deleted file mode 100644 index 7835ffc2..00000000 --- a/webapp/home/labs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -singlecell \ No newline at end of file diff --git a/webapp/home/labs/docs/CONTRIBUTORS b/webapp/home/labs/docs/CONTRIBUTORS deleted file mode 100644 index 165a98cb..00000000 --- a/webapp/home/labs/docs/CONTRIBUTORS +++ /dev/null @@ -1,2 +0,0 @@ -# If GitHub username, name and avatar will be fetched and displayed -neoformit diff --git a/webapp/home/labs/docs/base.yml b/webapp/home/labs/docs/base.yml deleted file mode 100644 index 63faca19..00000000 --- a/webapp/home/labs/docs/base.yml +++ /dev/null @@ -1,23 +0,0 @@ -# Default spec for an exported subsite landing page - -# You can test with: /lab/export?content_root=https://raw.githubusercontent.com/usegalaxy-au/galaxy-media-site/dev/webapp/home/labs/docs/base.yml - -site_name: Antarctica -lab_name: Galaxy Lab Pages -nationality: Antarctican -galaxy_base_url: https://galaxy-antarctica.org -subdomain: antarctica -root_domain: galaxy-antarctica.org - -# These files need to be accessible on the internet, relative to the content_root URL! -# ----------------------------------------------------------------------------- -# Custom content relative to this file URL -intro_md: templates/intro.html -header_logo: static/flask.svg -footer_md: templates/footer.html -custom_css: static/custom.css - -# Data to be rendered into sections/tabs/accordion elements: -sections: - - section_1.yml - - section_2.yml diff --git a/webapp/home/labs/docs/section_1.yml b/webapp/home/labs/docs/section_1.yml deleted file mode 100644 index 804b8787..00000000 --- a/webapp/home/labs/docs/section_1.yml +++ /dev/null @@ -1,91 +0,0 @@ -id: section_1 -title: Example section -tabs: - - id: tools - title: Tools - heading_md: Common tools are listed here, or search for more in the full tool panel to the left. - content: - - # Accordion item schema: - # title_md: # inline MD accepted e.g. *italics*, **bold**, `code` - # description_md: - # inputs: - # - datatypes: # tool input 1 - two accepted datatypes - # - - # - - # label: - # - datatypes: # tool input 2 - one accepted datatype - # - - # label: - # button_link: - # button_md: - # button_tip: - # view_link: - # view_md: - # view_tip: - - - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=upload1" - title_md: Import data to Galaxy - description_md: > - Standard upload of data to Galaxy, from your computer or from the web. - - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fdevteam%2Ffastqc%2Ffastqc" - title_md: FastQC - sequence quality reports - description_md: > - Before using your sequencing data, it's important to ensure that - the data quality is sufficient for your analysis. - inputs: - - label: Sequencing data for analysis - datatypes: - - fasta - - fastq - - bam - - sam - - - id: workflows - title: Workflows - heading_md: | - A workflow is a series of Galaxy tools that have been linked together - to perform a specific analysis. You can use and customize the example workflows - below. - [Learn more](https://galaxyproject.org/learn/advanced-workflow/). - content: - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=222" - button_tip: Import to Galaxy AU - title_md: Data QC - view_link: https://workflowhub.eu/workflows/222 - view_tip: View in WorkflowHub - view_icon: tutorial - description_md: | - Report statistics from sequencing reads. -

- Tools: - - - `nanoplot` - - `fastqc` - - `multiqc` - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=223" - button_tip: Import to Galaxy AU - description_md: | - Estimates genome size and heterozygosity based on counts of kmers. -

- Tools: - - - `meryl` - - `genomescope` - title_md: Kmer counting to estimate genome size - view_link: https://workflowhub.eu/workflows/223 - view_tip: View in WorkflowHub - - - id: help - title: Help - content: - - button_md: More info - button_link: https://training.galaxyproject.org/training-material/topics/galaxy-interface/ - description_md: | - You can upload your data to Galaxy using the Upload tool from anywhere in Galaxy. - Just look for the "Upload data" button at the top of the tool panel. - title_md: How can I import my genomics data? - - description_md: | - We recommend subsampling large data sets to test tools and workflows. - A useful tool is `seqtk_seq`, setting the parameter at "Sample fraction of sequences". - title_md: How can I subsample my data? diff --git a/webapp/home/labs/docs/section_2.yml b/webapp/home/labs/docs/section_2.yml deleted file mode 100644 index 4215c5c5..00000000 --- a/webapp/home/labs/docs/section_2.yml +++ /dev/null @@ -1,155 +0,0 @@ -id: section_2 -title: Example section with subsections -tabs: - - id: tools - title: Tools - heading_md: | - The tools in this section have been divided into subsections to make it - easier for users to find the tools they need. This must replace the - entire value of the content key i.e. you can't mix - subsections with standalone items. - content: - - # Content can be split into subsections, each with a title. - # This must replace the entire value of the `content` key i.e. you can't - # mix subsections with standalone items: - subsections: - - id: subsection_1 - title: This is my first subsection - content: - - # Accordion item schema: - # title_md: # inline MD accepted e.g. *italics*, **bold**, `code` - # description_md: - # inputs: - # - datatypes: # tool input 1 - two accepted datatypes - # - - # - - # label: - # - datatypes: # tool input 2 - one accepted datatype - # - - # label: - # button_link: - # button_md: - # button_tip: - # view_link: - # view_md: - # view_tip: - - - title_md: Hifiasm- assembly with PacBio HiFi data - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fhifiasm%2Fhifiasm" - description_md:

A haplotype-resolved assembler for PacBio HiFi reads.

- inputs: - - label: PacBio reads - datatypes: - - fasta - - fastq - - - id: subsection_2 - title: Another subsection - content: - - title_md: Flye- assembly with PacBio or Nanopore data - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fflye%2Fflye" - description_md: > -

- de novo - assembly of single-molecule sequencing reads, designed for a wide range of datasets, - from small bacterial projects to large mammalian-scale assemblies. -

- inputs: - - label: Single-molecule sequencing reads - datatypes: - - fasta - - fastq - - - id: workflows - title: Workflows - heading_md: > - A workflow is a series of Galaxy tools that have been linked together - to perform a specific analysis. You can use and customize the example workflows - below. - - Learn more - . - content: - subsections: - - id: pacbio - title: Assembly with PacBio HiFi data - content: - - description_md: > -

- This - - How-to-Guide - - will describe the steps required to assemble your genome on the Galaxy Australia platform, - using multiple workflows. -

- title_md: About these workflows - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=220" - button_tip: Import to Galaxy Australia - description_md: > -

- Convert a BAM file to FASTQ format to perform QC analysis (required if your data is in BAM format). -

- inputs: - - label: PacBiosubreads.bam - datatypes: - - bam - title_md: BAM to FASTQ + QC v1.0 - view_link: https://workflowhub.eu/workflows/220 - view_tip: View in WorkflowHub - - id: nanopore - title: Assembly with Nanopore data and polishing with Illumina data - content: - - description_md: > -

- This - - tutorial - - describes the steps required to assemble a genome on Galaxy with Nanopore and Illumina data -

- title_md: About these workflows - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=225" - button_tip: Import to Galaxy Australia - description_md: > -

- Assemble Nanopore long reads. This workflow can be run alone or as part of a combined workflow for large genome assembly. -

- inputs: - - label: Long reads (may be raw, filtered and/or corrected) - datatypes: - - fastqsanger - title_md: Flye assembly with Nanopore data - view_link: https://workflowhub.eu/workflows/225 - view_tip: View in WorkflowHub - - - id: help - title: Help - content: - - button_md: Request support - button_link: /request - description_md: > -

- Yes. Galaxy Australia has assembly tools for small prokaryote genomes as well as larger eukaryote genomes. - We are continually adding new tools and optimising them for large genome assemblies - - this means adding enough computer processing power to run data-intensive tools, as well as configuring - aspects such as parallelisation -

-

- Please contact us if: -

-
    -
  • you need to increase your data storage limit
  • -
  • there is a tool you wish to request
  • -
  • a tool appears to be broken or running slowly
  • -
- title_md: Can I use Galaxy Australia to assemble a large genome? - - description_md: > -
    -
  • See the tutorials in this Help section. They cover different approaches to genome assembly
  • -
  • Read the methods in scientific papers about genome assembly, particularly those about genomes with similar characteristics to those in your project
  • -
  • See the Workflows section for examples of different approaches to genome assembly - these cover different sequencing data types, and a variety of tools.
  • -
- title_md: How can I learn about genome assembly? diff --git a/webapp/home/labs/docs/static/custom.css b/webapp/home/labs/docs/static/custom.css deleted file mode 100644 index 9fc3864b..00000000 --- a/webapp/home/labs/docs/static/custom.css +++ /dev/null @@ -1,34 +0,0 @@ -#header-logo { - width: unset; -} -.export-info-hover { - position: relative; -} -.export-info-hover:hover { - box-shadow: 0 0 2px 0 #000; - background-color: #eee; -} -.export-info-button { - font-size: 1rem; - font-weight: normal; - font-family: var(--bs-body-font-family); - background-color: #000; - color: #fff; - padding: 5px 10px; - margin: 0; - border-radius: 5px; - text-decoration: none; - display: inline-block; - margin: 10px 0; - cursor: pointer; - display: none; - position: absolute; - top: -43px; - right: -2px; -} -.export-info-hover:hover .export-info-button{ - display: block; -} -li { - margin-bottom: .5rem; -} \ No newline at end of file diff --git a/webapp/home/labs/docs/static/flask.svg b/webapp/home/labs/docs/static/flask.svg deleted file mode 100644 index 47228526..00000000 --- a/webapp/home/labs/docs/static/flask.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/webapp/home/labs/docs/templates/conclusion.html b/webapp/home/labs/docs/templates/conclusion.html deleted file mode 100644 index e69de29b..00000000 diff --git a/webapp/home/labs/docs/templates/footer.html b/webapp/home/labs/docs/templates/footer.html deleted file mode 100644 index 6e3dacb3..00000000 --- a/webapp/home/labs/docs/templates/footer.html +++ /dev/null @@ -1,11 +0,0 @@ -
- -
-

Here is a custom footer that I wrote for this page!

- -

- - Some smaller text here that nobody will ever read. Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo facilis voluptatibus unde, officiis placeat corrupti error est. Laborum optio doloremque minus nemo illum enim voluptatibus harum. Odit, voluptates tempora. Aperiam. - -

-
diff --git a/webapp/home/labs/docs/templates/intro.html b/webapp/home/labs/docs/templates/intro.html deleted file mode 100644 index aadaac70..00000000 --- a/webapp/home/labs/docs/templates/intro.html +++ /dev/null @@ -1,213 +0,0 @@ -
-

- Welcome to the Galaxy Australia Media Site! This endpoint is used to generate - "exported" Galaxy Lab landing pages from remote content hosted on GitHub. - You can use this endpoint to rapidly create your own Galaxy Lab pages by - pointing to your own remote content. -

- -
    -
  • See the content used to generate this documentation page - - here. - -
  • -
  • - See a full working example of an exported Galaxy Lab page - here. -
  • -
  • - See a minimal working example of a lab page - here. -
  • -
- -

- This custom introductory text was pulled down from GitHub and rendered in real time. - Updates to - - this text - - on the remote will be reflected on this page. Note that GitHub raw content is - cached for 300 seconds, so some updates may take a few minutes to appear on - this page. -

- -
- -
-
-

- -

-
-
-

-

    -
  • - The root of your site's content should be a YAML file - see - - base.yml - - for the content root of this page. -
  • -
  • - Request your page by pointing to your remote content with the content_root GET parameter - (take a look at URL for this page). - For example, we can explicitly request this page with: -
    - - - http://{{ HOSTNAME }}/lab/export?content_root=https://raw.githubusercontent.com/usegalaxy-au/galaxy-media-site/dev/webapp/home/labs/docs/base.yml - - -
  • -
  • - The web server will fetch your content from GitHub (or anywhere on the internet) and render it into this page. -
  • -
  • - Note that base.yml points to other files (YAML, HTML, CSS and images), which are located in the same remote directory (e.g. on GitHub). You can template the entire page with these files! -
  • -
  • - The most useful part of this machinery is the sections content, which populates the tool/workflow sections below. - See - data.yml - and - assembly.yml - for examples of how to structure this content in YAML format. -
  • -
-

-
-
-
- -
-

- -

-
-
-

-

    -
  1. - Copy our - - example content - - directory to your own github repository. -
  2. -
  3. - Build your Galaxy Lab's info, tools and workflows by editing the YAML and HTML files. - Custom CSS and JavaScript are possible too. -
  4. -
  5. - Request the site with the content_root GET parameter pointing to your remote content: -
    - - - http://{{ HOSTNAME }}/lab/export?content_root=https://raw.githubusercontent.com/myusername/myrepo/path/to/content/base.yml - - -
  6. -
  7. - If using GitHub to serve your content, make sure that your URL (as shown above) starts with - https://raw.githubusercontent.com! You can click on the "Raw" button on any file in - GitHub to get the correct URL. -
  8. -
-

-
-
-
- -
-

- -

-
-
-

- The webpage includes Bootstrap 5.1, Material icons, and - FontAwesome 5.15 and JQuery 3.6 so you can use any styling/functionality - defined there. This means you can have webforms, interactive elements, - and more. Check out the - - Genome Lab conclusion.html - - for an example of more complex usage including modals and webforms. Modals - (popups) are a great way to hide additional information until the user - requests it. - Try one now! -

-
-
-
-
-
- - - - - diff --git a/webapp/home/labs/genome/CONTRIBUTORS b/webapp/home/labs/genome/CONTRIBUTORS deleted file mode 100644 index bb026f69..00000000 --- a/webapp/home/labs/genome/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# If GitHub username, name and avatar will be fetched and displayed -AnnaSyme -neoformit diff --git a/webapp/home/labs/genome/annotation.yml b/webapp/home/labs/genome/annotation.yml deleted file mode 100644 index e693290a..00000000 --- a/webapp/home/labs/genome/annotation.yml +++ /dev/null @@ -1,361 +0,0 @@ -id: annotation -title: Genome annotation -tabs: - - id: tools - title: Tools - heading_md: > - Common tools are listed here, or search for more in the full tool panel to the left. - content: - - title_md: MAKER - genome annotation pipeline - description_md: > -

- MAKER is able to annotate both prokaryotes and eukaryotes. It works by aligning as many evidences as possible along the genome sequence, and then reconciling all these signals to determine probable gene structures. -

The evidences can be transcript or protein sequences from the same (or closely related) organism. These sequences can come from public databases (like NR or GenBank) or from your own experimental data (transcriptome assembly from an RNASeq experiment for example). MAKER is also able to take into account repeated elements. -

- inputs: - - label: Genome assembly - datatypes: - - fasta - - label: Protein evidence (optional) - datatypes: - - fasta - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fmaker%2Fmaker" - - title_md: Funannotate predict - predicted gene annotations - description_md: > -

- Funannotate predict performs a comprehensive whole genome gene prediction. Uses AUGUSTUS, GeneMark, Snap, GlimmerHMM, BUSCO, EVidence Modeler, tbl2asn, tRNAScan-SE, Exonerate, minimap2. This approach differs from Maker as it does not need to train ab initio predictors. -

- inputs: - - datatypes: - - fasta - label: Genome assembly (soft-masked) - - datatypes: - - bam - label: Mapped RNA evidence (optional) - - datatypes: - - fasta - label: Protein evidence (optional) - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Ffunannotate_predict%2Ffunannotate_predict" - - title_md: RepeatMasker - screen DNA sequences for interspersed repeats and low complexity regions - description_md: > -

- RepeatMasker is a program that screens DNA for repeated elements such as tandem repeats, transposons, SINEs and LINEs. Galaxy AU has installed the full and curated DFam screening databases, or a custom database can be provided in fasta format. Additional reference data can be downloaded from RepBase. -

- inputs: - - datatypes: - - fasta - label: Genome assembly - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Frepeat_masker%2Frepeatmasker_wrapper" - - title_md: InterProScan - Scans InterPro database and assigns functional annotations - description_md: > -

- Interproscan is a batch tool to query the InterPro database. It provides annotations based on multiple searches of profile and other functional databases. -

- inputs: - - datatypes: - - fasta - label: Genome assembly - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Finterproscan%2Finterproscan" - - title_md: Funannotate compare - compare several annotations - description_md: > -

- Funannotate compare compares several annotations and outputs a GFF3 file with the best gene models. It can be used to compare the results of different gene predictors, or to compare the results of a gene predictor with a reference annotation. -

- inputs: - - datatypes: - - fasta - label: Genome assemblies to compare - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Ffunannotate_compare%2Ffunannotate_compare" - - title_md: JBrowse - Genome browser to visualize annotations - description_md: '' - inputs: - - datatypes: - - fasta - label: Genome assembly - - datatypes: - - gff - - gff3 - - bed - label: Annotations - - datatypes: - - bam - label: Mapped RNAseq data (optional) - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fjbrowse%2Fjbrowse" - - title_md: Prokka - Genome annotation, prokaryotes only - description_md: '' - inputs: - - datatypes: - - fasta - label: Genome assembly - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fcrs4%2Fprokka%2Fprokka" - - - title_md: FGenesH - Genome annotation - description_md: > -

- Annotate an assembled genome and output a GFF3 file. There are several modules that do different things - search for FGENESH in the tool panel to see them. -

-

- Note: you must - - apply for access - - to this tool before use. -

- inputs: - - datatypes: - - fasta - label: Genome assembly - - datatypes: - - fasta - label: Repeat-masked (hard) genome assembly - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=fgenesh_annotate&version=latest" - - - id: workflows - title: Workflows - heading_md: > - A workflow is a series of Galaxy tools that have been linked together to perform a specific analysis. You can use and customize the example workflows below. - Learn more. - content: - subsections: - - id: general - title: General use - content: - - title_md: Annotation with Maker - description_md: > -

- Annotates a genome using multiple rounds of Maker, including gene prediction using SNAP and Augustus.

Tools: maker snap augustus busco jbrowse -

- inputs: - - label: Genome assembly - datatypes: - - fasta - - label: RNAseq Illumina reads - datatypes: - - fastq - - label: Proteins - datatypes: - - fasta - button_link: "{{ galaxy_base_url }}/u/anna/w/genome-annotation-with-maker" - view_link: '' - view_tip: '' - button_tip: Run in Galaxy AU - - title_md: Annotation with Funannotate - description_md: > -

- Annotates a genome using Funannotate, includes RNAseq data with RNAstar, and protein predictions from EggNOG.

Tools: RNAstar funannotate eggnog busco jbrowse aegean parseval -

- inputs: - - label: Genome assembly (soft-masked) - datatypes: - - fasta - - label: RNAseq Illumina reads - datatypes: - - fastq - - label: Alternative annotation - datatypes: - - gff3 - - label: Alternative annotation - datatypes: - - gbk - button_link: "{{ galaxy_base_url }}/u/anna/w/annotation-funannotate" - view_link: '' - view_tip: '' - button_tip: Run in Galaxy AU - - - id: tsi_transcripts - title: Transcript alignment - content: - - title_md: About these workflows - description_md: > -

- This How-to-Guide will describe the steps required to align transcript data to your genome on the Galaxy Australia platform, using multiple workflows. The outputs from these workflows can then be used as inputs into the next annotation workflow using FgenesH++. -

- - title_md: Repeat masking - description_md: > -

- Mask repeats in the genome. -

- inputs: - - datatypes: - - fasta - label: Assembled genome genome.fasta - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=875" - view_link: https://workflowhub.eu/workflows/875 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - title_md: QC and trimming of RNAseq - description_md: > -

- Trim and merge RNAseq reads. -

- inputs: - - datatypes: - - fastqsanger.gz - label: "For each tissue: RNAseq R1 files in a collection R1.fastqsanger.gz; RNAseq R2 files in a collection R2.fastqsanger.gz" - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=876" - view_link: https://workflowhub.eu/workflows/876 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - title_md: Find transcripts - description_md: > -

- Align RNAseq to genome to find transcripts. -

- inputs: - - datatypes: - - fasta - label: Masked genome masked_genome.fasta - - fastqsanger.gz - label: "For each tissue: Trimmed and merged RNAseq R1 files R1.fastqsanger.gz; Trimmed and merged RNAseq R2 files R2.fastqsanger.gz" - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=877" - view_link: https://workflowhub.eu/workflows/877 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - title_md: Combine transcripts - description_md: > -

- Merge transcriptomes from different tissues, and filter out non-coding sequences. -

- inputs: - - datatypes: - - fasta - label: Masked genome masked_genome.fasta - - gtf - label: Multiple transcriptomes in a collection transcriptome.gtf - - fasta.gz - label: Coding and non-coding sequences from NCBI coding_seqs.fna.gz non-coding_seqs.fna.gz - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=878" - view_link: https://workflowhub.eu/workflows/878 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - title_md: Extract transcripts - description_md: > -

- Extract longest transcripts. -

- inputs: - - datatypes: - - fasta - label: Merged transcriptomes merged_transcriptomes.fasta - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=879" - view_link: https://workflowhub.eu/workflows/879 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - - title_md: Convert formats - description_md: > -

- Convert formats for FgenesH++ -

- inputs: - - datatypes: - - fasta - label: Transdecoder nucleotides transdecoder_nucleotides.fasta - label: Transdecoder peptides transdecoder_peptides.fasta - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=880" - view_link: https://workflowhub.eu/workflows/880 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - id: tsi_annotation - title: Annotation with FgenesH++ - content: - - title_md: About these workflows - description_md: > -

- This How-to-Guide will describe the steps required to annotate your genome on the Galaxy Australia platform, using multiple workflows. -

- - title_md: Annotation with FgenesH++ - description_md: > - Annotate the genome using outputs from the TSI transcriptome workflows. -

- Note: you must - - apply for access - - to this tool before use. -

- inputs: - - datatypes: - - fasta - label: Assembled genome - - datatypes: - - fasta - label: Masked genome - - datatypes: - - fasta - label: > - Outputs from TSI convert formats workflow - (*.cdna, - *.pro, - *.dat) - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=881" - view_link: https://workflowhub.eu/workflows/881 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - id: help - title: Help - content: - - title_md: What is genome annotation? - description_md: > -

- These slides from the Galaxy training network explain the process of genome annotation in detail. You can use the and keys to navigate through the slides. -

- - title_md: Genome annotation overview - description_md: > -

- The flowchart below shows how you might use your input data (in green) with different Galaxy tools (in blue) to annotate a genome assembly. For example, one pathway would be taking an assembled genome, plus information about repeats, and data from RNA-seq, to run in the Maker pipeline. The annotatations can then be viewed in JBrowse. -

- Genome annotation flowchart -

- A graphical representation of genome annotation -

- - title_md: Can I use Fgenesh++ for annotation? - description_md: > -

- Fgenesh++ is a bioinformatics pipeline for automatic prediction of genes in eukaryotic genomes. It is presently not installed in Galaxy Australia, but the Australian Biocommons and partners have licensed the software and made it available via commandline. Australian researchers can apply for access through the Australian BioCommons. -

- button_md: Apply - button_link: https://www.biocommons.org.au/fgenesh-plus-plus - button_tip: Apply for access to Fgenesh++ - - title_md: Can I use Apollo to share and edit the annotated genome? - description_md: > -

- Apollo is web-browser accessible system that lets you conduct real-time collaborative curation and editing of genome annotations. -

-

- The Australian BioCommons and our partners at QCIF and Pawsey provide a hosted Apollo Portal service where your genome assembly and supporting evidence files can be hosted. All system administration is taken care of, so you and your team can focus on the annotation curation itself. -

-

- This Galaxy tutorial provides a complete walkthrough of the process of refining eukaryotic genome annotations with Apollo. -

- button_md: More info - button_link: https://support.biocommons.org.au/support/solutions/articles/6000244843-apollo-for-collaborative-curation-and-editing - - title_md: Tutorials - description_md: > -

- Genome annotation with Maker -

-

- Genome annotation of eukaryotes is a little more complicated than for prokaryotes: eukaryotic genomes are usually larger than prokaryotes, with more genes. The sequences determining the beginning and the end of a gene are generally less conserved than the prokaryotic ones. Many genes also contain introns, and the limits of these introns (acceptor and donor sites) are not highly conserved. This Galaxy tutorial uses MAKER to annotate the genome of a small eukaryote: Schizosaccharomyces pombe (a yeast). -

-
-

- Genome annotation with Funannotate -

-

- This Galaxy tutorial provides a complete walkthrough of the process of annotation with Funannotate, including the preparation of RNAseq data, structural annotation, functional annotation, visualisation, and comparing annotations. -

- - title_md: Galaxy Australia support - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_md: Request support - button_link: /request/support diff --git a/webapp/home/labs/genome/assembly.yml b/webapp/home/labs/genome/assembly.yml deleted file mode 100644 index 7609262f..00000000 --- a/webapp/home/labs/genome/assembly.yml +++ /dev/null @@ -1,411 +0,0 @@ -id: assembly -title: Genome assembly -tabs: - - id: tools - title: Tools - heading_md: > - Common tools are listed here, or search for more in the full tool panel to the left. - content: - - title_md: Hifiasm - assembly with PacBio HiFi data - description_md: > -

- A haplotype-resolved assembler for PacBio HiFi reads. -

- inputs: - - datatypes: - - fasta - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fhifiasm%2Fhifiasm" - - title_md: Flye - assembly with PacBio or Nanopore data - description_md: > -

- de novo assembly of single-molecule sequencing reads, designed for a wide range of datasets, from small bacterial projects to large mammalian-scale assemblies. -

- inputs: - - datatypes: - - fasta - - fastq - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fflye%2Fflye" - - title_md: Unicycler - assembly with Illumina, PacBio or Nanopore data - bacteria only - description_md: > -

- Hybrid assembly pipeline for bacterial genomes, uses both Illumina reads and long reads (PacBio or Nanopore). -

- inputs: - - datatypes: - - fastq - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Funicycler%2Funicycler" - - title_md: YAHS - scaffold assembly with HiC data - description_md: > -

- YAHS is a scaffolding tool based on a computational method that exploits the genomic proximity information in Hi-C data sets for long-range scaffolding of de novo genome assemblies. Inputs are the primary assembly (or haplotype 1), and HiC reads mapped to the assembly. See this tutorial to learn how to create a suitable BAM file. -

- inputs: - - label: Primary assembly or Haplotype 1 genome.fasta - datatypes: - - fasta - - label: HiC reads mapped to assembly mapped_reads.bam - datatypes: - - bam - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2yahs" - - title_md: Quast - assess genome assembly quality - description_md: > -

- QUAST = QUality ASsessment Tool. The tool evaluates genome assemblies by computing various metrics. If you have one or multiple genome assemblies, you can assess their quality with Quast. It works with or without reference genome. -

- inputs: - - datatypes: - - fasta - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fquast%2Fquast" - - title_md: Busco - assess genome assembly quality - description_md: > -

- BUSCO: assessing genome assembly and annotation completeness with Benchmarking Universal Single-Copy Orthologs. The tool attempts to provide a quantitative assessment of the completeness in terms of the expected gene content of a genome assembly, transcriptome, or annotated gene set. -

- inputs: - - datatypes: - - fasta - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fbusco%2Fbusco" - - title_md: MitoHiFi - assemble mitochondrial genomes - description_md: > -

- Assemble mitochondrial genomes from PacBio HiFi reads. Run first to find a related mitogenome, then run to assemble the genome. Inputs are PacBio HiFi reads in fasta or fastq format, and a related mitogenome in both fasta and genbank formats. -

- inputs: - - datatypes: - - fasta - - fastq - - genbank - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fmitohifi%2Fmitohfi" - - - id: workflows - title: Workflows - heading_md: > - A workflow is a series of Galaxy tools that have been linked together to perform a specific analysis. You can use and customize the example workflows below. - Learn more. - content: - subsections: - - id: pacbio - title: TSI assembly workflows - PacBio HiFi data - content: - - title_md: About these workflows - description_md: > -

- This How-to-Guide will describe the steps required to assemble your genome on the Galaxy Australia platform, using multiple workflows. There is also a guide about the Genome Assessment workflow, and the HiC Scaffolding workflow. -

- - title_md: BAM to FASTQ + QC v1.0 - description_md: > -

- Convert a BAM file to FASTQ format to perform QC analysis (required if your data is in BAM format). -

- inputs: - - datatypes: - - bam - label: PacBio subreads.bam - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=220" - view_link: https://workflowhub.eu/workflows/220 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: PacBio HiFi genome assembly using hifiasm v2.1 - description_md: > -

- Assemble a genome using PacBio HiFi reads. -

- inputs: - - datatypes: - - fastqsanger - label: HiFi reads - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=221" - view_link: https://workflowhub.eu/workflows/221 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Purge duplicates from hifiasm assembly v1.0 - description_md: > -

- Optional workflow to purge duplicates from the contig assembly. -

- inputs: - - datatypes: - - fastqsanger - label: HiFi reads - - datatypes: - - fasta - label: Primary assembly contigs - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=237" - view_link: https://workflowhub.eu/workflows/237 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Genome assessment post-assembly - description_md: > -

- Evaluate the quality of your genome assembly with a comprehensive report including FASTA stats, BUSCO, QUAST, Meryl and Merqury. -

- inputs: - - datatypes: - - fasta - label: Primary assembly contigs - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=403" - view_link: https://workflowhub.eu/workflows/403 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Optional HiC scaffolding workflow - description_md: > -

- If you have HiC data, scaffold your assembly using YAHS. -

- inputs: - - datatypes: - - fasta - label: Primary or Hap1 assembly - - datatypes: - - fastqsanger.gz - label: HiC forward reads, HiC reverse reads - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=1054" - view_link: https://workflowhub.eu/workflows/1054 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - id: nanopore - title: General assembly workflows - Nanopore and Illumina data - content: - - title_md: About these workflows - description_md: > -

- This tutorial describes the steps required to assemble a genome on Galaxy with Nanopore and Illumina data. -

- - title_md: Flye assembly with Nanopore data - description_md: > -

- Assemble Nanopore long reads. This workflow can be run alone or as part of a combined workflow for large genome assembly. -

- inputs: - - datatypes: - - fastqsanger - label: Long reads (may be raw, filtered and/or corrected) - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=225" - view_link: https://workflowhub.eu/workflows/225 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Assembly polishing - description_md: > -

- Polishes (corrects) an assembly, using long reads (Racon and Medaka) and short reads (Racon). -

- inputs: - - datatypes: - - fasta - label: Assembly to polish - - datatypes: - - fastq - label: Long reads (those used in assembly) - - datatypes: - - fastq - label: Short reads to be used for polishing (R1 only) - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=226" - view_link: https://workflowhub.eu/workflows/226 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Assess genome quality - description_md: > -

- Assesses the quality of the genome assembly. Generates statistics, determines if expected genes are present and align contigs to a reference genome. -

- inputs: - - datatypes: - - fasta - label: Polished assembly - - datatypes: - - fasta - label: Reference genome assembly (e.g. related species) - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=229" - view_link: https://workflowhub.eu/workflows/229 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - id: hic - title: VGP assembly workflows - PacBio HiFi and (optional) HiC data - content: - - title_md: About these workflows - description_md: > -

- These workflows have been developed as part of the global Vertebrate Genome Project (VGP). A guide to using these in Galaxy Australia can be found here. A complete guide to the individual workflows and sample results can be found here. There are many different ways that these workflows can be used in practice - for a comprehensive example, check out this Galaxy tutorial. -

- - title_md: Kmer profiling - description_md: > -

- This workflow produces a Meryl database and Genomescope outputs that will be used to determine parameters for following workflows, and assess the quality of genome assemblies. Specifically, it provides information about the genomic complexity, such as the genome size and levels of heterozygosity and repeat content, as well about the data quality. -

- inputs: - - datatypes: - - fastq - label: PacBio HiFi reads - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/kmer-profiling-hifi-VGP1/main" - view_link: https://dockstore.org/workflows/github.com/iwc-workflows/kmer-profiling-hifi-VGP1/main:main - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Hifi assembly and HiC phasing - description_md: > -

- This workflow uses hifiasm (HiC mode) to generate HiC-phased haplotypes (hap1 and hap2). This is in contrast to its default mode, which generates primary and alternate pseudohaplotype assemblies. This workflow includes three tools for evaluating assembly quality: gfastats, BUSCO and Merqury. -

-

- Note: if you have multiple input files for each HiC set, they need to be concatenated. The forward set needs to be concatenated in the same order as reverse set. -

- inputs: - - datatypes: - - fasta - label: PacBio HiFi reads - - datatypes: - - fastq - label: PacBio HiC reads (forward) - - datatypes: - - fastq - label: PacBio HiC reads (reverse) - - datatypes: - - meryldb - label: Meryl kmer database - - datatypes: - - txt - label: GenomeScope genome profile summary - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Assembly-Hifi-HiC-phasing-VGP4/main" - view_link: https://dockstore.org/workflows/github.com/iwc-workflows/Assembly-Hifi-HiC-phasing-VGP4/main:main - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - title_md: Hifi assembly without HiC data - description_md: > -

- This workflow uses hifiasm to generate primary and alternate pseudohaplotype assemblies. This workflow includes three tools for evaluating assembly quality: gfastats, BUSCO and Merqury. -

- inputs: - - datatypes: - - fasta - label: PacBio HiFi reads - - datatypes: - - meryldb - label: Meryl kmer database - - datatypes: - - txt - label: GenomeScope genome profile summary - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Assembly-Hifi-only-VGP3/main" - view_link: https://dockstore.org/workflows/github.com/iwc-workflows/Assembly-Hifi-only-VGP3/main:main - view_tip: View in Dockstore - button_tip: Import to Galaxy Australia - - - title_md: HiC scaffolding - description_md: > -

- This workflow scaffolds the assembly contigs using information from HiC data. -

- inputs: - - datatypes: - - gfa - label: Assembly of haplotype 1 - - datatypes: - - fastq - label: HiC forward reads - - datatypes: - - fastq - label: HiC reverse reads - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Scaffolding-HiC-VGP8/main" - view_link: https://dockstore.org/workflows/github.com/iwc-workflows/Scaffolding-HiC-VGP8/main:main - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - title_md: Decontamination - description_md: > -

- This workflow identifies and removes contaminants from the assembly. -

- inputs: - - datatypes: - - fasta - label: Assembly - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Assembly-decontamination-VGP9/main:v0.1" - view_link: https://dockstore.org/workflows/github.com/iwc-workflows/Assembly-decontamination-VGP9/main:v0.1 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy Australia - - - id: help - title: Help - content: - - title_md: Can I use Galaxy Australia to assemble a large genome? - description_md: > -

- Yes. Galaxy Australia has assembly tools for small prokaryote genomes as well as larger eukaryote genomes. We are continually adding new tools and optimising them for large genome assemblies - this means adding enough computer processing power to run data-intensive tools, as well as configuring aspects such as parallelisation. -

-

- Please contact us if: -

-
    -
  • you need to increase your data storage limit
  • -
  • there is a tool you wish to request
  • -
  • a tool appears to be broken or running slowly
  • -
- button_md: Request support - button_link: /request - - title_md: How can I learn about genome assembly? - description_md: > -
    -
  • See the tutorials in this Help section. They cover different approaches to genome assembly.
  • -
  • Read the methods in scientific papers about genome assembly, particularly those about genomes with similar characteristics to those in your project
  • -
  • See the Workflows section for examples of different approaches to genome assembly - these cover different sequencing data types, and a variety of tools.
  • -
- - title_md: Genome assembly overview - description_md: > -

- Genome assembly can be a very involved process. A typical genome assembly procedure might look like: -

-
    -
  • Data QC - check the quality and characteristics of your sequencing reads.
  • -
  • Kmer counting - to determine genome characteristics such as ploidy and size.
  • -
  • Data preparation - trimming and filtering sequencing reads if required.
  • -
  • Assembly - for large genomes, this is usually done with long sequencing reads from PacBio or Nanopore.
  • -
  • Polishing - the assembly may be polished (corrected) with long and/or short (Illumina) reads.
  • -
  • Scaffolding - the assembly contigs may be joined together with other sequencing data such as HiC.
  • -
  • Assessment - at any stage, the assembly can be assessed for number of contigs, number of base pairs, whether expected genes are present, and many other metrics.
  • -
  • Annotation - identify features on the genome assembly such as gene names and locations.
  • -
- Genome assembly flowchart -

- A graphical representation of genome assembly -

- - title_md: Which tools should I use? - description_md: > -

- There is no best set of tools to recommend - new tools are developed constantly, sequencing technology improves rapidly, and many genomes have never been sequenced before and thus their characteristics and quirks are unknown. The "Tools" tab in this section includes a list of commonly-used tools that could be a good starting point. You will find other tools in recent publications or used in workflows. -

-

- You can also search for tools in Galaxy's tool panel. If they aren't installed on Galaxy Australia, you can request installation of a tool. -

-

- We recommend testing a tool on a small data set first and seeing if the results make sense, before running on your full data set. -

- - title_md: Tutorials - description_md: > -

- Find 15+ Galaxy training tutorials here. -

-

- Introduction to genome assembly and annotation (slides) -

-

- Vertebrate genome assembly pipeline (tutorial) -

-

- Nanopore and illumina genome assembly (tutorial) -

-

- Share workflows and results with workflow reports (tutorial) -

- - title_md: How can I assess the quality of my genome assembly? - description_md: > -

- Once a genome has been assembled, it is important to assess the quality of the assembly, and in the first instance, this quality control (QC) can be achieved using the workflow described here. -

- button_md: Workflow tutorial - button_link: https://australianbiocommons.github.io/how-to-guides/genome_assembly/assembly_qc - - title_md: Galaxy Australia support - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_md: Request support - button_link: /request/support diff --git a/webapp/home/labs/genome/base.yml b/webapp/home/labs/genome/base.yml deleted file mode 100644 index 232de7a9..00000000 --- a/webapp/home/labs/genome/base.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Test this locally with: -# http://127.0.0.1:8000/lab/export?content_root=http://localhost:8000/static/home/labs/genome/base.yml - -# Request this on site.usegalaxy.org.au with: -# https://site.usegalaxy.org.au/lab/export?content_root=https://site.usegalaxy.org.au/static/home/labs/genome/base.yml - -# Check out the documentation for building exported labs: -# https://site.usegalaxy.org.au/lab/export - -# Use these variables in HTML templates like: -# "Welcome to the Galaxy {{ site_name }} {{ lab_name }}" -# To make the content more generic and reusable across sites -site_name: Australia -lab_name: Genome Lab -nationality: Australian -galaxy_base_url: https://genome.usegalaxy.org.au # Use for rendering tool/workflow URLs. Trailing '/' will be removed. -subdomain: genome -root_domain: usegalaxy.org.au -feedback_email: help@genome.edu.au - -# Custom content relative to this file URL -header_logo: static/logo.png -custom_css: static/custom.css -intro_md: templates/intro.html -conclusion_md: templates/conclusion.html -footer_md: templates/footer.html - - -# Data (Tools, Workflows etc.) to be rendered into sections/tabs/accordion elements. -# Either: -# 1. Relative to this file URL -# 2. Full URL to fetch globally centralized content -sections: - - data.yml - - assembly.yml - - annotation.yml diff --git a/webapp/home/labs/genome/data.yml b/webapp/home/labs/genome/data.yml deleted file mode 100644 index 79ba2c2b..00000000 --- a/webapp/home/labs/genome/data.yml +++ /dev/null @@ -1,160 +0,0 @@ -id: data -title: Data import and preparation -tabs: - - id: tools - title: Tools - heading_md: > - Common tools are listed here, or search for more in the full tool panel to the left. - content: - - title_md: Import data to Galaxy - description_md: > - Standard upload of data to Galaxy, from your computer or from the web. - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=upload1" - - title_md: FastQC - sequence quality reports - description_md: > -

- Before using your sequencing data, it's important to ensure that - the data quality is sufficient for your analysis. -

- inputs: - - datatypes: - - fastq - - bam - - sam - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fdevteam%2Ffastqc%2Ffastqc" - - title_md: FastP - sequence quality reports, trimming & filtering - description_md: > -

- Faster run than FastQC, this tool can also trim reads and filter by quality. -

- inputs: - - datatypes: - - fastq - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Ffastp%2Ffastp" - - title_md: NanoPlot - visualize Oxford Nanopore data - description_md: > -

- A plotting suite for Oxford Nanopore sequencing data and alignments. -

- inputs: - - datatypes: - - fastq - - fasta - - vcf_bgzip - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fnanoplot%2Fnanoplot" - - title_md: GenomeScope - estimate genome size - description_md: > -

- A set of metrics and graphs to visualize genome size and complexity prior to assembly. -

- inputs: - - datatypes: - - tabular - label: Output from Meryl or Jellyfish histo - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fgenomescope%2Fgenomescope" - - title_md: Meryl - count kmers - description_md: > -

- Prepare kmer count histogram for input to GenomeScope. -

- inputs: - - datatypes: - - fastq - - fasta - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fmeryl%2Fmeryl" - - id: workflows - title: Workflows - heading_md: > - A workflow is a series of Galaxy tools that have been linked together to perform a specific analysis. You can use and customize the example workflows below. - Learn more. - content: - - title_md: Data QC - description_md: > -

- Report statistics from sequencing reads.

Tools: nanoplot fastqc multiqc -

- button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=222" - view_link: https://workflowhub.eu/workflows/222 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy AU - - title_md: Kmer counting to estimate genome size - description_md: > -

- Estimates genome size and heterozygosity based on counts of kmers.

Tools: meryl genomescope -

- button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=223" - view_link: https://workflowhub.eu/workflows/223 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy AU - - title_md: Trim and filter reads - description_md: > -

- Trims and filters raw sequence reads according to specified settings.

Tools: fastp -

- button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=224" - view_link: https://workflowhub.eu/workflows/224 - view_tip: View in WorkflowHub - button_tip: Import to Galaxy AU - - id: help - title: Help - content: - - title_md: How can I import my genomics data? - description_md: > -

- You can upload your data to Galaxy using the Upload tool from anywhere in Galaxy. Just look for the "Upload data" button at the top of the tool panel. -

- button_md: More info - button_link: https://training.galaxyproject.org/training-material/topics/galaxy-interface/ - - title_md: How can I subsample my data? - description_md: > -

- We recommend subsampling large data sets to test tools and workflows. A useful tool is seqtk_seq, setting the parameter at "Sample fraction of sequences". -

- - title_md: How can I import data from the BPA portal? - description_md: > -

- BioPlatforms Australia allows data downloads via URL. Once you have generated one of these URLs in the BPA portal, you can import it into Galaxy using the "Fetch data" feature of the Upload tool. -

- button_md: More info - button_link: https://australianbiocommons.github.io/how-to-guides/genome_assembly/hifi_assembly#in-depth-workflow-guide - - title_md: Can I upload sensitive data? - description_md: > -

- No, do not upload personal or sensitive, such as human health or clinical data. Please see our Data Privacy page for definitions of sensitive and health-related information. -

-

- Please also make sure you have read our Terms of Service, which covers hosting and analysis of research data. -

- - title_md: Is my data private? - description_md: > -

- Please read our Privacy Policy for information on your personal data and any data that you upload. -

- - title_md: How can I increase my storage quota? - description_md: > -

- Please submit a quota request if your Galaxy Australia account reaches its data storage limit. Requests are usually provisioned quickly if you provide a reasonable use case for your request. -

- button_md: Request - button_link: /request/quota - - title_md: "Tutorial: Quality Control" - description_md: > -

- Quality control and data cleaning is an essential first step in any NGS analysis. This tutorial will show you how to use and interpret results from FastQC, NanoPlot and PycoQC. -

- button_md: Tutorial - button_link: https://training.galaxyproject.org/training-material/topics/sequence-analysis/tutorials/quality-control/tutorial.html - - title_md: "Tutorial: introduction to Genomics and Galaxy" - description_md: > -

- This practical aims to familiarize you with the Galaxy user interface. It will teach you how to perform basic tasks such as importing data, running tools, working with histories, creating workflows, and sharing your work. -

- button_md: Tutorial - button_link: https://training.galaxyproject.org/training-material/topics/introduction/tutorials/galaxy-intro-strands/tutorial.html - - title_md: Galaxy Australia support - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_md: Request support - button_link: /request/support diff --git a/webapp/home/labs/genome/static/annotation-overview.png b/webapp/home/labs/genome/static/annotation-overview.png deleted file mode 100644 index 0bdeaa80b76e2bbac3c2d731acefcefc130e6519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129906 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 z

eIJrN)6AC)v)@)Z|mNfb(q(F^KP=wl+W*T!t1 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 diff --git a/webapp/home/labs/genome/static/custom.css b/webapp/home/labs/genome/static/custom.css deleted file mode 100644 index e69de29b..00000000 diff --git a/webapp/home/labs/genome/static/logo.png b/webapp/home/labs/genome/static/logo.png deleted file mode 100644 index ea8b9ffacf04de27c6d06432998f755e1ad86621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8296 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 MRn$U=Kufz diff --git a/webapp/home/labs/genome/templates/conclusion.html b/webapp/home/labs/genome/templates/conclusion.html deleted file mode 100644 index 13e7d771..00000000 --- a/webapp/home/labs/genome/templates/conclusion.html +++ /dev/null @@ -1,163 +0,0 @@ -

-

What's happening in {{ nationality }} genomics research?

- -
-
-

What do you think of the {{ lab_name }}?

- -
- - - - - - - - diff --git a/webapp/home/labs/genome/templates/footer.html b/webapp/home/labs/genome/templates/footer.html deleted file mode 100644 index 172d3c74..00000000 --- a/webapp/home/labs/genome/templates/footer.html +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/webapp/home/labs/genome/templates/intro.html b/webapp/home/labs/genome/templates/intro.html deleted file mode 100644 index e2ea1c74..00000000 --- a/webapp/home/labs/genome/templates/intro.html +++ /dev/null @@ -1,40 +0,0 @@ -
-

- Welcome to the Galaxy {{ site_name }} {{ lab_name }}. Get quick access to tools, workflows and tutorials for genome assembly and annotation. -
- - What is this page? - -

- - -
diff --git a/webapp/home/labs/proteomics/CONTRIBUTORS b/webapp/home/labs/proteomics/CONTRIBUTORS deleted file mode 100644 index a690e999..00000000 --- a/webapp/home/labs/proteomics/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# If GitHub username, name and avatar will be fetched and displayed -supernord -neoformit diff --git a/webapp/home/labs/proteomics/base.yml b/webapp/home/labs/proteomics/base.yml deleted file mode 100644 index 14625c6d..00000000 --- a/webapp/home/labs/proteomics/base.yml +++ /dev/null @@ -1,38 +0,0 @@ -# Test this locally with: -# http://127.0.0.1:8000/lab/export?content_root=http://localhost:8000/static/home/labs/proteomics/base.yml - -# Request this on site.usegalaxy.org.au with: -# https://site.usegalaxy.org.au/lab/export?content_root=https://site.usegalaxy.org.au/static/home/labs/proteomics/base.yml - -# Check out the documentation for building exported labs: -# https://site.usegalaxy.org.au/lab/export - -# Use these variables in HTML templates like: -# "Welcome to the Galaxy {{ site_name }} {{ lab_name }}" -# To make the content more generic and reusable across sites -site_name: Australia -lab_name: Proteomics Lab -nationality: Australian -galaxy_base_url: https://proteomics.usegalaxy.org.au # Use for rendering tool/workflow URLs. Trailing '/' will be removed. -subdomain: proteomics -root_domain: usegalaxy.org.au -feedback_email: help@genome.edu.au - -# Custom content relative to this file URL -header_logo: static/logo.png -custom_css: static/custom.css -intro_md: templates/intro.html -conclusion_md: templates/conclusion.html -footer_md: templates/footer.html - -# Data (Tools, Workflows etc.) to be rendered into sections/tabs/accordion elements. -# Either: -# 1. Relative to this file URL -# 2. Full URL to fetch globally centralized content -sections: - - sections/data.yml - - sections/conversion_modification.yml - - sections/database_searching.yml - - sections/dda_standardised_tools.yml - - sections/dia_standardised_tools.yml - - sections/dda_tmt.yml diff --git a/webapp/home/labs/proteomics/sections/conversion_modification.yml b/webapp/home/labs/proteomics/sections/conversion_modification.yml deleted file mode 100644 index 6a074920..00000000 --- a/webapp/home/labs/proteomics/sections/conversion_modification.yml +++ /dev/null @@ -1,49 +0,0 @@ -id: conversion_modification -title: MS file conversion -tabs: - - id: tools - title: Tools - heading_md: > - Some example tools are listed here: you can also search for more in the full tool panel to the left. - content: - - title_md: "msconvert" - description_md: > -

- Convert and/or filter mass spectrometry files. -

- inputs: - - datatypes: - - thermo.raw - - mzML - - mzXML - - raw - - wiff - - wiff.tar - - agilentbrukeryep.d.tar - - agilentmasshunter.d.tar - - brukerbaf.d.tar - - brukertdf.d.tar - - watersmasslynx.raw.tar - label: Input MS data - outputs: - - datatypes: - - mz5 - - mzML - - mzXML - - mgf - - ms2 - label: Output MS data - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/msconvert/msconvert/" - - title_md: "Thermo RAW file converter" - description_md: > -

- Thermo RAW file converter. -

- inputs: - - datatypes: - - thermo.raw - label: Thermo RAW file - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/thermo_raw_file_converter/thermo_raw_file_converter/" - # - id: help - # title: Help - # content: [] diff --git a/webapp/home/labs/proteomics/sections/data.yml b/webapp/home/labs/proteomics/sections/data.yml deleted file mode 100644 index b162e648..00000000 --- a/webapp/home/labs/proteomics/sections/data.yml +++ /dev/null @@ -1,55 +0,0 @@ -id: data -title: Data import -tabs: - - id: tools - title: Tools - heading_md: "Some example tools are listed here: you can also search for more in the full tool panel to the left." - content: - - title_md: "Import data to Galaxy" - description_md: "

Standard upload of data to Galaxy, from your computer or from the web.

" - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=upload1" - - id: help - title: Help - content: - - title_md: "Can I upload sensitive data?" - description_md: | -

- No, do not upload personal or sensitive, such as human health or clinical data. - Please see our - Data Privacy - page for definitions of sensitive and health-related information. -

-

- Please also make sure you have read our - Terms of Service, - which covers hosting and analysis of research data. -

- - title_md: "Is my data private?" - description_md: | -

- Please read our - Privacy Policy - for information on your personal data and any data that you upload. -

- - title_md: "How can I increase my storage quota?" - description_md: | -

- Please submit a quota request if your Galaxy Australia account reaches its data storage limit. Requests are usually provisioned quickly if you provide a reasonable use case for your request. -

- button_link: "/request/quota" - button_md: "Request" - - title_md: "Tutorial: Introduction to proteomics, protein identification, quantification and statistical modelling" - description_md: | -

- This practical aims to familiarize you with Galaxy for Proteomics, including theory, methods and software examples. -

- button_link: "https://training.galaxyproject.org/training-material/topics/proteomics/tutorials/introduction/slides.html#1" - button_md: "Tutorial" - - title_md: "Galaxy Australia support" - description_md: | -

- Any user of Galaxy Australia can request support through an - online form. -

- button_link: "/request/support" - button_md: "Request support" diff --git a/webapp/home/labs/proteomics/sections/database_searching.yml b/webapp/home/labs/proteomics/sections/database_searching.yml deleted file mode 100644 index fb36ab0c..00000000 --- a/webapp/home/labs/proteomics/sections/database_searching.yml +++ /dev/null @@ -1,78 +0,0 @@ -id: database_searching -title: Database searching -tabs: - - id: tools - title: Tools - heading_md: > - Some example tools are listed here: you can also search for more in the full tool panel to the left. - content: - - title_md: "DecoyDatabase" - description_md: > -

- Create decoy sequence database from forward sequence database. -

- inputs: - - datatypes: - - fasta - label: Input FASTA file(s), each containing a database - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/openms_decoydatabase/DecoyDatabase/" - - title_md: "MaxQuant" - description_md: > -

- MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets. -

- inputs: - - datatypes: - - thermo.raw - - mzML - - mzXML - label: Mass spectrometry data sets - - datatypes: - - tabular - label: Experimental design template - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/maxquant/maxquant/" - - title_md: "Morpheus" - description_md: > -

- Database search algorithm for high-resolution tandem mass spectra. -

- inputs: - - datatypes: - - mzML - label: Indexed mzML - - datatypes: - - fasta - - uniprotxml - label: "MS Protein Search Database: UniProt Xml or Fasta" - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/morpheus/morpheus/" - - id: help - title: Help - content: - - title_md: "Introduction to proteomics, protein identification, quantification and statistical modelling" - description_md: > -

- Start here if you are new to proteomic analysis in Galaxy. -

- button_link: "https://usegalaxy.org.au/training-material/topics/proteomics/tutorials/introduction/slides.html" - button_md: "Tutorial" - - title_md: "Label-free data analysis using MaxQuant" - description_md: > -

- Learn how to use MaxQuant for the analysis of label-free shotgun (DDA) data. -

- button_link: "https://proteomics.usegalaxy.org.au/training-material/topics/proteomics/tutorials/maxquant-label-free/tutorial.html" - button_md: "Tutorial" - - title_md: "Peptide and Protein ID using OpenMS tools" - description_md: > -

- Learn how to identify proteins from LC-MS/MS raw files. -

- button_link: "https://usegalaxy.org.au/training-material/topics/proteomics/tutorials/protein-id-oms/tutorial.html" - button_md: "Tutorial" - - title_md: "Galaxy Australia support" - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_link: "/request/support" - button_md: "Request support" \ No newline at end of file diff --git a/webapp/home/labs/proteomics/sections/dda_standardised_tools.yml b/webapp/home/labs/proteomics/sections/dda_standardised_tools.yml deleted file mode 100644 index d66139c7..00000000 --- a/webapp/home/labs/proteomics/sections/dda_standardised_tools.yml +++ /dev/null @@ -1,71 +0,0 @@ -id: dda_standardised_tools -title: DDA Standardised Tools -tabs: - - id: tools - title: Tools - heading_md: > - Some example tools are listed here: you can also search for more in the full tool panel to the left. - content: - - title_md: "MaxQuant" - description_md: > -

- MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets. -

- inputs: - - datatypes: - - thermo.raw - - mzML - - mzXML - label: MS spectra (input file) - - datatypes: - - tabular - label: Experimental design template - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/maxquant/maxquant/" - - title_md: "MSstats" - description_md: > -

- Statistical relative protein significance analysis in DDA, SRM and DIA Mass Spectrometry. -

- inputs: - - datatypes: - - tabular - - csv - label: Either the 10-column MSstats format or the outputs of spectral processing tools such as MaxQuant, OpenSWATH. - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/msstats/msstats/" - - title_md: "LFQ Analyst" - description_md: > -

- Analyze and Visualize Label-Free Proteomics output from MaxQuant. -

- inputs: - - datatypes: - - txt - label: Protein groups (MaxQuant output) - - datatypes: - - txt - label: Experimental Design Matrix (MaxQuant output) - button_link: "{{ galaxy_base_url }}/root?tool_id=interactive_tool_lfqanalyst_2" - - id: help - title: Help - content: - - title_md: "LFQ-Analyst: Manual" - description_md: > -

- A detailed user manual for LFQ-Analyst. -

- button_link: "https://analyst-suite.monash-proteomics.cloud.edu.au/apps/lfq-analyst/LFQ-Analyst_manual.pdf" - button_md: "Manual" - - title_md: "MaxQuant and MSstats for the analysis of label-free data" - description_md: > -

- Learn how to use MaxQuant and MSstats for the analysis of label-free shotgun (DDA) data. -

- button_link: "https://training.galaxyproject.org/training-material/topics/proteomics/tutorials/maxquant-msstats-dda-lfq/tutorial.html" - button_md: "Tutorial" - - title_md: "Galaxy Australia support" - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_link: "/request/support" - button_md: "Request support" diff --git a/webapp/home/labs/proteomics/sections/dda_tmt.yml b/webapp/home/labs/proteomics/sections/dda_tmt.yml deleted file mode 100644 index ae8bd0b8..00000000 --- a/webapp/home/labs/proteomics/sections/dda_tmt.yml +++ /dev/null @@ -1,60 +0,0 @@ -id: dda_tmt -title: DDA TMT -tabs: - - id: tools - title: Tools - heading_md: > - Some example tools are listed here: you can also search for more in the full tool panel to the left. - content: - - title_md: "MaxQuant" - description_md: > -

- MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets. -

- inputs: - - datatypes: - - thermo.raw - - mzML - - mzXML - label: MS spectra (input file) - - datatypes: - - tabular - label: Experimental design template - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/maxquant/maxquant/" - - title_md: "TMT Analyst" - description_md: > -

- Analyze and Visualize Label-Free Proteomics output from MaxQuant. -

- inputs: - - datatypes: - - txt - label: Protein groups (MaxQuant output) - - datatypes: - - txt - label: Experimental Design Matrix (MaxQuant output) - button_link: "{{ galaxy_base_url }}/root?tool_id=interactive_tool_tmtanalyst" - - id: help - title: Help - content: - - title_md: "TMT-Analyst: Manual" - description_md: > -

- A detailed user manual for TMT-Analyst. -

- button_link: "https://analyst-suites.org/apps/tmt-analyst/TMT-Analyst-manual.pdf" - button_md: "Manual" - - title_md: "MaxQuant and MSstats for the analysis of TMT data" - description_md: > -

- Learn how to use MaxQuant and MSstats for the analysis of TMT labelled shotgun (DDA) data. -

- button_link: "https://training.galaxyproject.org/training-material/topics/proteomics/tutorials/maxquant-msstats-tmt/tutorial.html" - button_md: "Tutorial" - - title_md: "Galaxy Australia support" - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_link: "/request/support" - button_md: "Request support" diff --git a/webapp/home/labs/proteomics/sections/dia_standardised_tools.yml b/webapp/home/labs/proteomics/sections/dia_standardised_tools.yml deleted file mode 100644 index 825e07f5..00000000 --- a/webapp/home/labs/proteomics/sections/dia_standardised_tools.yml +++ /dev/null @@ -1,43 +0,0 @@ -id: dia_standardised_tools -title: DIA Standardised Tools -tabs: - - id: tools - title: Tools - heading_md: > - Some example tools are listed here: you can also search for more in the full tool panel to the left. - content: - - title_md: "MSstats" - description_md: > -

- Statistical relative protein significance analysis in DDA, SRM and DIA Mass Spectrometry. -

- inputs: - - datatypes: - - tabular - - csv - label: Either the 10-column MSstats format or the outputs of spectral processing tools such as MaxQuant, OpenSWATH. - button_link: "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/msstats/msstats/" - - id: help - title: Help - content: - - title_md: "Galaxy Australia support" - description_md: > -

- Any user of Galaxy Australia can request support through an online form. -

- button_link: "/request/support" - button_md: "Request support" - - title_md: "DIA Analysis using OpenSwathWorkflow" - description_md: > -

- Learn how to analyse HEK-Ecoli spike-in DIA data in Galaxy, understand DIA data principles and characteristics, and use OpenSwathworkflow to analyze HEK-Ecoli spike-in DIA data. -

- button_link: "https://usegalaxy.org.au/training-material/topics/proteomics/tutorials/DIA_Analysis_OSW/tutorial.html" - button_md: "Tutorial" - - title_md: "Library Generation for DIA Analysis" - description_md: > -

- Learn how to generate a spectral library from data dependent acquisition (DDA) MS data, understand DIA data principles and characteristics, and optimize and refine a spectral library for the analysis of DIA data. -

- button_link: "https://usegalaxy.org.au/training-material/topics/proteomics/tutorials/DIA_lib_OSW/tutorial.html" - button_md: "Tutorial" diff --git a/webapp/home/labs/proteomics/static/custom.css b/webapp/home/labs/proteomics/static/custom.css deleted file mode 100644 index cfd8f237..00000000 --- a/webapp/home/labs/proteomics/static/custom.css +++ /dev/null @@ -1,21 +0,0 @@ -#whatIsThisPage { - position: absolute; - top: 135px; - right: calc(50vw - 500px); -} - -@media (max-width: 1070px) { - #whatIsThisPage { - right: 2rem; - } -} -@media (max-width: 992px) { - #whatIsThisPage { - top: 95px; - } -} -@media (max-width: 730px) { - #whatIsThisPage { - top: 2rem; - } -} diff --git a/webapp/home/labs/proteomics/static/logo.png b/webapp/home/labs/proteomics/static/logo.png deleted file mode 100644 index f90d01be6851cb746c1116b459107eaff75bf95d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2845 zcmeHJTU65d7XE`aF_xBDCp9l+B%O|-W-6p^RU-%?Y-A;?QiY%?Qid_ z6TV0E^-T2u0MJJr^*jjxpmePrfPANo%%7H0w9ohPM+0#Hux`^I2I?Ortpb1^7v<@3 zI=Oguv^$A^#v)S~Je6#l6oPGF`h%Y6{bJBz&}Hz;lkGFxf8S2mJM{fzJep0c3pp`N$L5N^`cjFP{Hb4N2a=`suYgEJ6T@!T7Z@83Ea0c1a|xA0(wRu za>tk5nbE_VuzlzrN-cY8a%u7+GaCe|a)|^3H?n|3p;o|&I}l*A^_SfZ@NJ;^b4|=Z zDDwF8W6v?Z&9)P{WpG2_>c3)W5fnf6)P4@;GaF)N0KSTCV;(dQ+bHt{cy$k}*RuBh zC9<#M{`Tzn`y{Nx^l+rpGJ-tUx{Uy|pwWCYSm3S|JB-GK^AtJT_A?SbURVTFUZU>+ zGB&WWEc!-J(7>miaXQ{sUv9e4kv4?5LAEkDH4VU4_{vpicg-)2B#Lqt7~_HE`)vt+S@(Kx4xS+uM1Sikk9W@e*t(jit&7Qn4OnvfW!q*h?vavhDw zS3JpL1WBYN_>ib%84fC%AN4rqOus823q7?Ix4<$WKCwL5BcySvYvs9FA!a9dB74HfegBpby!QH z&iQym^agDyFG>wG0M%1zyEWL`V$-~L7K>iwLlsNhKORJtNNjEI}1QkQfZax!WoQmLnHa~%$8l{7+2PVBJ?)kO(l7+Wj;Lop->3j8E-lZtsd)O{x zlX^oZ`-7z;vK^`>uWbMCbZ53Wr0-o1YB;uVUXkAzp#2p7&LcH$pqvzA0z!4^GLs6G zgU>75%kD$EhqW;VUpR+mBZ28uMCRQhm!ZS!=UAj)jg$Zg$)n?q? z@Q5cjGA5L3^0tF%_nu)bUlkZ7XP6mWmr;ie(pnXLnV;9k*qg%|hw6L!EZ;Mj+xYTHBdb20wBS#|ihLEMl}96sI}K&w;sR zGOGPzG{jr#j5%RQ>+K@e9#z%|BY#!6#ndl;;a4RR_L3&M=#VZvD@jq9e`=?6Ih&t1 z5AxqTz#z7oNaZt~wwYm#TBTdo%b{2(3BTsG%1D=!yJ|)%o?p9?+Q`f1%91%nEV0Zz z*+fnF#8MSX+(n|@sviC%wFSj)^3}+r2>Z|^;tS^xv`9VoVC&(SCMJ^f()6%kwv?ID zBUBRXT|fA1_cP&^x13^lHrQicoFi9|6tfG*#|lDA)w@*Ri`p|64QNulYY{v^;^(A6 z64!rZeu#QCkR#ut-R>!r_WW8jpC}ogdXUQH3@`T;u5+Y|)HEsOU|>X2rQdqN%E#A_ z7;e~u&&=Cy)j-RqJ6~PqzsbWOn&#oOnlYxO?4k0^wrv=Z>*Q!Scy^8C8l+;zi#frJnaIF^8{YP?tx! z5}isb#zG&XTxP$*B;^e)E zJEJHE5T|YJ|DjIe6_*Hv#TZAcHssKPAgyP1eZ&FRF=FQ%V(*xR0XXPA2CHoKE8}mQ z&MYIPbi=-^vQ<d-f;VK1lJGPp{{T${d zSEwu!48weg8wNGA3fvsu_zh7?)91F%4vM{2WlPhF&jhw3ThIof4pOs+a$oDRauH^_ zf1Yv6JRBINTmV6U)!zI5~vRgNnvWh!00gOjHr6-8j k+8VAIpVi93e{)H;hgFMigyQin+Its3dHH%){19^e-@=xq8vp - diff --git a/webapp/home/labs/proteomics/templates/intro.html b/webapp/home/labs/proteomics/templates/intro.html deleted file mode 100644 index 41a4c0d1..00000000 --- a/webapp/home/labs/proteomics/templates/intro.html +++ /dev/null @@ -1,155 +0,0 @@ -
- - What is this page? - -

- Welcome to the Galaxy Australia Proteomics Lab. Get quick access to the - tools, workflows and tutorials you need to get started with proteomics on - Galaxy. -

- -

- This page is currently under development in consultation with the - - Australian Proteomics Bioinformatics community. -

-
- -
- -
- -
- -
- - - - - - diff --git a/webapp/home/labs/simple/base.yml b/webapp/home/labs/simple/base.yml deleted file mode 100644 index 2abb00f6..00000000 --- a/webapp/home/labs/simple/base.yml +++ /dev/null @@ -1,24 +0,0 @@ -# Default spec for an exported subsite landing page - -# You can test with: /lab/export?content_root=https://raw.githubusercontent.com/usegalaxy-au/galaxy-media-site/dev/webapp/home/labs/docs/base.yml - -site_name: Archaeology -lab_name: Archaeology Lab -nationality: Egyptian -galaxy_base_url: https://galaxy-archaeology.org -subdomain: archaeology -root_domain: galaxy-archaeology.org - -# These files need to be accessible on the internet, relative to the content_root URL! -# ----------------------------------------------------------------------------- -# Custom content relative to this file URL -header_logo: static/pillar.svg -custom_css: static/custom.css -intro_md: templates/intro.md -footer_md: templates/footer.md -conclusion_md: templates/conclusion.md - -# Data to be rendered into sections/tabs/accordion elements: -sections: - - section_1.yml - - section_2.yml diff --git a/webapp/home/labs/simple/section_1.yml b/webapp/home/labs/simple/section_1.yml deleted file mode 100644 index e19ca7f0..00000000 --- a/webapp/home/labs/simple/section_1.yml +++ /dev/null @@ -1,100 +0,0 @@ -id: section_1 -title: Example section -tabs: - - id: tools - title: Tools - heading_md: Common tools are listed here, or search for more in the full tool panel to the left. - content: - - # Accordion item schema: - # title_md: # inline MD accepted e.g. *italics*, **bold**, `code` - # description_md: - # inputs: - # - datatypes: # tool input 1 - two accepted datatypes - # - - # - - # label: - # - datatypes: # tool input 2 - one accepted datatype - # - - # label: - # button_link: - # button_md: - # button_tip: - # view_link: - # view_md: - # view_tip: - - - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=upload1" - title_md: Import data to Galaxy - description_md: Standard upload of data to Galaxy, from your computer or - from the web. - - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fdevteam%2Ffastqc%2Ffastqc" - title_md: FastQC - sequence quality reports - description_md: > - Before using your sequencing data, it's important to ensure that - the data quality is sufficient for your analysis. - inputs: - - label: Sequencing data for analysis - datatypes: - - fasta - - fastq - - bam - - sam - - - id: workflows - title: Workflows - heading_md: | - A workflow is a series of Galaxy tools that have been linked together - to perform a specific analysis. You can use and customize the example workflows - below. - - Learn more - . - content: - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=222" - button_tip: Import to Galaxy AU - title_md: Data QC - view_link: https://workflowhub.eu/workflows/222 - view_tip: View in WorkflowHub - description_md: | -

- Report statistics from sequencing reads. -

- Tools: - nanoplot - fastqc - multiqc -

- - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=223" - button_tip: Import to Galaxy AU - description_md: | -

- Estimates genome size and heterozygosity based on counts of kmers. -

- Tools: - meryl - genomescope -

- title_md: Kmer counting to estimate genome size - view_link: https://workflowhub.eu/workflows/223 - view_tip: View in WorkflowHub - - - id: help - title: Help - content: - - button_md: More info - button_link: https://training.galaxyproject.org/training-material/topics/galaxy-interface/ - description_md: | -

- You can upload your data to Galaxy using the Upload tool from anywhere in Galaxy. - Just look for the "Upload data" button at the top of the tool panel. -

- title_md: How can I import my genomics data? - - description_md: | -

- We recommend subsampling large data sets to test tools and workflows. - A useful tool is - seqtk_seq, - setting the parameter at "Sample fraction of sequences" -

- title_md: How can I subsample my data? diff --git a/webapp/home/labs/simple/section_2.yml b/webapp/home/labs/simple/section_2.yml deleted file mode 100644 index fd07ac64..00000000 --- a/webapp/home/labs/simple/section_2.yml +++ /dev/null @@ -1,132 +0,0 @@ -id: section_2 -title: Example section with subsections -tabs: - - id: tools - title: Tools - heading_md: | - The tools in this section have been divided into subsections to make it - easier for users to find the tools they need. This must replace the - entire value of the `content` key i.e. you can't mix - subsections with standalone items. - content: - - # Content can be split into subsections, each with a title. - # This must replace the entire value of the `content` key i.e. you can't - # mix subsections with standalone items: - subsections: - - id: subsection_1 - title: This is my first subsection - content: - - # Accordion item schema: - # title_md: # inline MD accepted e.g. *italics*, **bold**, `code` - # description_md: - # inputs: - # - datatypes: # tool input 1 - two accepted datatypes - # - - # - - # label: - # - datatypes: # tool input 2 - one accepted datatype - # - - # label: - # button_link: - # button_md: - # button_tip: - # view_link: - # view_md: - # view_tip: - - - title_md: "`Hifiasm` - assembly with PacBio HiFi data" - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fhifiasm%2Fhifiasm" - description_md: A haplotype-resolved assembler for PacBio HiFi reads. - inputs: - - label: PacBio reads - datatypes: - - fasta - - fastq - - - id: subsection_2 - title: Another subsection - content: - - title_md: "`Flye` - assembly with PacBio or Nanopore data" - button_link: "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fflye%2Fflye" - description_md: > - *de novo* assembly of single-molecule sequencing reads, designed - for a wide range of datasets, from small bacterial projects to - large mammalian-scale assemblies. - inputs: - - label: Single-molecule sequencing reads - datatypes: - - fasta - - fastq - - - id: workflows - title: Workflows - heading_md: > - A workflow is a series of Galaxy tools that have been linked together - to perform a specific analysis. You can use and customize the example workflows - below. - [Learn more](https://galaxyproject.org/learn/advanced-workflow/). - content: - subsections: - - id: pacbio - title: Assembly with PacBio HiFi data - content: - - description_md: > - This - [How-to-Guide](https://australianbiocommons.github.io/how-to-guides/genome_assembly/hifi_assembly) - will describe the steps required to assemble your genome on the Galaxy Australia platform, - using multiple workflows. - title_md: About these workflows - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=220" - button_tip: Import to Galaxy Australia - description_md: > - Convert a BAM file to FASTQ format to perform QC analysis (required if your data is in BAM format). - inputs: - - label: PacBio `subreads.bam` - datatypes: - - bam - title_md: BAM to FASTQ + QC v1.0 - view_link: https://workflowhub.eu/workflows/220 - view_tip: View in WorkflowHub - - id: nanopore - title: Assembly with Nanopore data and polishing with Illumina data - content: - - description_md: > - This - [tutorial](https://training.galaxyproject.org/training-material/topics/assembly/tutorials/largegenome/tutorial.html) - describes the steps required to assemble a genome on Galaxy with Nanopore and Illumina data. - title_md: About these workflows - - button_link: "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=225" - button_tip: Import to Galaxy Australia - description_md: > - Assemble Nanopore long reads. This workflow can be run alone or as part of a combined workflow for large genome assembly. - inputs: - - label: Long reads (may be raw, filtered and/or corrected) - datatypes: - - fastqsanger - title_md: Flye assembly with Nanopore data - view_link: https://workflowhub.eu/workflows/225 - view_tip: View in WorkflowHub - - - id: help - title: Help - content: - - button_md: Request support - button_link: /request - description_md: > - Yes. Galaxy Australia has assembly tools for small prokaryote genomes as well as larger eukaryote genomes. - We are continually adding new tools and optimising them for large genome assemblies - this means adding enough computer processing power to run data-intensive tools, as well as configuring - aspects such as parallelisation. - - - **Please contact us if** - - you need to increase your data storage limit - - there is a tool you wish to request - - a tool appears to be broken or running slowly - title_md: Can I use Galaxy Australia to assemble a large genome? - - description_md: > - - See the tutorials in this Help section. They cover different approaches to genome assembly - - Read the methods in scientific papers about genome assembly, particularly those about genomes with similar characteristics to those in your project - - See the Workflows section for examples of different approaches to genome assembly - these cover different sequencing data types, and a variety of tools. - title_md: How can I learn about genome assembly? diff --git a/webapp/home/labs/simple/static/custom.css b/webapp/home/labs/simple/static/custom.css deleted file mode 100644 index 7b11903b..00000000 --- a/webapp/home/labs/simple/static/custom.css +++ /dev/null @@ -1,6 +0,0 @@ -#header-logo { - width: unset; -} -li { - margin-bottom: .5rem; -} diff --git a/webapp/home/labs/simple/static/pillar.svg b/webapp/home/labs/simple/static/pillar.svg deleted file mode 100644 index d298956a..00000000 --- a/webapp/home/labs/simple/static/pillar.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - diff --git a/webapp/home/labs/simple/templates/conclusion.md b/webapp/home/labs/simple/templates/conclusion.md deleted file mode 100644 index ba6c4c93..00000000 --- a/webapp/home/labs/simple/templates/conclusion.md +++ /dev/null @@ -1,4 +0,0 @@ -## Contributors - -- [John Doe](https://github.com/johndoe) -- [Jane Doe](https://github.com/janedoe) diff --git a/webapp/home/labs/simple/templates/footer.md b/webapp/home/labs/simple/templates/footer.md deleted file mode 100644 index 9e1b2ec7..00000000 --- a/webapp/home/labs/simple/templates/footer.md +++ /dev/null @@ -1,6 +0,0 @@ -
- - - - Some smaller text here that nobody will ever read. Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo facilis voluptatibus unde, officiis placeat corrupti error est. Laborum optio doloremque minus nemo illum enim voluptatibus harum. Odit, voluptates tempora. Aperiam. - diff --git a/webapp/home/labs/simple/templates/intro.md b/webapp/home/labs/simple/templates/intro.md deleted file mode 100644 index afea05b4..00000000 --- a/webapp/home/labs/simple/templates/intro.md +++ /dev/null @@ -1,13 +0,0 @@ - -##### This is an example of a simple Galaxy Lab page, you can check out the [code on GitHub](https://github.com/usegalaxy-au/galaxy-media-site/tree/dev/webapp/home/labs/simple) -
- -Welcome to **Galaxy {{ site_name }}**! -
-
- -![generic archaeology image](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR4m6WeuZ4-B7rXmWyimaFdN3UlPrmSrpQBhA&s) - - -If you get excited about unearthing skeletal remains, cracking open fossils and -studying their ancient DNA, you've come to the right place! diff --git a/webapp/home/migrations/0044_remove_coverimage_subsites_remove_notice_subsites_and_more.py b/webapp/home/migrations/0044_remove_coverimage_subsites_remove_notice_subsites_and_more.py new file mode 100644 index 00000000..8166cd5f --- /dev/null +++ b/webapp/home/migrations/0044_remove_coverimage_subsites_remove_notice_subsites_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.16 on 2024-11-11 06:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0043_alter_coverimage_auto_full_width'), + ] + + operations = [ + migrations.RemoveField( + model_name='coverimage', + name='subsites', + ), + migrations.RemoveField( + model_name='notice', + name='subsites', + ), + migrations.DeleteModel( + name='Subsite', + ), + ] diff --git a/webapp/home/models.py b/webapp/home/models.py index 571ecd77..976afe78 100644 --- a/webapp/home/models.py +++ b/webapp/home/models.py @@ -39,24 +39,6 @@ def __str__(self): return f"{self.first_name} {self.last_name} <{self.email}>" -class Subsite(models.Model): - """Galaxy subsite which will consume a custom landing page. - - The migration for this model creates a default 'main' subsite. - """ - - name = models.CharField(max_length=30, unique=True, help_text=( - "This field should match the subdomain name. e.g." - " for a 'genome.usegalaxy.org' subsite, the name should be 'genome'." - " This also determines the URL as: '/landing/'. The" - " HTML template for this landing page must be created manually." - )) - - def __str__(self): - """Represent self as string.""" - return self.name - - class Notice(models.Model): """A site notice to be displayed on the home/landing pages. @@ -128,21 +110,12 @@ class Notice(models.Model): " notices are enabled (i.e. lowest value shown first)" ), ) - subsites = models.ManyToManyField( - Subsite, - help_text=( - "Select which subdomain sites should display the notice." - ), - default=default_subsite, - ) @classmethod - def get_notices_by_type(cls, request, subsite=None): + def get_notices_by_type(cls, request): """Return dictionary of notices by type for given user.""" - subsite_name = subsite or 'main' notices = cls.objects.filter( enabled=True, - subsites__name=subsite_name, ) if not request.user.is_staff: notices = notices.filter(is_published=True) @@ -229,13 +202,6 @@ class CoverImage(models.Model): " Use this to review content before release to public users." ), ) - subsites = models.ManyToManyField( - Subsite, - help_text=( - "Select which subdomain sites should display the notice." - ), - default=default_subsite, - ) @property def link_is_internal(self): @@ -243,12 +209,10 @@ def link_is_internal(self): return self.link_url.startswith('/') @classmethod - def get_random(cls, request, subsite=None): + def get_random(cls, request): """Return a random cover image.""" - subsite_name = subsite or 'main' images = cls.objects.filter( enabled=True, - subsites__name=subsite_name, ) if not request.user.is_staff: images = images.filter(is_published=True) diff --git a/webapp/home/static/home/labs b/webapp/home/static/home/labs deleted file mode 120000 index 77a5a16f..00000000 --- a/webapp/home/static/home/labs +++ /dev/null @@ -1 +0,0 @@ -../../labs/ \ No newline at end of file diff --git a/webapp/home/subdomains/DEPRECATED b/webapp/home/subdomains/DEPRECATED deleted file mode 100644 index 2d08d639..00000000 --- a/webapp/home/subdomains/DEPRECATED +++ /dev/null @@ -1,4 +0,0 @@ -This module is deprecated - use exported labs from here on. - -- For lab webpage content see: ./webapp/home/labs/ -- For exported labs code, see: ./webapp/home/lab_export.py diff --git a/webapp/home/subdomains/__init__.py b/webapp/home/subdomains/__init__.py deleted file mode 100644 index 12646659..00000000 --- a/webapp/home/subdomains/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import genome, proteomics diff --git a/webapp/home/subdomains/genome/__init__.py b/webapp/home/subdomains/genome/__init__.py deleted file mode 100644 index 8af98563..00000000 --- a/webapp/home/subdomains/genome/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Content for genome subdomain page.""" - -from .sections import sections diff --git a/webapp/home/subdomains/genome/content/__init__.py b/webapp/home/subdomains/genome/content/__init__.py deleted file mode 100644 index b20ce600..00000000 --- a/webapp/home/subdomains/genome/content/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import data, assembly, annotation diff --git a/webapp/home/subdomains/genome/content/annotation.py b/webapp/home/subdomains/genome/content/annotation.py deleted file mode 100644 index fd2d4ad3..00000000 --- a/webapp/home/subdomains/genome/content/annotation.py +++ /dev/null @@ -1,304 +0,0 @@ -"""Content for annotation section.""" - -from .data import galaxy_au_support_item - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": 'MAKER - genome annotation pipeline', - "description_md": """ -

- MAKER is able to annotate both prokaryotes and eukaryotes. It works by aligning as many evidences as possible along the genome sequence, and then reconciliating all these signals to determine probable gene structures. -

- The evidences can be transcript or protein sequences from the same (or closely related) organism. These sequences can come from public databases (like NR or GenBank) or from your own experimental data (transcriptome assembly from an RNASeq experiment for example). MAKER is also able to take into account repeated elements. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly', - }, - { - 'datatypes': ['fasta'], - 'label': 'Protein evidence (optional)', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fmaker%2Fmaker", - }, - { - "title_md": 'Funannotate predict - predicted gene annotations', - "description_md": """ -

- Funannotate predict performs a comprehensive whole genome gene prediction. Uses AUGUSTUS, GeneMark, Snap, GlimmerHMM, BUSCO, EVidence Modeler, tbl2asn, tRNAScan-SE, Exonerate, minimap2. This approach differs from Maker as it does not need to train ab initio predictors -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly (soft-masked)', - }, - { - 'datatypes': ['bam'], - 'label': 'Mapped RNA evidence (optional)', - }, - { - 'datatypes': ['fasta'], - 'label': 'Protein evidence (optional)', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Ffunannotate_predict%2Ffunannotate_predict", - }, - { - "title_md": 'RepeatMasker - screen DNA sequences for interspersed repeats and low complexity regions', - "description_md": """ -

- RepeatMasker is a program that screens DNA for repeated elements such as tandem repeats, transposons, SINEs and LINEs. Galaxy AU has installed the full and curated DFam screening databases, or a custom database can be provided in fasta format. Additional reference data can be downloaded from - - RepBase. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Frepeat_masker%2Frepeatmasker_wrapper", - }, - { - "title_md": 'InterProScan - Scans InterPro database and assigns functional annotations', - "description_md": """ -

- Interproscan is a batch tool to query the InterPro database. It provides annotations based on multiple searches of profile and other functional databases. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Finterproscan%2Finterproscan", - }, - { - "title_md": 'Funannotate compare - compare several annotations', - "description_md": """ -

- Funannotate compare compares several annotations and outputs a GFF3 file with the best gene models. It can be used to compare the results of different gene predictors, or to compare the results of a gene predictor with a reference annotation. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assemblies to compare', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Ffunannotate_compare%2Ffunannotate_compare", - }, - { - "title_md": 'JBrowse - Genome browser to visualize annotations', - "description_md": "", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly', - }, - { - 'datatypes': ['gff', 'gff3', 'bed'], - 'label': 'Annotations', - }, - { - 'datatypes': ['bam'], - 'label': 'Mapped RNAseq data (optional)', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fjbrowse%2Fjbrowse", - }, - { - "title_md": 'Prokka - Genome annotation, prokaryotes only', - "description_md": "", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly', - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fcrs4%2Fprokka%2Fprokka", - }, -] - -workflows = [ - { - "title_md": 'Annotation with Maker', - "description_md": """ -

- Annotates a genome using multiple rounds of Maker, including gene prediction using SNAP and Augustus. -
-
- Tools: - maker - snap - augustus - busco - jbrowse -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly', - }, - { - 'datatypes': ['fastq'], - 'label': 'RNAseq Illumina reads', - }, - { - 'datatypes': ['fasta'], - 'label': 'Proteins', - }, - ], - "button_link": "{{ galaxy_base_url }}/u/anna/w/genome-annotation-with-maker", - "button_tip": "Run in Galaxy AU", - }, - { - "title_md": 'Annotation with Funannotate', - "description_md": """ -

- Annotates a genome using Funannotate, includes RNAseq data with RNAstar, and protein predictions from EggNOG. -
-
- Tools: - RNAstar - funannotate - eggnog - busco - jbrowse - aegean parseval -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Genome assembly (soft-masked)', - }, - { - 'datatypes': ['fastq'], - 'label': 'RNAseq Illumina reads', - }, - { - 'datatypes': ['gff3'], - 'label': 'Alternative annotation', - }, - { - 'datatypes': ['gbk'], - 'label': 'Alternative annotation', - }, - ], - "button_link": "{{ galaxy_base_url }}/u/anna/w/annotation-funannotate", - "button_tip": "Run in Galaxy AU", - }, -] - -help = [ - { - "title_md": 'What is genome annotation?', - "description_md": """ -

- These - - slides - - from the Galaxy training network explain the process of genome annotation in detail. You can use the and keys to navigate through the slides. -

""", - }, - { - "title_md": 'Genome annotation overview', - "description_md": """ -

The flowchart below shows how you might use your input data (in green) with different Galaxy tools (in blue) to annotate a genome assembly. For example, one pathway would be taking an assembled genome, plus information about repeats, and data from RNA-seq, to run in the Maker pipeline. The annotatations can then be viewed in JBrowse.

- Genome annotation flowchart -

A graphical representation of genome annotation

""", - }, - { - "title_md": 'Can I use Fgenesh++ for annotation?', - "description_md": """ -

- - Fgenesh++ - - is a bioinformatics pipeline for automatic prediction of genes in eukaryotic genomes. It is presently not installed in Galaxy Australia, but the Australian Biocommons and partners have licensed the software and made it available via commandline. Australian researchers can apply for access through the Australian BioCommons. -

- """, - 'button_md': 'Apply', - 'button_link': 'https://www.biocommons.org.au/fgenesh-plus-plus', - 'button_tip': 'Apply for access to Fgenesh++', - }, - { - "title_md": 'Can I use Apollo to share and edit the annotated genome?', - "description_md": """ -

- Apollo is web-browser accessible system that lets you conduct real-time collaborative curation and editing of genome annotations. -

-

- The Australian BioCommons and our partners at QCIF and Pawsey provide a hosted - - Apollo Portal service - - where your genome assembly and supporting evidence files can be hosted. All system administration is taken care of, so you and your team can focus on the annotation curation itself. -

- -

- This - - Galaxy tutorial - - provides a complete walkthrough of the process of refining eukaryotic genome annotations with Apollo. -

- """, - "button_link": "https://support.biocommons.org.au/support/solutions/articles/6000244843-apollo-for-collaborative-curation-and-editing", - "button_md": "More info", - }, - { - "title_md": 'Tutorials', - "description_md": """ -

Genome annotation with Maker

-

- Genome annotation of eukaryotes is a little more complicated than for prokaryotes: eukaryotic genomes are usually larger than prokaryotes, with more genes. The sequences determining the beginning and the end of a gene are generally less conserved than the prokaryotic ones. Many genes also contain introns, and the limits of these introns (acceptor and donor sites) are not highly conserved. This - - Galaxy tutorial - - uses MAKER to annotate the genome of a small eukaryote: Schizosaccharomyces pombe (a yeast). -

- -
- -

Genome annotation with Funannotate

-

- This - - Galaxy tutorial - - provides a complete walkthrough of the process of annotation with Funannotate, including the preparation of RNAseq data, structural annotation, functional annotation, visualisation, and comparing annotations. -

- """, - }, - galaxy_au_support_item, -] diff --git a/webapp/home/subdomains/genome/content/assembly.py b/webapp/home/subdomains/genome/content/assembly.py deleted file mode 100644 index ada27eae..00000000 --- a/webapp/home/subdomains/genome/content/assembly.py +++ /dev/null @@ -1,534 +0,0 @@ -"""Content for assembly section.""" - -# flake8: noqa - -from .data import galaxy_au_support_item - -import_workflow_tip = "Import to Galaxy Australia" -view_workflow_tip = "View in WorkflowHub" - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": 'Hifiasm - assembly with PacBio HiFi data', - "description_md": """ -

- A haplotype-resolved assembler for PacBio HiFi reads. -

""", - "inputs": [ - {'datatypes': ['fasta']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fhifiasm%2Fhifiasm", - }, - { - "title_md": 'Flye - assembly with PacBio or Nanopore data', - "description_md": """ -

- de novo assembly of single-molecule sequencing reads, - designed for a wide range of datasets, from small bacterial - projects to large mammalian-scale assemblies. -

""", - "inputs": [ - {'datatypes': ['fasta']}, - {'datatypes': ['fastq']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fbgruening%2Fflye%2Fflye", - }, - { - "title_md": 'Unicycler - assembly with Illumina, PacBio or Nanopore data - bacteria only', - "description_md": """ -

- Hybrid assembly pipeline for bacterial genomes, uses both Illumina reads and long reads (PacBio or Nanopore). -

""", - "inputs": [ - {'datatypes': ['fastq']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Funicycler%2Funicycler", - }, - { - "title_md": 'Salsa - scaffold assembly with HiC data', - "description_md": """ -

- Salsa is a scaffolding tool based on a computational method that - exploits the genomic proximity information in Hi-C data sets - for long-range scaffolding of de novo genome assemblies. -

""", - "inputs": [ - {'datatypes': ['fasta']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fsalsa%2Fsalsa", - }, - { - "title_md": 'Quast - assess genome assembly quality', - "description_md": """ -

- QUAST = QUality ASsessment Tool. The tool evaluates genome assemblies by computing various metrics. If you have one or multiple genome assemblies, you can assess their quality with Quast. It works with or without reference genome -

""", - "inputs": [ - {'datatypes': ['fasta']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fquast%2Fquast", - }, - { - "title_md": 'Busco - assess genome assembly quality', - "description_md": """ -

- BUSCO: assessing genome assembly and annotation completeness with Benchmarking Universal Single-Copy Orthologs. The tool attempts to provide a quantitative assessment of the completeness in terms of the expected gene content of a genome assembly, transcriptome, or annotated gene set. -

""", - "inputs": [ - {'datatypes': ['fasta']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fbusco%2Fbusco", - }, -] - - -workflows_pacbio = [ - { - "title_md": 'About these workflows', - "description_md": """ -

- This - - How-to-Guide - - will describe the steps required to assemble your genome on the Galaxy Australia platform, using multiple workflows. -

""", - }, - { - "title_md": 'BAM to FASTQ + QC v1.0', - "description_md": """ -

- Convert a BAM file to FASTQ format to perform QC analysis - (required if your data is in BAM format). -

""", - "inputs": [ - { - 'datatypes': ['bam'], - 'label': 'PacBio subreads.bam', - }, - ], - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=220", - "button_tip": import_workflow_tip, - "view_link": "https://workflowhub.eu/workflows/220", - "view_tip": view_workflow_tip, - }, - { - "title_md": 'PacBio HiFi genome assembly using hifiasm v2.1', - "description_md": """ -

- Assemble a genome using PacBio HiFi reads. -

""", - "inputs": [ - { - 'datatypes': ['fastqsanger'], - 'label': 'HiFi reads', - }, - ], - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=221", - "button_tip": import_workflow_tip, - "view_link": "https://workflowhub.eu/workflows/221", - "view_tip": view_workflow_tip, - }, - { - "title_md": 'Purge duplicates from hifiasm assembly v1.0', - "description_md": """ -

- Optional workflow to purge duplicates from the contig assembly. -

""", - "inputs": [ - { - 'datatypes': ['fastqsanger'], - 'label': 'HiFi reads', - }, - { - 'datatypes': ['fasta'], - 'label': 'Primary assembly contigs', - }, - ], - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=237", - "button_tip": import_workflow_tip, - "view_link": "https://workflowhub.eu/workflows/237", - "view_tip": view_workflow_tip, - }, - { - "title_md": 'Genome assessment post-assembly', - "description_md": """ -

- Evaluate the quality of your genome assembly with a comprehensive report including FASTA stats, BUSCO, QUAST, Meryl and Merqury. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Primary assembly contigs', - }, - ], - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=403", - "button_tip": import_workflow_tip, - "view_link": "https://workflowhub.eu/workflows/403", - "view_tip": view_workflow_tip, - }, -] - -workflows_nanopore = [ - { - "title_md": 'About these workflows', - "description_md": """ -

- This - - tutorial - - describes the steps required to assemble a genome on Galaxy with Nanopore and Illumina data. -

""", - }, - { - "title_md": 'Flye assembly with Nanopore data', - "description_md": """ -

- Assemble Nanopore long reads. This workflow can be run alone or as part of a combined workflow for large genome assembly. -

""", - "inputs": [ - { - 'datatypes': ['fastqsanger'], - 'label': 'Long reads (may be raw, filtered and/or corrected)', - }, - ], - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=225", - "button_tip": import_workflow_tip, - "view_link": "https://workflowhub.eu/workflows/225", - "view_tip": view_workflow_tip, - }, - { - "title_md": 'Assembly polishing', - "description_md": """ -

- Polishes (corrects) an assembly, using long reads (Racon and Medaka) and short reads (Racon). -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Assembly to polish', - }, - { - 'datatypes': ['fastq'], - 'label': 'Long reads (those used in assembly)', - }, - { - 'datatypes': ['fastq'], - 'label': 'Short reads to be used for polishing (R1 only)', - }, - ], - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=226", - "button_tip": import_workflow_tip, - "view_link": "https://workflowhub.eu/workflows/226", - "view_tip": view_workflow_tip, - }, - { - "title_md": 'Assess genome quality', - "description_md": """ -

- Assesses the quality of the genome assembly. Generates statistics, determines if expected genes are present and align contigs to a reference genome. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Polished assembly', - }, - { - 'datatypes': ['fasta'], - 'label': 'Reference genome assembly (e.g. related species)', - }, - ], - "view_link": "https://workflowhub.eu/workflows/229", - "view_tip": view_workflow_tip, - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=229", - "button_tip": import_workflow_tip, - }, -] - -workflows_hic = [ - { - "title_md": 'About these workflows', - "description_md": """ -

- These workflows have been developed as part of the global Vertebrate Genome Project (VGP). - A guide to using these in Galaxy Australia can be found - here. - A complete guide to the individual workflows and sample results can be found - here. - There are many different ways that these workflows can be used in practice - for a comprehensive example, check out this - Galaxy tutorial. -

""", - }, - { - "title_md": 'Kmer profiling', - "description_md": """ -

- This workflow produces a Meryl database and Genomescope outputs that will be used to determine parameters for following workflows, and assess the quality of genome assemblies. Specifically, it provides information about the genomic complexity, such as the genome size and levels of heterozygosity and repeat content, as well about the data quality. -

""", - "inputs": [ - { - 'datatypes': ['fastq'], - 'label': 'PacBio HiFi reads', - }, - ], - "view_link": "https://dockstore.org/workflows/github.com/iwc-workflows/kmer-profiling-hifi-VGP1/main:main", - "view_tip": view_workflow_tip, - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/kmer-profiling-hifi-VGP1/main", - "button_tip": import_workflow_tip, - }, - { - "title_md": 'Hifi assembly and HiC phasing', - "description_md": """ -

- This workflow uses hifiasm (HiC mode) to generate HiC-phased haplotypes (hap1 and hap2). This is in contrast to its default mode, which generates primary and alternate pseudohaplotype assemblies. This workflow includes three tools for evaluating assembly quality: gfastats, BUSCO and Merqury. -

- -

- - Note: if you have multiple input files for each HiC set, they need to be concatenated. The forward set needs to be concatenated in the same order as reverse set. - -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'PacBio HiFi reads', - }, - { - 'datatypes': ['fastq'], - 'label': 'PacBio HiC reads (forward)', - }, - { - 'datatypes': ['fastq'], - 'label': 'PacBio HiC reads (reverse)', - }, - { - 'datatypes': ['meryldb'], - 'label': ' kmer database', - }, - { - 'datatypes': ['txt'], - 'label': 'GenomeScope genome profile summary', - }, - ], - "view_link": "https://dockstore.org/workflows/github.com/iwc-workflows/Assembly-Hifi-HiC-phasing-VGP4/main:main", - "view_tip": view_workflow_tip, - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Assembly-Hifi-HiC-phasing-VGP4/main", - "button_tip": import_workflow_tip, - }, - { - "title_md": 'HiC scaffolding', - "description_md": """ -

- This workflow scaffolds the assembly contigs using information from HiC data. -

""", - "inputs": [ - { - 'datatypes': ['gfa'], - 'label': 'Assembly of haplotype 1', - }, - { - 'datatypes': ['fastq'], - 'label': 'HiC forward reads', - }, - { - 'datatypes': ['fastq'], - 'label': 'HiC reverse reads', - }, - ], - "view_link": "https://dockstore.org/workflows/github.com/iwc-workflows/Scaffolding-HiC-VGP8/main:main", - "view_tip": view_workflow_tip, - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Scaffolding-HiC-VGP8/main", - "button_tip": import_workflow_tip, - }, - { - "title_md": 'Decontamination', - "description_md": """ -

- This workflow identifies and removes contaminants from the assembly. -

""", - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Assembly', - }, - ], - "view_link": "https://dockstore.org/workflows/github.com/iwc-workflows/Assembly-decontamination-VGP9/main:v0.1", - "view_tip": view_workflow_tip, - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=dockstore.org&trs_id=%23workflow/github.com/iwc-workflows/Assembly-decontamination-VGP9/main", - "button_tip": import_workflow_tip, - }, -] - -workflows = { - 'subsections': [ - { - 'id': 'pacbio', - 'title': 'Assembly with PacBio HiFi data', - 'content': workflows_pacbio, - }, - { - 'id': 'nanopore', - 'title': 'Assembly with Nanopore data and polishing with Illumina data', - 'content': workflows_nanopore, - }, - { - 'id': 'hic', - 'title': 'Assembly with PacBio HiFi and HiC data', - 'content': workflows_hic, - }, - ] -} - - -help = [ - { - "title_md": 'Can I use Galaxy Australia to assemble a large genome?', - "description_md": """ -

- Yes. Galaxy Australia has assembly tools for small prokaryote genomes as well as larger eukaryote genomes. We are continually adding new tools and optimising them for large genome assemblies - this means adding enough computer processing power to run data-intensive tools, as well as configuring aspects such as parallelisation. -

-

- Please contact us if: -

-
    -
  • you need to increase your data storage limit
  • -
  • there is a tool you wish to request
  • -
  • a tool appears to be broken or running slowly
  • -
""", - "button_link": "/request", - "button_md": "Request support", - }, - { - "title_md": 'How can I learn about genome assembly?', - "description_md": """ -
    -
  • See the tutorials in this Help section. They cover different approaches to genome assembly. -
  • -
  • Read the methods in scientific papers about genome assembly, particularly those about genomes with similar characteristics to those in your project
  • -
  • See the Workflows section for examples of different approaches to genome assembly - these cover different sequencing data types, and a variety of tools.
  • -
""", - }, - { - "title_md": 'Genome assembly overview', - "description_md": """ -

Genome assembly can be a very involved process. A typical genome assembly procedure might look like:

-
    -
  • Data QC - check the quality and characteristics of your sequencing reads.
  • -
  • Kmer counting - to determine genome characteristics such as ploidy and size.
  • -
  • Data preparation - trimming and filtering sequencing reads if required.
  • -
  • Assembly - for large genomes, this is usually done with long sequencing reads from PacBio or Nanopore.
  • -
  • Polishing - the assembly may be polished (corrected) with long and/or short (Illumina) reads.
  • -
  • Scaffolding - the assembly contigs may be joined together with other sequencing data such as HiC.
  • -
  • Assessment - at any stage, the assembly can be assessed for number of contigs, number of base pairs, whether expected genes are present, and many other metrics.
  • -
  • Annotation - identify features on the genome assembly such as gene names and locations.
  • -
- Genome assembly flowchart -

A graphical representation of genome assembly

""", - }, - { - "title_md": 'Which tools should I use?', - "description_md": """ -

- There is no best set of tools to recommend - new tools are developed constantly, sequencing technology improves rapidly, and many genomes have never been sequenced before and thus their characteristics and quirks are unknown. The "Tools" tab in this section includes a list of commonly-used tools that could be a good starting point. You will find other tools in recent publications or used in workflows. -

-

- You can also search for tools in Galaxy's tool panel. If they aren't installed on Galaxy Australia, you can - request installation - of a tool. -

-

- We recommend testing a tool on a small data set first and seeing if the results make sense, before running on your full data set. -

- """, - }, - { - "title_md": 'Tutorials', - "description_md": """ -

- Find 15+ Galaxy training tutorials - here. -

- -

- - Introduction to genome assembly and annotation (slides) - -

- -

- - Vertebrate genome assembly pipeline (tutorial) - -

- -

- - Nanopore and illumina genome assembly (tutorial) - -

- -

- - Share workflows and results with workflow reports (tutorial) - -

- """, - }, - { - "title_md": 'How can I assess the quality of my genome assembly?', - "description_md": """ -

- Once a genome has been assembled, it is important to assess the quality of the assembly, and in the first instance, this quality control (QC) can be achieved using the workflow described here. -

- """, - "button_link": "https://australianbiocommons.github.io/how-to-guides/genome_assembly/assembly_qc", - "button_md": "Workflow tutorial", - }, - galaxy_au_support_item, -] diff --git a/webapp/home/subdomains/genome/content/data.py b/webapp/home/subdomains/genome/content/data.py deleted file mode 100644 index 6d979417..00000000 --- a/webapp/home/subdomains/genome/content/data.py +++ /dev/null @@ -1,216 +0,0 @@ -"""Content for data section - tools, workflows and help tabs.""" - -galaxy_au_support_item = { - "title_md": 'Galaxy Australia support', - "description_md": """

- Any user of Galaxy Australia can request support through an - online form. -

""", - "button_link": "/request/support", - "button_md": "Request support", -} - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": "Import data to Galaxy", - "description_md": "

Standard upload of data to Galaxy, from your computer or from the web.

", - "button_link": '{{ galaxy_base_url }}/tool_runner?tool_id=upload1', - }, - { - "title_md": 'FastQC - sequence quality reports', - "description_md": '

Before using your sequencing data, it's important first ensure that the data quality is sufficient for your analysis.

', - "inputs": [ - {'datatypes': ['fastq']}, - {'datatypes': ['bam']}, - {'datatypes': ['sam']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fdevteam%2Ffastqc%2Ffastqc", - }, - { - "title_md": 'FastP - sequence quality reports, trimming & filtering', - "description_md": '

Faster run than FastQC, this tool can also trim reads and filter by quality.

', - "inputs": [ - {'datatypes': ['fastq']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Ffastp%2Ffastp", - }, - { - "title_md": 'NanoPlot - visualize Oxford Nanopore data', - "description_md": '

A plotting suite for Oxford Nanopore sequencing data and alignments.

', - "inputs": [ - {'datatypes': ['fastq']}, - {'datatypes': ['fasta']}, - {'datatypes': ['vcf_bgzip']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fnanoplot%2Fnanoplot", - }, - { - "title_md": 'GenomeScope - estimate genome size', - "description_md": '

A set of metrics and graphs to visualize genome size and complexity prior to assembly.

', - "inputs": [ - { - "datatypes": ["tabular"], - "label": "Output from Meryl or Jellyfish histo", - }, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fgenomescope%2Fgenomescope", - }, - { - "title_md": 'Meryl - count kmers', - "description_md": '

Prepare kmer count histogram for input to GenomeScope.

', - "inputs": [ - {'datatypes': ['fastq']}, - {'datatypes': ['fasta']}, - ], - "button_link": "{{ galaxy_base_url }}/tool_runner?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fiuc%2Fmeryl%2Fmeryl", - }, -] - - -workflows = [ - { - "title_md": 'Data QC', - "description_md": """ -

- Report statistics from sequencing reads. -
-
- Tools: - nanoplot - fastqc - multiqc -

""", - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=222", - "button_tip": "Import to Galaxy AU", - "view_link": "https://workflowhub.eu/workflows/222", - "view_tip": "View in WorkflowHub", - }, - { - "title_md": 'Kmer counting to estimate genome size', - "description_md": """ -

- Estimates genome size and heterozygosity based on counts of kmers. -
-
- Tools: - meryl - genomescope -

""", - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=223", - "button_tip": "Import to Galaxy AU", - "view_link": "https://workflowhub.eu/workflows/223", - "view_tip": "View in WorkflowHub", - }, - { - "title_md": 'Trim and filter reads', - "description_md": """ -

- Trims and filters raw sequence reads according to specified settings. -
-
- Tools: - fastp -

""", - "button_link": "{{ galaxy_base_url }}/workflows/trs_import?trs_server=workflowhub.eu&run_form=true&trs_id=224", - "button_tip": "Import to Galaxy AU", - "view_link": "https://workflowhub.eu/workflows/224", - "view_tip": "View in WorkflowHub", - }, -] - - -help = [ - { - "title_md": 'How can I import my genomics data?', - "description_md": """ -

- You can upload your data to Galaxy using the Upload tool from anywhere in Galaxy. Just look for the "Upload data" button at the top of the tool panel. -

""", - "button_link": "https://training.galaxyproject.org/training-material/topics/galaxy-interface/", - "button_md": "More info", - }, - { - "title_md": 'How can I subsample my data?', - "description_md": """ -

- We recommend subsampling large data sets to test tools and workflows. A useful tool is seqtk_seq, setting the parameter at "Sample fraction of sequences" -

""", - }, - { - "title_md": 'How can I import data from the BPA portal?', - "description_md": """ -

- BioPlatforms Australia allows data downloads via URL. Once you have generated one of these URLs in the BPA portal, you can import it into Galaxy using the "Fetch data" feature of the Upload tool. -

""", - "button_link": "https://australianbiocommons.github.io/how-to-guides/genome_assembly/hifi_assembly#in-depth-workflow-guide", - "button_md": "More info", - }, - { - "title_md": 'Can I upload sensitive data?', - "description_md": """ -

- No, do not upload personal or sensitive, such as human health or clinical data. - Please see our - Data Privacy - page for definitions of sensitive and health-related information. -

-

- Please also make sure you have read our - Terms of Service, - which covers hosting and analysis of research data. -

""", - }, - { - "title_md": 'Is my data private?', - "description_md": """ -

- Please read our - Privacy Policy - for information on your personal data and any data that you upload. -

""", - }, - { - "title_md": 'How can I increase my storage quota?', - "description_md": """ -

- Please submit a quota request if your Galaxy Australia account reaches its data storage limit. Requests are usually provisioned quickly if you provide a reasonable use case for your request. -

""", - "button_link": "/request/quota", - "button_md": "Request", - }, - { - "title_md": 'Tutorial: Quality Control', - "description_md": """ -

- Quality control and data cleaning is an essential first step in any NGS analysis. This tutorial will show you how to use and interpret results from FastQC, NanoPlot and PycoQC. -

""", - "button_link": "https://training.galaxyproject.org/training-material/topics/sequence-analysis/tutorials/quality-control/tutorial.html", - "button_md": "Tutorial", - }, - { - "title_md": 'Tutorial: introduction to Genomics and Galaxy', - "description_md": """ -

- This practical aims to familiarize you with the Galaxy user interface. It will teach you how to perform basic tasks such as importing data, running tools, working with histories, creating workflows, and sharing your work. -

""", - "button_link": "https://training.galaxyproject.org/training-material/topics/introduction/tutorials/galaxy-intro-strands/tutorial.html", - "button_md": "Tutorial", - }, - galaxy_au_support_item, -] diff --git a/webapp/home/subdomains/genome/sections.py b/webapp/home/subdomains/genome/sections.py deleted file mode 100644 index 85a370bb..00000000 --- a/webapp/home/subdomains/genome/sections.py +++ /dev/null @@ -1,83 +0,0 @@ -"""Content for landing page is modularize in Python code and imported from this -file. -""" - -from . import content - -workflow_heading_md = """A workflow is a series of Galaxy tools that have been linked together to perform a specific analysis. You can use and customize the example workflows below. -Learn more. -""" - -tools_heading_md = """Common tools are listed here, or search for more in the full tool panel to the left.""" - -sections = [ - { - "id": "data", - "title": "Data import and preparation", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.data.tools, - }, - { - "id": "workflows", - "title": "Workflows", - "heading_md": workflow_heading_md, - "content": content.data.workflows, - }, - { - "id": "help", - "title": "Help", - "content": content.data.help, - }, - ], - }, - { - "id": "assembly", - "title": "Genome assembly", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.assembly.tools, - }, - { - "id": "workflows", - "title": "Workflows", - "heading_md": workflow_heading_md, - "content": content.assembly.workflows, - }, - { - "id": "help", - "title": "Help", - "content": content.assembly.help, - }, - ], - }, - { - "id": "annotation", - "title": "Genome annotation", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.annotation.tools, - }, - { - "id": "workflows", - "title": "Workflows", - "heading_md": workflow_heading_md, - "content": content.annotation.workflows, - }, - { - "id": "help", - "title": "Help", - "content": content.annotation.help, - }, - ], - }, -] diff --git a/webapp/home/subdomains/proteomics/__init__.py b/webapp/home/subdomains/proteomics/__init__.py deleted file mode 100644 index 50e41a9c..00000000 --- a/webapp/home/subdomains/proteomics/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Content for proteomics subdomain page.""" - -from .sections import sections diff --git a/webapp/home/subdomains/proteomics/content/__init__.py b/webapp/home/subdomains/proteomics/content/__init__.py deleted file mode 100644 index 43e063b6..00000000 --- a/webapp/home/subdomains/proteomics/content/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from . import ( - database_searching, - dda_standardised_tools, - dia_standardised_tools, - dda_tmt, -) diff --git a/webapp/home/subdomains/proteomics/content/data.py b/webapp/home/subdomains/proteomics/content/data.py deleted file mode 100644 index 2a1b1478..00000000 --- a/webapp/home/subdomains/proteomics/content/data.py +++ /dev/null @@ -1,82 +0,0 @@ -"""Content for data section - tools, workflows and help tabs.""" - -galaxy_au_support_item = { - "title_md": 'Galaxy Australia support', - "description_md": """

- Any user of Galaxy Australia can request support through an - online form. -

""", - "button_link": "/request/support", - "button_md": "Request support", -} - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": "Import data to Galaxy", - "description_md": "

Standard upload of data to Galaxy, from your computer or from the web.

", - "button_link": '{{ galaxy_base_url }}/tool_runner?tool_id=upload1', - } -] - - -help = [ - { - "title_md": 'Can I upload sensitive data?', - "description_md": """ -

- No, do not upload personal or sensitive, such as human health or clinical data. - Please see our - Data Privacy - page for definitions of sensitive and health-related information. -

-

- Please also make sure you have read our - Terms of Service, - which covers hosting and analysis of research data. -

""", - }, - { - "title_md": 'Is my data private?', - "description_md": """ -

- Please read our - Privacy Policy - for information on your personal data and any data that you upload. -

""", - }, - { - "title_md": 'How can I increase my storage quota?', - "description_md": """ -

- Please submit a quota request if your Galaxy Australia account reaches its data storage limit. Requests are usually provisioned quickly if you provide a reasonable use case for your request. -

""", - "button_link": "/request/quota", - "button_md": "Request", - }, - { - "title_md": 'Tutorial: Introduction to proteomics, protein identification, quantification and statistical modelling', - "description_md": """ -

- This practical aims to familiarize you with Galaxy for Proteomics, including theory, methods and software examples. -

""", - "button_link": "https://training.galaxyproject.org/training-material/topics/proteomics/tutorials/introduction/slides.html#1", - "button_md": "Tutorial", - }, - galaxy_au_support_item, -] diff --git a/webapp/home/subdomains/proteomics/content/database_searching.py b/webapp/home/subdomains/proteomics/content/database_searching.py deleted file mode 100644 index 70e15b26..00000000 --- a/webapp/home/subdomains/proteomics/content/database_searching.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Content for data section - tools, workflows and help tabs.""" - -galaxy_au_support_item = { - "title_md": 'Galaxy Australia support', - "description_md": """

- Any user of Galaxy Australia can request support through an - online form. -

""", - "button_link": "/request/support", - "button_md": "Request support", -} - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": 'DecoyDatabase', - "description_md": '

Create decoy sequence database from forward sequence database.

', - "inputs": [ - { - 'datatypes': ['fasta'], - 'label': 'Input FASTA file(s), each containing a database', - } - ], - "button_link": "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/openms_decoydatabase/DecoyDatabase/", - }, - { - "title_md": 'MaxQuant', - "description_md": '

MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets.

', - "inputs": [ - { - 'datatypes': ['thermo.raw', 'mzML', 'mzXML'], - 'label': 'Mass spectrometry data sets' - }, - { - 'datatypes': ['tabular'], - 'label': 'Experimental design template', - }, - ], - "button_link": "{{ galaxy_base_url }}/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/maxquant/maxquant/", - }, - { - "title_md": 'Morpheus', - "description_md": '

Database search algorithm for high-resolution tandem mass spectra.

', - "inputs": [ - { - 'datatypes': ['mzML'], - 'label': 'Indexed mzML', - }, - { - 'datatypes': ['fasta', 'uniprotxml'], - 'label': 'MS Protein Search Database: UniProt Xml or Fasta', - }, - ], - "button_link": "https://proteomics.usegalaxy.org.au/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/morpheus/morpheus/", - } -] - -help = [] # Todo diff --git a/webapp/home/subdomains/proteomics/content/dda_standardised_tools.py b/webapp/home/subdomains/proteomics/content/dda_standardised_tools.py deleted file mode 100644 index 1a2f416e..00000000 --- a/webapp/home/subdomains/proteomics/content/dda_standardised_tools.py +++ /dev/null @@ -1,99 +0,0 @@ -"""Content for data section - tools, workflows and help tabs.""" - -galaxy_au_support_item = { - "title_md": 'Galaxy Australia support', - "description_md": """

- Any user of Galaxy Australia can request support through an - online form. -

""", - "button_link": "/request/support", - "button_md": "Request support", -} - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": 'MaxQuant', - "description_md": '

MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets.

', - "inputs": [ - { - 'datatypes': [ - 'thermo.raw', - 'mzML', - 'mzXML', - ], - 'label': 'MS spectra (input file)', - }, - { - 'datatypes': ['tabular'], - 'label': 'Experimental design template', - }, - ], - "button_link": "https://usegalaxy.org.au/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/maxquant/maxquant/", - }, - { - "title_md": 'MSstats', - "description_md": '

Statistical relative protein significance analysis in DDA, SRM and DIA Mass Spectrometry.

', - "inputs": [ - { - 'datatypes': ['tabular', 'csv'], - 'label': 'Either the 10-column MSstats format or the outputs of spectral processing tools such as MaxQuant, OpenSWATH.', - } - ], - "button_link": "https://usegalaxy.org.au/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/msstats/msstats/", - }, - { - "title_md": 'LFQ Analyst', - "description_md": '

Analyze and Visualize Label-Free Proteomics output from MaxQuant.

', - "inputs": [ - { - 'datatypes': ['txt'], - 'label': 'Protein groups (MaxQuant output)', - }, - { - 'datatypes': ['txt'], - 'label': 'Experimental Design Matrix (MaxQuant output)', - } - ], - "button_link": "https://usegalaxy.org.au/root?tool_id=interactive_tool_lfqanalyst_2", - } -] - - -help = [ - { - "title_md": 'LFQ-Analyst: Manual', - "description_md": """ -

- A detailed user manual for LFQ-Analyst. -

""", - "button_link": "https://analyst-suite.monash-proteomics.cloud.edu.au/apps/lfq-analyst/LFQ-Analyst_manual.pdf", - "button_md": "Manual", - }, - { - "title_md": 'MaxQuant and MSstats for the analysis of label-free data', - "description_md": """ -

- Learn how to use MaxQuant and MSstats for the analysis of label-free shotgun (DDA) data. -

""", - "button_link": "https://training.galaxyproject.org/training-material/topics/proteomics/tutorials/maxquant-msstats-dda-lfq/tutorial.html", - "button_md": "Tutorial", - }, - galaxy_au_support_item, -] - diff --git a/webapp/home/subdomains/proteomics/content/dda_tmt.py b/webapp/home/subdomains/proteomics/content/dda_tmt.py deleted file mode 100644 index 9be9c548..00000000 --- a/webapp/home/subdomains/proteomics/content/dda_tmt.py +++ /dev/null @@ -1,87 +0,0 @@ -"""Content for data section - tools, workflows and help tabs.""" - -galaxy_au_support_item = { - "title_md": 'Galaxy Australia support', - "description_md": """

- Any user of Galaxy Australia can request support through an - online form. -

""", - "button_link": "/request/support", - "button_md": "Request support", -} - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": 'MaxQuant', - "description_md": '

MaxQuant is a quantitative proteomics software package designed for analyzing large mass-spectrometric data sets.

', - "inputs": [ - { - 'datatypes': [ - 'thermo.raw', - 'mzML', - 'mzXML', - ], - 'label': 'MS spectra (input file)', - }, - { - 'datatypes': ['tabular'], - 'label': 'Experimental design template', - }, - ], - "button_link": "https://usegalaxy.org.au/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/maxquant/maxquant/", - }, - { - "title_md": 'TMT Analyst', - "description_md": '

Analyze and Visualize Label-Free Proteomics output from MaxQuant.

', - "inputs": [ - { - 'datatypes': ['txt'], - 'label': 'Protein groups (MaxQuant output)', - }, - { - 'datatypes': ['txt'], - 'label': 'Experimental Design Matrix (MaxQuant output)', - } - ], - "button_link": "https://usegalaxy.org.au/root?tool_id=interactive_tool_tmtanalyst", - } -] - - -help = [ - { - "title_md": 'TMT-Analyst: Manual', - "description_md": """ -

- A detailed user manual for TMT-Analyst. -

""", - "button_link": "https://analyst-suites.org/apps/tmt-analyst/TMT-Analyst-manual.pdf", - "button_md": "Manual", - }, - { - "title_md": 'MaxQuant and MSstats for the analysis of TMT data', - "description_md": """ -

- Learn how to use MaxQuant and MSstats for the analysis of TMT labelled shotgun (DDA) data. -

""", - "button_link": "https://training.galaxyproject.org/training-material/topics/proteomics/tutorials/maxquant-msstats-tmt/tutorial.html", - "button_md": "Tutorial", - }, - galaxy_au_support_item, -] diff --git a/webapp/home/subdomains/proteomics/content/dia_standardised_tools.py b/webapp/home/subdomains/proteomics/content/dia_standardised_tools.py deleted file mode 100644 index 5b332bac..00000000 --- a/webapp/home/subdomains/proteomics/content/dia_standardised_tools.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Content for data section - tools, workflows and help tabs.""" - -galaxy_au_support_item = { - "title_md": 'Galaxy Australia support', - "description_md": """

- Any user of Galaxy Australia can request support through an - online form. -

""", - "button_link": "/request/support", - "button_md": "Request support", -} - -tools = [ - # { # Accordion item schema: - # "title_md": '', - # "description_md": """""", - # "inputs": [ - # { - # 'datatypes': [''], - # 'label': '', - # }, - # ], - # "button_link": "", - # "button_md": "", - # "button_tip": "", - # "view_link": "", - # "view_md": "", - # "view_tip": "", - # }, - { - "title_md": 'MSstats', - "description_md": '

Statistical relative protein significance analysis in DDA, SRM and DIA Mass Spectrometry.

', - "inputs": [ - { - 'datatypes': ['tabular', 'csv'], - 'label': 'Either the 10-column MSstats format or the outputs of spectral processing tools such as MaxQuant, OpenSWATH.', - } - ], - "button_link": "https://usegalaxy.org.au/root?tool_id=toolshed.g2.bx.psu.edu/repos/galaxyp/msstats/msstats/", - } -] - - -help = [] diff --git a/webapp/home/subdomains/proteomics/sections.py b/webapp/home/subdomains/proteomics/sections.py deleted file mode 100644 index 4e48d346..00000000 --- a/webapp/home/subdomains/proteomics/sections.py +++ /dev/null @@ -1,78 +0,0 @@ -"""Content for landing page is modularize in Python code and imported from this -file. -""" - -from . import content - -tools_heading_md = """Some example tools are listed here: you can also search for more in the full tool panel to the left.""" - -sections = [ - { - "id": "database", - "title": "Database searching", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.database_searching.tools, - }, - { - "id": "help", - "title": "Help", - "content": content.database_searching.help, - }, - ], - }, - { - "id": "dda_standardised_tools", - "title": "Data dependent acquisition (DDA) standardised tools", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.dda_standardised_tools.tools, - }, - { - "id": "help", - "title": "Help", - "content": content.dda_standardised_tools.help, - }, - ], - }, - { - "id": "dia_standardised_tools", - "title": "Data independent acquisition (DIA) standardised tools", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.dia_standardised_tools.tools, - }, - { - "id": "help", - "title": "Help", - "content": content.dia_standardised_tools.help, - }, - ], - }, - { - "id": "dda_tmt", - "title": "DDA tandem mass tags (TMT)", - "tabs": [ - { - "id": "tools", - "title": "Tools", - "heading_md": tools_heading_md, - "content": content.dda_tmt.tools, - }, - { - "id": "help", - "title": "Help", - "content": content.dda_tmt.help, - }, - ], - } -] diff --git a/webapp/home/subdomains/python_to_yml.py b/webapp/home/subdomains/python_to_yml.py deleted file mode 100644 index 4d6fad81..00000000 --- a/webapp/home/subdomains/python_to_yml.py +++ /dev/null @@ -1,68 +0,0 @@ -"""Parse content encoded in Python as write to YAML file. - -genome.sections -genome.content.data -genome.content.assembly -genome.content.annotation - -""" - -import re -import yaml -import genome -from pathlib import Path - - -class LiteralUnicode(str): - pass - - -def literal_unicode_representer(dumper, data): - return dumper.represent_scalar(u'tag:yaml.org,2002:str', data, style='|') - - -def format_section(section): - """Find HTML items and strip whitespace from them.""" - new_section = section.copy() - for tab_ix, tab in enumerate(section['tabs']): - if isinstance(tab['content'], list): - for ix, item in enumerate(tab['content']): - for k, v in item.items(): - if 'html' in k: - new_section['tabs'][tab_ix]['content'][ix][k] = ( - strip_html_whitespace(v) - ) - else: - # content is in subsections - for subsection_ix, subsection in enumerate( - tab['content']['subsections'] - ): - for ix, item in enumerate(subsection['content']): - for k, v in item.items(): - if 'html' in k: - new_section[ - 'tabs'][tab_ix]['content']['subsections'][ - subsection_ix]['content'][ix][k] = ( - strip_html_whitespace(v) - ) - return new_section - - -def strip_html_whitespace(html): - """Remove whitespace from HTML string. - - Replace multiple spaces with single space. - """ - return re.sub( - r'\s+', ' ', - html.replace('\n', '').replace('\\', ''), - ).strip() - - -# yaml.add_representer(LiteralUnicode, literal_unicode_representer) - -for section in genome.sections: - section = format_section(section) - fname = Path(__file__).parent / f"{section['id']}.yml" - with open(fname, 'w') as f: - yaml.dump(section, f) diff --git a/webapp/home/templates/home/header-export.html b/webapp/home/templates/home/header-export.html deleted file mode 100644 index f4730bd4..00000000 --- a/webapp/home/templates/home/header-export.html +++ /dev/null @@ -1,66 +0,0 @@ - - - -{% load static %} - - - {% include 'home/snippets/head.html' %} - {% if title %}{{ title }}{% else %}Galaxy - data analysis for everyone{% endif %} - {% include 'home/snippets/imports.html' %} - {% include 'home/snippets/posthog.html' %} - - {% block head %} - {% endblock %} - - - - - - - {% block content %} - {% endblock %} - - {% block script %} - {% endblock %} - - - - diff --git a/webapp/home/templates/home/labs-deprecated.html b/webapp/home/templates/home/labs-deprecated.html new file mode 100644 index 00000000..289facfd --- /dev/null +++ b/webapp/home/templates/home/labs-deprecated.html @@ -0,0 +1,13 @@ +{% extends 'home/header.html' %} + +{% load static %} + + +{% block content %} +
+
+ Galaxy Labs are now deprecated in the Media Site, in favour of the new Labs + Engine, available at https://labs.usegalaxy.org.au/. +
+
+{% endblock %} diff --git a/webapp/home/templates/home/subdomains/components/accordion.html b/webapp/home/templates/home/subdomains/components/accordion.html deleted file mode 100644 index 77cb4adf..00000000 --- a/webapp/home/templates/home/subdomains/components/accordion.html +++ /dev/null @@ -1,78 +0,0 @@ -{% load markdown %} - -
- {% for item in content %} -
-

- -

-
-
-
-
- {{ item.description_md|markdown }} - {% if item.inputs %} - {% include 'home/subdomains/components/inputs.html' with inputs=item.inputs %} - {% endif %} -
- - -
-
-
-
- {% endfor %} -
diff --git a/webapp/home/templates/home/subdomains/components/contributors.html b/webapp/home/templates/home/subdomains/components/contributors.html deleted file mode 100644 index d644b82c..00000000 --- a/webapp/home/templates/home/subdomains/components/contributors.html +++ /dev/null @@ -1,29 +0,0 @@ -
-

Contributors

-
- {% for user in contributors %} - -
- {% if user.avatar_url %} - Github avatar for {{ user.login }} - {% else %} - - {% endif %} -
-
- {% endfor %} -
-
diff --git a/webapp/home/templates/home/subdomains/components/feedback-modal.html b/webapp/home/templates/home/subdomains/components/feedback-modal.html deleted file mode 100644 index 8e091806..00000000 --- a/webapp/home/templates/home/subdomains/components/feedback-modal.html +++ /dev/null @@ -1,135 +0,0 @@ - - -{% load static %} - - - - diff --git a/webapp/home/templates/home/subdomains/components/feedback.html b/webapp/home/templates/home/subdomains/components/feedback.html deleted file mode 100644 index 1e217f7b..00000000 --- a/webapp/home/templates/home/subdomains/components/feedback.html +++ /dev/null @@ -1,117 +0,0 @@ - - -{% load static %} - - diff --git a/webapp/home/templates/home/subdomains/components/genome-community-modal.html b/webapp/home/templates/home/subdomains/components/genome-community-modal.html deleted file mode 100644 index d1ef1148..00000000 --- a/webapp/home/templates/home/subdomains/components/genome-community-modal.html +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/webapp/home/templates/home/subdomains/components/gtn-modal.html b/webapp/home/templates/home/subdomains/components/gtn-modal.html deleted file mode 100644 index 037d2b92..00000000 --- a/webapp/home/templates/home/subdomains/components/gtn-modal.html +++ /dev/null @@ -1,33 +0,0 @@ - diff --git a/webapp/home/templates/home/subdomains/components/info-modal.html b/webapp/home/templates/home/subdomains/components/info-modal.html deleted file mode 100644 index 5a00369f..00000000 --- a/webapp/home/templates/home/subdomains/components/info-modal.html +++ /dev/null @@ -1,29 +0,0 @@ -{% load static %} - - diff --git a/webapp/home/templates/home/subdomains/components/inputs.html b/webapp/home/templates/home/subdomains/components/inputs.html deleted file mode 100644 index 6806687c..00000000 --- a/webapp/home/templates/home/subdomains/components/inputs.html +++ /dev/null @@ -1,16 +0,0 @@ -{% load markdown %} - -

Input data:

- - {% for input in inputs %} - - - - - {% endfor %} -
- {% for datatype in input.datatypes %} - {% if forloop.counter0 %}
{% endif %} - {{ datatype }} - {% endfor %} -
{{ input.label|inline_markdown }}
diff --git a/webapp/home/templates/home/subdomains/components/proteomics-community-modal.html b/webapp/home/templates/home/subdomains/components/proteomics-community-modal.html deleted file mode 100644 index a5c4682b..00000000 --- a/webapp/home/templates/home/subdomains/components/proteomics-community-modal.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/webapp/home/templates/home/subdomains/components/section.html b/webapp/home/templates/home/subdomains/components/section.html deleted file mode 100644 index ed138194..00000000 --- a/webapp/home/templates/home/subdomains/components/section.html +++ /dev/null @@ -1,54 +0,0 @@ -{% load markdown %} - -
-

{{ section.title }}

- -
- - -
- {% for tab in section.tabs %} -
-
- {% if tab.heading_md %} -

- {{ tab.heading_md|inline_markdown }} -

- {% endif %} - - {% if tab.content.subsections %} - {% for subsection in tab.content.subsections %} -

{{ subsection.title }}

- {% include 'home/subdomains/components/accordion.html' with content=subsection.content tab_id=tab.id accordion_id=subsection.id %} - {% endfor %} - {% else %} - {% include 'home/subdomains/components/accordion.html' with content=tab.content tab_id=tab.id %} - {% endif %} -
-
- {% endfor %} -
-
-
diff --git a/webapp/home/templates/home/subdomains/export-error.html b/webapp/home/templates/home/subdomains/export-error.html deleted file mode 100644 index a933170b..00000000 --- a/webapp/home/templates/home/subdomains/export-error.html +++ /dev/null @@ -1,109 +0,0 @@ -{% extends 'home/header.html' %} - -{% block head %} -{% endblock %} - - -{% block content %} -
- -

Galaxy Lab build error

- - {% if exc.title %} -

{{ exc.title }}

- {% endif %} - - {% if exc.url %} -

- Source URL: {{ exc.url }} -

- {% endif %} - -
- {% if not exc.errors %} -

Error message:

-
{{ exc.message }}
- {% else %} -

YAML schema violations:

- - {% for error in exc.errors %} - {% if forloop.counter0 %}
{% endif %} -
-

- Location: {{ error.location }} -

-
{{ error.message }}
- - {% if error.help %} -
-
-

- -

-
-
- - - - - - - {% for id, field in error.help.schema.items %} - - - - - - {% endfor %} -
Field IDPermitted typesRequired
{{ id }} - {% if field.type %} - {{ field.type }} - {% else %} - {% for type in field.anyOf %} - {% if forloop.counter0 %}
{% endif %} - {{ type.type }} - {% endfor %} - {% endif %} -
- {% if id in error.help.required_fields %} - Yes - {% endif %} -
-
-
-
-
- {% endif %} - -
-
-

- -

-
-
-
{{ error.input }}
-
-
-
-
-
- {% endfor %} - - {% endif %} -
- -
-{% endblock %} - - -{% block script %} -{% endblock %} - - -{% block onload %} -{% endblock %} diff --git a/webapp/home/templates/home/subdomains/exported.html b/webapp/home/templates/home/subdomains/exported.html deleted file mode 100644 index 1fa5bc2e..00000000 --- a/webapp/home/templates/home/subdomains/exported.html +++ /dev/null @@ -1,90 +0,0 @@ -{% extends extend_template %} -{% load markdown %} - -{% comment %} - This template renders a generic Galaxy Lab landing page based on externally - hosted content (e.g. sections, tools, workflows, etc). -{% endcomment %} - -{% load static %} - - -{% block head %} - - - - - - - - - -{% endblock %} - - -{% block content %} - -
- {% comment %} - - {% include 'home/subdomains/components/genome-community-modal.html' %} - {% include 'home/subdomains/components/info-modal.html' with subdomain='genome' site_name="Genome Lab" researchers="genomics" %} - {% include 'home/subdomains/components/feedback.html' with subdomain='genome' %} - {% endcomment %} - - {% include 'home/subdomains/components/gtn-modal.html' %} - - -
- {% if snippets.header_logo %} - - {% endif %} - {{ lab_name|upper }} -
- - {% if snippets.intro_md %} - {{ snippets.intro_md|safe }} - {% endif %} - - {% for section in sections %} - {% include 'home/subdomains/components/section.html' with section=section %} - {% endfor %} - - {% if snippets.conclusion_md %} - {{ snippets.conclusion_md|markdown }} - {% endif %} - - {% if contributors %} - {% include 'home/subdomains/components/contributors.html' %} - {% endif %} - -
- - -{% if feedback_email %} -{% include 'home/subdomains/components/feedback-modal.html' %} -{% endif %} - - -{% if snippets.footer_md %} -{{ snippets.footer_md|markdown }} -{% endif %} - -{% endblock %} - - -{% block script %} -{% endblock %} - - -{% block onload %} - // Ensure that links open in new tab - $('a').each( (i, item) => { - if (item.href && item.href.slice(0, 1) !== "/") { - item.target = '_blank'; - } - }); -{% endblock %} diff --git a/webapp/home/templatetags/markdown.py b/webapp/home/templatetags/markdown.py index 6ca784bd..bc9349ee 100644 --- a/webapp/home/templatetags/markdown.py +++ b/webapp/home/templatetags/markdown.py @@ -4,21 +4,11 @@ """ import markdown2 -import re -import requests from django import template -from django.http import Http404 from django.utils.safestring import mark_safe register = template.Library() -ICONS = { - 'run': 'play_arrow', - 'tutorial': 'school', - 'social': 'group', - 'help': 'help', -} - def render_markdown(md): if not md: @@ -33,17 +23,10 @@ def render_markdown(md): return html.strip(' \n') -def expand_tags(html): - if '{gtn modal}'): html = html[3:-4] - html = expand_tags(html) - return mark_safe(html) - - -@register.simple_tag() -def markdown_from_url(url): - """Fetch content from URL and render html from markdown string. - - This is intended to be used by exported Galaxy Labs, where a markdown url - comes from a remote source. - """ - res = requests.get(url) - if res.status_code >= 300: - raise Http404(f"URL {url} returned status code {res.status_code}") - body = res.text - - # Remove YAML header if present - liquid_md = ( - body.rsplit('---\n', 1)[1] - if '---\n' in body - else body - ) - # Remove any Liquid syntax {: ... } - md = re.sub(r'\{:.*\}', '', liquid_md) - - html = markdown2.markdown(md, extras={ - "tables": True, - "code-friendly": False, - "html-classes": { - 'table': 'table table-striped', - }, - }) - return mark_safe(html) - - -@register.filter() -def iconkey(key): - """Map icon keyword to material icons ID.""" - return ICONS.get(key, 'play_arrow') diff --git a/webapp/home/test/data/__init__.py b/webapp/home/test/data/__init__.py index d50302c7..74484bc4 100644 --- a/webapp/home/test/data/__init__.py +++ b/webapp/home/test/data/__init__.py @@ -1,2 +1 @@ from .notices import TEST_NOTICES -from .subsites import TEST_LABS, MOCK_REQUESTS, MOCK_LAB_BASE_URL diff --git a/webapp/home/test/data/notices.py b/webapp/home/test/data/notices.py index 6b90610d..30ae6eb8 100644 --- a/webapp/home/test/data/notices.py +++ b/webapp/home/test/data/notices.py @@ -1,7 +1,5 @@ """Data for test setup.""" -from .subsites import TEST_LABS - TEST_NOTICES = [ { "data": { @@ -12,9 +10,6 @@ "enabled": True, "is_published": True, }, - "relations": { - "subsites": [TEST_LABS[0]], - }, }, { "data": { @@ -24,14 +19,11 @@ "body": ( "# Test notice body 2\n\n" "Another arbitrary info notice." - " This one will also be displayed on a second subsite." + " This one used to be displayed on a second subsite." ), "enabled": True, "is_published": True, }, - "relations": { - "subsites": [TEST_LABS[0]], - }, }, { "data": { @@ -43,9 +35,6 @@ ), "enabled": True, }, - "relations": { - "subsites": [TEST_LABS[0]], - }, }, { "data": { @@ -59,8 +48,5 @@ "is_published": True, "static_display": True, }, - "relations": { - "subsites": [TEST_LABS[0]], - }, }, ] diff --git a/webapp/home/test/data/subsites.py b/webapp/home/test/data/subsites.py deleted file mode 100644 index 251d4d41..00000000 --- a/webapp/home/test/data/subsites.py +++ /dev/null @@ -1,64 +0,0 @@ -"""Data for test setup. - -TODO: this needs to be updated for new exported lab pages. -""" - -import os -import json -from pathlib import Path - -CONTENT_DIRS = ( - Path(__file__).parent.parent.parent - / 'static/home/labs/docs', - Path(__file__).parent.parent.parent - / 'static/home/labs/genome', - Path(__file__).parent.parent.parent - / 'static/home/labs/proteomics', -) -MOCK_LAB_BASE_URL = 'http://mockserver' - - -# Collect all the files from the lab's content dir and assign each -# file's content to a URL in the mock server. -MOCK_REQUESTS = {} -for content_dir in CONTENT_DIRS: - if not content_dir.exists(): - raise FileNotFoundError(f"Content directory not found: {content_dir}") - for root, dirs, files in os.walk(content_dir): - for file in files: - filepath = os.path.join(root, file) - with open(filepath) as f: - static_path = 'static/' + filepath.split('/static/', 1)[1] - url = f'{MOCK_LAB_BASE_URL}/{static_path}' - try: - MOCK_REQUESTS[url] = f.read() - except UnicodeDecodeError: - # Binary files not required for testing - pass - -MOCK_REQUESTS.update({ - 'https://api.github.com/users/neoformit': json.dumps({ - "login": "neoformit", - "avatar_url": - "https://img.freepik.com/premium-photo/penguin-snow_942736-63.jpg", - }), - 'https://api.github.com/users/AnnaSyme': json.dumps({ - "login": "AnnaSyme", - "avatar_url": - "https://img.freepik.com/premium-photo/penguin-snow_942736-63.jpg", - }), - 'https://api.github.com/users/supernord': json.dumps({ - "login": "supernord", - "avatar_url": - "https://img.freepik.com/premium-photo/penguin-snow_942736-63.jpg", - }), -}) - -TEST_LABS = [ - { - "name": "main", - }, - { - "name": "genome", - }, -] diff --git a/webapp/home/tests.py b/webapp/home/tests.py index 1143147d..b7435e18 100644 --- a/webapp/home/tests.py +++ b/webapp/home/tests.py @@ -1,17 +1,11 @@ import requests -import requests_mock from django.test import Client from django.core.files import File from django.core import mail from pathlib import Path -from .lab_export import ExportSubsiteContext -from .models import Notice, Subsite -from .test.data import ( - TEST_NOTICES, - MOCK_REQUESTS, - MOCK_LAB_BASE_URL, -) +from .models import Notice +from .test.data import TEST_NOTICES from events.models import Event, Supporter, Tag from events.test.data import TEST_EVENTS, TEST_SUPPORTERS, TEST_TAGS from news.models import News @@ -34,25 +28,6 @@ ] -# Galaxy Labs -TEST_LAB_NAME = 'Antarctica' -TEST_LAB_LAB_NAME = 'Galaxy Lab Pages'.upper() -TEST_LAB_NATIONALITY = 'Antarctican' -TEST_LAB_GALAXY_BASE_URL = 'https://galaxy-antarctica.org' -TEST_LAB_SECTION_TEXT = 'Example section' -TEST_LAB_ACCORDION_TEXT = ( - 'Report statistics from sequencing reads', - 'Assemble Nanopore long reads.', -) -TEST_LAB_CONTENT_URL = f'{MOCK_LAB_BASE_URL}/static/home/labs/docs/base.yml' -TEST_LAB_URL = f'/lab/export?content_root={TEST_LAB_CONTENT_URL}' - - -def test_lab_url_for(lab): - """Return the URL for the given lab name.""" - return TEST_LAB_URL.replace('docs', lab) - - class HomeTestCase(TestCase): def setUp(self) -> None: @@ -60,11 +35,7 @@ def setUp(self) -> None: super().setUp() self.client = Client() for notice in TEST_NOTICES: - subsites = notice['relations']['subsites'] notice = Notice.objects.create(**notice['data']) - for subsite in subsites: - subsite = Subsite.objects.get(name=subsite['name']) - notice.subsites.add(subsite) for tag in TEST_TAGS: Tag.objects.create(**tag) for supporter in TEST_SUPPORTERS: @@ -199,103 +170,6 @@ def test_utility_institution(self): assert not institution.is_institution_email('johndoe@gmail.edu.au') -class LabExportTestCase(TestCase): - """Test exported lab site building functionality.""" - - @requests_mock.Mocker() - def setUp(self, mock_request): - for url, text in MOCK_REQUESTS.items(): - mock_request.get(url, text=text, status_code=200) - self.context = ExportSubsiteContext(TEST_LAB_CONTENT_URL) - - @requests_mock.Mocker() - def test_exported_lab_docs(self, mock_request): - """Mock requests to localhost.""" - for url, text in MOCK_REQUESTS.items(): - mock_request.get(url, text=text, status_code=200) - response = self.client.get(TEST_LAB_URL) - self.assertEqual(response.status_code, 200) - self.assertContains(response, TEST_LAB_NAME) - self.assertContains(response, TEST_LAB_LAB_NAME) - self.assertContains(response, TEST_LAB_GALAXY_BASE_URL) - self.assertContains(response, TEST_LAB_SECTION_TEXT) - for text in TEST_LAB_ACCORDION_TEXT: - self.assertContains(response, text) - - @requests_mock.Mocker() - def test_genome_lab(self, mock_request): - """Mock requests to localhost.""" - for url, text in MOCK_REQUESTS.items(): - mock_request.get(url, text=text, status_code=200) - response = self.client.get(test_lab_url_for('genome')) - self.assertEqual(response.status_code, 200) - - @requests_mock.Mocker() - def test_proteomics_lab(self, mock_request): - """Mock requests to localhost.""" - for url, text in MOCK_REQUESTS.items(): - mock_request.get(url, text=text, status_code=200) - response = self.client.get(test_lab_url_for('proteomics')) - self.assertEqual(response.status_code, 200) - - def test_it_can_make_raw_url(self): - self.assertEqual( - self.context._make_raw('https://github.com/usegalaxy-au/' - 'galaxy-media-site/blob/dev/README.md'), - 'https://raw.githubusercontent.com/usegalaxy-au/' - 'galaxy-media-site/dev/README.md') - - def test_it_can_filter_sections_by_root_domain(self): - root_domain = 'antarctica.org' - self.context['root_domain'] = root_domain - self.context['sections'] = [ - {'id': 'section1'}, - { - 'id': 'section2', - 'exclude_from': [root_domain], - }, - { - 'id': 'section3', - 'content': [ - { - 'id': 'item1', - }, - { - 'id': 'item2', - 'exclude_from': [root_domain], - }, - { - 'id': 'item3', - 'exclude_from': ['other.domain.com'], - }, - { - 'id': 'item4', - 'exclude_from': [root_domain, 'other.domain.com'], - }, - ] - }, - ] - self.context._filter_sections() - self.assertEqual( - self.context['sections'], - [ - {'id': 'section1'}, - { - 'id': 'section3', - 'content': [ - { - 'id': 'item1', - }, - { - 'id': 'item3', - 'exclude_from': ['other.domain.com'], - }, - ] - }, - ], - ) - - class AccessRequestsTestCase(TestCase): def test_it_can_show_alphafold_access_form(self): diff --git a/webapp/home/views.py b/webapp/home/views.py index 5d94f673..e54f974c 100644 --- a/webapp/home/views.py +++ b/webapp/home/views.py @@ -6,21 +6,13 @@ from django.conf import settings from django.http import Http404 from django.shortcuts import get_object_or_404, render -from django.template import ( - RequestContext, - loader, - Template, - TemplateDoesNotExist, -) -from django.template.loader import get_template, render_to_string +from django.template import loader, TemplateDoesNotExist from events.models import Event from news.models import News from utils import aaf from utils import unsubscribe -from utils.exceptions import ResourceAccessError, SubsiteBuildError -from .lab_cache import LabCache -from .lab_export import ExportSubsiteContext +from utils.exceptions import ResourceAccessError from .models import CoverImage, Notice from .forms import ( ResourceRequestForm, @@ -29,7 +21,6 @@ ACCESS_FORMS, ) from . import pages_context -from . import subdomains logger = logging.getLogger('django') @@ -58,96 +49,17 @@ def index(request, landing=False): def landing(request, subdomain): """Show landing pages for *.usegalaxy.org.au subsites. - A support request form is passed to the template which can be submitted - with AJAX and processed by an API handler. + DEPRECATED: This view is deprecated in favour of labs.usegalaxy.org.au. """ - - template = f'home/subdomains/{subdomain}.html' - try: - get_template(template) - except TemplateDoesNotExist: - raise Http404 - - try: - sections = getattr(subdomains, subdomain).sections - except AttributeError as exc: - raise AttributeError( - f"{exc}\n\n" - f"No content files found for subdomain '{subdomain}'" - " at 'webapp/home/subdomains/{subdomain}/'") - - context = { - 'extend_template': 'home/header.html', - 'export': False, - 'name': subdomain, - 'site_name': settings.GALAXY_SITE_NAME, - 'nationality': 'Australian', - 'galaxy_base_url': settings.GALAXY_URL, - } - if request.GET.get('export'): - context = ExportSubsiteContext(request) - context.validate() - context.update({ - 'name': subdomain, - 'title': f'Galaxy - {subdomain.title()} Lab', - }) - if not context.get('sections'): - context['sections'] = sections - else: - context.update({ - 'sections': sections, - 'notices': Notice.get_notices_by_type(request, subsite=subdomain), - 'cover_image': CoverImage.get_random(request, subsite=subdomain), - 'form': SupportRequestForm(), - }) - - response = render(request, template, context) - response.content = response.content.replace( - b'{{ galaxy_base_url }}', - context['galaxy_base_url'].encode('utf-8')) - return response + return render(request, 'home/labs-deprecated.html') def export_lab(request): """Generic Galaxy Lab landing page build with externally hosted content. - These pages are built on the fly and can be requested by third parties on - an ad hoc basis, where the content would typically be hosted in a GitHub - repo with a YAML file root which is specified as a GET parameter. + DEPRECATED: This view is deprecated in favour of labs.usegalaxy.org.au. """ - - if response := LabCache.get(request): - return response - - template = 'home/subdomains/exported.html' - - try: - if request.GET.get('content_root'): - context = ExportSubsiteContext(request.GET.get('content_root')) - else: - context = ExportSubsiteContext( - settings.DEFAULT_EXPORTED_LAB_CONTENT_ROOT) - context['HOSTNAME'] = settings.HOSTNAME - context.validate() - except SubsiteBuildError as exc: - return render(request, 'home/subdomains/export-error.html', { - 'exc': exc, - }, status=400) - - # Multiple rounds of templating to render recursive template tags from - # remote data with embedded template tags - i = 0 - prev_template_str = '' - template_str = render_to_string(template, context, request) - while prev_template_str.strip('\n') != template_str.strip('\n') and i < 4: - prev_template_str = template_str - t = Template('{% load markdown %}\n\n' + template_str) - template_str = t.render(RequestContext(request, context)) - i += 1 - - response = LabCache.put(request, template_str) - - return response + return render(request, 'home/labs-deprecated.html') def notice(request, notice_id): diff --git a/webapp/utils/exceptions.py b/webapp/utils/exceptions.py index ece0c5ca..e0e7a8fb 100644 --- a/webapp/utils/exceptions.py +++ b/webapp/utils/exceptions.py @@ -1,80 +1,6 @@ """Custom exceptions.""" -import logging -from pprint import pformat -from home.lab_schema import ( - TabItem, - TabSubsection, - SectionTab, -) - -logger = logging.getLogger('django') - -LAB_SCHEMA_MODELS = { - 'TabItem': TabItem, - 'TabSubsection': TabSubsection, - 'SectionTab': SectionTab, -} - - -def _get_schema_help(loc): - """Resolve schema model from error location and render help data.""" - for item in loc[::]: - matched_keys = [k for k in LAB_SCHEMA_MODELS if k in str(item)] - if matched_keys: - return { - 'model_name': matched_keys[0], - 'schema': LAB_SCHEMA_MODELS[ - matched_keys[0] - ].model_json_schema()['properties'], - 'required_fields': LAB_SCHEMA_MODELS[ - matched_keys[0] - ].model_json_schema()['required'], - } - class ResourceAccessError(Exception): """Raised when a user attempts to access a resource they do not own.""" pass - - -class SubsiteBuildError(Exception): - """Raised when an error occurs during subsite build.""" - - def __init__(self, exc=None, url=None, section_id=None, source=''): - """Initialize the exception.""" - self.title = ( - f"Error parsing {source} content from file" - if source else None - ) - self.url = url - self.message = str(exc) - self.section_id = section_id - - msg = ( - 'Error processing exported lab content\n' - f'URL: {url}\n' - f'Errors:\n' - ) - - if hasattr(exc, 'errors'): - # It's a Pydantic error. Extract info for rendering individual - # messages - self.errors = [] - for error in exc.errors(): - err = { - 'message': error['msg'], - 'location': f"section[{self.section_id}] > " + ( - f'{error["loc"][0]} > ' - + ' > '.join(str(x) for x in error["loc"][1:]) - ), - 'input': pformat(error['input']), - 'help': _get_schema_help(error['loc']), - } - self.errors.append(err) - msg += pformat(self.errors) - else: - msg += str(exc) - - logger.warning(exc) - super().__init__(msg)

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 diff --git a/webapp/home/labs/genome/static/assembly-overview.png b/webapp/home/labs/genome/static/assembly-overview.png deleted file mode 100644 index 61cf705c5d429f3c61547adb5a644bc5e14ca4bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157857 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