def post(self, request, provider_id, identity_id):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis','public') != 'public':
         user_list  = re.split(', | |\n', data.get('shared_with',""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user] # Skips blanks
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         machine_request.parent_machine = machine_request.instance.provider_machine
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.has_trait("Auto-Imaging")
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
 def post(self, request, provider_id, identity_id):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = re.split(', | |\n', data.get('shared_with', ""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         machine_request.parent_machine = machine_request.instance.provider_machine
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.has_trait("Auto-Imaging")
         requestImaging(request,
                        machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
 def post(self, request, provider_id, identity_id):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     # request.DATA is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({"owner": data.get("created_for", request.user.username)})
     if data.get("vis", "public") != "public":
         user_list = re.split(", | |\n", data.get("shared_with", ""))
         share_with_admins(user_list, data.get("provider"))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         data["shared_with"] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         machine_request = serializer.object
         machine_request.parent_machine = machine_request.instance.provider_machine
         serializer.save()
         # Object now has an ID for links..
         machine_request_id = serializer.object.id
         requestImaging(request, machine_request_id)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 def post(self, request, provider_uuid, identity_uuid):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis','public') != 'public':
         user_list  = re.split(', | |\n', data.get('shared_with',""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user] # Skips blanks
         #TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         instance = machine_request.instance
         if instance.source.is_machine():
             machine_request.parent_machine = machine_request.instance\
                     .source.providermachine
         elif instance.source.is_volume():
             return failure_response(status.HTTP_400_BAD_REQUEST,
                     "Instance of booted volume can NOT be imaged."
                     "Contact your Administrator for more information.")
         else:
             return failure_response(status.HTTP_400_BAD_REQUEST,
                     "Instance source type cannot be determined."
                     "Contact your Administrator for more information.")
         #NOTE: THIS IS A HACK -- While we enforce all images to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED 
         try:
             tucson_provider = Provider.objects.get(location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             pass
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.has_trait("Auto-Imaging")
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis','public') != 'public':
         user_list  = re.split(', | |\n', data.get('shared_with',""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user] # Skips blanks
         #TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         instance = machine_request.instance
         if instance.source.is_machine():
             machine_request.parent_machine = machine_request.instance\
                     .source.providermachine
         elif instance.source.is_volume():
             raise Exception(
                     "Instance of booted volume can NOT be imaged."
                     "Contact your Administrator for more information.")
         else:
             raise Exception(
                     "Instance source type cannot be determined."
                     "Contact your Administrator for more information.")
         #NOTE: THIS IS A HACK -- While we enforce all images to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED 
         try:
             tucson_provider = Provider.objects.get(location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             pass
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     # request.DATA is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = data.get('shared_with', '')
         if type(user_list) == str:
             user_list = re.split(', | |\n', user_list)
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         # TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         instance = serializer.validated_data['instance']
         parent_machine = instance.source.providermachine
         serializer.validated_data['parent_machine'] = parent_machine
         self._permission_to_image(identity_uuid, instance)
         machine_request = serializer.save()
         instance = machine_request.instance
         # NOTE: THIS IS A HACK -- While we enforce all images
         #       to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED
         try:
             tucson_provider = Provider.objects.get(
                 location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location\
                != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             # Will skip this step if no provider is named
             # iPlant Cloud - Tucson.
             pass
         serializer.save()
         # Object now has an ID for links..
         machine_request_id = machine_request.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     # request.DATA is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = re.split(', | |\n', data.get('shared_with', ""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         # TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         machine_request = serializer.object
         self._permission_to_image(machine_request, identity_uuid)
         instance = machine_request.instance
         machine = machine_request.instance.source.providermachine
         # NOTE: THIS IS A HACK -- While we enforce all images
         #       to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED
         try:
             tucson_provider = Provider.objects.get(
                 location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location\
                != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             # Will skip this step if no provider is named
             # iPlant Cloud - Tucson.
             pass
         serializer.save()
         # Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request,
                        machine_request.id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)