Skip to content
This repository has been archived by the owner on Apr 22, 2024. It is now read-only.

Commit

Permalink
New Kytos core service to get NApp metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
rmotitsuki committed May 13, 2019
1 parent 926ae62 commit 617353c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
22 changes: 22 additions & 0 deletions kytos/core/api_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,9 @@ def register_core_napp_services(self):
self._list_enabled_napps)
self.register_core_endpoint("napps_installed",
self._list_installed_napps)
self.register_core_endpoint(
"napps/<username>/<napp_name>/metadata/<key>",
self._get_napp_metadata)

def _enable_napp(self, username, napp_name):
"""
Expand Down Expand Up @@ -454,3 +457,22 @@ def _list_installed_napps(self):

return '{"napps": %s}' % serialized_dict, HTTPStatus.OK.value

def _get_napp_metadata(self, username, napp_name, key):
"""Get NApp metadata value.
For safety reasons, only some keys can be retrieved:
napp_dependencies, description, version.
"""
_VALID_KEYS = ['napp_dependencies', 'description', 'version']

if not self.nappsManager.is_installed(username, napp_name):
return "Napp is not installed.", HTTPStatus.BAD_REQUEST.value

if key not in _VALID_KEYS:
return "Invalid key.", HTTPStatus.BAD_REQUEST.value

data = self.nappsManager.get_napp_metadata(username, napp_name, key)
serialized_dict = json.dumps({key: data})

return '%s' % serialized_dict, HTTPStatus.OK.value
24 changes: 23 additions & 1 deletion kytos/core/napps/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,28 @@ def get_installed_napps(self):
"""Return all NApps installed on this controller FS."""
return self.get_napps_from_path(self._installed_path)

def get_napp_metadata(self, username, napp_name, key):
"""Return a value from kytos.json.
Args:
username (string): A Username.
napp_name (string): A NApp name
key (string): Key used to get the value within kytos.json.
Returns:
meta (object): Value stored in kytos.json.
"""
napp_id = "{}/{}".format(username, napp_name)
kytos_json = self._installed_path / napp_id / 'kytos.json'
try:
with kytos_json.open() as file_descriptor:
meta = json.load(file_descriptor)
return meta[key]
except (FileNotFoundError, json.JSONDecodeError, KeyError):
LOG.warning("Load napp metada failed: %s/kytos.json", napp_id)
return ''

@staticmethod
def get_napps_from_path(path: Path):
"""List all NApps found in ``napps_dir``."""
Expand All @@ -233,7 +255,7 @@ def _create_module(path: Path):
(path / '__init__.py').touch()

@staticmethod
def _find_napp(napp, root: Path=None) -> Path:
def _find_napp(napp, root: Path = None) -> Path:
"""Return local NApp root folder.
Search for kytos.json in _./_ folder and _./user/napp_.
Expand Down

0 comments on commit 617353c

Please sign in to comment.