Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 16 additions & 37 deletions cterasdk/asynchronous/core/files/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ async def public_link(self, path, access='RO', expire_in=30):
"""
return await Link(io.public_link, self._core, path, access, expire_in).a_execute()

async def copy(self, *paths, destination=None, resolver=None, cursor=None, wait=False, strict_permission=False):
async def copy(self, *paths, destination=None, resolver=None, cursor=None, wait=False):
"""
Copy one or more files or folders.

Expand All @@ -156,16 +156,7 @@ async def copy(self, *paths, destination=None, resolver=None, cursor=None, wait=
:raises cterasdk.exceptions.io.core.CopyError: Raised on failure copying resources.
"""
try:
return await Copy(
io.copy,
self._core,
wait,
*paths,
destination=destination,
resolver=resolver,
cursor=cursor,
strict_permission=strict_permission
).a_execute()
return await Copy(io.copy, self._core, wait, *paths, destination=destination, resolver=resolver, cursor=cursor).a_execute()
except ValueError:
raise ValueError('Copy destination was not specified.')

Expand All @@ -184,7 +175,7 @@ async def permalink(self, path):
class CloudDrive(FileBrowser):
"""Async CloudDrive API with upload and sharing functionality."""

async def upload(self, destination, handle, name=None, size=None, strict_permission=False):
async def upload(self, destination, handle, name=None, size=None):
"""
Upload from file handle.

Expand All @@ -203,11 +194,10 @@ async def upload(self, destination, handle, name=None, size=None, strict_permiss
destination,
handle,
name,
size,
strict_permission=strict_permission
size
).a_execute()

async def upload_file(self, path, destination, strict_permission=False):
async def upload_file(self, path, destination):
"""
Upload a file.

Expand All @@ -223,11 +213,10 @@ async def upload_file(self, path, destination, strict_permission=False):
destination,
handle,
name,
commonfs.properties(path)['size'],
strict_permission=strict_permission
commonfs.properties(path)['size']
)

async def mkdir(self, path, strict_permission=False):
async def mkdir(self, path):
"""
Create a directory.

Expand All @@ -236,9 +225,9 @@ async def mkdir(self, path, strict_permission=False):
:rtype: str
:raises cterasdk.exceptions.io.core.CreateDirectoryError: Raised on error creating directory.
"""
return await CreateDirectory(io.mkdir, self._core, path, strict_permission=strict_permission).a_execute()
return await CreateDirectory(io.mkdir, self._core, path, ).a_execute()

async def makedirs(self, path, strict_permission=False):
async def makedirs(self, path):
"""
Recursively create a directory.

Expand All @@ -247,9 +236,9 @@ async def makedirs(self, path, strict_permission=False):
:rtype: str
:raises cterasdk.exceptions.io.core.CreateDirectoryError: Raised on error creating directory.
"""
return await CreateDirectory(io.mkdir, self._core, path, True, strict_permission=strict_permission).a_execute()
return await CreateDirectory(io.mkdir, self._core, path, True, ).a_execute()

async def rename(self, path, name, *, resolver=None, wait=False, strict_permission=False):
async def rename(self, path, name, *, resolver=None, wait=False):
"""
Rename a file or folder.

Expand All @@ -267,11 +256,10 @@ async def rename(self, path, name, *, resolver=None, wait=False, strict_permissi
wait,
path,
name,
resolver,
strict_permission=strict_permission
resolver
).a_execute()

async def delete(self, *paths, wait=False, strict_permission=False):
async def delete(self, *paths, wait=False):
"""
Delete one or more files or folders.

Expand All @@ -281,7 +269,7 @@ async def delete(self, *paths, wait=False, strict_permission=False):
:rtype: cterasdk.common.object.Object or :class:`cterasdk.lib.tasks.AwaitablePortalTask`
:raises cterasdk.exceptions.io.core.DeleteError: Raised on error deleting resources.
"""
return await Delete(io.delete, self._core, wait, *paths, strict_permission=strict_permission).a_execute()
return await Delete(io.delete, self._core, wait, *paths, ).a_execute()

async def undelete(self, *paths, wait=False):
"""
Expand All @@ -295,7 +283,7 @@ async def undelete(self, *paths, wait=False):
"""
return await Recover(io.undelete, self._core, wait, *paths).a_execute()

async def move(self, *paths, destination=None, resolver=None, cursor=None, wait=False, strict_permission=False):
async def move(self, *paths, destination=None, resolver=None, cursor=None, wait=False):
"""
Move one or more files or folders.

Expand All @@ -309,16 +297,7 @@ async def move(self, *paths, destination=None, resolver=None, cursor=None, wait=
:raises cterasdk.exceptions.io.core.MoveError: Raised on error moving resources.
"""
try:
return await Move(
io.move,
self._core,
wait,
*paths,
destination=destination,
resolver=resolver,
cursor=cursor,
strict_permission=strict_permission
).a_execute()
return await Move(io.move, self._core, wait, *paths, destination=destination, resolver=resolver, cursor=cursor).a_execute()
except ValueError:
raise ValueError('Move destination was not specified.')

Expand Down
36 changes: 36 additions & 0 deletions cterasdk/asynchronous/core/roles.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import logging

from ...core.enum import RoleResolver
from ...core.types import RoleSettings
from .base_command import BaseCommand


logger = logging.getLogger('cterasdk.core')


class Roles(BaseCommand):
"""
Role Settings APIs
"""

@staticmethod
def find(role):
"""
Find Role
"""
options = {k: v for k, v in RoleResolver.__dict__.items() if not k.startswith('_')}
return options.get(role, None)

async def get(self, role):
"""
Get Role

:param str role: Role
:returns: Role settings
:rtype: cterasdk.core.types.RoleSettings
"""
name = Roles.find(role)
if name:
return RoleSettings.from_server_object(await self._core.v1.api.get(f'/rolesSettings/{name}'))
logger.warning('Could not find role. %s', {'role': role})
return None
33 changes: 32 additions & 1 deletion cterasdk/cio/common.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,26 @@
import urllib.parse
from functools import wraps
from pathlib import PurePosixPath
from ..common import Object
from ..common.utils import utf8_decode
from ..convert.serializers import toxmlstr


def resolver(func):
@wraps(func)
def wrapper(self, p):
if isinstance(p, BasePath):
p = p.reference
elif isinstance(p, str):
pass
else:
raise ValueError(
f"Parameter 'p' must be str or BasePath, got {type(p).__name__}"
)
return func(self, p)
return wrapper


class BasePath:
"""Base Path for CTERA Portal and CTERA Edge"""

Expand All @@ -20,7 +36,7 @@ def __init__(self, scope, reference):
if isinstance(reference, str):
reference = reference.lstrip('/')
self._scope = PurePosixPath(scope)
self._reference = PurePosixPath(reference)
self._reference = PurePosixPath(*reference) if isinstance(reference, tuple) else PurePosixPath(reference)

@property
def scope(self):
Expand Down Expand Up @@ -58,6 +74,14 @@ def absolute_encode(self):
def absolute_parent(self):
return self.parent.as_posix()

@resolver
def is_relative_to(self, p):
return self.reference.is_relative_to(p)

@resolver
def relative_to(self, p):
return self.__class__(self.reference.relative_to(p).as_posix()) # pylint: disable=no-value-for-parameter

@property
def extension(self):
return self.reference.suffix
Expand All @@ -74,6 +98,13 @@ def join(self, p):
def parts(self):
return self.reference.parts

def __getitem__(self, key):
if isinstance(key, slice):
return self.__class__(self.parts[key]) # pylint: disable=no-value-for-parameter
if isinstance(key, int):
return self.parts[key]
raise TypeError("Invalid argument type")

def __eq__(self, p):
return self.absolute == p.absolute

Expand Down
Loading