File: subusers.py

package info (click to toggle)
subuser 0.6.2-3
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, buster, forky, sid, trixie
  • size: 4,208 kB
  • sloc: python: 5,201; sh: 380; makefile: 73
file content (84 lines) | stat: -rwxr-xr-x 4,167 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# -*- coding: utf-8 -*-

"""
This is the list of subusers controlled by a given user.
"""

#external imports
import os
import json
import collections
import sys
#internal imports
from subuserlib.classes.fileBackedObject import FileBackedObject
from subuserlib.classes.userOwnedObject import UserOwnedObject
from subuserlib.classes.subuser import Subuser
import subuserlib.classes.imageSource

class Subusers(dict,UserOwnedObject,FileBackedObject):
  """
  A subusers object stores the set of all subusers owned by a given user.
  """
  def __init__(self,user):
    UserOwnedObject.__init__(self,user)
    registryFileStructure = self.user.registry.gitRepository.getFileStructureAtCommit(self.user.registry.gitReadHash)
    if self.user.registry.initialized and "subusers.json" in registryFileStructure.lsFiles("./"):
      serializedUnlockedSubusersDict = json.loads(registryFileStructure.read("subusers.json"), object_pairs_hook=collections.OrderedDict)
      self._loadSerializedSubusersDict(serializedUnlockedSubusersDict,locked=False)
    if (not self.user.registry.ignoreVersionLocks) and os.path.exists(self.user.config["locked-subusers-path"]):
      with open(self.user.config["locked-subusers-path"],"r") as fileHandle:
        self._loadSerializedSubusersDict(json.load(fileHandle, object_pairs_hook=collections.OrderedDict),locked=True)

  def serializeToDict(self):
    serializedDict=collections.OrderedDict()
    serializedDict["locked"]=collections.OrderedDict()
    serializedDict["unlocked"]=collections.OrderedDict()
    for subuser in self.getSortedList():
      serializedSubuser = collections.OrderedDict()
      serializedSubuser["source-repo"] = subuser.sourceRepoName
      serializedSubuser["image-source"] = subuser.imageSourceName
      serializedSubuser["executable-shortcut-installed"] = subuser.executableShortcutInstalled
      serializedSubuser["entrypoints-exposed"] = subuser.entryPointsExposed
      serializedSubuser["docker-image"] = subuser.imageId
      serializedSubuser["service-subusers"] = subuser.serviceSubuserNames
      serializedSubuser["non-default-home-dir"] = subuser.nonDefaultHomeDir
      if subuser.locked:
        serializedDict["locked"][subuser.name] = serializedSubuser
      else:
        serializedDict["unlocked"][subuser.name] = serializedSubuser
    return serializedDict

  def save(self):
    """
    Save the list of subusers to disk.
    """
    serializedDict = self.serializeToDict()
    with self.user.endUser.get_file(os.path.join(self.user.config["registry-dir"],"subusers.json"), 'w') as file_f:
      json.dump(serializedDict["unlocked"], file_f, indent=1, separators=(',', ': '))
    with self.user.endUser.get_file(os.path.join(self.user.config["locked-subusers-path"]), 'w') as file_f:
      json.dump(serializedDict["locked"], file_f, indent=1, separators=(',', ': '))

  def _loadSerializedSubusersDict(self,serializedSubusersDict,locked):
    """
    Load the serialized subusers json file into memory.
    """
    for subuserName, subuserAttributes in serializedSubusersDict.items():
      def retrieveAttribute(name,default):
        if name in subuserAttributes:
          return subuserAttributes[name]
        else:
          return default
      repoName = subuserAttributes["source-repo"]
      imageSourceName = subuserAttributes["image-source"]
      imageId = retrieveAttribute("docker-image",None)
      serviceSubuserNames = retrieveAttribute("service-subusers",[])
      executableShortcutInstalled = retrieveAttribute("executable-shortcut-installed",False)
      entrypointsExposed = retrieveAttribute("entrypoints-exposed",False)
      nonDefaultHomeDir = retrieveAttribute("non-default-home-dir",None)
      self[subuserName] = Subuser(self.user,subuserName,imageSourceName=imageSourceName,repoName=repoName,imageId=imageId,executableShortcutInstalled=executableShortcutInstalled,locked=locked,serviceSubuserNames=serviceSubuserNames,entrypointsExposed=entrypointsExposed,nonDefaultHomeDir=nonDefaultHomeDir)

  def getSortedList(self):
    """
    Return a list of subusers sorted by name.
    """
    return list(sorted(self.values(),key=lambda subuser:subuser.name))