Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/lib/task_scheduler.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/lib/task_scheduler.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/lib/task_scheduler.py	(working copy)
@@ -25,7 +25,7 @@
     TarFiles
 from cm.lib.postgres_db import DB
 from djproject.settings import FILE_UPLOAD_DIR, CONFIG_UPLOAD_STORE_DIR
-from hive.imports.model import *
+from hive.model.base import ANModel
 from hive.model.loading import get_model
 from hive.model.query import mark_expire_all
 from hive.notification import send_notification
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/__init__.py	(working copy)
@@ -1,11 +1,11 @@
 verbose_name = u'CM Root'
-child_seq = ['system']
+child_seq = ['device_mgmt', 'system']
 from .device_mgmt import *
 from .audit import *
-from configuration import *
-from ha import *
-from monitor import *
-from network import *
-from system import *
-from tasking import *
-from virtualization import *
+from .configuration import *
+from .ha import *
+from .monitor import *
+from .network import *
+from .system import *
+from .tasking import *
+from .virtualization import *
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/audit/user/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/audit/user/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/audit/user/__init__.py	(working copy)
@@ -10,7 +10,7 @@
 from cm.lib.postgres_db import DB
 from cm.models.audit.user.user_body import *
 from djproject.an_settings import *
-from hive.imports.model import *
+from hive.model.base import ANModel
 from hive.utils import get_device_type
 from hive.model.base import ANModel
 from hive.model.fields.builtin import *
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/config_file/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/config_file/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/config_file/__init__.py	(working copy)
@@ -16,7 +16,7 @@
 from cm.lib.postgres_db import DB
 from djproject.an_settings import *
 from djproject.settings import CONFIG_UPLOAD_STORE_DIR
-from hive.imports.model import *
+from hive.model.base import ANModel
 from hive.utils import get_current_session
 from hive.model.base import *
 from hive.model.fields.builtin import *
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/update/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/update/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/update/__init__.py	(working copy)
@@ -6,7 +6,6 @@
 
 from cm.lib.postgres_db import DB
 from djproject.settings import FILE_UPLOAD_DIR
-from hive.imports.model import *
 from hive.model.base import *
 from hive.model.fields.builtin import *
 from hive.model.action import Action
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/__init__.py	(working copy)
@@ -6,10 +6,9 @@
 from cm.lib.parse_configfile import parse_specific_config, \
     change_config_file, INSERT, DELETE, add_vsite_to_config, remove_vsite_from_config
 from cm.lib.postgres_db import DB
-from hive.imports.model import *
 from hive.model.legacycli import MATCHALL
 from hive.utils import get_current_session
-from hive.model.base import *
+from hive.model.base import ANModel
 from hive.model.fields.builtin import *
 from hive.model.action import Action
 from hive.model.fields import *
\ No newline at end of file
@@ -681,7 +680,7 @@
                     insert_or_delete = DELETE
 
                 # get netpool iprange
-                reg_str = 'vpn netpool iprange dynamic "%s" (?P<first_ip>[0-9|\.|:|\w]+) (?P<last_ip>[0-9|\.|:|\w]+) "(?P<unit_name>.*?)"' % instance.name
+                reg_str = r'vpn netpool iprange dynamic "%s" (?P<first_ip>[0-9|\.|:|\w]+) (?P<last_ip>[0-9|\.|:|\w]+) "(?P<unit_name>.*?)"' % instance.name
                 rtn_iprange = parse_specific_config(pk_list, '#VPN configuration\n', '#aaa configuration\n', reg_str,
                                                     MATCHALL)
                 for item in rtn_iprange[0]:
\ No newline at end of file
@@ -1175,3 +1174,8 @@
             vs_file.write(ret)
             vs_file.close()
             return
+
+
+from .vpn import *
+from .role import *
+from .acl import *
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/acl/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/acl/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/acl/__init__.py	(working copy)
@@ -9,10 +9,8 @@
 from cm.lib.parse_configfile import parse_specific_config, delete_specific_info_from_config, \
     sync_vsite_to_config
 from cm.lib.postgres_db import DB
-from cm.models.configuration.vsite_config import vs_insert_delete, CM_check
-from hive.imports.model import *
 from hive.model.legacycli import MATCHALL
-from hive.model.base import *
+from hive.model.base import ANModel
 from hive.model.fields.builtin import *
 from hive.model.action import Action
 from hive.model.fields import *
\ No newline at end of file
@@ -51,6 +49,7 @@
             return QuerySet(self._model, rtn[0])
 
         def _insert(self, instance):
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'acl resourcegroup %s "%s" "%s"' % (instance.group_type, instance.name, instance.description)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#acl configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -58,6 +57,7 @@
             return
 
         def _delete_instance(self, instance):
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'acl resourcegroup %s "%s" "%s"' % (instance.group_type, instance.name, instance.description)
             cli_str = 'no acl resourcegroup %s' % instance.name
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -108,6 +108,7 @@
             return QuerySet(self._model, rtn[0])
 
         def _insert(self, instance):
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'acl resource "%s" "%s"' % (instance.group_name, instance.resource)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#acl configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -116,6 +117,7 @@
 
         def _delete_instance(self, instance):
             # no acl resource aaa_fileshare "\\10.10.10.1\directory"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'acl resource "%s" "%s"' % (instance.group_name, instance.resource)
             cli_str = 'no acl resource "%s" "%s"' % (instance.group_name, instance.resource)
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -160,6 +162,7 @@
             return QuerySet(self._model, rtn[0])
 
         def _insert(self, instance):
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'acl rule "%s" "%s" "%s" %d "%s"' % (instance.target_name, instance.group_name, instance.action,
                                                            instance.priority, instance.target_type)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#acl configuration\n', INSERT)
\ No newline at end of file
@@ -169,6 +172,7 @@
 
         def _delete_instance(self, instance):
             # no acl rule bbb bbb_fileshare R
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'acl rule "%s" "%s" "%s" %d "%s"' % (instance.target_name, instance.group_name,
                                                                 instance.action, int(instance.priority),
                                                                 instance.target_type)
\ No newline at end of file
@@ -200,7 +204,7 @@
         forever = False
         instance_mul = '1..*'
         option_fields = (
-            # DynamicMultiEnumField(name='device', verbose_name='devices', 
+            # DynamicMultiEnumField(name='device', verbose_name='devices',
             #     values=['__value:---Please Select---', '__field:cm.device_mgmt.device.Device.name']),
             DynamicMultiEnumField(verbose_name='service', name='service', values=['__value:---Please Select---',
                                                                                   '__field:cm.device_mgmt.service.Services.name']),
\ No newline at end of file
@@ -346,6 +350,7 @@
             return
 
         def _perform_Check(self, options):
+            from cm.models.configuration.vsite_config import CM_check
             device_list = []
             service_list = options['service']
             db = DB.get_connected_db()
\ No newline at end of file
@@ -386,4 +391,4 @@
                 pk_dict = {'table': 'cm_acl_resource', 'id': options['__pk_list'][0]['id']}
                 update_cm_role_devicelist(options['device_list'].split(','), pk_dict, options['option'], None)
 
-            return
+            return
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/role/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/role/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/role/__init__.py	(working copy)
@@ -8,10 +8,8 @@
 from cm.lib.parse_configfile import parse_specific_config, delete_specific_info_from_config, \
     sync_vsite_to_config
 from cm.lib.postgres_db import DB
-from cm.models.configuration.vsite_config import vs_insert_delete, CM_check
-from hive.imports.model import *
 from hive.model.legacycli import MATCHALL
-from hive.model.base import *
+from hive.model.base import ANModel
 from hive.model.fields.builtin import *
 from hive.model.action import Action
 from hive.model.fields import *
\ No newline at end of file
@@ -56,6 +54,7 @@
 
         def _insert(self, instance):
             # role name role_test role_test 1
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'role name "%s" "%s" %d' % (instance.name, instance.description, instance.priority)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#role configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -64,6 +63,7 @@
 
         def _delete_instance(self, instance):
             # no role name role_test
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'role name "%s" "%s" %d' % (instance.name, instance.description, int(instance.priority))
             cli_str = 'no role name "%s"' % (instance.name)
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -122,6 +122,7 @@
 
         def _insert(self, instance):
             # role qualification "bug_role" "time" "time"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'role qualification "%s" "%s" "%s"' % (instance.role_name, instance.name, instance.description)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#role configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -130,6 +131,7 @@
 
         def _delete_instance(self, instance):
             # no role qualification "bug_role" "time"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'role qualification "%s" "%s" "%s"' % (instance.role_name, instance.name,
                                                                   instance.description)
             cli_str = 'no role qualification "%s" "%s"' % (instance.role_name, instance.name)
\ No newline at end of file
@@ -179,6 +181,7 @@
 
         def _insert(self, instance):
             # role condition "bug_role" "year" "LOGINYEAR IS 2016,2017"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'role condition "%s" "%s" "%s"' % (instance.role_name, instance.qualification_name,
                                                          instance.content)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#role configuration\n', INSERT)
\ No newline at end of file
@@ -188,6 +191,7 @@
 
         def _delete_instance(self, instance):
             # no role condition "bug_role" "year" "LOGINYEAR IS 2016,2017"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'role condition "%s" "%s" "%s"' % (instance.role_name, instance.qualification_name,
                                                               instance.content)
             cli_str = 'no role condition "%s" "%s" "%s"' % (instance.role_name, instance.qualification_name,
\ No newline at end of file
@@ -227,6 +231,7 @@
 
         def _insert(self, instance):
             # role resource netpool "bug_role" "bug_netpool"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'role resource netpool "%s" "%s"' % (instance.role_name, instance.netpool_name)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#role configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -235,6 +240,7 @@
 
         def _delete_instance(self, instance):
             # no role resource netpool "bug_role" "bug_netpool"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'role resource netpool "%s" "%s"' % (instance.role_name, instance.netpool_name)
             cli_str = 'no role resource netpool "%s" "%s"' % (instance.role_name, instance.netpool_name)
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -272,6 +278,7 @@
 
         def _insert(self, instance):
             # role resource vpnresourcegroup "bug_role" "bug_vpn_group"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'role resource vpnresourcegroup "%s" "%s"' % (instance.role_name, instance.vpn_group_name)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#role configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -280,6 +287,7 @@
 
         def _delete_instance(self, instance):
             # no role resource vpnresourcegroup "bug_role" "bug_vpn_group"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'role resource vpnresourcegroup "%s" "%s"' % (instance.role_name, instance.vpn_group_name)
             cli_str = 'no role resource vpnresourcegroup "%s" "%s"' % (instance.role_name, instance.vpn_group_name)
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -309,7 +317,7 @@
         forever = False
         instance_mul = '1..*'
         option_fields = (
-            # DynamicMultiEnumField(name='device', verbose_name='devices', 
+            # DynamicMultiEnumField(name='device', verbose_name='devices',
             #     values=['__value:---Please Select---', '__field:cm.device_mgmt.device.Device.name']),
             DynamicMultiEnumField(verbose_name='service', name='service', values=['__value:---Please Select---',
                                                                                   '__field:cm.device_mgmt.service.Services.name']),
\ No newline at end of file
@@ -466,6 +474,7 @@
             return
 
         def _perform_Check(self, options):
+            from cm.models.configuration.vsite_config import CM_check
             device_list = []
             service_list = options['service']
             db = DB.get_connected_db()
\ No newline at end of file
@@ -504,4 +513,4 @@
                 pk_dict = {'table': 'cm_role', 'name': options['__pk_list'][0]['name']}
                 update_cm_role_devicelist(options['device_list'].split(','), pk_dict, options['option'], None)
 
-            return
+            return
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/vpn/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/vpn/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/configuration/vsite_config/vpn/__init__.py	(working copy)
@@ -9,10 +9,12 @@
 from cm.lib.postgres_db import DB
 from cm.lib.task_scheduler import sync_to_device, add_job_into_database, remove_job_from_database, \
     update_cm_role_devicelist
-from cm.models.configuration.vsite_config import vs_insert_delete, CM_check
-from cm.models.tasking import GLOBAL_TASK
-from hive.imports.model import *
 from hive.model.legacycli import MATCHALL
+from hive.model.base import ANModel
+from hive.model.fields.builtin import AssoField2, CharField, EnumField, IPAddressField, BooleanField, Int32Field, DynamicMultiEnumField, DateTimeField
+from hive.model.fields import ValueCondition
+from hive.model.manager import CLIManager
+from hive.model.action import Action
 
 __ = _
 
\ No newline at end of file
@@ -54,6 +56,7 @@
 
         def _insert(self, instance):
             # vpn resource group network "bug_vpn_group" "10.8.7.86/255.255.255.255:0-65535" 1
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'vpn resource groupitem network "%s" "%s" %d' % (instance.vpn_group_name, instance.net_resource,
                                                                        instance.net_type)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#VPN configuration\n', INSERT)
\ No newline at end of file
@@ -63,6 +66,7 @@
 
         def _delete_instance(self, instance):
             # no vpn resource group network "bug_vpn_group" "10.8.7.86/255.255.255.255:0-65535"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'vpn resource groupitem network "%s" "%s" %d' % (instance.vpn_group_name,
                                                                             instance.net_resource,
                                                                             int(instance.net_type))
\ No newline at end of file
@@ -111,6 +115,7 @@
 
         def _insert(self, instance):
             # vpn resource groupexcludeditem network "bug_vpn_group" "10.8.7.86/255.255.255.255:0-65535" 1
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'vpn resource groupexcludeditem network "%s" "%s" %d' % (instance.vpn_group_name,
                                                                                instance.net_resource, instance.net_type)
             ret = vs_insert_delete(instance.asso[0], cli_str, '#VPN configuration\n', INSERT)
\ No newline at end of file
@@ -120,6 +125,7 @@
 
         def _delete_instance(self, instance):
             # no vpn resource groupexcludeditem network "bug_vpn_group" "10.8.7.86/255.255.255.255:0-65535"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'vpn resource groupexcludeditem network "%s" "%s" %d' % (instance.vpn_group_name,
                                                                                     instance.net_resource,
                                                                                     int(instance.net_type))
\ No newline at end of file
@@ -142,7 +148,7 @@
 
     # asso_net_item = AssoField2(verbose_name=_('Network-type VPN Resource Item'),
     #     tgt='configuration.vsite_config.vpn.NetGroupItem.asso', mul='1', pos='left', optional=True)
-    # asso_net_excluded_item = AssoField2(verbose_name=_('Network-type VPN Resource Item'), 
+    # asso_net_excluded_item = AssoField2(verbose_name=_('Network-type VPN Resource Item'),
     #     tgt='configuration.vsite_config.vpn.NetGroupExcludedItem.asso', mul='1', pos='left', optional=True)
 
     class Meta:
\ No newline at end of file
@@ -162,6 +168,7 @@
 
         def _insert(self, instance):
             # vpn resource group "bug_vpn_group"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'vpn resource group "%s"' % instance.name
             ret = vs_insert_delete(instance.asso[0], cli_str, '#VPN configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -170,6 +177,7 @@
 
         def _delete_instance(self, instance):
             # no vpn resource group "bug_vpn_group"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'vpn resource group "%s"' % instance.name
             cli_str = 'no vpn resource group "%s"' % instance.name
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -215,7 +223,7 @@
         def _filter(self, filter_dict):
             asso_data = filter_dict['asso'][0]
             # asso_vs_info = asso_data['asso'][0]
-            reg_str = 'vpn netpool iprange dynamic "(?P<netpool_name>.*?)" (?P<first_ip>[0-9|\.|:|\w]+) (?P<last_ip>[0-9|\.|:|\w]+) "(?P<unit_name>.*?)"'
+            reg_str = r'vpn netpool iprange dynamic "%s" (?P<first_ip>[0-9|\.|:|\w]+) (?P<last_ip>[0-9|\.|:|\w]+) "(?P<unit_name>.*?)"' % instance.name
             rtn = parse_specific_config(asso_data, '#VPN configuration\n', '#aaa configuration\n', reg_str, MATCHALL)
             if type(rtn) == str:
                 raise ModelQueryException(CLICmdError(__(rtn)))
\ No newline at end of file
@@ -226,6 +234,7 @@
 
         def _insert(self, instance):
             # vpn netpool iprange dynamic "bug_netpool" 10.8.2.60 10.8.2.61 ""
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'vpn netpool iprange dynamic "%s" %s %s "%s"' % (instance.netpool_name,
                                                                        instance.first_ip.values()[0],
                                                                        instance.last_ip.values()[0], instance.unit_name)
\ No newline at end of file
@@ -236,6 +245,7 @@
 
         def _delete_instance(self, instance):
             # no netpool name "bug_netpool"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'vpn netpool iprange dynamic "%s" %s %s "%s"' % (instance.netpool_name,
                                                                             instance.first_ip.values()[0],
                                                                             instance.last_ip.values()[0],
\ No newline at end of file
@@ -261,7 +271,7 @@
     ]}
 
     # ip_range = FieldGroup(writable=False, verbose_name='IP Range', level=BASIC, editable=True, fields={
-    #         'asso_ip_address' : AssoField2(verbose_name=_('IP Address'), 
+    #         'asso_ip_address' : AssoField2(verbose_name=_('IP Address'),
     #             tgt='configuration.vsite_config.vpn.IPAddress.asso', mul='1', pos='left', optional=True),
     #     })
 
\ No newline at end of file
@@ -289,6 +299,7 @@
 
         def _insert(self, instance):
             # vpn netpool name "bug_netpool"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             cli_str = 'vpn netpool name "%s"' % instance.name
             ret = vs_insert_delete(instance.asso[0], cli_str, '#VPN configuration\n', INSERT)
             if ret:
\ No newline at end of file
@@ -302,6 +313,7 @@
 
         def _delete_instance(self, instance):
             # no netpool name "bug_netpool"
+            from cm.models.configuration.vsite_config import vs_insert_delete
             specific_str = 'vpn netpool name "%s"' % instance.name
             cli_str = 'no vpn netpool name "%s"' % instance.name
             ret = vs_insert_delete(instance.asso[0], cli_str, specific_str, DELETE)
\ No newline at end of file
@@ -353,7 +365,7 @@
         forever = False
         instance_mul = '1..*'
         option_fields = (
-            # DynamicMultiEnumField(name='device', verbose_name='devices', 
+            # DynamicMultiEnumField(name='device', verbose_name='devices',
             #     values=['__value:---Please Select---', '__field:cm.device_mgmt.device.Device.name']),
             DynamicMultiEnumField(verbose_name='service', name='service', values=['__value:---Please Select---',
                                                                                   '__field:cm.device_mgmt.service.Services.name']),
\ No newline at end of file
@@ -506,6 +518,7 @@
             return
 
         def _perform_Check(self, options):
+            from cm.models.configuration.vsite_config import CM_check
             device_list = []
             service_list = options['service']
             db = DB.get_connected_db()
\ No newline at end of file
@@ -556,4 +569,4 @@
                 pk_dict = {'table': 'cm_vpn_resource', 'id': options['__pk_list'][0]['id']}
                 update_cm_role_devicelist(options['device_list'].split(','), pk_dict, options['option'], None)
 
-            return
+            return
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/device_mgmt/device/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/device_mgmt/device/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/device_mgmt/device/__init__.py	(working copy)
@@ -22,7 +22,7 @@
 from cm.models.audit.user.user_body import body_login_detail, body_device_vsite
 from cm.models.system.license import check_license
 from djproject.an_settings import *
-from hive.imports.model import *
+from hive.model.base import ANModel
 from hive.model.loading import get_model
 from hive.model.query import mark_expire_all
 from hive.utils import get_device_type, standard_model_type
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/ha/ha_cluster/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/ha/ha_cluster/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/ha/ha_cluster/__init__.py	(working copy)
@@ -6,7 +6,7 @@
 from cm.lib.communication import send_https_rest_request, modify_url
 from cm.lib.postgres_db import DB
 from djproject.an_settings import *
-from hive.imports.model import *
+from hive.model.base import ANModel
 from hive.model.base import *
 from hive.model.fields.builtin import *
 from hive.model.fields import *
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/access.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/access.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/access.py	(working copy)
@@ -3,7 +3,6 @@
 from django.db.models.query import QuerySet
 from django.utils.translation import gettext_lazy as _
 
-from hive.imports.model import *
 from hive.model.base import ANModel
 from hive.model.fields.builtin import BooleanField, PortField, CLITextField, UnionField, GroupField, \
     ImportLocalFileField, URLField, TextField, EnumField, AssoField2, CharField
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/license.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/license.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/license.py	(working copy)
@@ -5,7 +5,6 @@
 
 from cm.lib.postgres_db import DB
 from hive.session import check_license_expire
-from hive.imports.model import *
 from hive.model.base import ANModel
 from hive.model.fields.builtin import IntegerField, PortField, CLITextField, UnionField, GroupField, ImportLocalFileField, URLField, TextField, EnumField, AssoField2, CharField
 from hive.model.manager import QueryingGroups, UpdatingFields, CLIManager
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/ntp.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/ntp.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/ntp.py	(working copy)
@@ -3,7 +3,6 @@
 
 import re
 
-from hive.imports.model import *
 from hive.model.action import Action
 from hive.model.base import ANModel
 from hive.model.fields.builtin import (BooleanField, Uint64Field, StorableField, IntegerField, IPAddressField,
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/time.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/time.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/time.py	(working copy)
@@ -3,7 +3,6 @@
 from django.db.models.query import QuerySet
 from django.utils.translation import gettext_lazy as _
 
-from hive.imports.model import *
 from hive.model.base import ANModel
 from hive.model.action import Action
 from hive.model.fields.builtin import DateTimeField, TimezoneField
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/user_mgmt/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/user_mgmt/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/system/user_mgmt/__init__.py	(working copy)
@@ -9,15 +9,7 @@
 from hive.model.query import clear_cache_all
 from hive.session import ANSession
 from hive.model.base import ANModel
-from hive.model.fields.builtin import (
-    FieldGroup,
-    CharField,
-    PasswordField,
-    EnumField,
-    IntegerField,
-    BooleanField,
-    JSONField
-)
+from hive.model.fields.builtin import CharField, PasswordField, EnumField, IntegerField, BooleanField, JSONField
 from hive.model.fields import FieldGroup
 from hive.model.action import Action
 from hive.model.manager import CLIManager
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/tasking/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/tasking/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/tasking/__init__.py	(working copy)
@@ -8,7 +8,6 @@
 from django.utils.translation import gettext_lazy as _
 
 from cm.lib.postgres_db import DB
-from hive.imports.model import *
 from hive.model.base import ANModel
 from hive.model.fields.builtin import *
 from hive.model.action import Action
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/virtualization/__init__.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/virtualization/__init__.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/cm/models/virtualization/__init__.py	(working copy)
@@ -147,7 +147,7 @@
                     host.compression_hw = rtn[7][0] if rtn[7] else ''
                     host.power_supply = rtn[8][0] if rtn[8] else ''
                     host.network_interface = rtn[9][0] if rtn[9] else ''
-                    host.model = rtn[10][0].split(',')[0] if rtn[10]x else ''
+                    host.model = rtn[10][0].split(',')[0] if rtn[10] else ''
                     host.serial_number = rtn[11][0] if rtn[11] else ''
                     host.license_key = rtn[12][0] if rtn[12] else ''
                     host.license_date = rtn[13][0] if rtn[13] else ''
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/djproject/settings.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/djproject/settings.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/djproject/settings.py	(working copy)
@@ -13,12 +13,12 @@
 
 DATABASES = {
     'default': {
-        'ENGINE': 'django.db.backends.',  # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': '',  # Or path to a database file if using sqlite3.
-        'USER': '',  # Not used with sqlite3.
-        'PASSWORD': '',  # Not used with sqlite3.
-        'HOST': '',  # Set to empty string for localhost. Not used with sqlite3.
-        'PORT': '',  # Set to empty string by default. Not used with sqlite3.
+        'ENGINE': 'django.db.backends.postgresql',  # Add 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': 'cm',  # Or path to a database file if using sqlite3.
+        'USER': 'amp_admin',  # Not used with sqlite3.
+        'PASSWORD': 'Array@123$',  # Not used with sqlite3.
+        'HOST': '127.0.0.1',  # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '5432',  # Set to empty string by default. Not used with sqlite3.
     }
 }
 
\ No newline at end of file
@@ -120,8 +120,6 @@
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'cm.apps.CmConfig'
-    # 'django.contrib.auth',
-    # 'django.contrib.contenttypes',
     # 'django.contrib.sessions',
     # 'django.contrib.sites',
     # 'django.contrib.messages',
\ No newline at end of file
@@ -197,7 +195,7 @@
             'level': 'DEBUG',
             'class': 'logging.handlers.RotatingFileHandler',
             'filename': '/var/log/hive.log',
-            'maxBytes': 1024 * 1024 * 50,  # 50 MBDEBUG
+            'maxBytes': 1024 * 1024 * 50,  # 50 MB
             'backupCount': 2,
             'formatter': 'standard',
         },
\ No newline at end of file
@@ -234,4 +232,4 @@
             # 'level': 'DEBUG', #DEVMODE
         },
     }
-}
+}
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/ajax.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/ajax.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/ajax.py	(working copy)
@@ -192,7 +192,6 @@
     def delete(self, **kwargs):
         try:
             pk_value = kwargs['pk']
-            andebug('an.model.cli', f'pk_value: {pk_value}')
             if isinstance(pk_value, list):
                 pk_value = pk_value[0]
             pk_str_list = pk_value.split('ÿÿÿÿÿ')
\ No newline at end of file
@@ -286,7 +285,7 @@
         if "search[value]" in kwargs:
             search_dict["search_str"] = kwargs["search[value]"]
 
-        # --- Start get data --- 
+        # --- Start get data ---
         try:
             ret_data = self.manager.get_stats_list(start=data_start, max_num=data_length, search=search_dict,
                                                    filter_list=filter_dict, sort_dict=sort_dict)
\ No newline at end of file
@@ -411,7 +410,7 @@
             search_dict["search_str"] = kwargs["search[value]"]
 
         # ---- A special case for concrete_dict ----
-        # When change the concrete_dict, the firset request is used to recreate the table, a filter request will be send 
+        # When change the concrete_dict, the firset request is used to recreate the table, a filter request will be send
         # immediately after the first request, so for the first, we didn't need to return the really data.
         if concrete_dict and not filter_dict:
             response_data["data"] = []
\ No newline at end of file
@@ -908,6 +907,12 @@
             raise Http404
         try:
             options = args['options']
+            if isinstance(options, list) and len(options) == 1:
+                options = options[0]
+            if isinstance(options, str):
+                options = json.loads(options)
+            elif options is None:
+                options = {}
             del args['options']
         except KeyError:
             options = None
\ No newline at end of file
@@ -1189,4 +1194,4 @@
 
 
 if __name__ == '__main__':
-    main()
+    main()
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/legacycli.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/legacycli.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/legacycli.py	(working copy)
@@ -299,7 +299,7 @@
     def cmd_direct(self, cmd, *args):
         cmd = cmd.strip()
         username = self._username
-        cmd = escapeshellarg(cmd)
+        # cmd = escapeshellarg(cmd)
 
         # Prepare the argument for the backend (as bytes)
         backend_bin = b'/ca/bin/backend'
\ No newline at end of file
@@ -378,10 +378,9 @@
                 cmd_str = ''
 
         output = self._receive(F_EOP)
-        andebug('an.model.cli', 'cli command execution: "%s", output: "%s"' % (cmd, output))
-
         # For now, as a limitation of webui_agent, we always establish new TCP connection
         # for every command execution
+
         self._disconnect()
         if len(args) == 0:
             return output
\ No newline at end of file
@@ -723,6 +722,7 @@
     def parse(self, cmd_output):
         if isinstance(cmd_output, bytes):
             cmd_output = cmd_output.decode('utf-8', errors='replace')
+
         if self._mode == MATCHONE:
             match_obj = self._regex.search(cmd_output)
 
\ No newline at end of file
@@ -809,10 +809,10 @@
     **parser_obj** could be a single :py:class:`ANCLIParser` or a list of it.
 
     If it's a single parser, the parser will ``parse()`` the command output and return the result as defined in the parser.
-    If it's a parser list, the parsers will call their own ``parse()`` functions one by one over the same ``cmd_output``, and 
+    If it's a parser list, the parsers will call their own ``parse()`` functions one by one over the same ``cmd_output``, and
     all results are collected into a list and returned.
 
-    When exception happens, generally, this function will gather all exceptions (of type ``CLICmdExceptipn``) raised by parsers and raise a 
+    When exception happens, generally, this function will gather all exceptions (of type ``CLICmdExceptipn``) raised by parsers and raise a
     ``ModelQueryException``. That is, an parser exception won't stop the workflow from iterating the next parser. However, there're two special
     cases based on the parser's settings:
 
\ No newline at end of file
@@ -850,4 +850,4 @@
             raise ModelQueryException(exceptions)
         return res
     else:
-        raise TypeError('Third argument of cmd should be an ANCLIParser or list of it')
+        raise TypeError('Third argument of cmd should be an ANCLIParser or list of it')
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/loading.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/loading.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/loading.py	(working copy)
@@ -13,6 +13,7 @@
 from hive.model.package import ANPackage
 from hive.utils import anerror, andebug
 from hive.exceptions import *
+import traceback
 
 __all__ = ('get_apps', 'get_app', 'get_package', 'get_model', 'register_models', 'get_app_errors', 'app_cache_ready')
 
\ No newline at end of file
@@ -52,7 +53,6 @@
         sense that every caller will see the same state upon return, and if the
         cache is already initialised, it does no work.
         """
-        andebug('an.model.cli', 'Inside _populate')
         if self.loaded:
             return
         self.write_lock.acquire()
\ No newline at end of file
@@ -68,7 +68,7 @@
                     self._load_app(app_name)
                 self.loaded = True
         finally:
-            self._resolve_all_unresolved_associations(self)
+            self._resolve_all_unresolved_associations()
             self.write_lock.release()
 
     def _label_for(self, app_name):
\ No newline at end of file
@@ -168,7 +168,6 @@
         Returns the module containing the models for the given app_name.
         Returns None if it's not found.
         """
-        andebug('an.model.cli', 'Inside get_app')
         self._populate()
         try:
             return self.app_packages[app_name]
\ No newline at end of file
@@ -245,7 +244,6 @@
             return model._meta.get_field(rest_path[0])
 
     def register_models(self, app_label, package_path, *models):
-        print('Inside register_models')
         package_key = app_label + '.'.join(package_path)
         for model in models:
             # Store as 'name: model' pair in a dictionary
\ No newline at end of file
@@ -273,7 +271,6 @@
                         except ModelDefinitionError:
                             self.unresolved_associations.append((each_field, app_label, each_tgt, asso_idx))
                         asso_idx += 1
-        print(f'app models:{self.app_models}')
 
     def _resolve_all_unresolved_associations(self):
         still_unresolved = []
\ No newline at end of file
@@ -284,24 +281,21 @@
                     each_field.register_target_asso_while_loading(tgt_field, asso_idx)
                 except Exception as e:
                     # Log, or optionally collect for a later hard error
-                    print(f"Error registering association {each_field} -> {each_tgt}: {e}")
                     still_unresolved.append((each_field, app_label, each_tgt, asso_idx))
             else:
                 still_unresolved.append((each_field, app_label, each_tgt, asso_idx))
         if still_unresolved:
             # Either raise, or just print/log:
             for each_field, app_label, each_tgt, asso_idx in still_unresolved:
-                print(f"Unresolved association: {each_field} -> {each_tgt}")
+                andebug('an.model.cli',f"Unresolved association: {each_field} -> {each_tgt}")
             # You can optionally raise an error if you want to be strict:
             # raise ModelDefinitionError("Some associations could not be resolved!")
         self.unresolved_associations = still_unresolved
 
+
 cache = AppCache()
 
 
-
-
-
 # These methods were always module level, so are kept that way for backwards
 # compatibility.
 def get_apps():
\ No newline at end of file
@@ -365,4 +359,4 @@
     
     :returns: True/False
     """
-    return cache.app_cache_ready()
+    return cache.app_cache_ready()
\ No newline at end of file
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/manager.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/manager.py	(revision 2724)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/model/manager.py	(working copy)
@@ -16,6 +16,7 @@
 from hive.model.utils import reduce_asso_value_item, get_complex_field, CONDITIONAL_NONE
 from hive.session import current_app
 from hive.utils import andebug, dump_dict, getcallargs, dict_combine
+from hive.model.query import mark_expire_all, mark_expire_one
 
 exec("import %s.company as company" % current_app())
 try:
\ No newline at end of file
@@ -280,7 +281,7 @@
             for each_field in field_list:
                 if model_instance.is_pk_field(each_field):
                     # as pk field value is changed, the cache for old pk is expired.
-                    # and insert the new model_instance into cache 
+                    # and insert the new model_instance into cache
                     if old_values:
                         model_instance._meta.mark_delay_query(old_values)
                         old_instance = model_instance._meta._model(**old_values)
\ No newline at end of file
@@ -1155,8 +1156,8 @@
         hide_data['functions'] = self.get_available_functions(instance, serializable=True)
         return hide_data
 
-    # filter_dict:{"field_name1":value, "field_name2":value, ...} 
-    # search_dict: {"search_str":xxx,"search_fields":[field_name1, field_name2,...]} 
+    # filter_dict:{"field_name1":value, "field_name2":value, ...}
+    # search_dict: {"search_str":xxx,"search_fields":[field_name1, field_name2,...]}
     # sort_dict: {"field":<field_name>, "order":desc/asc}
     def filter_search_sort(self, start=0, length=0, filter_dict=None, search_dict=None, sort_dict=None):
         if filter_dict:
\ No newline at end of file
@@ -1562,4 +1563,4 @@
         else:
             response["data"] = rstdata[start:start + max_num]
         response["total"] = len(rstdata)
-        return response
+        return response
\ No newline at end of file
