Implement Sites()
[plcapi.git] / PLC / Sites.py
1 from types import StringTypes
2 import string
3
4 from PLC.Faults import *
5 from PLC.Parameter import Parameter, Mixed
6 from PLC.NovaObject import NovaObject, NovaObjects
7 from PLC.Slices import Slice, Slices
8 #from PLC.Persons import Person, Persons
9
10 class Site:
11     """
12     Representation of a row in the sites table. To use, optionally
13     instantiate with a dict of values. Update as you would a
14     dict. Commit to the database with sync().
15     """
16
17     fields = {
18         'enabled': Parameter(bool, "Has been enabled"),
19         'id': Parameter(str, "Site identifier"),
20         'tenant_name': Parameter(str, "Full site name", max = 254),
21         'description': Parameter(str, "Description", max = 254),
22         #'max_slices': Parameter(int, "Maximum number of slices that the site is able to create"),
23         #'max_slivers': Parameter(int, "Maximum number of slivers that the site is able to create"),
24         'person_ids': Parameter([int], "List of account identifiers"),
25         'slice_ids': Parameter([int], "List of slice identifiers"),
26         'pcu_ids': Parameter([int], "List of PCU identifiers"),
27         'node_ids': Parameter([int], "List of site node identifiers"),
28         }
29
30 class Sites(NovaObjects):
31     """
32     Representation of row(s) from the sites table in the
33     database.
34     """
35
36     def __init__(self, api, site_filter = None, columns = None):
37         self.api = api 
38         self.fields = Site.fields
39         if not site_filter:
40             sites = self.api.client_shell.keystone.tenants.findall()
41         elif isinstance(site_filter, StringTypes):
42             sites = [self.api.client_shell.keystone.tenants.find(id=site_filter)]
43         elif isinstance(site_filter, StringTypes):
44             sites = [self.api.client_shell.keystone.tenants.find(**site_filter)]
45         elif isinstance(site_filter, (list, tuple, set)):
46             sites = self.api.client_shell.keystone.tenants.findall()
47             sites = [site for site in sites if site.id in site_filter]
48         else:
49             raise PLCInvalidArgument, "Wrong site filter %s" % site_filter         
50         self.extend(sites)