[Kimchi-devel] [PATCH 3/8] refactor exception: Set error messages for jsonschema validation
Leonardo Augusto Guimarães Garcia
lagarcia at linux.vnet.ibm.com
Tue Feb 11 03:09:06 UTC 2014
Reviewed-by: Leonardo Garcia <lagarcia at br.ibm.com>
On 02/09/2014 08:47 PM, Aline Manera wrote:
> From: Aline Manera <alinefm at br.ibm.com>
>
> While validating data with jsonschema it raises English messages.
> To allow translate all error messages to the supported languages it is
> needed to set a custom error message.
> In this case, the message code is being used. Then KimchiException can
> get the correct message based on code and display the translated
> message.
>
> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
> ---
> plugins/sample/API.json | 23 +++++---
> src/kimchi/API.json | 144 ++++++++++++++++++++++++++++++++---------------
> 2 files changed, 115 insertions(+), 52 deletions(-)
>
> diff --git a/plugins/sample/API.json b/plugins/sample/API.json
> index 58d0969..ebc596b 100644
> --- a/plugins/sample/API.json
> +++ b/plugins/sample/API.json
> @@ -3,42 +3,51 @@
> "title": "Plugin Sample API",
> "description": "Json schema for Kimchi's Sample Plugin API",
> "type": "object",
> + "error": "SPAPI0001E",
> "properties": {
> "rectangles_create": {
> "type": "object",
> + "error": "SPRET0003E",
> "properties": {
> "name": {
> "description": "The name of the new rectangle instance",
> "type": "string",
> - "required": true
> + "required": true,
> + "error": "SPRET0004E"
> },
> "length": {
> "$ref": "#/definitions/positiveNumber",
> - "required": true
> + "required": true,
> + "error": "SPRET0005E"
> },
> "width": {
> "$ref": "#/definitions/positiveNumber",
> - "required": true
> + "required": true,
> + "error": "SPRET0006E"
> }
> }
> - }
> - },
> + },
> "circles_create": {
> "type": "object",
> + "error": "SPCIRC0003E",
> "properties": {
> "name": {
> "description": "The name of the new circle instance",
> "type": "string",
> - "required": true
> + "required": true,
> + "error": "SPCIRC0004E"
> },
> "radius": {
> "$ref": "#/definitions/positiveNumber",
> - "required": true
> + "required": true,
> + "error": "SPCIRC0005E"
> }
> }
> + }
> },
> "definitions": {
> "positiveNumber": {
> + "error": "SPAPI0002E",
> "type": "number",
> "minimum": 0,
> "exclusiveMinimum": true
> diff --git a/src/kimchi/API.json b/src/kimchi/API.json
> index 08c77c5..38c4d9f 100644
> --- a/src/kimchi/API.json
> +++ b/src/kimchi/API.json
> @@ -8,8 +8,12 @@
> "description": "Configure graphics parameters for the new VM",
> "type": "object",
> "properties": {
> - "type": { "enum": ["spice", "vnc"] },
> + "type": {
> + "enum": ["spice", "vnc"],
> + "error": "KCHVM0014E"
> + },
> "listen": {
> + "error": "KCHVM0015E",
> "type": [
> {
> "type": "string",
> @@ -27,22 +31,26 @@
> "properties": {
> "storagepools_create": {
> "type": "object",
> + "error": "KCHPOOL0026E",
> "properties": {
> "name": {
> "description": "The name of the Storage Pool",
> "type": "string",
> "minLength": 1,
> - "required": true
> + "required": true,
> + "error": "KCHPOOL0016E"
> },
> "type": {
> "description": "The type of the defined Storage Pool",
> "type": "string",
> "pattern": "^dir|netfs|logical|kimchi-iso$",
> - "required": true
> + "required": true,
> + "error": "KCHPOOL0017E"
> },
> "path": {
> "description": "The path of the defined Storage Pool",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0018E"
> },
> "source": {
> "description": "Dictionary containing source information of the pool",
> @@ -50,31 +58,37 @@
> "properties": {
> "host": {
> "description": "IP or hostname of server for a pool backed from a remote host",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0019E"
> },
> "path": {
> "description": "Export path on NFS server for NFS pool",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0018E"
> },
> "devices": {
> "description": "Array of devices to be used in the Storage Pool",
> "type": "array",
> "minItems": 1,
> "uniqueItems": true,
> + "error": "KCHPOOL0021E",
> "items": {
> "description": "Full path of the block device node",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0020E"
> }
> },
> "target": {
> "description": "Target IQN of an iSCSI pool",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0022E"
> },
> "port": {
> "description": "Listening port of a remote storage server",
> "type": "integer",
> "minimum": 1,
> - "maximum": 65535
> + "maximum": 65535,
> + "error": "KCHPOOL0023E"
> },
> "auth": {
> "description": "Storage back-end authentication information",
> @@ -82,11 +96,13 @@
> "properties": {
> "username": {
> "description": "Login username of the iSCSI target",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0024E"
> },
> "password": {
> "description": "Login password of the iSCSI target",
> - "type": "string"
> + "type": "string",
> + "error": "KCHPOOL0025E"
> }
> }
> }
> @@ -96,21 +112,25 @@
> },
> "vms_create": {
> "type": "object",
> + "error": "KCHVM0016E",
> "properties": {
> "name": {
> "description": "The name of the new VM",
> - "type": "string"
> + "type": "string",
> + "error": "KCHVM0011E"
> },
> "template": {
> "description": "The URI of a template to use when building a VM",
> "type": "string",
> "pattern": "^/templates/[^/]+/?$",
> - "required": true
> + "required": true,
> + "error": "KCHVM0012E"
> },
> "storagepool": {
> "description": "Assign a specefic Storage Pool to the new VM",
> "type": "string",
> - "pattern": "^/storagepools/[^/]+/?$"
> + "pattern": "^/storagepools/[^/]+/?$",
> + "error": "KCHVM0013E"
> },
> "graphics": { "$ref": "#/kimchitype/graphics" }
> }
> @@ -121,101 +141,120 @@
> "name": {
> "description": "New name of VM",
> "type": "string",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHVM0011E"
> }
> }
> },
> "networks_create": {
> "type": "object",
> + "error": "KCHNET0016E",
> "properties": {
> "name": {
> "description": "The name of the new network",
> "type": "string",
> "minLength": 1,
> - "required": true
> + "required": true,
> + "error": "KCHNET0011E"
> },
> "connection": {
> "description": "Specifies how this network should be connected to the other networks",
> "type": "string",
> "pattern": "^isolated|nat|bridge$",
> - "required": true
> + "required": true,
> + "error": "KCHNET0012E"
> },
> "subnet": {
> "description": "Network segment in slash-separated format with ip address and prefix or netmask",
> - "type": "string"
> + "type": "string",
> + "error": "KCHNET0013E"
> },
> "interface": {
> "description": "The name of a network interface on the host",
> - "type": "string"
> + "type": "string",
> + "error": "KCHNET0014E"
> },
> "vlan_id": {
> "description": "Network's VLAN ID",
> "type": "integer",
> "maximum": 4094,
> - "minimum": 1
> + "minimum": 1,
> + "error": "KCHNET0015E"
> }
> }
> },
> "vmifaces_create": {
> "type": "object",
> + "error": "KCHVMIF0007E",
> "properties": {
> "type": {
> "description": "The type of VM network interface that libvirt supports",
> "type": "string",
> "pattern": "^network$",
> - "required": true
> + "required": true,
> + "error": "KCHVMIF0004E"
> },
> "network": {
> "description": "the name of one available network",
> "minLength": 1,
> - "type": "string"
> + "type": "string",
> + "error": "KCHVMIF0005E"
> },
> "model": {
> "description": "model of emulated network interface card",
> "type": "string",
> - "pattern": "^ne2k_pci|i82551|i82557b|i82559er|rtl8139|e1000|pcnet|virtio$"
> + "pattern": "^ne2k_pci|i82551|i82557b|i82559er|rtl8139|e1000|pcnet|virtio$",
> + "error": "KCHVMIF0006E"
> }
> }
> },
> "templates_create": {
> "type": "object",
> + "error": "KCHTMPL0016E",
> "properties": {
> "name": {
> "description": "The name of the template",
> "type": "string",
> "pattern": "^[^ ]+( +[^ ]+)*$",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHTMPL0008E"
> },
> "icon": {
> "description": "The template icon path",
> "type": "string",
> - "pattern": "^images/"
> + "pattern": "^images/",
> + "error": "KCHTMPL0009E"
> },
> "os_distro": {
> "description": "Distribution name of the Operating System",
> "type": "string",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHTMPL0010E"
> },
> "os_version": {
> "description": "Version of the Operating System",
> "type": "string",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHTMPL0011E"
> },
> "cpus": {
> "description": "Number of CPUs for the template",
> "type": "integer",
> - "minimum": 1
> + "minimum": 1,
> + "error": "KCHTMPL0012E"
> },
> "memory": {
> "description": "Memory (MB) for the template",
> "type": "integer",
> - "minimum": 512
> + "minimum": 512,
> + "error": "KCHTMPL0013E"
> },
> "cdrom": {
> "description": "Path for cdrom",
> "type": "string",
> "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$",
> - "required": true
> + "required": true,
> + "error": "KCHTMPL0014E"
> },
> "disks": {
> "description": "List of disks",
> @@ -241,13 +280,15 @@
> "storagepool": {
> "description": "Location of the storage pool",
> "type": "string",
> - "pattern": "^/storagepools/[^/]+/?$"
> + "pattern": "^/storagepools/[^/]+/?$",
> + "error": "KCHTMPL0015E"
> },
> "networks": {
> "description": "list of which networks will be assigned to the new VM.",
> "type": "array",
> "items": { "type": "string" },
> - "uniqueItems": true
> + "uniqueItems": true,
> + "error": "KCHTMPL0017E"
> },
> "folder": {
> "description": "Folder",
> @@ -256,7 +297,8 @@
> },
> "graphics": { "$ref": "#/kimchitype/graphics" }
> },
> - "additionalProperties": false
> + "additionalProperties": false,
> + "error": "KCHAPI0001E"
> },
> "storageservers_get_list": {
> "type": "object",
> @@ -267,7 +309,8 @@
> "pattern": "^netfs$"
> }
> },
> - "additionalProperties": false
> + "additionalProperties": false,
> + "error": "KCHAPI0001E"
> },
> "storagetargets_get_list": {
> "type": "object",
> @@ -278,7 +321,8 @@
> "pattern": "^netfs$"
> }
> },
> - "additionalProperties": false
> + "additionalProperties": false,
> + "error": "KCHAPI0001E"
> },
> "template_update": {
> "type": "object",
> @@ -287,37 +331,44 @@
> "description": "The name of the template",
> "type": "string",
> "pattern": "^[^ ]+( +[^ ]+)*$",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHTMPL0008E"
> },
> "icon": {
> "description": "The template icon path",
> "type": "string",
> - "pattern": "^images/"
> + "pattern": "^images/",
> + "error": "KCHTMPL0009E"
> },
> "os_distro": {
> "description": "Distribution name of the Operating System",
> "type": "string",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHTMPL0010E"
> },
> "os_version": {
> "description": "Version of the Operating System",
> "type": "string",
> - "minLength": 1
> + "minLength": 1,
> + "error": "KCHTMPL0011E"
> },
> "cpus": {
> "description": "Number of CPUs for the template",
> "type": "integer",
> - "minimum": 1
> + "minimum": 1,
> + "error": "KCHTMPL0012E"
> },
> "memory": {
> "description": "Memory (MB) for the template",
> "type": "integer",
> - "minimum": 512
> + "minimum": 512,
> + "error": "KCHTMPL0013E"
> },
> "cdrom": {
> "description": "Path for cdrom",
> "type": "string",
> - "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$"
> + "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$",
> + "error": "KCHTMPL0014E"
> },
> "disks": {
> "description": "List of disks",
> @@ -343,13 +394,15 @@
> "storagepool": {
> "description": "Location of the storage pool",
> "type": "string",
> - "pattern": "^/storagepools/[^/]+/?$"
> + "pattern": "^/storagepools/[^/]+/?$",
> + "error": "KCHTMPL0015E"
> },
> "networks": {
> "description": "list of which networks will be assigned to the new VM.",
> "type": "array",
> "items": { "type": "string" },
> - "uniqueItems": true
> + "uniqueItems": true,
> + "error": "KCHTMPL0017E"
> },
> "folder": {
> "description": "Folder",
> @@ -358,7 +411,8 @@
> },
> "graphics": { "$ref": "#/kimchitype/graphics" }
> },
> - "additionalProperties": false
> + "additionalProperties": false,
> + "error": "KCHAPI0001E"
> }
> }
> }
More information about the Kimchi-devel
mailing list