epam / cloud-pipeline

Cloud agnostic genomics analysis, scientific computation and storage platform
https://cloud-pipeline.com
Apache License 2.0
145 stars 59 forks source link

Add support for user sync custom sources #3395

Closed tcibinan closed 11 months ago

tcibinan commented 11 months ago

Relates #2197.

The pull request improves user sync reusability by introducing custom user sources.

The following user source implementations are available out of the box:

The following user handler implementations are available out of the box:

Example


from scripts.sync_users import get_daemon, UserHandler, UserSource, UserEntity

class CustomUserSource(UserSource):

    def __init__(self):
        self._api = None
        self._executor = None
        self._logger = None

    def register(self, api, executor, logger):
        self._api = api
        self._executor = executor
        self._logger = logger

    def get(self):
        self._logger.debug('Generating users...')
        yield UserEntity(id=0, roles=[],
                         login_name='', local_name='',
                         first_name='', last_name='',
                         email='')

class CustomUserHandler(UserHandler):

    def __init__(self):
        self._api = None
        self._executor = None
        self._logger = None

    def register(self, api, executor, logger):
        self._api = api
        self._executor = executor
        self._logger = logger

    def create(self, users):
        self._logger.debug('Creating users...')

sync_daemon = get_daemon()
sync_daemon.register(source=CustomUserSource(), handler=CustomUserHandler())
sync_daemon.sync()