We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
modules info broken in dev 
### Description of the bug

Running `nf-core modules info` on `nf-core/tools version 2.5.dev0` produces a `TypeError`

### Command used and terminal output

```console
nf-core modules info

TypeError: __init__() takes 6 positional arguments but 7 were given

/Users/arthurgymer/.pyenv/versions/3.9.7/envs/nf-core/lib/python3.9/site-packages/nf_core/__main__.py:711 in info                                                                                │
│                                                                                                                                                                                                  │
│    710 │   try:                                                                                                                                                                                  │
│ ❱  711 │   │   module_info = nf_core.modules.ModuleInfo(                                                                                                                                         │
│    712 │   │   │   dir,
```


### System information

nf-core/tools version 2.5.dev0
python 3.9.7
macOS


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `nf_core/modules/info.py`
Content:
```
1 import logging
2 import os
3 
4 import questionary
5 import yaml
6 from rich import box
7 from rich.console import Group
8 from rich.markdown import Markdown
9 from rich.panel import Panel
10 from rich.table import Table
11 from rich.text import Text
12 
13 import nf_core.utils
14 
15 from .module_utils import get_repo_type
16 from .modules_command import ModuleCommand
17 from .modules_repo import NF_CORE_MODULES_REMOTE
18 
19 log = logging.getLogger(__name__)
20 
21 
22 class ModuleInfo(ModuleCommand):
23     def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull):
24         super().__init__(pipeline_dir, remote_url, branch, no_pull)
25         self.meta = None
26         self.local_path = None
27         self.remote_location = None
28 
29         # Quietly check if this is a pipeline or not
30         if pipeline_dir:
31             try:
32                 pipeline_dir, repo_type = get_repo_type(pipeline_dir, use_prompt=False)
33                 log.debug(f"Found {repo_type} repo: {pipeline_dir}")
34             except UserWarning as e:
35                 log.debug(f"Only showing remote info: {e}")
36                 pipeline_dir = None
37 
38         self.get_pipeline_modules()
39         self.module = self.init_mod_name(tool)
40 
41     def init_mod_name(self, module):
42         """
43         Makes sure that we have a module name before proceeding.
44 
45         Args:
46             module: str: Module name to check
47         """
48         if module is None:
49             local = questionary.confirm(
50                 "Is the module locally installed?", style=nf_core.utils.nfcore_question_style
51             ).unsafe_ask()
52             if local:
53                 if self.repo_type == "modules":
54                     modules = self.module_names["modules"]
55                 else:
56                     modules = self.module_names.get(self.modules_repo.fullname)
57                     if modules is None:
58                         raise UserWarning(f"No modules installed from '{self.modules_repo.remote_url}'")
59             else:
60                 modules = self.modules_repo.get_avail_modules()
61             module = questionary.autocomplete(
62                 "Please select a module", choices=modules, style=nf_core.utils.nfcore_question_style
63             ).unsafe_ask()
64             while module not in modules:
65                 log.info(f"'{module}' is not a valid module name")
66                 module = questionary.autocomplete(
67                     "Please select a new module", choices=modules, style=nf_core.utils.nfcore_question_style
68                 ).unsafe_ask()
69 
70         return module
71 
72     def get_module_info(self):
73         """Given the name of a module, parse meta.yml and print usage help."""
74 
75         # Running with a local install, try to find the local meta
76         if self.dir:
77             self.meta = self.get_local_yaml()
78 
79         # Either failed locally or in remote mode
80         if not self.meta:
81             self.meta = self.get_remote_yaml()
82 
83         # Could not find the meta
84         if self.meta is False:
85             raise UserWarning(f"Could not find module '{self.module}'")
86 
87         return self.generate_module_info_help()
88 
89     def get_local_yaml(self):
90         """Attempt to get the meta.yml file from a locally installed module.
91 
92         Returns:
93             dict or bool: Parsed meta.yml found, False otherwise
94         """
95 
96         if self.repo_type == "pipeline":
97             # Try to find and load the meta.yml file
98             repo_name = self.modules_repo.fullname
99             module_base_path = os.path.join(self.dir, "modules", repo_name)
100             # Check that we have any modules installed from this repo
101             modules = self.module_names.get(repo_name)
102             if modules is None:
103                 raise LookupError(f"No modules installed from {self.modules_repo.remote_url}")
104 
105             if self.module in modules:
106                 mod_dir = os.path.join(module_base_path, self.module)
107                 meta_fn = os.path.join(mod_dir, "meta.yml")
108                 if os.path.exists(meta_fn):
109                     log.debug(f"Found local file: {meta_fn}")
110                     with open(meta_fn, "r") as fh:
111                         self.local_path = mod_dir
112                         return yaml.safe_load(fh)
113 
114             log.debug(f"Module '{self.module}' meta.yml not found locally")
115         else:
116             module_base_path = os.path.join(self.dir, "modules")
117             if self.module in os.listdir(module_base_path):
118                 mod_dir = os.path.join(module_base_path, self.module)
119                 meta_fn = os.path.join(mod_dir, "meta.yml")
120                 if os.path.exists(meta_fn):
121                     log.debug(f"Found local file: {meta_fn}")
122                     with open(meta_fn, "r") as fh:
123                         self.local_path = mod_dir
124                         return yaml.safe_load(fh)
125             log.debug(f"Module '{self.module}' meta.yml not found locally")
126 
127         return None
128 
129     def get_remote_yaml(self):
130         """Attempt to get the meta.yml file from a remote repo.
131 
132         Returns:
133             dict or bool: Parsed meta.yml found, False otherwise
134         """
135         # Check if our requested module is there
136         if self.module not in self.modules_repo.get_avail_modules():
137             return False
138 
139         file_contents = self.modules_repo.get_meta_yml(self.module)
140         if file_contents is None:
141             return False
142         self.remote_location = self.modules_repo.remote_url
143         return yaml.safe_load(file_contents)
144 
145     def generate_module_info_help(self):
146         """Take the parsed meta.yml and generate rich help.
147 
148         Returns:
149             rich renderable
150         """
151 
152         renderables = []
153 
154         # Intro panel
155         intro_text = Text()
156         if self.local_path:
157             intro_text.append(Text.from_markup(f"Location: [blue]{self.local_path}\n"))
158         elif self.remote_location:
159             intro_text.append(
160                 Text.from_markup(
161                     f":globe_with_meridians: Repository: [link=https://github.com/{self.remote_location}]{self.remote_location}[/]\n"
162                 )
163             )
164 
165         if self.meta.get("tools"):
166             tools_strings = []
167             for tool in self.meta["tools"]:
168                 for tool_name, tool_meta in tool.items():
169                     if "homepage" in tool_meta:
170                         tools_strings.append(f"[link={tool_meta['homepage']}]{tool_name}[/link]")
171                     else:
172                         tools_strings.append(f"{tool_name}")
173             intro_text.append(Text.from_markup(f":wrench: Tools: {', '.join(tools_strings)}\n", style="dim"))
174 
175         if self.meta.get("description"):
176             intro_text.append(Text.from_markup(f":book: Description: {self.meta['description']}", style="dim"))
177 
178         renderables.append(
179             Panel(
180                 intro_text,
181                 title=f"[bold]Module: [green]{self.module}\n",
182                 title_align="left",
183             )
184         )
185 
186         # Inputs
187         if self.meta.get("input"):
188             inputs_table = Table(expand=True, show_lines=True, box=box.MINIMAL_HEAVY_HEAD, padding=0)
189             inputs_table.add_column(":inbox_tray: Inputs")
190             inputs_table.add_column("Description")
191             inputs_table.add_column("Pattern", justify="right", style="green")
192             for input in self.meta["input"]:
193                 for key, info in input.items():
194                     inputs_table.add_row(
195                         f"[orange1 on black] {key} [/][dim i] ({info['type']})",
196                         Markdown(info["description"] if info["description"] else ""),
197                         info.get("pattern", ""),
198                     )
199 
200             renderables.append(inputs_table)
201 
202         # Outputs
203         if self.meta.get("output"):
204             outputs_table = Table(expand=True, show_lines=True, box=box.MINIMAL_HEAVY_HEAD, padding=0)
205             outputs_table.add_column(":outbox_tray: Outputs")
206             outputs_table.add_column("Description")
207             outputs_table.add_column("Pattern", justify="right", style="green")
208             for output in self.meta["output"]:
209                 for key, info in output.items():
210                     outputs_table.add_row(
211                         f"[orange1 on black] {key} [/][dim i] ({info['type']})",
212                         Markdown(info["description"] if info["description"] else ""),
213                         info.get("pattern", ""),
214                     )
215 
216             renderables.append(outputs_table)
217 
218         # Installation command
219         if self.remote_location:
220             cmd_base = "nf-core modules"
221             if self.remote_location != NF_CORE_MODULES_REMOTE:
222                 cmd_base = f"nf-core modules --git-remote {self.remote_location}"
223             renderables.append(
224                 Text.from_markup(f"\n :computer:  Installation command: [magenta]{cmd_base} install {self.module}\n")
225             )
226 
227         return Group(*renderables)
228
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/nf_core/modules/info.py b/nf_core/modules/info.py
--- a/nf_core/modules/info.py
+++ b/nf_core/modules/info.py
@@ -20,8 +20,8 @@
 
 
 class ModuleInfo(ModuleCommand):
-    def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull):
-        super().__init__(pipeline_dir, remote_url, branch, no_pull)
+    def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull, base_path):
+        super().__init__(pipeline_dir, remote_url, branch, no_pull, base_path)
         self.meta = None
         self.local_path = None
         self.remote_location = None

{"golden_diff": "diff --git a/nf_core/modules/info.py b/nf_core/modules/info.py\n--- a/nf_core/modules/info.py\n+++ b/nf_core/modules/info.py\n@@ -20,8 +20,8 @@\n \n \n class ModuleInfo(ModuleCommand):\n-    def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull):\n-        super().__init__(pipeline_dir, remote_url, branch, no_pull)\n+    def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull, base_path):\n+        super().__init__(pipeline_dir, remote_url, branch, no_pull, base_path)\n         self.meta = None\n         self.local_path = None\n         self.remote_location = None\n", "issue": "modules info broken in dev \n### Description of the bug\n\nRunning `nf-core modules info` on `nf-core/tools version 2.5.dev0` produces a `TypeError`\n\n### Command used and terminal output\n\n```console\nnf-core modules info\r\n\r\nTypeError: __init__() takes 6 positional arguments but 7 were given\r\n\r\n/Users/arthurgymer/.pyenv/versions/3.9.7/envs/nf-core/lib/python3.9/site-packages/nf_core/__main__.py:711 in info                                                                                \u2502\r\n\u2502                                                                                                                                                                                                  \u2502\r\n\u2502    710 \u2502   try:                                                                                                                                                                                  \u2502\r\n\u2502 \u2771  711 \u2502   \u2502   module_info = nf_core.modules.ModuleInfo(                                                                                                                                         \u2502\r\n\u2502    712 \u2502   \u2502   \u2502   dir,\n```\n\n\n### System information\n\nnf-core/tools version 2.5.dev0\r\npython 3.9.7\r\nmacOS\r\n\n", "before_files": [{"content": "import logging\nimport os\n\nimport questionary\nimport yaml\nfrom rich import box\nfrom rich.console import Group\nfrom rich.markdown import Markdown\nfrom rich.panel import Panel\nfrom rich.table import Table\nfrom rich.text import Text\n\nimport nf_core.utils\n\nfrom .module_utils import get_repo_type\nfrom .modules_command import ModuleCommand\nfrom .modules_repo import NF_CORE_MODULES_REMOTE\n\nlog = logging.getLogger(__name__)\n\n\nclass ModuleInfo(ModuleCommand):\n    def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull):\n        super().__init__(pipeline_dir, remote_url, branch, no_pull)\n        self.meta = None\n        self.local_path = None\n        self.remote_location = None\n\n        # Quietly check if this is a pipeline or not\n        if pipeline_dir:\n            try:\n                pipeline_dir, repo_type = get_repo_type(pipeline_dir, use_prompt=False)\n                log.debug(f\"Found {repo_type} repo: {pipeline_dir}\")\n            except UserWarning as e:\n                log.debug(f\"Only showing remote info: {e}\")\n                pipeline_dir = None\n\n        self.get_pipeline_modules()\n        self.module = self.init_mod_name(tool)\n\n    def init_mod_name(self, module):\n        \"\"\"\n        Makes sure that we have a module name before proceeding.\n\n        Args:\n            module: str: Module name to check\n        \"\"\"\n        if module is None:\n            local = questionary.confirm(\n                \"Is the module locally installed?\", style=nf_core.utils.nfcore_question_style\n            ).unsafe_ask()\n            if local:\n                if self.repo_type == \"modules\":\n                    modules = self.module_names[\"modules\"]\n                else:\n                    modules = self.module_names.get(self.modules_repo.fullname)\n                    if modules is None:\n                        raise UserWarning(f\"No modules installed from '{self.modules_repo.remote_url}'\")\n            else:\n                modules = self.modules_repo.get_avail_modules()\n            module = questionary.autocomplete(\n                \"Please select a module\", choices=modules, style=nf_core.utils.nfcore_question_style\n            ).unsafe_ask()\n            while module not in modules:\n                log.info(f\"'{module}' is not a valid module name\")\n                module = questionary.autocomplete(\n                    \"Please select a new module\", choices=modules, style=nf_core.utils.nfcore_question_style\n                ).unsafe_ask()\n\n        return module\n\n    def get_module_info(self):\n        \"\"\"Given the name of a module, parse meta.yml and print usage help.\"\"\"\n\n        # Running with a local install, try to find the local meta\n        if self.dir:\n            self.meta = self.get_local_yaml()\n\n        # Either failed locally or in remote mode\n        if not self.meta:\n            self.meta = self.get_remote_yaml()\n\n        # Could not find the meta\n        if self.meta is False:\n            raise UserWarning(f\"Could not find module '{self.module}'\")\n\n        return self.generate_module_info_help()\n\n    def get_local_yaml(self):\n        \"\"\"Attempt to get the meta.yml file from a locally installed module.\n\n        Returns:\n            dict or bool: Parsed meta.yml found, False otherwise\n        \"\"\"\n\n        if self.repo_type == \"pipeline\":\n            # Try to find and load the meta.yml file\n            repo_name = self.modules_repo.fullname\n            module_base_path = os.path.join(self.dir, \"modules\", repo_name)\n            # Check that we have any modules installed from this repo\n            modules = self.module_names.get(repo_name)\n            if modules is None:\n                raise LookupError(f\"No modules installed from {self.modules_repo.remote_url}\")\n\n            if self.module in modules:\n                mod_dir = os.path.join(module_base_path, self.module)\n                meta_fn = os.path.join(mod_dir, \"meta.yml\")\n                if os.path.exists(meta_fn):\n                    log.debug(f\"Found local file: {meta_fn}\")\n                    with open(meta_fn, \"r\") as fh:\n                        self.local_path = mod_dir\n                        return yaml.safe_load(fh)\n\n            log.debug(f\"Module '{self.module}' meta.yml not found locally\")\n        else:\n            module_base_path = os.path.join(self.dir, \"modules\")\n            if self.module in os.listdir(module_base_path):\n                mod_dir = os.path.join(module_base_path, self.module)\n                meta_fn = os.path.join(mod_dir, \"meta.yml\")\n                if os.path.exists(meta_fn):\n                    log.debug(f\"Found local file: {meta_fn}\")\n                    with open(meta_fn, \"r\") as fh:\n                        self.local_path = mod_dir\n                        return yaml.safe_load(fh)\n            log.debug(f\"Module '{self.module}' meta.yml not found locally\")\n\n        return None\n\n    def get_remote_yaml(self):\n        \"\"\"Attempt to get the meta.yml file from a remote repo.\n\n        Returns:\n            dict or bool: Parsed meta.yml found, False otherwise\n        \"\"\"\n        # Check if our requested module is there\n        if self.module not in self.modules_repo.get_avail_modules():\n            return False\n\n        file_contents = self.modules_repo.get_meta_yml(self.module)\n        if file_contents is None:\n            return False\n        self.remote_location = self.modules_repo.remote_url\n        return yaml.safe_load(file_contents)\n\n    def generate_module_info_help(self):\n        \"\"\"Take the parsed meta.yml and generate rich help.\n\n        Returns:\n            rich renderable\n        \"\"\"\n\n        renderables = []\n\n        # Intro panel\n        intro_text = Text()\n        if self.local_path:\n            intro_text.append(Text.from_markup(f\"Location: [blue]{self.local_path}\\n\"))\n        elif self.remote_location:\n            intro_text.append(\n                Text.from_markup(\n                    f\":globe_with_meridians: Repository: [link=https://github.com/{self.remote_location}]{self.remote_location}[/]\\n\"\n                )\n            )\n\n        if self.meta.get(\"tools\"):\n            tools_strings = []\n            for tool in self.meta[\"tools\"]:\n                for tool_name, tool_meta in tool.items():\n                    if \"homepage\" in tool_meta:\n                        tools_strings.append(f\"[link={tool_meta['homepage']}]{tool_name}[/link]\")\n                    else:\n                        tools_strings.append(f\"{tool_name}\")\n            intro_text.append(Text.from_markup(f\":wrench: Tools: {', '.join(tools_strings)}\\n\", style=\"dim\"))\n\n        if self.meta.get(\"description\"):\n            intro_text.append(Text.from_markup(f\":book: Description: {self.meta['description']}\", style=\"dim\"))\n\n        renderables.append(\n            Panel(\n                intro_text,\n                title=f\"[bold]Module: [green]{self.module}\\n\",\n                title_align=\"left\",\n            )\n        )\n\n        # Inputs\n        if self.meta.get(\"input\"):\n            inputs_table = Table(expand=True, show_lines=True, box=box.MINIMAL_HEAVY_HEAD, padding=0)\n            inputs_table.add_column(\":inbox_tray: Inputs\")\n            inputs_table.add_column(\"Description\")\n            inputs_table.add_column(\"Pattern\", justify=\"right\", style=\"green\")\n            for input in self.meta[\"input\"]:\n                for key, info in input.items():\n                    inputs_table.add_row(\n                        f\"[orange1 on black] {key} [/][dim i] ({info['type']})\",\n                        Markdown(info[\"description\"] if info[\"description\"] else \"\"),\n                        info.get(\"pattern\", \"\"),\n                    )\n\n            renderables.append(inputs_table)\n\n        # Outputs\n        if self.meta.get(\"output\"):\n            outputs_table = Table(expand=True, show_lines=True, box=box.MINIMAL_HEAVY_HEAD, padding=0)\n            outputs_table.add_column(\":outbox_tray: Outputs\")\n            outputs_table.add_column(\"Description\")\n            outputs_table.add_column(\"Pattern\", justify=\"right\", style=\"green\")\n            for output in self.meta[\"output\"]:\n                for key, info in output.items():\n                    outputs_table.add_row(\n                        f\"[orange1 on black] {key} [/][dim i] ({info['type']})\",\n                        Markdown(info[\"description\"] if info[\"description\"] else \"\"),\n                        info.get(\"pattern\", \"\"),\n                    )\n\n            renderables.append(outputs_table)\n\n        # Installation command\n        if self.remote_location:\n            cmd_base = \"nf-core modules\"\n            if self.remote_location != NF_CORE_MODULES_REMOTE:\n                cmd_base = f\"nf-core modules --git-remote {self.remote_location}\"\n            renderables.append(\n                Text.from_markup(f\"\\n :computer:  Installation command: [magenta]{cmd_base} install {self.module}\\n\")\n            )\n\n        return Group(*renderables)\n", "path": "nf_core/modules/info.py"}], "after_files": [{"content": "import logging\nimport os\n\nimport questionary\nimport yaml\nfrom rich import box\nfrom rich.console import Group\nfrom rich.markdown import Markdown\nfrom rich.panel import Panel\nfrom rich.table import Table\nfrom rich.text import Text\n\nimport nf_core.utils\n\nfrom .module_utils import get_repo_type\nfrom .modules_command import ModuleCommand\nfrom .modules_repo import NF_CORE_MODULES_REMOTE\n\nlog = logging.getLogger(__name__)\n\n\nclass ModuleInfo(ModuleCommand):\n    def __init__(self, pipeline_dir, tool, remote_url, branch, no_pull, base_path):\n        super().__init__(pipeline_dir, remote_url, branch, no_pull, base_path)\n        self.meta = None\n        self.local_path = None\n        self.remote_location = None\n\n        # Quietly check if this is a pipeline or not\n        if pipeline_dir:\n            try:\n                pipeline_dir, repo_type = get_repo_type(pipeline_dir, use_prompt=False)\n                log.debug(f\"Found {repo_type} repo: {pipeline_dir}\")\n            except UserWarning as e:\n                log.debug(f\"Only showing remote info: {e}\")\n                pipeline_dir = None\n\n        self.get_pipeline_modules()\n        self.module = self.init_mod_name(tool)\n\n    def init_mod_name(self, module):\n        \"\"\"\n        Makes sure that we have a module name before proceeding.\n\n        Args:\n            module: str: Module name to check\n        \"\"\"\n        if module is None:\n            local = questionary.confirm(\n                \"Is the module locally installed?\", style=nf_core.utils.nfcore_question_style\n            ).unsafe_ask()\n            if local:\n                if self.repo_type == \"modules\":\n                    modules = self.module_names[\"modules\"]\n                else:\n                    modules = self.module_names.get(self.modules_repo.fullname)\n                    if modules is None:\n                        raise UserWarning(f\"No modules installed from '{self.modules_repo.remote_url}'\")\n            else:\n                modules = self.modules_repo.get_avail_modules()\n            module = questionary.autocomplete(\n                \"Please select a module\", choices=modules, style=nf_core.utils.nfcore_question_style\n            ).unsafe_ask()\n            while module not in modules:\n                log.info(f\"'{module}' is not a valid module name\")\n                module = questionary.autocomplete(\n                    \"Please select a new module\", choices=modules, style=nf_core.utils.nfcore_question_style\n                ).unsafe_ask()\n\n        return module\n\n    def get_module_info(self):\n        \"\"\"Given the name of a module, parse meta.yml and print usage help.\"\"\"\n\n        # Running with a local install, try to find the local meta\n        if self.dir:\n            self.meta = self.get_local_yaml()\n\n        # Either failed locally or in remote mode\n        if not self.meta:\n            self.meta = self.get_remote_yaml()\n\n        # Could not find the meta\n        if self.meta is False:\n            raise UserWarning(f\"Could not find module '{self.module}'\")\n\n        return self.generate_module_info_help()\n\n    def get_local_yaml(self):\n        \"\"\"Attempt to get the meta.yml file from a locally installed module.\n\n        Returns:\n            dict or bool: Parsed meta.yml found, False otherwise\n        \"\"\"\n\n        if self.repo_type == \"pipeline\":\n            # Try to find and load the meta.yml file\n            repo_name = self.modules_repo.fullname\n            module_base_path = os.path.join(self.dir, \"modules\", repo_name)\n            # Check that we have any modules installed from this repo\n            modules = self.module_names.get(repo_name)\n            if modules is None:\n                raise LookupError(f\"No modules installed from {self.modules_repo.remote_url}\")\n\n            if self.module in modules:\n                mod_dir = os.path.join(module_base_path, self.module)\n                meta_fn = os.path.join(mod_dir, \"meta.yml\")\n                if os.path.exists(meta_fn):\n                    log.debug(f\"Found local file: {meta_fn}\")\n                    with open(meta_fn, \"r\") as fh:\n                        self.local_path = mod_dir\n                        return yaml.safe_load(fh)\n\n            log.debug(f\"Module '{self.module}' meta.yml not found locally\")\n        else:\n            module_base_path = os.path.join(self.dir, \"modules\")\n            if self.module in os.listdir(module_base_path):\n                mod_dir = os.path.join(module_base_path, self.module)\n                meta_fn = os.path.join(mod_dir, \"meta.yml\")\n                if os.path.exists(meta_fn):\n                    log.debug(f\"Found local file: {meta_fn}\")\n                    with open(meta_fn, \"r\") as fh:\n                        self.local_path = mod_dir\n                        return yaml.safe_load(fh)\n            log.debug(f\"Module '{self.module}' meta.yml not found locally\")\n\n        return None\n\n    def get_remote_yaml(self):\n        \"\"\"Attempt to get the meta.yml file from a remote repo.\n\n        Returns:\n            dict or bool: Parsed meta.yml found, False otherwise\n        \"\"\"\n        # Check if our requested module is there\n        if self.module not in self.modules_repo.get_avail_modules():\n            return False\n\n        file_contents = self.modules_repo.get_meta_yml(self.module)\n        if file_contents is None:\n            return False\n        self.remote_location = self.modules_repo.remote_url\n        return yaml.safe_load(file_contents)\n\n    def generate_module_info_help(self):\n        \"\"\"Take the parsed meta.yml and generate rich help.\n\n        Returns:\n            rich renderable\n        \"\"\"\n\n        renderables = []\n\n        # Intro panel\n        intro_text = Text()\n        if self.local_path:\n            intro_text.append(Text.from_markup(f\"Location: [blue]{self.local_path}\\n\"))\n        elif self.remote_location:\n            intro_text.append(\n                Text.from_markup(\n                    f\":globe_with_meridians: Repository: [link=https://github.com/{self.remote_location}]{self.remote_location}[/]\\n\"\n                )\n            )\n\n        if self.meta.get(\"tools\"):\n            tools_strings = []\n            for tool in self.meta[\"tools\"]:\n                for tool_name, tool_meta in tool.items():\n                    if \"homepage\" in tool_meta:\n                        tools_strings.append(f\"[link={tool_meta['homepage']}]{tool_name}[/link]\")\n                    else:\n                        tools_strings.append(f\"{tool_name}\")\n            intro_text.append(Text.from_markup(f\":wrench: Tools: {', '.join(tools_strings)}\\n\", style=\"dim\"))\n\n        if self.meta.get(\"description\"):\n            intro_text.append(Text.from_markup(f\":book: Description: {self.meta['description']}\", style=\"dim\"))\n\n        renderables.append(\n            Panel(\n                intro_text,\n                title=f\"[bold]Module: [green]{self.module}\\n\",\n                title_align=\"left\",\n            )\n        )\n\n        # Inputs\n        if self.meta.get(\"input\"):\n            inputs_table = Table(expand=True, show_lines=True, box=box.MINIMAL_HEAVY_HEAD, padding=0)\n            inputs_table.add_column(\":inbox_tray: Inputs\")\n            inputs_table.add_column(\"Description\")\n            inputs_table.add_column(\"Pattern\", justify=\"right\", style=\"green\")\n            for input in self.meta[\"input\"]:\n                for key, info in input.items():\n                    inputs_table.add_row(\n                        f\"[orange1 on black] {key} [/][dim i] ({info['type']})\",\n                        Markdown(info[\"description\"] if info[\"description\"] else \"\"),\n                        info.get(\"pattern\", \"\"),\n                    )\n\n            renderables.append(inputs_table)\n\n        # Outputs\n        if self.meta.get(\"output\"):\n            outputs_table = Table(expand=True, show_lines=True, box=box.MINIMAL_HEAVY_HEAD, padding=0)\n            outputs_table.add_column(\":outbox_tray: Outputs\")\n            outputs_table.add_column(\"Description\")\n            outputs_table.add_column(\"Pattern\", justify=\"right\", style=\"green\")\n            for output in self.meta[\"output\"]:\n                for key, info in output.items():\n                    outputs_table.add_row(\n                        f\"[orange1 on black] {key} [/][dim i] ({info['type']})\",\n                        Markdown(info[\"description\"] if info[\"description\"] else \"\"),\n                        info.get(\"pattern\", \"\"),\n                    )\n\n            renderables.append(outputs_table)\n\n        # Installation command\n        if self.remote_location:\n            cmd_base = \"nf-core modules\"\n            if self.remote_location != NF_CORE_MODULES_REMOTE:\n                cmd_base = f\"nf-core modules --git-remote {self.remote_location}\"\n            renderables.append(\n                Text.from_markup(f\"\\n :computer:  Installation command: [magenta]{cmd_base} install {self.module}\\n\")\n            )\n\n        return Group(*renderables)\n", "path": "nf_core/modules/info.py"}]}