diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio.xml deleted file mode 100644 index e453206f3401269dd20616f08cadfcd9ac39f88f..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Folder" module="OFS.Folder"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_objects</string> </key> - <value> - <tuple/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>erp5_jio</string> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.py deleted file mode 100644 index e2cc3230abcf2b599fb25ac50948054b52003cc3..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.py +++ /dev/null @@ -1,23 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -jio = context.JIO_class() - -try: option = jio.jsonUtf8Loads(context.REQUEST.form["option"]) -except KeyError: - option = {} - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -metadata_json = jio.getAllDocuments(option) - -return jio.sendSuccess(metadata_json) - -# document_list = context.portal_catalog(portal_type="Web Page") - -# return jio.sendSuccess(jio.getAllDocsFromDocumentList(document_list, include_docs=option.get("include_docs"))) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.xml deleted file mode 100644 index 5ea0b1695affa061c89140c0304d340acf02e1aa..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_allDocs</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.xml deleted file mode 100644 index 889815917fc974f00770a66f8ddd4019a9378923..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_check</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.py deleted file mode 100644 index 295e6c34bf44d5b1c1aec59a8f30d3c4827407e3..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.py +++ /dev/null @@ -1,661 +0,0 @@ -import json -from DateTime import DateTime -from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery -from Products.ERP5Type.Log import log -portal = context.getPortalObject() - -def Task_setProjectTitle(document, project_title): - project_list = portal.portal_catalog(portal_type="Project", title=project_title) - project_url = None - if project_title: - if len(project_list): - project = project_list[0].getObject() - else: - project = portal.project_module.newContent(title=project_title) - project_url = project.getRelativeUrl() - #portal.person_module.log("Task_setProjectTitle, project", project_url) - document.setSourceProject(project_url) - -def convertTaskReportStateToJioState(state): - # portal.person_module.log("state =========>", state) - map = { - "comfirmed": "Comfirmed", - "started": "Started", - "stopped": "Completed", - "draft": "Draft" - }; - return state if map.get(state) is None else map[state] - -def changeTaskReportState(document, state): - state = state.lower() - current_state = document.getSimulationState() - if state == "comfirmed": - if current_state == "draft": - document.confirm() - return - if state == "started": - if current_state in ["draft", "confirmed"]: - document.start() - if current_state == "stopped": - document.restart() - return - if state == "completed": - if current_state in ["draft", "confirmed", "started"]: - document.stop() - return - -def camelCaseToUnderscores(string): - result = "" - tmp = "" - for char in string: - if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": - tmp += char - elif tmp != "": - tmp = tmp[:-1].lower() + "_" + tmp[-1].lower() - if tmp[0] != "_": - tmp = "_" + tmp - result += tmp + char - tmp = "" - else: - result += char - if result[0] == '_' and string[0] != '_': return result[1:] - return result - -def underscores_to_camel_case(string): - return reduce(lambda v, s: v + s.title(), string.split("_")) - -def dictGetKeyFromValue(obj, value, *args): - for k, v in obj.items(): - if v == value: - return k - if len(args) == 0: - raise ValueError('value not found') - return args[0] - -def UTF8DeepJsonEncoder(obj): - # string -> unicode -> str - if isinstance(obj, unicode): - return obj.encode("UTF-8") - # array -> list - if isinstance(obj, list): - for i in xrange(len(obj)): - obj[i] = UTF8DeepJsonEncoder(obj[i]) - return obj - # object -> dict - if isinstance(obj, dict): - for k, v in obj.items(): - v = UTF8DeepJsonEncoder(v) - del obj[k] - obj[UTF8DeepJsonEncoder(k)] = v - return obj - # number (int) -> int, long - # true -> True - # false -> False - # null -> None - return obj - -def json_loads(string): - return UTF8DeepJsonEncoder(json.loads(string)) - -def jsonDeepCopy(json_dict): - "Clones the JSON object in deep and returns the clone" - return json_loads(json.dumps(json_dict)) - -class FakeDocument(): - def getObject(self): return self - def hasProperty(self, property_id): return False - - -class JioErp5Only(): - def getDocumentAttachment(self, metadata_json): - tool.checkMetadata(metadata_json) - try: document = tool.getDocumentFromUrl(metadata_json.get("_id")) - except ValueError: raise LookupError("Missing document") - except KeyError: raise LookupError("Missing document") - raise KeyError("Missing attachment") - - def getDocumentMetadata(self, metadata_json): - tool.checkMetadata(metadata_json) - try: document = tool.getDocumentFromUrl(metadata_json.get("_id")) - except ValueError: raise LookupError("Missing document") - except KeyError: raise LookupError("Missing document") - document_dict = tool.getDocumentProperties(document) - tool.stringifyDictDateValue(document_dict) - document_dict["workflow_history"] = [v for v in document.workflow_history] - return document_dict - - -class JioGeneric(): - "Processes generic jIO requests" - def __init__(self): - self.simple_conversion_dict = { - "content_type": "format", - "portal_type": "type", - "contributor_list": "contributor", - "subject_list": "subject", - "categories_list": "category", - "creation_date": "created", - "modification_date": "modified", - "start_date": "start", - "stop_date": "stop" - } - # order deny, allow - # deny from all - self.allowed_property_id_list = ["title", "short_title", "description", - "language", "reference", "version", "project", - "format", "type", "start", "stop", "state", - "effective_date", "expiration_date", - "contributor", "subject", "category"] - self.type_attachment_key = { - "Web Page": "text_content", - "Image": "data" - } - self.allowed_portal_type_list = ["Task Report"] - # self.local_attachment_key = "local_attachment_dict" - - def getDocumentAttachment(self, metadata_json): - tool.checkMetadata(metadata_json) - try: document = tool.getDocumentFromUrl(metadata_json.get("_id")) - except AttributeError: raise ValueError("Bad document id") - except (ValueError, KeyError): raise LookupError("Missing document") - document_dict = tool.getDocumentProperties(document) - attachment_key = self.type_attachment_key.get(document.getPortalType()) - if metadata_json.get("_attachment") == "body" and \ - attachment_key in document_dict: - data = document_dict[attachment_key] - if data is not None: - return data - # elif document_dict.get(self.local_attachment_key) is not None and \ - # metadata_json.get("_attachment") in \ - # document_dict.get(self.local_attachment_key): - # return document_dict[self.local_attachment_key][ - # metadata_json["_attachment"]]["data"] - raise KeyError("Missing attachment") - - def getDocumentMetadata(self, metadata_json): - tool.checkMetadata(metadata_json) - try: document = tool.getDocumentFromUrl(metadata_json.get("_id")) - except AttributeError: raise ValueError("Bad document id") - except ValueError: raise LookupError("Missing document") - except KeyError: raise LookupError("Missing document") - document_dict = tool.getDocumentProperties(document) - real_document_dict = {} - # get attachments metas - attachment_key = self.type_attachment_key.get(document.getPortalType()) - if attachment_key is not None and \ - document_dict.get(attachment_key) is not None: - real_document_dict["_attachments"] = tool.dictFusion( - real_document_dict.get("_attachments"), { - "body": { - "length": len(document_dict[attachment_key]), - "content_type": document_dict.get("content_type") - } - } - ) - # if document_dict.get(self.local_attachment_key) is not None: - # tmp = {} - # for k, v in document_dict[self.local_attachment_key].items(): - # tmp[k] = { - # "length": len(document_dict[self.local_attachment_key][k]["data"]), - # "content_type": document_dict[self.local_attachment_key][k][ - # "content_type"] - # } - # real_document_dict["_attachments"] = tool.dictFusion( - # real_document_dict.get("_attachments"), tmp); - while True: - try: k, v = document_dict.popitem() - except KeyError: break - if v is None or ( - isinstance(v, (tuple, list, str, unicode)) and len(v) == 0): - continue - if k in self.simple_conversion_dict: - k = self.simple_conversion_dict.get(k) - if k in self.allowed_property_id_list: - if isinstance(v, DateTime): - v = v.ISO8601() - if k == attachment_key: - real_document_dict["_attachments"] = { - "body": { - "length": len(v) - } - } - elif k == "category" and isinstance(v, list): - # specific process for relation metadata_key - relation_list = [] - for i, s in enumerate(v): - if s.startswith("follow_up/"): - relation_list.append(v.pop(i)) - if len(relation_list) > 0: - real_document_dict["relation"] = relation_list - real_document_dict[k] = v - real_document_dict["_id"] = metadata_json["_id"] - real_document_dict["date"] = document.getCreationDate().ISO8601() - real_document_dict["created"] = document.getCreationDate().ISO8601() - real_document_dict["modified"] = document.getModificationDate().ISO8601() - real_document_dict["type"] = document.getPortalType() - # HARD CODE for task report documents - if document.getPortalType() == "Task Report": - real_document_dict["state"] = convertTaskReportStateToJioState(document.getSimulationState()) - real_document_dict["project"] = document.getSourceProjectTitle() - if real_document_dict["project"] == None: del real_document_dict["project"] - #tool.stringifyDictDateValue(real_document_dict) - return real_document_dict - - def updateDocumentMetadataEditKw(self, metadata_json, - document=FakeDocument()): - edit_kw = {} - while True: - try: meta_key, meta_value = metadata_json.popitem() - except KeyError: break - doc_key = meta_key - for erp5_key, jio_key in self.simple_conversion_dict.iteritems(): - if jio_key == meta_key: - doc_key = erp5_key - break - if meta_key in self.allowed_property_id_list: - if meta_value is None and document.hasProperty(doc_key) or \ - meta_value is not None: - edit_kw[doc_key] = meta_value - if meta_key == "category" and metadata_json.get("relation") is not None: - if isinstance(metadata_json["relation"], tuple): - edit_kw[doc_key] = edit_kw[doc_key] + metadata_json["relation"] - else: - edit_kw[doc_key] = edit_kw[doc_key] + (metadata_json["relation"],) - return edit_kw - - def putDocumentAttachment(self, metadata_json): - tool.checkMetadata(metadata_json) - document = tool.getDocumentFromUrl(metadata_json["_id"]).getObject() - attachment_key = self.type_attachment_key.get(document.getPortalType()) - if metadata_json.get("_attachment") == "body": - edit_kw = {attachment_key: metadata_json.get("_data")} - document.edit(**edit_kw) - else: - raise ValueError("Unauthorized attachment id") - # edit_kw = {self.local_attachment_key: - # document.getProperty(self.local_attachment_key)} - # if edit_kw.get(self.local_attachment_key) is None: - # edit_kw[self.local_attachment_key] = {} - # edit_kw[self.local_attachment_key][metadata_json.get("_attachment")] = { - # "content_type": metadata_json.get("_mimetype"), - # "data": metadata_json.get("_data")} - # document.edit(**edit_kw) - return {"id": metadata_json["_id"], - "attachment": metadata_json.get("_attachment")} - - def putDocumentMetadata(self, metadata_json, overwrite=True): - hard_code_json = metadata_json.copy(); - doc_id = metadata_json.get("_id") - document = None - try: document = tool.getDocumentFromUrl(doc_id) - except AttributeError: pass - except ValueError: pass - except KeyError: pass - if document is not None: - if not overwrite: - raise LookupError("Document already exists") - # document exists - document.getObject().edit( - **self.updateDocumentMetadataEditKw(metadata_json, document=document)) - else: - # document does not exist - if "_id" in metadata_json: - try: - tool.newDocumentFromUrl( - metadata_json["_id"], - self.updateDocumentMetadataEditKw(metadata_json)) - except KeyError: raise KeyError("Bad document id") - elif "type" in metadata_json: - try: - document = tool.newDocumentFromType( - metadata_json["type"], - self.updateDocumentMetadataEditKw(metadata_json)) - doc_id = tool.getUrlFromDocument(document) - except ValueError: - raise ValueError("Bad type") - else: - raise TypeError("Type missing") - # HARD CODE for task report documents - #portal.person_module.log("document type ------->", hard_code_json) - if hard_code_json.get("type") == "Task Report": - if isinstance(hard_code_json.get("state"), str): - changeTaskReportState(document, hard_code_json["state"]) - #portal.person_module.log("document type Task Report, metadata project", hard_code_json.get("project")) - Task_setProjectTitle(document, hard_code_json.get("project")) - return {"id": doc_id} - - def removeDocument(self, metadata_json): - tool.checkMetadata(metadata_json) - try: document = tool.getDocumentFromUrl(metadata_json["_id"]) - except AttributeError: raise ValueError("Bad document id") - except ValueError: raise LookupError("Missing document") - except KeyError: raise LookupError("Missing document") - document_id = document.getId() - document.getParentValue().manage_delObjects(ids=[document_id]) - return {"id": metadata_json["_id"]} - - def removeAttachment(self, metadata_json): - tool.checkMetadata(metadata_json) - try: document = tool.getDocumentFromUrl(metadata_json["_id"]) - except AttributeError: raise ValueError("Bad document id") - except ValueError: raise LookupError("Missing document") - except KeyError: raise LookupError("Missing document") - attachment_key = self.type_attachment_key.get(document.getPortalType()) - if metadata_json.get("_attachment") == "body": - if document.getTextContent() == None: - raise LookupError("Missing attachment") - edit_kw = {attachment_key: None} - document.edit(**edit_kw) - else: - raise ValueError("Unauthorized attachment id") - return {"id": metadata_json["_id"], - "attachment": metadata_json.get("_attachment")} - - def parseQuery(self, query_dict): - def rec(query_dict): - if query_dict.get("type") == "simple": - # if query_dict.get("key") not in self.allowed_property_id_list: - # return None - for erp5_key, jio_key in self.simple_conversion_dict.items(): - if query_dict["key"] == jio_key: - query_dict["key"] = erp5_key - break - return SimpleQuery(comparison_operator=query_dict['operator'], - **{query_dict['key']: query_dict['value']}) - if query_dict.get("type") == "complex": - tool.listMapReplace(rec, query_dict['query_list']) - try: - while True: query_dict['query_list'].remove(None) - except ValueError: pass - return ComplexQuery(logical_operator=query_dict['operator'], - *query_dict['query_list']) - return None - return rec(query_dict) - - def getAllDocuments(self, option_json): - response = {"rows":[]} - kw = {} - if isinstance(option_json.get('query'), dict): - kw['query'] = self.parseQuery(option_json["query"]) - kw['query'] = ComplexQuery( - kw['query'], - ComplexQuery( - logical_operator='or', - *[SimpleQuery(comparison_operator="=", portal_type=x) \ - for x in self.allowed_portal_type_list] - ), - comparison_operator='and' - ) - else: - kw['query'] = ComplexQuery( - logical_operator='or', - *[SimpleQuery(comparison_operator="=", portal_type=x) \ - for x in self.allowed_portal_type_list] - ) - - if isinstance(option_json.get('limit'), list): - kw['limit'] = tuple(option_json['limit']) - - c = self.simple_conversion_dict - if isinstance(option_json.get('sort_on'), list): - for i in range(len(option_json['sort_on'])): - s = option_json['sort_on'][i] - option_json['sort_on'][i] = dictGetKeyFromValue(c, s[0], s[0]) - kw['sort_on'] = option_json['sort_on'] - - if not isinstance(option_json.get('select_list'), list): - option_json['select_list'] = [] - if option_json['select_list'] != []: - id_list = context.portal_catalog.getSQLCatalog().getColumnIds() - i = len(option_json['select_list']) - 1 - while i >= 0: - s = option_json['select_list'][i] - option_json['select_list'][i] = dictGetKeyFromValue(c, s, s) - if option_json['select_list'][i] not in id_list: - option_json['select_list'].pop(i) - i -= 1 - kw['select_list'] = option_json['select_list'] - #portal.person_module.log("catalog ----------===============>", kw); - for document in context.portal_catalog(**kw): - url = tool.getUrlFromDocument(document) - row = {"id": url, "key": url, "value": {}} - for erp5_meta in option_json['select_list']: - jio_meta = c.get(erp5_meta, erp5_meta) - row['value'][jio_meta] = getattr(document, erp5_meta, None) - if isinstance(row['value'][jio_meta], DateTime): - row['value'][jio_meta] = row['value'][jio_meta].ISO8601() - if option_json.get('include_docs') is True: - row["doc"] = self.getDocumentMetadata({"_id": url}) - response["rows"].append(row) - response["total_rows"] = len(response["rows"]) - return response - - # def getAllDocuments(self, option_json): - # response = {"rows":[]} - # editkw = {} - # if "query" in option_json: - # editkw['query'] = self.parseQuery(option_json["query"]) - # editkw['query'] = ComplexQuery( - # editkw['query'], - # ComplexQuery( - # logical_operator='or', - # *[SimpleQuery(comparison_operator="=", portal_type=x) \ - # for x in self.allowed_portal_type_list] - # ), - # comparison_operator='and' - # ) - # # if isinstance(option_json.get('limit'), list): - # # editkw['limit'] = tuple(option_json['limit']) - - # # if isinstance(option_json.get('select_list'), list): - # # for sub_list in option_json['select_list']: - # # sub_list = tuple(sub_list) - # # editkw['select_list'] = option_json['select_list'] - - # for document in context.portal_catalog(query=query): - # url = tool.getUrlFromDocument(document) - # row = {"id": url, "key": url, "values": {}} - # if option_json.get('include_docs') is True: - # row["doc"] = self.getDocumentMetadata({"_id": url}) - # response["rows"].append(row) - # else: - # for portal_type in self.allowed_portal_type_list: - # for document in context.portal_catalog(portal_type=portal_type): - # url = tool.getUrlFromDocument(document) - # row = {"id": url, "key": url, "values": {}} - # if option_json.get('include_docs') is True: - # row["doc"] = self.getDocumentMetadata({"_id": url}) - # response["rows"].append(row) - # response["total_rows"] = len(response["rows"]) - # return response - - # def getAllDocuments(self, option_json): - # response = {"rows":[]} - # for portal_type in self.allowed_portal_type_list: - # for document in context.portal_catalog(portal_type=portal_type): - # url = tool.getUrlFromDocument(document) - # row = {"id": url, "key": url, "values": {}} - # if option_json.get('include_docs') is True: - # row["doc"] = self.getDocumentMetadata({"_id": url}) - # response["rows"].append(row) - # response["total_rows"] = len(response["rows"]) - # return response - -class JioTool(): - # TODO doc strings - - def listMapReplace(self, function, li): - """listMapReplace(function, list) - - li = [1, 2, 3] - listFilter(lambda x: x + 1, li) - print(li) -> [2, 3, 4] - - """ - for i in range(len(li)): - li[i] = function(li[i]) - - def createBadRequestDict(self, message, reason): - return { - "status": 405, - "statusText": "Bad Request", - "error": "bad_request", - "message": message, - "reason": reason - } - - def createForbiddenDict(self, message, reason): - return { - "status": 403, - "statusText": "Forbidden", - "error": "forbidden", - "message": message, - "reason": reason - } - - def createNotFoundDict(self, message, reason): - return { - "status": 404, - "statusText": "Not Found", - "error": "not_found", - "message": message, - "reason": reason - } - - def createConflictDict(self, message, reason): - return { - "status": 409, - "statusText": "Conflict", - "error": "conflict", - "message": message, - "reason": reason - } - - def checkMetadata(self, metadata_json): - "Check if the id of the metadata is good" - if metadata_json.get("_id") is None or metadata_json.get("_id") == "": - raise ValueError("Bad document id") - - def getUrlFromDocument(self, document): - return "/" + context.getPortalObject().\ - getDefaultModule(document.getPortalType()).getId() + "/" + \ - document.getProperty("id") - - def getDocumentFromUrl(self, url): - "Return an ERP5 document from an url. ex: '/web_page_module/2'" - url = url.split("/") - if len(url) != 3 or url[0] != "": - raise ValueError("Wrong URL") - url = url[1:] - return context.getPortalObject()[url[0]][url[1]] # throws KeyError - - def newDocumentFromUrl(self, url, edit_kw={}): - "Create a new document from an url. ex: '/web_page_module/<num>'" - url = url.split("/") - if len(url) < 2 or url[0] != "": - raise ValueError("Wrong URL") - try: edit_kw["id"] = int(url[2]) - except ValueError: raise ValueError("Wrong URL") - return context.getPortalObject()[url[1]].newContent(**edit_kw) - - def newDocumentFromType(self, portal_type, edit_kw={}): - "Create a new document from a portal_type. ex: 'Web Page'" - return context.getPortalObject().getDefaultModule(portal_type).\ - newContent(**edit_kw) - - def getDocumentProperties(self, document): - document = document.getObject() - document_dict = {} - for property_definition in document.getPropertyMap(): - property_id = property_definition["id"] - document_dict[property_id] = document.getProperty(property_id) - return document_dict - - def jsonUtf8Loads(self, json_str): - return json_loads(json_str) - - def stringifyDictDateValue(self, obj_dict): - for k, v in obj_dict.items(): - if isinstance(v, DateTime): - obj_dict[k] = v.ISO8601() - - def formatMetadataToPut(self, metadata_json): - for k, v in metadata_json.iteritems(): - if isinstance(v, list): - metadata_json[k] = tuple(v) - return metadata_json - - def dictFusion(self, *dict_tuple): - result = {} - for dicti in dict_tuple: - if dicti is not None: - for k, v in dicti.items(): - result[k] = v - return result - - def __init__(self, mode="generic"): - self.mode_dict = { - "generic": JioGeneric, - "erp5_only": JioErp5Only - } - self.setMode(mode) - - def setMode(self, mode): - self.jio = self.mode_dict[mode]() - - def getDocumentMetadata(self, metadata_json): - return self.jio.getDocumentMetadata(metadata_json) - - def getDocumentAttachment(self, metadata_json): - return self.jio.getDocumentAttachment(metadata_json) - - def putDocumentMetadata(self, metadata_json, overwrite=True, need_id=False): - metadata = self.formatMetadataToPut( - jsonDeepCopy(metadata_json)) - if need_id: - if not isinstance(metadata.get("_id"), str) or metadata.get("_id") == "": - raise ValueError("Document id needed") - return self.jio.putDocumentMetadata(metadata, overwrite=overwrite) - - def putDocumentAttachment(self, attachment_json): - return self.jio.putDocumentAttachment(attachment_json) - - def removeDocument(self, metadata_json): - return self.jio.removeDocument(metadata_json) - - def removeAttachment(self, metadata_json): - return self.jio.removeAttachment(metadata_json) - - def getAllDocuments(self, option_json): - return self.jio.getAllDocuments(option_json) - - def sendSuccess(self, param): - return json.dumps({"err": None, "response": param}) - - def sendError(self, param): - return json.dumps({"err": param, "response": None}) - - # def getDocumentListFromId(self, id): - # kw = {"portal_type":"Web Page"} - # kw[self.mode["id_key"]] = id - # return context.portal_catalog(**kw) - - # def getAllDocsFromDocumentList(self, document_list, include_docs=False): - # rows = [] - # if include_docs is True: - # for document in document_list: - # id = document.getProperty(self.mode["id_key"]) - # if id is not None: - # rows.append({"id": id, "key": id, "value": {}, "doc": self.getMetadataFromDocument(document)}) - # else: - # for document in document_list: - # id = document.getProperty(self.mode["id_key"]) - # if id is not None: - # rows.append({"id": id, "key": id, "value": {}}) - # return {"total_rows": len(rows), "rows": rows} - - # def setDocumentId(self, document, id): - # document.getObject().setProperty(self.mode["id_key"], id) - -tool = JioTool(**kw) -return tool diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.xml deleted file mode 100644 index 0d226be2a2045429e5171df914d3ff1eb99da2ca..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string>**kw</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_class</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.py deleted file mode 100644 index e3683fa4b01791202d59c15aa5e3ae08aa1bb6b2..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -# dataType "json" -# when sending -> [{"name": stringA, "value": stringB}] -# context.REQUEST.form <- {stringA: stringB} - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - metadata_json = jio.getDocumentMetadata(doc) -except ValueError as e: - return jio.sendError(jio.createConflictDict("Cannot get document", str(e))) -except LookupError as e: - return jio.sendError(jio.createNotFoundDict("Cannot get document", str(e))) - -return jio.sendSuccess(metadata_json) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.xml deleted file mode 100644 index d15bff42878181c29b71cf1ca048cb5a879eb805..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_get</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.py deleted file mode 100644 index f3bc3f52677998efc81a452f9e934d22cc00b707..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -# dataType "json" -# when sending -> [{"name": stringA, "value": stringB}] -# context.REQUEST.form <- {stringA: stringB} - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - attachment_data = jio.getDocumentAttachment(doc) -except ValueError as e: - return jio.sendError(jio.createConflictDict("Cannot get attachment", str(e))) -except LookupError as e: - return jio.sendError(jio.createNotFoundDict("Cannot get attachment", str(e))) - -return jio.sendSuccess(attachment_data) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.xml deleted file mode 100644 index c8095b7865563f9a2bd9dae75b02c03a1bf393bf..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_getAttachment</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.py deleted file mode 100644 index 1540863057a18baa449744acaf0b7eb6dbb519d6..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.py +++ /dev/null @@ -1,27 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict( - "Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - response_json = jio.putDocumentMetadata(doc, overwrite=False) -except (ValueError, TypeError, LookupError) as e: - return jio.sendError(jio.createConflictDict("Cannot post document", str(e))) -# except KeyError as e: -# return jio.sendError(jio.createForbiddenDict("Cannot post document", str(e))) -# except LookupError as e: -# return jio.sendError(jio.createConflictDict("Cannot post document", str(e))) - -return jio.sendSuccess(response_json) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.xml deleted file mode 100644 index 53a2a64d4c07ca26c1cefd739d935d34a15c0cdf..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_post</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.py deleted file mode 100644 index 1214cc7a36bcb2442f19bb2786e169b6b1f0f0b1..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.py +++ /dev/null @@ -1,24 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - response_json = jio.putDocumentMetadata(doc, need_id=True) -except (ValueError, TypeError, KeyError) as e: - return jio.sendError(jio.createConflictDict("Cannot put document", str(e))) -# except KeyError as e: -# return jio.sendError(jio.createForbiddenDict("Cannot put document", str(e))) - -return jio.sendSuccess(response_json) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.xml deleted file mode 100644 index 4c72db8f381aa2f745be682f21f2e86406956ed1..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_put</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.py deleted file mode 100644 index 27ce53c897244821728c28deef1a87f467653b82..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.py +++ /dev/null @@ -1,24 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - response_json = jio.putDocumentAttachment(doc) -except (ValueError, TypeError, KeyError) as e: - return jio.sendError(jio.createConflictDict("Cannot put attachment", str(e))) -# except TypeError as e: -# return jio.sendError(jio.createBadRequestDict("Cannot put attachment", str(e))) - -return jio.sendSuccess(response_json) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.xml deleted file mode 100644 index 73e1ba11bbddf4110377a304551ba44f10bd7251..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_putAttachment</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.py deleted file mode 100644 index 052256acf216d572a10f0c5567c0bdaf6c559c0d..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.py +++ /dev/null @@ -1,24 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - response_json = jio.removeDocument(doc) -except (ValueError, TypeError) as e: - return jio.sendError(jio.createBadRequestDict("Cannot remove document", str(e))) -except LookupError as e: - return jio.sendError(jio.createNotFoundDict("Cannot remove document", str(e))) - -return jio.sendSuccess(response_json) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.xml deleted file mode 100644 index 790282119ba5d79c9b5dd9476ff9bc5b3a30c0be..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_remove</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.py deleted file mode 100644 index 74209579717e20ff048e87ad155d7a0d90d110fb..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.py +++ /dev/null @@ -1,24 +0,0 @@ -import json -#from Products.ERP5Type.Log import log -# use JSON.parse as json.loads and JSON.stringify as json.dumps - -context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*") - -jio = context.JIO_class() - -try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"]) -except KeyError: - return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received")) - -try: mode = str(context.REQUEST.form["mode"]) -except KeyError: mode = "generic" -jio.setMode(mode) - -try: - response_json = jio.removeAttachment(doc) -except (ValueError, TypeError) as e: - return jio.sendError(jio.createConflictDict("Cannot remove attachment", str(e))) -except LookupError as e: - return jio.sendError(jio.createNotFoundDict("Cannot remove attachment", str(e))) - -return jio.sendSuccess(response_json) diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.xml deleted file mode 100644 index 90de7b41b61c0741b7eb273c75e9e0f22e8d167d..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_removeAttachment</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.xml deleted file mode 100644 index a86db0ce3f572918134d97460ba97bdae8ae1733..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>_params</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>JIO_repair</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_jio/bt/license b/bt5/erp5_jio/bt/license deleted file mode 100644 index 3a3e12bcad97e4b3bdd6a8bb499fd23a4bcb0819..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/bt/license +++ /dev/null @@ -1 +0,0 @@ -GPL \ No newline at end of file diff --git a/bt5/erp5_jio/bt/maintainer_list b/bt5/erp5_jio/bt/maintainer_list deleted file mode 100644 index d3b16d74a385c864ef1f7a9b6615c86555d07513..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/bt/maintainer_list +++ /dev/null @@ -1 +0,0 @@ -tristan cavelier \ No newline at end of file diff --git a/bt5/erp5_jio/bt/skip_coding_style_test b/bt5/erp5_jio/bt/skip_coding_style_test deleted file mode 100644 index 56a6051ca2b02b04ef92d5150c9ef600403cb1de..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/bt/skip_coding_style_test +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/bt5/erp5_jio/bt/template_format_version b/bt5/erp5_jio/bt/template_format_version deleted file mode 100644 index 56a6051ca2b02b04ef92d5150c9ef600403cb1de..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/bt/template_format_version +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/bt5/erp5_jio/bt/template_skin_id_list b/bt5/erp5_jio/bt/template_skin_id_list deleted file mode 100644 index 97d7a9e59b03977149f3ca1b5229c52a85e72863..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/bt/template_skin_id_list +++ /dev/null @@ -1 +0,0 @@ -erp5_jio \ No newline at end of file diff --git a/bt5/erp5_jio/bt/title b/bt5/erp5_jio/bt/title deleted file mode 100644 index 97d7a9e59b03977149f3ca1b5229c52a85e72863..0000000000000000000000000000000000000000 --- a/bt5/erp5_jio/bt/title +++ /dev/null @@ -1 +0,0 @@ -erp5_jio \ No newline at end of file