Statistics
| Branch: | Tag: | Revision:

root / lib / rapi / baserlib.py @ 15fd9fd5

History | View | Annotate | Download (3.4 kB)

1 c2dca9af Oleksiy Mishchenko
#
2 c2dca9af Oleksiy Mishchenko
#
3 c2dca9af Oleksiy Mishchenko
4 c2dca9af Oleksiy Mishchenko
# Copyright (C) 2006, 2007, 2008 Google Inc.
5 c2dca9af Oleksiy Mishchenko
#
6 c2dca9af Oleksiy Mishchenko
# This program is free software; you can redistribute it and/or modify
7 c2dca9af Oleksiy Mishchenko
# it under the terms of the GNU General Public License as published by
8 c2dca9af Oleksiy Mishchenko
# the Free Software Foundation; either version 2 of the License, or
9 c2dca9af Oleksiy Mishchenko
# (at your option) any later version.
10 c2dca9af Oleksiy Mishchenko
#
11 c2dca9af Oleksiy Mishchenko
# This program is distributed in the hope that it will be useful, but
12 c2dca9af Oleksiy Mishchenko
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 c2dca9af Oleksiy Mishchenko
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 c2dca9af Oleksiy Mishchenko
# General Public License for more details.
15 c2dca9af Oleksiy Mishchenko
#
16 c2dca9af Oleksiy Mishchenko
# You should have received a copy of the GNU General Public License
17 c2dca9af Oleksiy Mishchenko
# along with this program; if not, write to the Free Software
18 c2dca9af Oleksiy Mishchenko
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 c2dca9af Oleksiy Mishchenko
# 02110-1301, USA.
20 c2dca9af Oleksiy Mishchenko
21 c2dca9af Oleksiy Mishchenko
22 c2dca9af Oleksiy Mishchenko
"""Remote API base resources library.
23 c2dca9af Oleksiy Mishchenko

24 c2dca9af Oleksiy Mishchenko
"""
25 c2dca9af Oleksiy Mishchenko
26 c2dca9af Oleksiy Mishchenko
import ganeti.cli
27 c2dca9af Oleksiy Mishchenko
import ganeti.opcodes
28 c2dca9af Oleksiy Mishchenko
29 441e7cfd Oleksiy Mishchenko
from ganeti import luxi
30 441e7cfd Oleksiy Mishchenko
31 c2dca9af Oleksiy Mishchenko
32 c2dca9af Oleksiy Mishchenko
def BuildUriList(ids, uri_format, uri_fields=("name", "uri")):
33 c2dca9af Oleksiy Mishchenko
  """Builds a URI list as used by index resources.
34 c2dca9af Oleksiy Mishchenko

35 c2dca9af Oleksiy Mishchenko
  Args:
36 c2dca9af Oleksiy Mishchenko
  - ids: List of ids as strings
37 c2dca9af Oleksiy Mishchenko
  - uri_format: Format to be applied for URI
38 c2dca9af Oleksiy Mishchenko
  - uri_fields: Optional parameter for field ids
39 c2dca9af Oleksiy Mishchenko

40 c2dca9af Oleksiy Mishchenko
  """
41 c2dca9af Oleksiy Mishchenko
  (field_id, field_uri) = uri_fields
42 dca1764e Iustin Pop
43 c2dca9af Oleksiy Mishchenko
  def _MapId(m_id):
44 c2dca9af Oleksiy Mishchenko
    return { field_id: m_id, field_uri: uri_format % m_id, }
45 c2dca9af Oleksiy Mishchenko
46 c2dca9af Oleksiy Mishchenko
  # Make sure the result is sorted, makes it nicer to look at and simplifies
47 c2dca9af Oleksiy Mishchenko
  # unittests.
48 c2dca9af Oleksiy Mishchenko
  ids.sort()
49 c2dca9af Oleksiy Mishchenko
50 c2dca9af Oleksiy Mishchenko
  return map(_MapId, ids)
51 c2dca9af Oleksiy Mishchenko
52 c2dca9af Oleksiy Mishchenko
53 c2dca9af Oleksiy Mishchenko
def ExtractField(sequence, index):
54 c2dca9af Oleksiy Mishchenko
  """Creates a list containing one column out of a list of lists.
55 c2dca9af Oleksiy Mishchenko

56 c2dca9af Oleksiy Mishchenko
  Args:
57 c2dca9af Oleksiy Mishchenko
  - sequence: Sequence of lists
58 c2dca9af Oleksiy Mishchenko
  - index: Index of field
59 c2dca9af Oleksiy Mishchenko

60 c2dca9af Oleksiy Mishchenko
  """
61 c2dca9af Oleksiy Mishchenko
  return map(lambda item: item[index], sequence)
62 c2dca9af Oleksiy Mishchenko
63 c2dca9af Oleksiy Mishchenko
64 c2dca9af Oleksiy Mishchenko
def MapFields(names, data):
65 c2dca9af Oleksiy Mishchenko
  """Maps two lists into one dictionary.
66 c2dca9af Oleksiy Mishchenko

67 c2dca9af Oleksiy Mishchenko
  Args:
68 c2dca9af Oleksiy Mishchenko
  - names: Field names (list of strings)
69 c2dca9af Oleksiy Mishchenko
  - data: Field data (list)
70 c2dca9af Oleksiy Mishchenko

71 c2dca9af Oleksiy Mishchenko
  Example:
72 c2dca9af Oleksiy Mishchenko
  >>> MapFields(["a", "b"], ["foo", 123])
73 c2dca9af Oleksiy Mishchenko
  {'a': 'foo', 'b': 123}
74 c2dca9af Oleksiy Mishchenko

75 c2dca9af Oleksiy Mishchenko
  """
76 c2dca9af Oleksiy Mishchenko
  if len(names) != len(data):
77 c2dca9af Oleksiy Mishchenko
    raise AttributeError("Names and data must have the same length")
78 dca1764e Iustin Pop
  return dict(zip(names, data))
79 c2dca9af Oleksiy Mishchenko
80 c2dca9af Oleksiy Mishchenko
81 15fd9fd5 Oleksiy Mishchenko
def _Tags_GET(kind, name=""):
82 c2dca9af Oleksiy Mishchenko
  """Helper function to retrieve tags.
83 c2dca9af Oleksiy Mishchenko

84 c2dca9af Oleksiy Mishchenko
  """
85 c2dca9af Oleksiy Mishchenko
  op = ganeti.opcodes.OpGetTags(kind=kind, name=name)
86 c2dca9af Oleksiy Mishchenko
  tags = ganeti.cli.SubmitOpCode(op)
87 c2dca9af Oleksiy Mishchenko
  return list(tags)
88 c2dca9af Oleksiy Mishchenko
89 c2dca9af Oleksiy Mishchenko
90 15fd9fd5 Oleksiy Mishchenko
def _Tags_POST(kind, tags, name=""):
91 441e7cfd Oleksiy Mishchenko
  """Helper function to set tags.
92 441e7cfd Oleksiy Mishchenko

93 441e7cfd Oleksiy Mishchenko
  """
94 441e7cfd Oleksiy Mishchenko
  cl = luxi.Client()
95 441e7cfd Oleksiy Mishchenko
  return cl.SubmitJob([ganeti.opcodes.OpAddTags(kind=kind, name=name,
96 441e7cfd Oleksiy Mishchenko
                                                tags=tags)])
97 441e7cfd Oleksiy Mishchenko
98 441e7cfd Oleksiy Mishchenko
99 15fd9fd5 Oleksiy Mishchenko
def _Tags_DELETE(kind, tags, name=""):
100 15fd9fd5 Oleksiy Mishchenko
  """Helper function to delete tags.
101 15fd9fd5 Oleksiy Mishchenko

102 15fd9fd5 Oleksiy Mishchenko
  """
103 15fd9fd5 Oleksiy Mishchenko
  cl = luxi.Client()
104 15fd9fd5 Oleksiy Mishchenko
  return cl.SubmitJob([ganeti.opcodes.OpDelTags(kind=kind, name=name,
105 15fd9fd5 Oleksiy Mishchenko
                                                tags=tags)])
106 15fd9fd5 Oleksiy Mishchenko
107 15fd9fd5 Oleksiy Mishchenko
108 51ee2f49 Oleksiy Mishchenko
def MapBulkFields(itemslist, fields):
109 51ee2f49 Oleksiy Mishchenko
  """Map value to field name in to one dictionary.
110 51ee2f49 Oleksiy Mishchenko

111 51ee2f49 Oleksiy Mishchenko
  Args:
112 51ee2f49 Oleksiy Mishchenko
  - itemslist: A list of items values
113 51ee2f49 Oleksiy Mishchenko
  - instance: A list of items names
114 51ee2f49 Oleksiy Mishchenko

115 51ee2f49 Oleksiy Mishchenko
  Returns:
116 51ee2f49 Oleksiy Mishchenko
    A list of mapped dictionaries
117 51ee2f49 Oleksiy Mishchenko
  """
118 51ee2f49 Oleksiy Mishchenko
  items_details = []
119 51ee2f49 Oleksiy Mishchenko
  for item in itemslist:
120 51ee2f49 Oleksiy Mishchenko
    mapped = MapFields(fields, item)
121 51ee2f49 Oleksiy Mishchenko
    items_details.append(mapped)
122 51ee2f49 Oleksiy Mishchenko
  return items_details
123 51ee2f49 Oleksiy Mishchenko
124 51ee2f49 Oleksiy Mishchenko
125 c2dca9af Oleksiy Mishchenko
class R_Generic(object):
126 c2dca9af Oleksiy Mishchenko
  """Generic class for resources.
127 c2dca9af Oleksiy Mishchenko

128 c2dca9af Oleksiy Mishchenko
  """
129 441e7cfd Oleksiy Mishchenko
  def __init__(self, request, items, queryargs, post_data):
130 c2dca9af Oleksiy Mishchenko
    """Generic resource constructor.
131 c2dca9af Oleksiy Mishchenko

132 c2dca9af Oleksiy Mishchenko
    Args:
133 c2dca9af Oleksiy Mishchenko
      request: HTTPRequestHandler object
134 c2dca9af Oleksiy Mishchenko
      items: a list with variables encoded in the URL
135 c2dca9af Oleksiy Mishchenko
      queryargs: a dictionary with additional options from URL
136 c2dca9af Oleksiy Mishchenko

137 c2dca9af Oleksiy Mishchenko
    """
138 c2dca9af Oleksiy Mishchenko
    self.request = request
139 c2dca9af Oleksiy Mishchenko
    self.items = items
140 c2dca9af Oleksiy Mishchenko
    self.queryargs = queryargs
141 441e7cfd Oleksiy Mishchenko
    self.post_data = post_data