Commit 8221d2ac authored by Cédric Le Ninivin's avatar Cédric Le Ninivin

slapos_cloud: Add getJSONSchemaUrl method

This is an attempt to provide stability to the Schema URL and by extension to asJSONText
With absolute url usage used to calculate the Schema URL the url change according to the url being used
parent c2f5f1f6
...@@ -65,17 +65,28 @@ class SoftwareInstallation(Item, JSONType): ...@@ -65,17 +65,28 @@ class SoftwareInstallation(Item, JSONType):
# software instance has to define an xml parameter # software instance has to define an xml parameter
status_dict = self.getAccessStatus() status_dict = self.getAccessStatus()
result = { result = {
"$schema": self.getPortalObject().portal_types.restrictedTraverse(self.getPortalType()).absolute_url() "$schema": self.getJSONSchemaUrl(),
+ "/getTextContent",
"reference": self.getReference().decode("UTF-8"), "reference": self.getReference().decode("UTF-8"),
"software_release_uri": self.getUrlString(), "software_release_uri": self.getUrlString(),
"compute_node_id": self.getAggregateReference(), "compute_node_id": self.getAggregateReference(),
"state": state, "state": state,
"reported_state": status_dict.get("state"), "reported_state": status_dict.get("state"),
"status_message": status_dict.get("text"), "status_message": status_dict.get("text"),
"processing_timestamp": self.getSlapTimestamp(),
} }
result.update() result.update()
return json.dumps(result, indent=2) return json.dumps(result, indent=2)
def getSlapTimestamp(self): def getSlapTimestamp(self):
return int(self.getModificationDate()) return int(self.getModificationDate())
security.declareProtected(Permissions.AccessContentsInformation,
'getJSONSchemaUrl')
def getJSONSchemaUrl(self):
"""
This is an attempt to provide stability to the Schema URL and by extension to asJSONText
"""
portal = self.getPortalObject()
portal_type_path = portal.portal_types.restrictedTraverse(self.getPortalType())
base_url = portal.portal_preferences.getPreferredSlaposWebSiteUrl().strip("/")
return "/".join([base_url, portal_type_path.getRelativeUrl(), "getTextContent"])
\ No newline at end of file
...@@ -319,6 +319,17 @@ class SoftwareInstance(Item, JSONType): ...@@ -319,6 +319,17 @@ class SoftwareInstance(Item, JSONType):
comment='successor_list edited to unlink non commited instances') comment='successor_list edited to unlink non commited instances')
self.setLastData(str(instance_reference_list), key=cache_reference) self.setLastData(str(instance_reference_list), key=cache_reference)
security.declareProtected(Permissions.AccessContentsInformation,
'getJSONSchemaUrl')
def getJSONSchemaUrl(self):
"""
This is an attempt to provide stability to the Schema URL and by extension to asJSONText
"""
portal = self.getPortalObject()
portal_type_path = portal.portal_types.restrictedTraverse("Software Instance")
base_url = portal.portal_preferences.getPreferredSlaposWebSiteUrl().strip("/")
return "/".join([base_url, portal_type_path.getRelativeUrl(), "getTextContent"])
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'asJSONText') 'asJSONText')
def asJSONText(self): def asJSONText(self):
...@@ -340,8 +351,7 @@ class SoftwareInstance(Item, JSONType): ...@@ -340,8 +351,7 @@ class SoftwareInstance(Item, JSONType):
raise ValueError("Unknown slap state : %s" % requested_state) raise ValueError("Unknown slap state : %s" % requested_state)
# software instance has to define an xml parameter # software instance has to define an xml parameter
result = { result = {
"$schema": self.getPortalObject().portal_types.restrictedTraverse("Software Instance").absolute_url() "$schema": self.getJSONSchemaUrl(),
+ "/getTextContent",
"title": self.getTitle().decode("UTF-8"), "title": self.getTitle().decode("UTF-8"),
"reference": self.getReference().decode("UTF-8"), "reference": self.getReference().decode("UTF-8"),
"software_release_uri": self.getUrlString(), "software_release_uri": self.getUrlString(),
...@@ -356,7 +366,7 @@ class SoftwareInstance(Item, JSONType): ...@@ -356,7 +366,7 @@ class SoftwareInstance(Item, JSONType):
"sla_parameters": self.getSlaXmlAsDict(), "sla_parameters": self.getSlaXmlAsDict(),
"compute_node_id": parameter_dict.get("slap_computer_id"), "compute_node_id": parameter_dict.get("slap_computer_id"),
"compute_partition_id": parameter_dict.get("slap_computer_partition_id"), "compute_partition_id": parameter_dict.get("slap_computer_partition_id"),
"processing_timestamp": parameter_dict.get("timestamp"), "processing_timestamp": self.getSlapTimestamp(),
"access_status_message": self.getTextAccessStatus(), "access_status_message": self.getTextAccessStatus(),
"portal_type": self.getPortalType(), "portal_type": self.getPortalType(),
} }
......
...@@ -326,3 +326,12 @@ class SlapOSComputeNodeMixin(object): ...@@ -326,3 +326,12 @@ class SlapOSComputeNodeMixin(object):
self.getReference(), ', '.join([q.getRelativeUrl() for q \ self.getReference(), ', '.join([q.getRelativeUrl() for q \
in software_installation_list]) in software_installation_list])
)) ))
def getJSONSchemaUrl(self):
"""
This is an attempt to provide stability to the Schema URL and by extension to asJSONText
"""
portal = self.getPortalObject()
portal_type_path = portal.portal_types.restrictedTraverse(self.getPortalType())
base_url = portal.portal_preferences.getPreferredSlaposWebSiteUrl().strip("/")
return "/".join([base_url, portal_type_path.getRelativeUrl(), "getTextContent"])
\ 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