You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.9 KiB
Python
100 lines
2.9 KiB
Python
# Copyright (c) Jupyter Development Team.
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
"""A license reporting CLI
|
|
|
|
Mostly ready-to-use, the downstream must provide the location of the application's
|
|
static resources. Licenses from an app's federated_extensions will also be discovered
|
|
as configured in `labextensions_path` and `extra_labextensions_path`.
|
|
|
|
from traitlets import default
|
|
from jupyterlab_server import LicensesApp
|
|
|
|
class MyLicensesApp(LicensesApp):
|
|
version = "0.1.0"
|
|
|
|
@default("static_dir")
|
|
def _default_static_dir(self):
|
|
return "my-static/"
|
|
|
|
class MyApp(JupyterApp, LabConfig):
|
|
...
|
|
subcommands = dict(
|
|
licenses=(MyLicensesApp, MyLicensesApp.description.splitlines()[0])
|
|
)
|
|
|
|
"""
|
|
from typing import Any
|
|
|
|
from jupyter_core.application import JupyterApp, base_aliases, base_flags
|
|
from traitlets import Bool, Enum, Instance, Unicode
|
|
|
|
from ._version import __version__
|
|
from .config import LabConfig
|
|
from .licenses_handler import LicensesManager
|
|
|
|
|
|
class LicensesApp(JupyterApp, LabConfig):
|
|
"""A license management app."""
|
|
|
|
version = __version__
|
|
|
|
description = """
|
|
Report frontend licenses
|
|
"""
|
|
|
|
static_dir = Unicode("", config=True, help="The static directory from which to show licenses")
|
|
|
|
full_text = Bool(False, config=True, help="Also print out full license text (if available)")
|
|
|
|
report_format = Enum(
|
|
["markdown", "json", "csv"], "markdown", config=True, help="Reporter format"
|
|
)
|
|
|
|
bundles_pattern = Unicode(".*", config=True, help="A regular expression of bundles to print")
|
|
|
|
licenses_manager = Instance(LicensesManager)
|
|
|
|
aliases = {
|
|
**base_aliases,
|
|
"bundles": "LicensesApp.bundles_pattern",
|
|
"report-format": "LicensesApp.report_format",
|
|
}
|
|
|
|
flags = {
|
|
**base_flags,
|
|
"full-text": (
|
|
{"LicensesApp": {"full_text": True}},
|
|
"Print out full license text (if available)",
|
|
),
|
|
"json": (
|
|
{"LicensesApp": {"report_format": "json"}},
|
|
"Print out report as JSON (implies --full-text)",
|
|
),
|
|
"csv": (
|
|
{"LicensesApp": {"report_format": "csv"}},
|
|
"Print out report as CSV (implies --full-text)",
|
|
),
|
|
}
|
|
|
|
def initialize(self, *args: Any, **kwargs: Any) -> None:
|
|
"""Initialize the app."""
|
|
super().initialize(*args, **kwargs)
|
|
self.init_licenses_manager()
|
|
|
|
def init_licenses_manager(self) -> None:
|
|
"""Initialize the license manager."""
|
|
self.licenses_manager = LicensesManager(
|
|
parent=self,
|
|
)
|
|
|
|
def start(self) -> None:
|
|
"""Start the app."""
|
|
report = self.licenses_manager.report(
|
|
report_format=self.report_format,
|
|
full_text=self.full_text,
|
|
bundles_pattern=self.bundles_pattern,
|
|
)[0]
|
|
print(report)
|
|
self.exit(0)
|