55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import functools
|
|
import pathlib
|
|
|
|
from pillarsdk.resource import List, Find, Create
|
|
|
|
|
|
class Manager(List, Find):
|
|
"""Manager class wrapping the REST nodes endpoint"""
|
|
path = 'flamenco/managers'
|
|
PurePlatformPath = pathlib.PurePath
|
|
|
|
@functools.lru_cache()
|
|
def _sorted_path_replacements(self) -> list:
|
|
import platform
|
|
|
|
if self.path_replacement is None:
|
|
return []
|
|
|
|
items = self.path_replacement.to_dict().items()
|
|
|
|
def by_length(item):
|
|
return -len(item[0]), item[0]
|
|
|
|
this_platform = platform.system().lower()
|
|
return [(varname, platform_replacements[this_platform])
|
|
for varname, platform_replacements in sorted(items, key=by_length)
|
|
if this_platform in platform_replacements]
|
|
|
|
def replace_path(self, some_path: pathlib.PurePath) -> str:
|
|
"""Performs path variable replacement.
|
|
|
|
Tries to find platform-specific path prefixes, and replaces them with
|
|
variables.
|
|
"""
|
|
|
|
for varname, path in self._sorted_path_replacements():
|
|
replacement = self.PurePlatformPath(path)
|
|
try:
|
|
relpath = some_path.relative_to(replacement)
|
|
except ValueError:
|
|
# Not relative to each other, so no replacement possible
|
|
continue
|
|
|
|
replacement_root = self.PurePlatformPath('{%s}' % varname)
|
|
return (replacement_root / relpath).as_posix()
|
|
|
|
return some_path.as_posix()
|
|
|
|
|
|
class Job(List, Find, Create):
|
|
"""Job class wrapping the REST nodes endpoint
|
|
"""
|
|
path = 'flamenco/jobs'
|
|
ensure_query_projections = {'project': 1}
|