Commit afc7917a authored by Cédric de Saint Martin's avatar Cédric de Saint Martin

Merge branch 'master' into slapgrid_test

parents 3a8c83ff fa395f84
...@@ -116,6 +116,9 @@ if filter_kw.keys():\n ...@@ -116,6 +116,9 @@ if filter_kw.keys():\n
# XXX Drop all unexpected keys\n # XXX Drop all unexpected keys\n
query_kw["uid"] = "-1"\n query_kw["uid"] = "-1"\n
\n \n
if test_mode:\n
return bool(len(context.portal_catalog(limit=1, **query_kw)))\n
\n
SQL_WINDOW_SIZE = 50\n SQL_WINDOW_SIZE = 50\n
\n \n
# fetch at mot 50 random Computer Partitions, and check if they are ok\n # fetch at mot 50 random Computer Partitions, and check if they are ok\n
...@@ -154,7 +157,7 @@ return computer_partition.getRelativeUrl()\n ...@@ -154,7 +157,7 @@ return computer_partition.getRelativeUrl()\n
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw</string> </value> <value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw, test_mode=False</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
...@@ -104,6 +104,10 @@ ...@@ -104,6 +104,10 @@
<string>free_partition</string> <string>free_partition</string>
<string>Free Partition Count</string> <string>Free Partition Count</string>
</tuple> </tuple>
<tuple>
<string>allocation_scope_translated_title</string>
<string>Allocation Scope</string>
</tuple>
</list> </list>
</value> </value>
</item> </item>
......
472 474
\ No newline at end of file \ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Section" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>__translation_dict</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>_identity_criterion</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_range_criterion</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>authorization_forced</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>custom_render_method_id</string> </key>
<value> <string>WebSection_viewMonitoring</string> </value>
</item>
<item>
<key> <string>default_page_displayed</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>This page shows the status of your servers and instances</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>monitoring</string> </value>
</item>
<item>
<key> <string>int_index</string> </key>
<value> <int>6</int> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Section</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Monitoring</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -103,9 +103,7 @@ ...@@ -103,9 +103,7 @@
</item> </item>
<item> <item>
<key> <string>int_index</string> </key> <key> <string>int_index</string> </key>
<value> <value> <int>1</int> </value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
...@@ -89,6 +89,10 @@ ...@@ -89,6 +89,10 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>my_invoices</string> </value> <value> <string>my_invoices</string> </value>
</item> </item>
<item>
<key> <string>int_index</string> </key>
<value> <int>2</int> </value>
</item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Web Section</string> </value> <value> <string>Web Section</string> </value>
......
...@@ -89,6 +89,10 @@ ...@@ -89,6 +89,10 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>my_servers</string> </value> <value> <string>my_servers</string> </value>
</item> </item>
<item>
<key> <string>int_index</string> </key>
<value> <int>4</int> </value>
</item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Web Section</string> </value> <value> <string>Web Section</string> </value>
......
...@@ -85,9 +85,7 @@ ...@@ -85,9 +85,7 @@
</item> </item>
<item> <item>
<key> <string>int_index</string> </key> <key> <string>int_index</string> </key>
<value> <value> <int>3</int> </value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
...@@ -95,9 +95,7 @@ ...@@ -95,9 +95,7 @@
</item> </item>
<item> <item>
<key> <string>int_index</string> </key> <key> <string>int_index</string> </key>
<value> <value> <int>5</int> </value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Section" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_identity_criterion</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_range_criterion</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>authorization_forced</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>custom_render_method_id</string> </key>
<value> <string>WebSection_orderVifibERP5</string> </value>
</item>
<item>
<key> <string>default_page_displayed</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Section</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>1</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
104 106
\ No newline at end of file \ No newline at end of file
...@@ -343,6 +343,66 @@ class InstancePublisher(GenericPublisher): ...@@ -343,6 +343,66 @@ class InstancePublisher(GenericPublisher):
self.REQUEST.response.setBody(jsonify({'status':'processing'})) self.REQUEST.response.setBody(jsonify({'status':'processing'}))
return self.REQUEST.response return self.REQUEST.response
@requireHeader({'Content-Type': '^application/json.*'})
@requireJson(dict(
slave=bool,
software_release=(unicode, encode_utf8),
title=(unicode, encode_utf8),
software_type=(unicode, encode_utf8),
parameter=(dict, etreeXml),
sla=(dict, etreeXml),
status=(unicode, encode_utf8),
))
def __allocable(self):
request_dict = {}
if self.jbody['status'] not in ['started', 'stopped', 'destroyed']:
self.REQUEST.response.setStatus(400)
self.REQUEST.response.setBody(jsonify(
{'status': 'Status shall be one of: started, stopped, destroyed.'}))
return self.REQUEST.response
try:
user = self.restrictedTraverse(self.user_url)
user_portal_type = user.getPortalType()
if user_portal_type == 'Person':
pass
elif user_portal_type == 'Software Instance':
hosting_subscription = user.getSpecialiseValue(
portal_type="Hosting Subscription")
user = hosting_subscription.getDestinationSectionValue(
portal_type="Person")
else:
raise NotImplementedError, "Can not get Person document"
open_order = self.portal_catalog.getResultValue(
portal_type='Open Sale Order',
default_destination_decision_uid=user.getUid(),
validation_state='validated')
tmp_instance = self.software_instance_module.newContent(
portal_type="Software Instance",
sla_xml=self.jbody['sla'],
temp_object=1,
)
result = open_order.OpenSaleOrder_findPartition(
self.jbody['software_release'],
self.jbody['software_type'],
('Software Instance', 'Slave Instance')[int(self.jbody['slave'])],
tmp_instance.getSlaXmlAsDict(),
test_mode=True)
except Exception:
transaction.abort()
LOG('VifibRestApiV1', ERROR,
'Problem with person.allocable:', error=True)
self.REQUEST.response.setStatus(500)
self.REQUEST.response.setBody(jsonify({'error':
'There is system issue, please try again later.'}))
return self.REQUEST.response
self.REQUEST.response.setStatus(200)
self.REQUEST.response.setHeader('Cache-Control',
'no-cache, no-store')
self.REQUEST.response.setBody(jsonify({'result': result}))
return self.REQUEST.response
@extractDocument(['Software Instance', 'Slave Instance']) @extractDocument(['Software Instance', 'Slave Instance'])
@supportModifiedSince('document_url') @supportModifiedSince('document_url')
def __instance_info(self): def __instance_info(self):
...@@ -424,7 +484,10 @@ class InstancePublisher(GenericPublisher): ...@@ -424,7 +484,10 @@ class InstancePublisher(GenericPublisher):
self.__request() self.__request()
elif self.REQUEST['REQUEST_METHOD'] == 'GET': elif self.REQUEST['REQUEST_METHOD'] == 'GET':
if self.REQUEST['traverse_subpath']: if self.REQUEST['traverse_subpath']:
self.__instance_info() if self.REQUEST['traverse_subpath'][-1] == 'request':
self.__allocable()
else:
self.__instance_info()
else: else:
self.__instance_list() self.__instance_list()
......
17 19
\ No newline at end of file \ No newline at end of file
...@@ -825,6 +825,271 @@ class TestInstanceGETcertificate(VifibSlaposRestAPIV1InstanceMixin): ...@@ -825,6 +825,271 @@ class TestInstanceGETcertificate(VifibSlaposRestAPIV1InstanceMixin):
self.assertBasicResponse() self.assertBasicResponse()
self.assertResponseCode(404) self.assertResponseCode(404)
class TestInstanceAllocableGET(VifibSlaposRestAPIV1InstanceMixin):
def test_not_logged_in(self):
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']))
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(401)
self.assertTrue(self.response.getheader('Location') is not None)
auth = self.response.getheader('WWW-Authenticate')
self.assertTrue(auth is not None)
self.assertTrue('Bearer realm="' in auth)
self.assertPersonRequestSimulatorEmpty()
def test_no_json(self):
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({'error': "Data is not json object."}, self.json_response)
self.assertPersonRequestSimulatorEmpty()
def test_bad_json(self):
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body='This is not JSON',
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({'error': "Data is not json object."}, self.json_response)
self.assertPersonRequestSimulatorEmpty()
def test_empty_json(self):
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body='{}',
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({
"status": "Missing.",
"slave": "Missing.",
"title": "Missing.",
"software_release": "Missing.",
"software_type": "Missing.",
"parameter": "Missing.",
"sla": "Missing."},
self.json_response)
self.assertPersonRequestSimulatorEmpty()
def test_status_slave_missing_json(self):
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body="""
{
"title": "My unique instance",
"software_release": "http://example.com/example.cfg",
"software_type": "type_provided_by_the_software",
"parameter": {
"Custom1": "one string",
"Custom2": "one float",
"Custom3": [
"abc",
"def"
]
},
"sla": {
"computer_id": "COMP-0"
}
}""",
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({
"status": "Missing.",
"slave": "Missing."
},
self.json_response)
self.assertPersonRequestSimulatorEmpty()
def test_slave_not_bool(self):
kwargs = {
'parameter': {
'Custom1': 'one string',
'Custom2': 'one float',
'Custom3': ['abc', 'def']},
'title': 'My unique instance',
'software_release': 'http://example.com/example.cfg',
'status': 'started',
'sla': {
'computer_id': 'COMP-0'},
'software_type': 'type_provided_by_the_software',
'slave': "True"}
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body=json.dumps(kwargs),
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({
"slave": "unicode is not bool.",
},
self.json_response)
self.assertPersonRequestSimulatorEmpty()
def test_incorrect_status(self):
kwargs = {
'parameter': {
'Custom1': 'one string',
'Custom2': 'one float',
'Custom3': ['abc', 'def']},
'title': 'My unique instance',
'software_release': 'http://example.com/example.cfg',
'status': 'badstatus',
'sla': {
'computer_id': 'COMP-0'},
'software_type': 'type_provided_by_the_software',
'slave': True}
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body=json.dumps(kwargs),
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({
"status": "Status shall be one of: started, stopped, destroyed.",
},
self.json_response)
self.assertPersonRequestSimulatorEmpty()
def test_correct(self):
kwargs = {
'parameter': {
'Custom1': 'one string',
'Custom2': 'one float',
'Custom3': ['abc', 'def']},
'title': 'My unique instance',
'software_release': 'http://example.com/example.cfg',
'status': 'started',
'sla': {
'computer_id': 'COMP-0'},
'software_type': 'type_provided_by_the_software',
'slave': True}
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body=json.dumps(kwargs),
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(200)
self.assertResponseJson()
def test_additional_key_json(self):
kw_request = {
'parameter': {
'Custom1': 'one string',
'Custom2': 'one float',
'Custom3': ['abc', 'def']},
'title': 'My unique instance',
'software_release': 'http://example.com/example.cfg',
'status': 'started',
'sla': {
'computer_id': 'COMP-0'},
'software_type': 'type_provided_by_the_software',
'slave': True}
kwargs = kw_request.copy()
kwargs.update(**{'wrong_key': 'Be ignored'})
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body=json.dumps(kwargs),
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(200)
self.assertResponseJson()
# def test_correct_server_side_raise(self):
# self.customer.requestSoftwareInstance = \
# RaisingSimulator(AttributeError)
# transaction.commit()
# kwargs = {
# 'parameter': {
# 'Custom1': 'one string',
# 'Custom2': 'one float',
# 'Custom3': ['abc', 'def']},
# 'title': 'My unique instance',
# 'software_release': 'http://example.com/example.cfg',
# 'status': 'started',
# 'sla': {
# 'computer_id': 'COMP-0'},
# 'software_type': 'type_provided_by_the_software',
# 'slave': True}
# self.connection.request(method='GET',
# url='/'.join([self.api_path, 'instance', 'request']),
# body=json.dumps(kwargs),
# headers={'REMOTE_USER': self.customer_reference})
# self.prepareResponse()
# self.assertBasicResponse()
# self.assertResponseCode(500)
# self.assertResponseJson()
# self.assertEqual({
# "error": "There is system issue, please try again later.",
# },
# self.json_response)
# self.assertPersonRequestSimulatorEmpty()
def test_content_negotiation_headers(self):
self.connection = CustomHeaderHTTPConnection(host=self.api_netloc,
custom_header={
'Access-Control-Request-Headers': self.access_control_allow_headers
})
kwargs = {
'parameter': {
'Custom1': 'one string',
'Custom2': 'one float',
'Custom3': ['abc', 'def']},
'title': 'My unique instance',
'software_release': 'http://example.com/example.cfg',
'status': 'started',
'sla': {
'computer_id': 'COMP-0'},
'software_type': 'type_provided_by_the_software',
'slave': True}
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body=json.dumps(kwargs),
headers={'REMOTE_USER': self.customer_reference})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({
'Content-Type': "Header with value '^application/json.*' is required."},
self.json_response)
self.assertPersonRequestSimulatorEmpty()
# now check with incorrect headers
self.connection.request(method='GET',
url='/'.join([self.api_path, 'instance', 'request']),
body=json.dumps(kwargs),
headers={'REMOTE_USER': self.customer_reference,
'Content-Type': 'please/complain',
'Accept': 'be/silent'})
self.prepareResponse()
self.assertBasicResponse()
self.assertResponseCode(400)
self.assertResponseJson()
self.assertEqual({
'Content-Type': "Header with value '^application/json.*' is required."},
self.json_response)
self.assertPersonRequestSimulatorEmpty()
# and with correct ones are set by default
def VifibSlaposRestAPIV1BangMixin_afterSetUp(self): def VifibSlaposRestAPIV1BangMixin_afterSetUp(self):
VifibSlaposRestAPIV1BangMixin_afterSetUp(self) VifibSlaposRestAPIV1BangMixin_afterSetUp(self)
self.instance_bang_simulator = tempfile.mkstemp()[1] self.instance_bang_simulator = tempfile.mkstemp()[1]
......
79 80
\ No newline at end of file \ No newline at end of file
...@@ -120,14 +120,18 @@ encode : function (input) {\n ...@@ -120,14 +120,18 @@ encode : function (input) {\n
var created_at = new Date(Date.parse(data.created_at)),\n var created_at = new Date(Date.parse(data.created_at)),\n
now = new Date(),\n now = new Date(),\n
context = $(this);\n context = $(this);\n
console.log(data[\'@document\']);\n // 5 minute for computer. 1 day for instance.\n
if (/#ok/.test(data.text) & (now - created_at < 300000)) {\n if (/#ok/.test(data.text) & /computer_module/.test(data[\'@document\']) & (now - created_at < 300000)) {\n
$(this).attr("class", "monitoring_ok")\n $(this).attr("class", "monitoring_ok")\n
.attr("title", data.text)\n .attr("title", data.text + " (" + created_at + ")" )\n
.html("<a href=\'" + data[\'@document\'] + "\'></a>");\n
} else if (/#ok/.test(data.text) & /software_instance_module/.test(data[\'@document\']) & (now - created_at < 86400000)) {\n
$(this).attr("class", "monitoring_ok")\n
.attr("title", data.text + " (" + created_at + ")" )\n
.html("<a href=\'" + data[\'@document\'] + "\'></a>");\n .html("<a href=\'" + data[\'@document\'] + "\'></a>");\n
} else {\n } else {\n
$(this).attr("class", "monitoring_error")\n $(this).attr("class", "monitoring_error")\n
.attr("title", data.text)\n .attr("title", data.text + " (" + created_at + ")" )\n
.html("<a href=\'" + data[\'@document\'] + "\'></a>");\n .html("<a href=\'" + data[\'@document\'] + "\'></a>");\n
}\n }\n
setTimeout(function () {\n setTimeout(function () {\n
...@@ -181,9 +185,6 @@ encode : function (input) {\n ...@@ -181,9 +185,6 @@ encode : function (input) {\n
});\n });\n
}\n }\n
},\n },\n
error: function(jqXHR, textStatus, errorThrown) {\n
console.log(jqXHR.status);\n
},\n
complete: function() {\n complete: function() {\n
var context = $(this);\n var context = $(this);\n
setTimeout(function () {\n setTimeout(function () {\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
portal = context.getPortalObject()\n
\n
instance_xml = """<?xml version="1.0" encoding="utf-8"?>\n
<instance>\n
<parameter id="flavour">configurator</parameter>\n
<parameter id="frontend-software-url">http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg</parameter>\n
<parameter id="frontend-instance-guid">SOFTINST-9238</parameter> \n
</instance>\n
"""\n
url = "http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.117:/software/erp5/software.cfg"\n
software_type = "default"\n
\n
person = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n
\n
request_kw = {}\n
request_kw.update(\n
software_release=url,\n
software_title="ERP5 Instance 00-%i" % portal.portal_ids.generateNewId(id_group=("vifib", "kvm"), default=1),\n
software_type=software_type,\n
instance_xml=instance_xml,\n
sla_xml="",\n
shared=False,\n
state="started",\n
)\n
\n
person.requestSoftwareInstance(**request_kw)\n
\n
message = context.Base_translateString("Your instance is under creation. Please wait few minutes for partitions to appear.")\n
return context.REQUEST.get(\'request_hosting_subscription\').Base_redirect(keep_items={\'portal_status_message\': message})\n
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSection_orderVifibERP5</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -95,7 +95,8 @@ ...@@ -95,7 +95,8 @@
<key> <string>normal</string> </key> <key> <string>normal</string> </key>
<value> <value>
<list> <list>
<string>your_title</string> <string>my_section_title</string>
<string>my_translated_description</string>
<string>your_ad</string> <string>your_ad</string>
</list> </list>
</value> </value>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_section_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_section_title</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewWebFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_translated_description</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_translated_description</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewWebFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="StringField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>your_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>nolabel</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Title</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.getTitle()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Image" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts47439847.72</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>monitoring.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">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
AABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>90</int> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>7990</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>90</int> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Image" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts47439835.52</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>monitoring_active.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">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
AABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>90</int> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>14887</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>90</int> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -110,6 +110,10 @@ padding-left:100px;\n ...@@ -110,6 +110,10 @@ padding-left:100px;\n
background:url(<tal:block tal:replace="img_folder"/>help_active.png) no-repeat scroll left center transparent;\n background:url(<tal:block tal:replace="img_folder"/>help_active.png) no-repeat scroll left center transparent;\n
padding-left:100px;\n padding-left:100px;\n
}\n }\n
.monitoring h1 {\n
background:url(<tal:block tal:replace="img_folder"/>monitoring_active.png) no-repeat scroll left center transparent;\n
padding-left:100px;\n
}\n
\n \n
#shopping_cart_renderer .listbox tr:nth-child(2n) {\n #shopping_cart_renderer .listbox tr:nth-child(2n) {\n
background:none repeat scroll 0 0 #FFFFFF;\n background:none repeat scroll 0 0 #FFFFFF;\n
......
...@@ -99,7 +99,7 @@ a img{border : 0 none;cursor : pointer;}\n ...@@ -99,7 +99,7 @@ a img{border : 0 none;cursor : pointer;}\n
#vifib_logo{position:absolute;top:2px;left:50%;margin-left:-150px;width:300px;\n #vifib_logo{position:absolute;top:2px;left:50%;margin-left:-150px;width:300px;\n
height:150px;background: url(<tal:block tal:replace="images_path"/>vifib_logo.png) no-repeat top left}\n height:150px;background: url(<tal:block tal:replace="images_path"/>vifib_logo.png) no-repeat top left}\n
\n \n
#login_menu{width:750px;margin:120px auto 0px auto;padding-right:20px;text-align:right;\n #login_menu{width:900px;margin:120px auto 0px auto;padding-right:20px;text-align:right;\n
\tcolor:#bae2e9;height:36px;-moz-border-radius:10px}\n \tcolor:#bae2e9;height:36px;-moz-border-radius:10px}\n
#login_menu li{display:inline;padding:23px;line-height:44px;\n #login_menu li{display:inline;padding:23px;line-height:44px;\n
\tfont-size:16px;font-weight:bold;background:url(<tal:block tal:replace="images_path"/>login_bg.png) repeat-x center left}\n \tfont-size:16px;font-weight:bold;background:url(<tal:block tal:replace="images_path"/>login_bg.png) repeat-x center left}\n
...@@ -108,7 +108,7 @@ a img{border : 0 none;cursor : pointer;}\n ...@@ -108,7 +108,7 @@ a img{border : 0 none;cursor : pointer;}\n
\n \n
#menu li a, #login_menu li a {color:#BAE2E9;text-decoration:none;}\n #menu li a, #login_menu li a {color:#BAE2E9;text-decoration:none;}\n
\n \n
#menu{width:750px;margin:0px auto 0px auto;text-align:center;\n #menu{width:900px;margin:0px auto 0px auto;text-align:center;\n
\tcolor:#bae2e9;height:44px;background:url(<tal:block tal:replace="images_path"/>menu_bg.png) repeat-x top left;\n \tcolor:#bae2e9;height:44px;background:url(<tal:block tal:replace="images_path"/>menu_bg.png) repeat-x top left;\n
\t-moz-border-radius:10px}\n \t-moz-border-radius:10px}\n
#menu ul{list-style:none}\n #menu ul{list-style:none}\n
...@@ -122,7 +122,7 @@ a img{border : 0 none;cursor : pointer;}\n ...@@ -122,7 +122,7 @@ a img{border : 0 none;cursor : pointer;}\n
\n \n
/* Global container */\n /* Global container */\n
#content{text-align:left;position:relative;\n #content{text-align:left;position:relative;\n
left:50%;margin-left:-375px;font-size:1.2em;width:750px;min-height:400px;\n left:50%;margin-left:-450px;font-size:1.2em;width:900px;min-height:400px;\n
background-color:#f3fdff;-moz-border-radius:10px}\n background-color:#f3fdff;-moz-border-radius:10px}\n
#content_padding{padding:20px}\n #content_padding{padding:20px}\n
\n \n
......
436 442
\ No newline at end of file \ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment