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 |