Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[LIB-800] - Add config validation before sending request to API.
  • Loading branch information
ilu2112 committed Jul 7, 2016
commit eda493e23c8a26913ea47435e56d46105311d3a0
12 changes: 12 additions & 0 deletions syncano/models/instances.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import json

import six
from syncano.exceptions import SyncanoValueError

from . import fields
from .base import Model
Expand Down Expand Up @@ -89,6 +92,15 @@ def get_config(self):
return connection.request(http_method, endpoint)['config']

def set_config(self, config):
Copy link
Copy Markdown
Contributor

@opalczynski opalczynski Jul 7, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe check here if this is a valid dict:

        if isinstance(config, six.string_types):
            try:
                config = json.loads(config)
            except (ValueError, TypeError):
                raise SyncanoValueError('...')

        if not isinstance(config, dict):
            raise SyncanoValueError('...')

if isinstance(config, six.string_types):
try:
config = json.loads(config)
except (ValueError, TypeError):
raise SyncanoValueError('Config string is not a parsable JSON.')

if not isinstance(config, dict):
raise SyncanoValueError('Retrieved Config is not a valid dict object.')

properties = self.get_endpoint_data()
http_method = 'PUT'
endpoint = self._meta.resolve_endpoint('config', properties, http_method)
Expand Down
6 changes: 4 additions & 2 deletions tests/integration_test_snippet_config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-

from syncano.exceptions import SyncanoRequestError
from syncano.exceptions import SyncanoValueError
from tests.integration_test import InstanceMixin, IntegrationTest


Expand All @@ -22,5 +22,7 @@ def test_update_config(self):
self.assertDictContainsSubset(config, saved_config, 'Retrieved config should be equal to saved config.')

def test_update_invalid_config(self):
with self.assertRaises(SyncanoRequestError):
with self.assertRaises(SyncanoValueError):
self.instance.set_config('invalid config')
with self.assertRaises(SyncanoValueError):
self.instance.set_config([1, 2, 3])