# -*- coding: utf-8 -*-
"""
The ``User`` object is the base object which owns all other objects in a running subuser instance.
"""
#external imports
import getpass
import os
import sys
import pwd
#internal imports
from subuserlib.classes import registry
from subuserlib.classes import config
from subuserlib.classes import installedImages
from subuserlib.classes.docker import dockerDaemon
from subuserlib.classes.endUser import EndUser
from subuserlib import test
from subuserlib import paths
[docs]class User(object):
"""
This class provides a "base" User object used by subuser. This is the stem of a tree like data structure which holds all of the various objects owned by a given user.
You create a new User object by passing the username and home dir of the user.
>>> import subuserlib.classes.user
>>> u = subuserlib.classes.user.User(name="root",homeDir="/root/")
>>> u.homeDir
'/root/'
"""
def __init__(self,name=None,homeDir=None):
self.__config = None
self.__registry = None
self.__installedImages = None
self.__dockerDaemon = None
self.__runtimeCache = None
self.name = name
if homeDir:
self.homeDir = homeDir
elif test.testing:
self.homeDir = os.getcwd()
else:
self.homeDir = os.path.expanduser("~")
self.__endUser = EndUser(self)
[docs] def getEndUser(self):
return self.__endUser
[docs] def getConfig(self):
"""
Get the user's :doc:`Config <config>` object.
Note: the user's config will be loaded the first time this is called.
"""
if self.__config == None:
self.__config = config.Config(self)
return self.__config
[docs] def getRegistry(self):
"""
Get the user's subuser :doc:`Registry <registry>`.
Note: the registry will be loaded the first time this is called.
"""
if self.__registry == None:
self.__registry = registry.Registry(self)
self.__registry.ensureGitRepoInitialized()
return self.__registry
[docs] def setRegistry(self, registry):
self.__registry = registry
[docs] def reloadRegistry(self):
"""
Reload registry from disk.
"""
self.__registry = None
[docs] def getInstalledImages(self):
"""
Get the user's :doc:`InstalledImages <installed-images>` list.
Note: the installed images list will be loaded the first time this is called.
"""
if self.__installedImages == None:
self.__installedImages = installedImages.InstalledImages(self)
return self.__installedImages
[docs] def getDockerDaemon(self):
"""
Get the :doc:`DockerDaemon <docker>` object. You will use this to communicate with the Docker daemon.
"""
if self.__dockerDaemon == None:
self.__dockerDaemon = dockerDaemon.DockerDaemon(self)
return self.__dockerDaemon