import json
import math
+import traceback
from datetime import timedelta
from django.contrib.auth.decorators import login_required
try:
booking = create_from_API(request.body, token.user)
except Exception as e:
- return HttpResponse(str(e), status=400)
+ exc_type, exc_value, exc_traceback = sys.exc_info()
+ return HttpResponse(str(traceback.format_exception(exc_type, exc_value, exc_traceback)), status=400)
sbooking = AutomationAPIManager.serialize_booking(booking)
return JsonResponse(sbooking, safe=False)
# mirrors MultipleSelectFilter Widget
avt = []
for lab in Lab.objects.all():
- for template in ResourceTemplate.objects.filter(lab=lab, owner=token.user, public=True):
+ for template in ResourceTemplate.objects.filter(Q(lab=lab), Q(owner=token.user) | Q(public=True)):
available_resources = lab.get_available_resources()
required_resources = template.get_required_resources()
least_available = 100
"""
User API Views
"""
-
+lab_info
def all_users(request):
token = auth_and_log(request, 'users')
for up in UserProfile.objects.exclude(user=token.user)]
return JsonResponse(users, safe=False)
+
+
+"""
+Lab API Views
+"""
+
+
+def all_labs():
+ lab_list=[]
+ for lab in Lab.objects.all():
+ lab_info = {
+ 'name':lab.name,
+ 'username':lab.lab_user.username,
+ 'status':lab.status,
+ 'project':lab.project,
+ 'description':lab.description,
+ 'location':lab.location,
+ 'info':lab.lab_info_link,
+ 'email':lab.contact_email,
+ 'phone':lab.contact_phone
+ }
+ lab_list.append(lab_info)
+
+ return JsonResponse(lab_list, safe=False)
+
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
import re
+import typing
+from typing import Optional
from django.db.models import Q
from dashboard.exceptions import ResourceAvailabilityException
from resource_inventory.models import (
ResourceBundle,
ResourceTemplate,
+ ResourceConfiguration,
Network,
Vlan,
PhysicalNetwork,
pass
@staticmethod
- def getInstance():
+ def getInstance() -> ResourceManager:
if ResourceManager.instance is None:
ResourceManager.instance = ResourceManager()
return ResourceManager.instance
- def getAvailableResourceTemplates(self, lab, user=None):
+ def getAvailableResourceTemplates(self, lab: Lab, user: Optional[User] = None) -> list[ResourceTemplate]:
filter = Q(public=True)
if user:
filter = filter | Q(owner=user)
filter = filter & Q(temporary=False) & Q(lab=lab)
return ResourceTemplate.objects.filter(filter)
- def templateIsReservable(self, resource_template):
+ def templateIsReservable(self, resource_template: ResourceTemplate):
"""
Check if the required resources to reserve this template is available.
return True
# public interface
- def deleteResourceBundle(self, resourceBundle):
+ def deleteResourceBundle(self, resourceBundle: ResourceBundle):
raise NotImplementedError("Resource Bundle Deletion Not Implemented")
- def releaseResourceBundle(self, resourceBundle):
+ def releaseResourceBundle(self, resourceBundle: ResourceBundle):
resourceBundle.release()
- def get_vlans(self, resourceTemplate):
+ def get_vlans(self, resourceTemplate: ResourceTemplate) -> dict[str, int]:
+ """
+ returns: dict from network name to the associated vlan number (backend vlan id)
+ """
networks = {}
vlan_manager = resourceTemplate.lab.vlan_manager
for network in resourceTemplate.networks.all():
networks[network.name] = vlans[0]
return networks
- def instantiateTemplate(self, resource_template):
+ def instantiateTemplate(self, resource_template: ResourceTemplate):
"""
Convert a ResourceTemplate into a ResourceBundle.
return resource_bundle
- def configureNetworking(self, resource_bundle, resource, vlan_map):
+ def configureNetworking(self, resource_bundle: ResourceBundle, resource: Resource, vlan_map: dict[str, int]):
+ """
+ @vlan_map: dict from network name to the associated vlan number (backend vlan id)
+ """
for physical_interface in resource.interfaces.all():
- # assign interface configs
- iface_configs = InterfaceConfiguration.objects.filter(
+ # assign interface configs
+ iface_config = InterfaceConfiguration.objects.get(
profile=physical_interface.profile,
resource_config=resource.config
)
- iface_config = iface_configs.first()
physical_interface.acts_as = iface_config
physical_interface.acts_as.save()
)
# private interface
- def acquireHost(self, resource_config):
+ def acquireHost(self, resource_config: ResourceConfiguration) -> Resource:
resources = resource_config.profile.get_resources(
lab=resource_config.template.lab,
unreserved=True