[App] Add utility to get install command for package extras (#15809)
This commit is contained in:
parent
8ee889bea0
commit
f171657030
|
@ -17,6 +17,30 @@ import os
|
|||
from typing import List, Union
|
||||
|
||||
from lightning_utilities.core.imports import module_available
|
||||
from packaging.requirements import Marker, Requirement
|
||||
|
||||
try:
|
||||
from importlib import metadata
|
||||
except ImportError:
|
||||
# Python < 3.8
|
||||
import importlib_metadata as metadata # type: ignore
|
||||
|
||||
|
||||
def _get_extras(extras: str) -> str:
|
||||
"""Get the given extras as a space delimited string.
|
||||
|
||||
Used by the platform to install cloud extras in the cloud.
|
||||
"""
|
||||
from lightning_app import __package_name__
|
||||
|
||||
requirements = {r: Requirement(r) for r in metadata.requires(__package_name__)}
|
||||
marker = Marker(f'extra == "{extras}"')
|
||||
requirements = [r for r, req in requirements.items() if str(req.marker) == str(marker)]
|
||||
|
||||
if requirements:
|
||||
requirements = [f"'{r.split(';')[0].strip()}'" for r in requirements]
|
||||
return " ".join(requirements)
|
||||
return ""
|
||||
|
||||
|
||||
def requires(module_paths: Union[str, List]):
|
||||
|
|
|
@ -3,7 +3,17 @@ from unittest import mock
|
|||
|
||||
import pytest
|
||||
|
||||
from lightning_app.utilities.imports import requires
|
||||
from lightning_app import __package_name__
|
||||
from lightning_app.utilities.imports import _get_extras, requires
|
||||
|
||||
|
||||
def test_get_extras():
|
||||
extras = "app-cloud" if __package_name__ == "lightning" else "cloud"
|
||||
extras = _get_extras(extras)
|
||||
assert "docker" in extras
|
||||
assert "redis" in extras
|
||||
|
||||
assert _get_extras("fake-extras") == ""
|
||||
|
||||
|
||||
@mock.patch.dict(os.environ, {"LIGHTING_TESTING": "0"})
|
||||
|
|
Loading…
Reference in New Issue