Revision 24d16f76 lib/query.py

b/lib/query.py
42 42
 IQ_LIVE,
43 43
 IQ_DISKUSAGE) = range(100, 103)
44 44

  
45
(LQ_MODE,
46
 LQ_OWNER,
47
 LQ_PENDING) = range(10, 13)
45 48

  
46 49
FIELD_NAME_RE = re.compile(r"^[a-z0-9/._]+$")
47 50
TITLE_RE = re.compile(r"^[^\s]+$")
......
1003 1006
  return _PrepareFieldList(fields)
1004 1007

  
1005 1008

  
1009
class LockQueryData:
1010
  """Data container for lock data queries.
1011

  
1012
  """
1013
  def __init__(self, lockdata):
1014
    """Initializes this class.
1015

  
1016
    """
1017
    self.lockdata = lockdata
1018

  
1019
  def __iter__(self):
1020
    """Iterate over all locks.
1021

  
1022
    """
1023
    return iter(self.lockdata)
1024

  
1025

  
1026
def _GetLockOwners(_, data):
1027
  """Returns a sorted list of a lock's current owners.
1028

  
1029
  """
1030
  (_, _, owners, _) = data
1031

  
1032
  if owners:
1033
    owners = utils.NiceSort(owners)
1034

  
1035
  return (constants.QRFS_NORMAL, owners)
1036

  
1037

  
1038
def _GetLockPending(_, data):
1039
  """Returns a sorted list of a lock's pending acquires.
1040

  
1041
  """
1042
  (_, _, _, pending) = data
1043

  
1044
  if pending:
1045
    pending = [(mode, utils.NiceSort(names))
1046
               for (mode, names) in pending]
1047

  
1048
  return (constants.QRFS_NORMAL, pending)
1049

  
1050

  
1051
def _BuildLockFields():
1052
  """Builds list of fields for lock queries.
1053

  
1054
  """
1055
  return _PrepareFieldList([
1056
    (_MakeField("name", "Name", constants.QFT_TEXT), None,
1057
     lambda ctx, (name, mode, owners, pending): (constants.QRFS_NORMAL, name)),
1058
    (_MakeField("mode", "Mode", constants.QFT_OTHER), LQ_MODE,
1059
     lambda ctx, (name, mode, owners, pending): (constants.QRFS_NORMAL, mode)),
1060
    (_MakeField("owner", "Owner", constants.QFT_OTHER), LQ_OWNER,
1061
     _GetLockOwners),
1062
    (_MakeField("pending", "Pending", constants.QFT_OTHER), LQ_PENDING,
1063
     _GetLockPending),
1064
    ])
1065

  
1066

  
1006 1067
#: Fields available for node queries
1007 1068
NODE_FIELDS = _BuildNodeFields()
1008 1069

  
1009 1070
#: Fields available for instance queries
1010 1071
INSTANCE_FIELDS = _BuildInstanceFields()
1072

  
1073
#: Fields available for lock queries
1074
LOCK_FIELDS = _BuildLockFields()

Also available in: Unified diff