def test_bool_from_string(self): true_values = ["True", True, "true", "TRUE", "1", 1, "on", "ON", "y", "yes", "Y", "YES"] i = 0 for value in true_values: self.assertTrue(utils.bool_from_string(value), "Got False for value: %r (%d)" % (value, i)) i = i + 1 false_values = ["False", False, "false", "T", "F", "FALSE", "0", 0, 9, "off", "OFF", "no", "n", "NO", "N"] for value in false_values: self.assertFalse(utils.bool_from_string(value), "Got True for value: %r" % value)
def test_bool_from_string(self): true_values = ['True', True, 'true', 'TRUE', '1', 1, 'on', 'ON'] i = 0 for value in true_values: self.assertTrue(utils.bool_from_string(value), "Got False for value: %r (%d)" % (value, i)) i = i + 1 false_values = ['False', False, 'false', 'T', 'F', 'FALSE', '0', 0, 9, 'off', 'OFF'] for value in false_values: self.assertFalse(utils.bool_from_string(value), "Got True for value: %r" % value)
def update(self, req, id, image_meta, image_data): """ Updates an existing image with the registry. :param request: The WSGI/Webob Request object :param id: The opaque image identifier :retval Returns the updated image information as a mapping """ self._enforce(req, "modify_image") if image_meta.get("is_public"): self._enforce(req, "publicize_image") if req.context.read_only: msg = _("Read-only access") logger.debug(msg) raise HTTPForbidden(msg, request=req, content_type="text/plain") orig_image_meta = self.get_image_meta_or_404(req, id) orig_status = orig_image_meta["status"] # The default behaviour for a PUT /images/<IMAGE_ID> is to # override any properties that were previously set. This, however, # leads to a number of issues for the common use case where a caller # registers an image with some properties and then almost immediately # uploads an image file along with some more properties. Here, we # check for a special header value to be false in order to force # properties NOT to be purged. However we also disable purging of # properties if an image file is being uploaded... purge_props = req.headers.get("x-glance-registry-purge-props", True) purge_props = utils.bool_from_string(purge_props) and image_data is None if image_data is not None and orig_status != "queued": raise HTTPConflict(_("Cannot upload to an unqueued image")) # Only allow the Location|Copy-From fields to be modified if the # image is in queued status, which indicates that the user called # POST /images but originally supply neither a Location|Copy-From # field NOR image data location = self._external_source(image_meta, req) reactivating = orig_status != "queued" and location activating = orig_status == "queued" and (location or image_data) if reactivating: msg = _("Attempted to update Location field for an image " "not in queued status.") raise HTTPBadRequest(msg, request=req, content_type="text/plain") try: if location: image_meta["size"] = self._get_size(image_meta, location) image_meta = registry.update_image_metadata(req.context, id, image_meta, purge_props) if activating: image_meta = self._handle_source(req, id, image_meta, image_data) except exception.Invalid, e: msg = _("Failed to update image metadata. Got error: %(e)s") % locals() for line in msg.split("\n"): logger.error(line) self.notifier.error("image.update", msg) raise HTTPBadRequest(msg, request=req, content_type="text/plain")
def update(self, req, id, image_meta, image_data): """ Updates an existing image with the registry. :param request: The WSGI/Webob Request object :param id: The opaque image identifier :retval Returns the updated image information as a mapping """ self._enforce(req, 'modify_image') if req.context.read_only: msg = _("Read-only access") logger.debug(msg) raise HTTPForbidden(msg, request=req, content_type="text/plain") orig_image_meta = self.get_image_meta_or_404(req, id) orig_status = orig_image_meta['status'] # The default behaviour for a PUT /images/<IMAGE_ID> is to # override any properties that were previously set. This, however, # leads to a number of issues for the common use case where a caller # registers an image with some properties and then almost immediately # uploads an image file along with some more properties. Here, we # check for a special header value to be false in order to force # properties NOT to be purged. However we also disable purging of # properties if an image file is being uploaded... purge_props = req.headers.get('x-glance-registry-purge-props', True) purge_props = (utils.bool_from_string(purge_props) and image_data is None) if image_data is not None and orig_status != 'queued': raise HTTPConflict(_("Cannot upload to an unqueued image")) # Only allow the Location fields to be modified if the image is # in queued status, which indicates that the user called POST /images # but did not supply either a Location field OR image data if not orig_status == 'queued' and 'location' in image_meta: msg = _("Attempted to update Location field for an image " "not in queued status.") raise HTTPBadRequest(msg, request=req, content_type="text/plain") try: image_meta = registry.update_image_metadata(req.context, id, image_meta, purge_props) if image_data is not None: image_meta = self._upload_and_activate(req, image_meta) except exception.Invalid, e: msg = (_("Failed to update image metadata. Got error: %(e)s") % locals()) for line in msg.split('\n'): logger.error(line) self.notifier.error('image.update', msg) raise HTTPBadRequest(msg, request=req, content_type="text/plain")
def update(self, req, id, image_meta, image_data): """ Updates an existing image with the registry. :param request: The WSGI/Webob Request object :param id: The opaque image identifier :retval Returns the updated image information as a mapping """ self._enforce(req, 'modify_image') is_public = image_meta.get('is_public') if is_public: self._enforce(req, 'publicize_image') orig_image_meta = self.get_image_meta_or_404(req, id) orig_status = orig_image_meta['status'] # Do not allow any updates on a deleted image. # Fix for LP Bug #1060930 if orig_status == 'deleted': msg = _("Forbidden to update deleted image.") raise HTTPForbidden(explanation=msg, request=req, content_type="text/plain") # The default behaviour for a PUT /images/<IMAGE_ID> is to # override any properties that were previously set. This, however, # leads to a number of issues for the common use case where a caller # registers an image with some properties and then almost immediately # uploads an image file along with some more properties. Here, we # check for a special header value to be false in order to force # properties NOT to be purged. However we also disable purging of # properties if an image file is being uploaded... purge_props = req.headers.get('x-glance-registry-purge-props', True) purge_props = (utils.bool_from_string(purge_props) and image_data is None) if image_data is not None and orig_status != 'queued': raise HTTPConflict(_("Cannot upload to an unqueued image")) # Only allow the Location|Copy-From fields to be modified if the # image is in queued status, which indicates that the user called # POST /images but originally supply neither a Location|Copy-From # field NOR image data location = self._external_source(image_meta, req) reactivating = orig_status != 'queued' and location activating = orig_status == 'queued' and (location or image_data) # Make image public in the backend store (if implemented) orig_or_updated_loc = location or orig_image_meta.get('location', None) if orig_or_updated_loc: self.update_store_acls(req, id, orig_or_updated_loc, public=is_public) if reactivating: msg = _("Attempted to update Location field for an image " "not in queued status.") raise HTTPBadRequest(explanation=msg, request=req, content_type="text/plain") try: if location: image_meta['size'] = self._get_size(req.context, image_meta, location) image_meta = registry.update_image_metadata(req.context, id, image_meta, purge_props) if activating: image_meta = self._handle_source(req, id, image_meta, image_data) except exception.Invalid as e: msg = (_("Failed to update image metadata. Got error: %(e)s") % locals()) LOG.debug(msg) raise HTTPBadRequest(explanation=msg, request=req, content_type="text/plain") except exception.NotFound as e: msg = (_("Failed to find image to update: %(e)s") % locals()) for line in msg.split('\n'): LOG.info(line) raise HTTPNotFound(explanation=msg, request=req, content_type="text/plain") except exception.Forbidden as e: msg = (_("Forbidden to update image: %(e)s") % locals()) for line in msg.split('\n'): LOG.info(line) raise HTTPForbidden(explanation=msg, request=req, content_type="text/plain") else: self.notifier.info('image.update', redact_loc(image_meta)) # Prevent client from learning the location, as it # could contain security credentials image_meta.pop('location', None) return {'image_meta': image_meta}
def _parse_deleted_filter(self, req): """Parse deleted into something usable.""" deleted = req.params.get('deleted') if deleted is None: return None return utils.bool_from_string(deleted)
def _parse_deleted_filter(self, req): """Parse deleted into something usable.""" deleted = req.str_params.get('deleted', False) if not deleted: return False return utils.bool_from_string(deleted)
def test_bool_from_string(self): actual = utils.bool_from_string('true') self.assertEqual(True, actual) actual = utils.bool_from_string(1) self.assertEqual(True, actual)