|
"""Extension manager without installation capabilities.""" |
|
|
|
|
|
|
|
|
|
import sys |
|
from typing import Dict, Optional, Tuple |
|
|
|
from jupyterlab_server.translation_utils import translator |
|
|
|
from .manager import ActionResult, ExtensionManager, ExtensionManagerMetadata, ExtensionPackage |
|
|
|
|
|
class ReadOnlyExtensionManager(ExtensionManager): |
|
"""Extension manager without installation capabilities.""" |
|
|
|
@property |
|
def metadata(self) -> ExtensionManagerMetadata: |
|
"""Extension manager metadata.""" |
|
return ExtensionManagerMetadata("read-only", install_path=sys.prefix) |
|
|
|
async def get_latest_version(self, pkg: str) -> Optional[str]: |
|
"""Return the latest available version for a given extension. |
|
|
|
Args: |
|
pkg: The extension to search for |
|
Returns: |
|
The latest available version |
|
""" |
|
return None |
|
|
|
async def list_packages( |
|
self, query: str, page: int, per_page: int |
|
) -> Tuple[Dict[str, ExtensionPackage], Optional[int]]: |
|
"""List the available extensions. |
|
|
|
Args: |
|
query: The search extension query |
|
page: The result page |
|
per_page: The number of results per page |
|
Returns: |
|
The available extensions in a mapping {name: metadata} |
|
The results last page; None if the manager does not support pagination |
|
""" |
|
return {}, None |
|
|
|
async def install(self, extension: str, version: Optional[str] = None) -> ActionResult: |
|
"""Install the required extension. |
|
|
|
Note: |
|
If the user must be notified with a message (like asking to restart the |
|
server), the result should be |
|
{"status": "warning", "message": "<explanation for the user>"} |
|
|
|
Args: |
|
extension: The extension name |
|
version: The version to install; default None (i.e. the latest possible) |
|
Returns: |
|
The action result |
|
""" |
|
trans = translator.load("jupyterlab") |
|
return ActionResult( |
|
status="error", message=trans.gettext("Extension installation not supported.") |
|
) |
|
|
|
async def uninstall(self, extension: str) -> ActionResult: |
|
"""Uninstall the required extension. |
|
|
|
Note: |
|
If the user must be notified with a message (like asking to restart the |
|
server), the result should be |
|
{"status": "warning", "message": "<explanation for the user>"} |
|
|
|
Args: |
|
extension: The extension name |
|
Returns: |
|
The action result |
|
""" |
|
trans = translator.load("jupyterlab") |
|
return ActionResult( |
|
status="error", message=trans.gettext("Extension removal not supported.") |
|
) |
|
|