FIX other issues for Python 2/3 compatible code
change func.func_name to func.__name__ change itertools.izip_longest to six.moves.zip_longest change self.assertRaisesRegexp(xxx) to six.assertRaisesRegex(self,xx) use absolute import path Story: 2004585 Task: 28447 Change-Id: I2b4814fb6f96feb90ad0a081ffcab5c72160b0f7 Signed-off-by: Sun Austin <austin.sun@intel.com>
This commit is contained in:
parent
5e9dc48384
commit
6022c0420d
|
@ -21,6 +21,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
|
import six.moves
|
||||||
|
|
||||||
from dcmanager.common import consts
|
from dcmanager.common import consts
|
||||||
from dcmanager.common import exceptions
|
from dcmanager.common import exceptions
|
||||||
|
@ -35,7 +36,7 @@ def get_import_path(cls):
|
||||||
# Returns a iterator of tuples containing batch_size number of objects in each
|
# Returns a iterator of tuples containing batch_size number of objects in each
|
||||||
def get_batch_projects(batch_size, project_list, fillvalue=None):
|
def get_batch_projects(batch_size, project_list, fillvalue=None):
|
||||||
args = [iter(project_list)] * batch_size
|
args = [iter(project_list)] * batch_size
|
||||||
return itertools.izip_longest(fillvalue=fillvalue, *args)
|
return six.moves.zip_longest(fillvalue=fillvalue, *args)
|
||||||
|
|
||||||
|
|
||||||
# to do validate the quota limits
|
# to do validate the quota limits
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
import mock
|
import mock
|
||||||
|
import six
|
||||||
import webtest
|
import webtest
|
||||||
|
|
||||||
from dcmanager.api.controllers.v1 import subclouds
|
from dcmanager.api.controllers.v1 import subclouds
|
||||||
|
@ -96,9 +97,9 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
'192.168.204.2',
|
'192.168.204.2',
|
||||||
'192.168.204.100')
|
'192.168.204.100')
|
||||||
mock_get_management_address_pool.return_value = management_address_pool
|
mock_get_management_address_pool.return_value = management_address_pool
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(subclouds.SubcloudsController,
|
@mock.patch.object(subclouds.SubcloudsController,
|
||||||
'_get_management_address_pool')
|
'_get_management_address_pool')
|
||||||
|
@ -111,18 +112,18 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
'192.168.204.2',
|
'192.168.204.2',
|
||||||
'192.168.204.254')
|
'192.168.204.254')
|
||||||
mock_get_management_address_pool.return_value = management_address_pool
|
mock_get_management_address_pool.return_value = management_address_pool
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
def test_post_subcloud_bad_subnet(self, mock_db_api, mock_rpc_client):
|
def test_post_subcloud_bad_subnet(self, mock_db_api, mock_rpc_client):
|
||||||
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
||||||
data["management-subnet"] = "192.168.101.0/32"
|
data["management-subnet"] = "192.168.101.0/32"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
|
@ -131,9 +132,9 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
data["management-subnet"] = "192.168.101.0/24"
|
data["management-subnet"] = "192.168.101.0/24"
|
||||||
data["management-start-ip"] = "192.168.100.2"
|
data["management-start-ip"] = "192.168.100.2"
|
||||||
data["management-end-ip"] = "192.168.100.50"
|
data["management-end-ip"] = "192.168.100.50"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
|
@ -141,9 +142,9 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
||||||
data["management-start-ip"] = "192.168.101.2"
|
data["management-start-ip"] = "192.168.101.2"
|
||||||
data["management-end-ip"] = "192.168.100.100"
|
data["management-end-ip"] = "192.168.100.100"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
|
@ -151,9 +152,9 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
||||||
data["management-start-ip"] = "192.168.101.2"
|
data["management-start-ip"] = "192.168.101.2"
|
||||||
data["management-end-ip"] = "192.168.101.4"
|
data["management-end-ip"] = "192.168.101.4"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
|
@ -161,31 +162,31 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
data = copy.copy(FAKE_SUBCLOUD_DATA)
|
||||||
data["management-start-ip"] = "192.168.101.20"
|
data["management-start-ip"] = "192.168.101.20"
|
||||||
data["management-end-ip"] = "192.168.101.4"
|
data["management-end-ip"] = "192.168.101.4"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_post_subcloud_wrong_url(self, mock_rpc_client):
|
def test_post_subcloud_wrong_url(self, mock_rpc_client):
|
||||||
data = FAKE_SUBCLOUD_DATA
|
data = FAKE_SUBCLOUD_DATA
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "404 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "404 *",
|
||||||
self.app.post_json, WRONG_URL,
|
self.app.post_json, WRONG_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_post_no_body(self, mock_rpc_client):
|
def test_post_no_body(self, mock_rpc_client):
|
||||||
data = {}
|
data = {}
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_post_no_name(self, mock_rpc_client):
|
def test_post_no_name(self, mock_rpc_client):
|
||||||
data = dict(FAKE_SUBCLOUD_DATA)
|
data = dict(FAKE_SUBCLOUD_DATA)
|
||||||
del data['name']
|
del data['name']
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(subclouds.SubcloudsController,
|
@mock.patch.object(subclouds.SubcloudsController,
|
||||||
'_create_subcloud_config_file')
|
'_create_subcloud_config_file')
|
||||||
|
@ -212,9 +213,9 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_delete_wrong_request(self, mock_rpc_client):
|
def test_delete_wrong_request(self, mock_rpc_client):
|
||||||
delete_url = WRONG_URL + '/' + FAKE_ID
|
delete_url = WRONG_URL + '/' + FAKE_ID
|
||||||
self.assertRaisesRegex(webtest.app.AppError, "404 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "404 *",
|
||||||
self.app.delete_json, delete_url,
|
self.app.delete_json, delete_url,
|
||||||
headers=FAKE_HEADERS)
|
headers=FAKE_HEADERS)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
|
@ -227,9 +228,9 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
def test_get_wrong_request(self, mock_db_api, mock_rpc_client):
|
def test_get_wrong_request(self, mock_db_api, mock_rpc_client):
|
||||||
get_url = WRONG_URL + '/' + FAKE_ID
|
get_url = WRONG_URL + '/' + FAKE_ID
|
||||||
self.assertRaisesRegex(webtest.app.AppError, "404 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "404 *",
|
||||||
self.app.get, get_url,
|
self.app.get, get_url,
|
||||||
headers=FAKE_HEADERS)
|
headers=FAKE_HEADERS)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
|
@ -258,14 +259,14 @@ class TestSubclouds(testroot.DCManagerApiTest):
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_patch_subcloud_no_body(self, mock_rpc_client):
|
def test_patch_subcloud_no_body(self, mock_rpc_client):
|
||||||
data = {}
|
data = {}
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.patch_json, FAKE_URL + '/' + FAKE_ID,
|
self.app.patch_json, FAKE_URL + '/' + FAKE_ID,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(subclouds, 'db_api')
|
@mock.patch.object(subclouds, 'db_api')
|
||||||
def test_patch_subcloud_bad_status(self, mock_db_api, mock_rpc_client):
|
def test_patch_subcloud_bad_status(self, mock_db_api, mock_rpc_client):
|
||||||
data = {'management-state': 'bad-status'}
|
data = {'management-state': 'bad-status'}
|
||||||
self.assertRaisesRegex(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.patch_json, FAKE_URL + '/' + FAKE_ID,
|
self.app.patch_json, FAKE_URL + '/' + FAKE_ID,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
import mock
|
import mock
|
||||||
|
import six
|
||||||
import webtest
|
import webtest
|
||||||
|
|
||||||
from dcmanager.api.controllers.v1 import sw_update_strategy
|
from dcmanager.api.controllers.v1 import sw_update_strategy
|
||||||
|
@ -75,18 +76,18 @@ class TestSwUpdateStrategy(testroot.DCManagerApiTest):
|
||||||
def test_post_sw_update_bad_type(self, mock_db_api, mock_rpc_client):
|
def test_post_sw_update_bad_type(self, mock_db_api, mock_rpc_client):
|
||||||
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
||||||
data["type"] = "bad type"
|
data["type"] = "bad type"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(sw_update_strategy, 'db_api')
|
@mock.patch.object(sw_update_strategy, 'db_api')
|
||||||
def test_post_sw_update_bad_apply_type(self, mock_db_api, mock_rpc_client):
|
def test_post_sw_update_bad_apply_type(self, mock_db_api, mock_rpc_client):
|
||||||
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
||||||
data["subcloud-apply-type"] = "bad type"
|
data["subcloud-apply-type"] = "bad type"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(sw_update_strategy, 'db_api')
|
@mock.patch.object(sw_update_strategy, 'db_api')
|
||||||
|
@ -94,24 +95,24 @@ class TestSwUpdateStrategy(testroot.DCManagerApiTest):
|
||||||
self, mock_db_api, mock_rpc_client):
|
self, mock_db_api, mock_rpc_client):
|
||||||
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
||||||
data["max-parallel-subclouds"] = "not an integer"
|
data["max-parallel-subclouds"] = "not an integer"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_post_no_body(self, mock_rpc_client):
|
def test_post_no_body(self, mock_rpc_client):
|
||||||
data = {}
|
data = {}
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
def test_post_no_type(self, mock_rpc_client):
|
def test_post_no_type(self, mock_rpc_client):
|
||||||
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
data = copy.copy(FAKE_SW_UPDATE_DATA)
|
||||||
del data['type']
|
del data['type']
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(sw_update_strategy, 'db_api')
|
@mock.patch.object(sw_update_strategy, 'db_api')
|
||||||
|
@ -140,9 +141,9 @@ class TestSwUpdateStrategy(testroot.DCManagerApiTest):
|
||||||
def test_post_sw_update_bad_action(self, mock_db_api, mock_rpc_client):
|
def test_post_sw_update_bad_action(self, mock_db_api, mock_rpc_client):
|
||||||
data = copy.copy(FAKE_SW_UPDATE_APPLY_DATA)
|
data = copy.copy(FAKE_SW_UPDATE_APPLY_DATA)
|
||||||
data["action"] = "bad action"
|
data["action"] = "bad action"
|
||||||
self.assertRaisesRegexp(webtest.app.AppError, "400 *",
|
six.assertRaisesRegex(self, webtest.app.AppError, "400 *",
|
||||||
self.app.post_json, FAKE_URL,
|
self.app.post_json, FAKE_URL,
|
||||||
headers=FAKE_HEADERS, params=data)
|
headers=FAKE_HEADERS, params=data)
|
||||||
|
|
||||||
@mock.patch.object(rpc_client, 'ManagerClient')
|
@mock.patch.object(rpc_client, 'ManagerClient')
|
||||||
@mock.patch.object(sw_update_strategy, 'db_api')
|
@mock.patch.object(sw_update_strategy, 'db_api')
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
|
import six.moves
|
||||||
|
|
||||||
from dcorch.common import consts
|
from dcorch.common import consts
|
||||||
from dcorch.common import exceptions
|
from dcorch.common import exceptions
|
||||||
|
@ -34,7 +35,7 @@ def get_import_path(cls):
|
||||||
# Returns a iterator of tuples containing batch_size number of objects in each
|
# Returns a iterator of tuples containing batch_size number of objects in each
|
||||||
def get_batch_projects(batch_size, project_list, fillvalue=None):
|
def get_batch_projects(batch_size, project_list, fillvalue=None):
|
||||||
args = [iter(project_list)] * batch_size
|
args = [iter(project_list)] * batch_size
|
||||||
return itertools.izip_longest(fillvalue=fillvalue, *args)
|
return six.moves.zip_longest(fillvalue=fillvalue, *args)
|
||||||
|
|
||||||
|
|
||||||
# to do validate the quota limits
|
# to do validate the quota limits
|
||||||
|
|
|
@ -220,7 +220,7 @@ class SyncThread(object):
|
||||||
sync_request.orch_job.resource_id)
|
sync_request.orch_job.resource_id)
|
||||||
handler = self.sync_handler_map[rsrc.resource_type]
|
handler = self.sync_handler_map[rsrc.resource_type]
|
||||||
LOG.info("Invoking {} for {} [{}]".format(
|
LOG.info("Invoking {} for {} [{}]".format(
|
||||||
handler.func_name, rsrc.resource_type,
|
handler.__name__, rsrc.resource_type,
|
||||||
sync_request.orch_job.operation_type), extra=self.log_extra)
|
sync_request.orch_job.operation_type), extra=self.log_extra)
|
||||||
handler(sync_request, rsrc)
|
handler(sync_request, rsrc)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue