diff --git a/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.test_kaz.py b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.test_kaz.py new file mode 100644 index 0000000000000000000000000000000000000000..22c578042cffdb5d133f35859489c0d21297536e --- /dev/null +++ b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.test_kaz.py @@ -0,0 +1,12 @@ + +def getObjectByOid(self, oid):#XXXYYY + ob = self._p_jar[oid] + #return ob + result = [ob.__class__,] + n = 1 + for k,v in ob.iteritems(): + result.append((k, k.__class__,v, v.__class__)) + n += 1 + if n > 100: + break + return result \ No newline at end of file diff --git a/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.test_kaz.xml b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.test_kaz.xml new file mode 100644 index 0000000000000000000000000000000000000000..5fce63fd62791d7f1cb4fd2b679b21c092ec3a45 --- /dev/null +++ b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.test_kaz.xml @@ -0,0 +1,127 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Extension Component" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_recorded_property_dict</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>test_kaz</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>extension.erp5.test_kaz</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Extension Component</string> </value> + </item> + <item> + <key> <string>sid</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content_error_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>text_content_warning_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>erp5</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </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> + <item> + <key> <string>component_validation_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>validate</string> </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>validated</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.testrc.py b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.testrc.py new file mode 100644 index 0000000000000000000000000000000000000000..7c26b7b510a9eceb32f9aacaf27fa415f0dad8a7 --- /dev/null +++ b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.testrc.py @@ -0,0 +1,20 @@ +def testrc(self): + result = '' + portal = self.getPortalObject() + + selection = portal.portal_selections.getSelectionFor('person_module_selection') + key_list = selection.__dict__.keys() + key_list.sort() + for key in key_list: + result += '%s: %s\n' % (key, selection.__dict__[key]) + return result + return str(selection.__dict__) + + print selection.checked_uids + print selection.domain_path + print selection.domain_list + if selection.domain is not None: + print selection.domain.asDomainDict() + + return printed + return 'couscous' \ No newline at end of file diff --git a/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.testrc.xml b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.testrc.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a034b67eb273c6e55df039e3a281aab7af004e9 --- /dev/null +++ b/bt5/romain_dev/ExtensionTemplateItem/portal_components/extension.erp5.testrc.xml @@ -0,0 +1,127 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Extension Component" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_recorded_property_dict</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>testrc</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>extension.erp5.testrc</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Extension Component</string> </value> + </item> + <item> + <key> <string>sid</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content_error_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>text_content_warning_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>erp5</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </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> + <item> + <key> <string>component_validation_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>validate</string> </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>validated</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_abstract.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_abstract.png new file mode 100644 index 0000000000000000000000000000000000000000..8fbe465b5350ccc72f55a513a15472ae427d1e85 Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_abstract.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_abstract.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_abstract.xml new file mode 100644 index 0000000000000000000000000000000000000000..059bd7846ccd3ff1d75484b1dc88806383cad3e5 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_abstract.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>3c07e11f695f1b835e35c40ad9053921</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>abstract.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>Abstract-Background-PNG-Background.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>811</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_abstract</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>abstract wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>1000</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570031850.28</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>978.55869.33097.28450</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570031865.37</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_automn.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_automn.png new file mode 100644 index 0000000000000000000000000000000000000000..801b01b6237a136b3279995aee5de5ae1f8b34d0 Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_automn.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_automn.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_automn.xml new file mode 100644 index 0000000000000000000000000000000000000000..62a12a02f18a5ea8aa0ebab04d9695af517564e0 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_automn.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>8793a163fd5752913f4955ee05429103</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>autumn.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>kissclipart-leaf-autumn-png-clipart-autumn-desktop-wallpaper-b109dc9b0688af64.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>900</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_automn</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Autumn wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>900</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1574439611.96</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>979.63793.28759.15121</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1574439606.56</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_complex.jpg b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_complex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d2307de8307725ebfbde31e92b391c9d455a359 Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_complex.jpg differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_complex.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_complex.xml new file mode 100644 index 0000000000000000000000000000000000000000..fdcfcaad32934699127dc9bfd7b1009f77bd80d2 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_complex.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>63b8a650f482bb9658c4f11ca90a1074</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/jpeg</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>complex.jpg</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>2724.jpg</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>720</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_complex</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Complex wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>1280</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1574436883.19</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>979.63750.47190.38195</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1574436911.02</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_grumpy.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_grumpy.png new file mode 100644 index 0000000000000000000000000000000000000000..f73ceef33bbbc52948f0faaa82a457ea8acb0401 Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_grumpy.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_grumpy.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_grumpy.xml new file mode 100644 index 0000000000000000000000000000000000000000..882dd03cd7caa8783c895f7a72d2e23251f853d7 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_grumpy.xml @@ -0,0 +1,327 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>publication_section/romain_pub</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>0902777a614513139cc299ba6f1c4e9c</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>grumpy.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>30251-grumpy-cat-1920x1200-meme-wallpaper.jpg.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>1200</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_grumpy</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> <string>Grumpy wallpaper</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Grumpy wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>1920</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1567673769.31</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>984.42594.65315.33826</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1592482746.8</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_hobbes.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_hobbes.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc113b595c36ddfda710296dce8cbfaf3e98898 Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_hobbes.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_hobbes.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_hobbes.xml new file mode 100644 index 0000000000000000000000000000000000000000..d769986845f472bf9b0e623ae15bde2b486defe1 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_hobbes.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>2d3df245db0395fb3ab10e45fd9253ce</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>hobbes.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>Download-Calvin-And-Hobbes-PNG-Pic.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>800</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_hobbes</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Hobbes wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>1280</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570615836.3</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>979.64.7806.57088</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570615726.62</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_noel.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_noel.png new file mode 100644 index 0000000000000000000000000000000000000000..aba7b7c987c5415f6ce4f6e73ff11d7340b1e89a Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_noel.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_noel.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_noel.xml new file mode 100644 index 0000000000000000000000000000000000000000..9224311f94c9adb1b94fcb07ed68a25c7e9e3187 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_noel.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>bc3cfa98569409f740865db09f48a841</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>noel.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>tOE6gh.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>900</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_noel</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Noel wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>1600</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1574438027.23</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>979.63769.51607.43554</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1574438036.32</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_spiro.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_spiro.png new file mode 100644 index 0000000000000000000000000000000000000000..a28d3fd8e7a304ad796586f6979ef60a81994a2f Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_spiro.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_spiro.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_spiro.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a94ac2e1ef336c6981a9ae621b652f4aceb4884 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_spiro.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>9309540502bd63fce275cd35ba892202</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>spiro.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>t茅l茅chargement.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>960</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_spiro</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>spiro wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>960</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570178217.71</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>978.58308.63059.29644</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570178230.57</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_waves.png b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_waves.png new file mode 100644 index 0000000000000000000000000000000000000000..ea144319f69fcac6cffb4e87e0e824f4b78ccb9f Binary files /dev/null and b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_waves.png differ diff --git a/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_waves.xml b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_waves.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba0ef9ab9a75187170f7bef2f6d889558042ab36 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/image_module/romain_wallpaper_waves.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_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> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> <string>e8a3742b8e736deed9840baa61bab611</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>waves.png</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>filename</string> </key> + <value> <string>Waves.png</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>795</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_wallpaper_waves</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Image</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>waves wallpaper</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>979</int> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570178971.23</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>978.58321.34125.43554</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1570178983.55</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_1.xml b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b709b213babcba9935e016f9f5d1fe288116eff --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_1.xml @@ -0,0 +1,300 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Notebook" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_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>_Change_local_roles_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>_View_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>https://alpha.iodide.io/notebooks/34/?viewMode=report</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_notebook_1</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Notebook</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content</string> </key> + <value> <string encoding="cdata">< featured at the top of the ["JupyterLab is ready for users"](https://blog.jupyter.org/jupyterlab-is-ready-for-users-5a6f039b8906) announcement on the [Jupyter blog](https://blog.jupyter.org/).\n +\n +Having access to browser APIs and live computation alongside an analysis opens up a few opportunities when it comes to telling certain [computational narratives](https://blog.jupyter.org/project-jupyter-computational-narratives-as-the-engine-of-collaborative-data-science-2b5fb94c3c58). In this case the browser gives us richer real-time interactivity and much greater responsiveness than is typically possible with a remotely hosted kernel, and access to the media APIs offered by the web platform (particularly WebGL) allow us to create 3d graphics that are highly portable.\n +\n +%% js\n +// this is a hack to allow the ode45-cash-karp lib to import as expected.\n +// need to browserify this module.\n +module = {}\n +\n +%% fetch\n +js: https://cdn.jsdelivr.net/npm/ode45-cash-karp@1.1.0/lib/index.min.js\n +js: https://cdnjs.cloudflare.com/ajax/libs/plotly.js/1.36.1/plotly.min.js\n +js: https://d3js.org/d3.v5.min.js\n +js: https://code.jquery.com/jquery-1.12.4.js\n +%% js\n +ode45 = module.exports\n +\n +%% js\n +function integrateLorenz(t0, tmax, dt0, S0, sigma, beta, rho) {\n + const lorenzSystem = function(dSdt, S, t) {\n + const [x,y,z] = S\n + dSdt[0] = sigma*(y-x)\n + dSdt[1] = x*(rho-z) - y\n + dSdt[2] = x*y - beta*z\n + }\n + const integrator = ode45( S0.slice(), lorenzSystem, t0, dt0 )\n + // Integrate up to tmax:\n + const t = [], S = []\n + while( integrator.step( tmax ) ) {\n + // while( t.length < 2000 ) {\n + // Store the solution at this timestep:\n + // integrator.step()\n + t.push( integrator.t )\n + S.push( integrator.y.slice() )\n + }\n + return [S,t]\n +}\n +\n +%% js\n +sigma = 10\n +beta = 2.67\n +rho = 28\n +\n +var t0 = 0, tmax = 4, dt0 = 1e-3\n +S0random = () => [50*(Math.random()-.5), 50*(Math.random()-.5), 40*Math.random()+10]\n +var S0 = S0random()\n +\n +var numTraces = 10\n +tracesS0 = []\n +traceData = []\n +traces = []\n +for (let i=0; i<numTraces; i++){\n + tracesS0.push(S0random())\n + traceData.push(integrateLorenz(t0, tmax, dt0, tracesS0[i].slice(), sigma, beta, rho))\n + traces.push({\n + type: \'scatter3d\',\n + mode: \'lines\',\n + x: traceData[i][0].map(s => s[0]),\n + y: traceData[i][0].map(s => s[1]),\n + z: traceData[i][0].map(s => s[2]),\n + // opacity: .5,\n + name: "line-"+i,\n + line: {width: 4, color: d3.interpolateRainbow(i/numTraces)}\n + })\n +}\n +\n +%% js\n +function initPlot(targetDiv){\n + targetDiv.innerHTML = \'\'\n + Plotly.newPlot(\n + targetDiv,\n + traces,\n + {\n + showlegend: false,\n + height: 550,\n + width: 800,\n + autosize: false,\n + scene:{\n + xaxis: {range: [-30, 30], autorange: false, tickmode: \'linear\', tick0: 0, dtick: 5},\n + yaxis: {range: [-30, 30], autorange: false, tickmode: \'linear\', tick0: 0, dtick: 5},\n + zaxis: {range: [0, 70], autorange: false, tickmode: \'linear\', tick0: 0, dtick: 5},\n + aspectratio: {x: 1, y: 1, z: 1}\n + },\n + margin: { l: 0, r: 0, b: 0, t: 0, pad: 0},\n + } \n + )\n +}\n +\n +%% js\n +function updateTraces(tracesS0, sigma, beta, rho){\n + const traceUpdates = []\n + for (let i=0; i<numTraces; i++){\n + traceUpdates.push(integrateLorenz(t0, tmax, dt0, tracesS0[i].slice(), sigma, beta, rho))\n + }\n + var data_update = {\n + x: traceUpdates.map(tr => tr[0].map(s => s[0])),\n + y: traceUpdates.map(tr => tr[0].map(s => s[1])),\n + z: traceUpdates.map(tr => tr[0].map(s => s[2])),\n + }\n + Plotly.restyle(\'lorenz-graph\', data_update)\n +}\n +\n +%% js\n +// jQuery is out of fashion for building gigantic web apps, but it\'s extremely well-documented \n +// and quite well-suited for doing interactive manipulations of the DOM in smaller code bases,\n +// like an Iodide notebook.\n +\n +// In the future, we may wrap this functionality into a "widgets" section of our standard lib,\n +// but because we\'re close to the DOM and there are already so many libs that do this, it\'s not\n +// a pressing need.\n +\n +function initControls(){ \n + props = {\n + sigma: {min:0, max:50, value:10, step: .01},\n + beta: {min:-2, max:10, value:2.67, step: .01},\n + rho: {min:0, max:50, value:28, step: .01},\n + }\n +\n + $("#lorenz-controls").empty();\n + // set up sliders\n + ["sigma","beta","rho"].forEach( (param) => {\n + controlDiv = $(`<div><input id="${param}-slider" type="range" step="0.01"></input>\n +${param} (<span id="${param}-val">${props[param].value}</span>)<div>`)\n + $("#lorenz-controls").append(controlDiv)\n + \n + const thisSlider = $(`#${param}-slider`)\n + thisSlider.prop(props[param]) \n + thisSlider.on("input", () => {\n + const [sigma, beta, rho] = getUiParamVals()\n + updateTraces(tracesS0, sigma, beta, rho)\n + setUiParamVals({sigma, beta, rho})\n + }) \n + })\n + \n + // set up reset button\n + const buttonDiv = $(\'<div><input id="reset-button" type="button" value="Reset parameters"></div>)\')\n + $("#lorenz-controls").append(buttonDiv)\n + $("#reset-button").on("click", () => {\n + const [sigma,beta,rho] = [10, 2.67, 28]\n + setUiParamVals({sigma, beta, rho})\n + setSliderVals({sigma, beta, rho})\n + updateTraces(tracesS0, sigma, beta, rho)\n + })\n +}\n +\n +function getUiParamVals(){\n + return ["sigma","beta","rho"].map( param => \n + $(`#${param}-slider`).prop("value")\n + )\n +}\n + \n +function setUiParamVals(paramObj){\n + ["sigma","beta","rho"].forEach( param => $(`#${param}-val`).html(paramObj[param]) )\n +}\n +\n +function setSliderVals(paramObj){\n + ["sigma","beta","rho"].forEach( param => $(`#${param}-slider`).prop("value", paramObj[param]) )\n +}\n +\n +%% md\n +### The Lorenz system\n +\n +Let\'s explore the Lorenz system of differential equations:\n +\n +$$\n +\\begin{aligned}\n +\\dot{x} & = \\sigma(y-x) \\\\\n +\\dot{y} & = \\rho x - y - xz \\\\\n +\\dot{z} & = -\\beta z + xy\n +\\end{aligned}\n +$$\n +\n +Below we plot the evolution of this system for several different randomly chosen initial conditions (the trajectory for each initial condition is shown in a different color). You can rotate, pan, and zoom to gain a better understanding of the three-dimensional structure of the attractor. Additionally, you can adjust the sliders below to change the parameters of the system.\n +\n +<div id="lorenz-graph" style="text-align:center">\n + (loading Plotly graphing lib)\n + </br></br>\n + <img src="https://cdnjs.cloudflare.com/ajax/libs/galleriffic/2.0.1/css/loader.gif"></img>\n +</div>\n +\n +<div id="lorenz-controls"> </div>\n +\n +%% js\n +initPlot(document.getElementById(\'lorenz-graph\'))\n +initControls()\n +\n +%% css\n +/* let\'s add a fine border around the plot canvas to make it clearer when the plot gets cut off at the edge of the canvas*/\n +canvas { border: 1px solid #eee }\n +\n +%% js + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>The Lorenz Attractor in Iodide</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_2.xml b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..269c8b6a22143f5905bca2dc66bd4c29ca46c173 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_2.xml @@ -0,0 +1,741 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Notebook" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_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>_Change_local_roles_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>_View_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>https://alpha.iodide.io/notebooks/193/?</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_notebook_2</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Notebook</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content</string> </key> + <value> <string encoding="cdata">< to demonstrate the various aspects which affect the happiness of a country through exploratory analysis. Only 7 main factors have been considered. There were other supporting factors such as Life Ladder, Democratic Quality etc. which are not included in this notebook. The contribution of these supporting factors has been noted down as a Residual score.\n +\n +%% fetch\n +js: https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.2/d3.js\n +js: https://cdn.plot.ly/plotly-latest.min.js\n +text: happinessData=https://gist.githubusercontent.com/djbarnwal/521eb8da9f6546c18f2b7d6d0f365549/raw/f9f39e0e58fdbcf4bbd66a8cbfec5df497ae1b79/happiness_data.csv\n +\n +%% md\n +<svg class=\'ranking\'></svg>\n +\n +The above visualization ranks the countries based on Happiness score. Scoring 7.632, **Finland** is at the top while **Burundi** is at the very bottom with a score of 2.905. The Scandinavian countries have taken the top four spots.\n +\n +%% js\n +var dataset;\n +var keys;\n +\n +var width = 1080,\n + height = 1800;\n +\n +var svg = d3.select(".ranking").attr("width", width).attr("height", height),\n + margin = {top: 20, right: 20, bottom: 30, left: 150},\n + width = +svg.attr("width") - margin.left - margin.right,\n + height = +svg.attr("height") - margin.top - margin.bottom,\n + g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");\n +\n +var y = d3.scaleBand()\n + .rangeRound([0, height])\n + .paddingInner(0.05)\n + .align(0.1);\n +\n +var x = d3.scaleLinear()\n + .rangeRound([0, width]);\n +\n +var z = d3.scaleOrdinal()\n + .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);\n +\n +var data = d3.csvParse(happinessData)\n +dataset = data \n +keys = data.columns.slice(3);\n +\n +// Sort row on basis of Happiness Score\n +data.sort(function(a, b) { return b[\'Happiness score\'] - a[\'Happiness score\']; });\n +y.domain(data.map(function(d) { return d.Country; }));\n +x.domain([0, d3.max(data, function(d) { return d[\'Happiness score\']; })]).nice();\n +z.domain(keys);\n +\n +g.append("g")\n + .selectAll("g")\n + .data(d3.stack().keys(keys)(data))\n + .enter().append("g")\n + .attr("fill", function(d) { return z(d.key); })\n + .selectAll("rect")\n + .data(function(d) { return d; })\n + .enter().append("rect")\n + .attr("y", function(d) { return y(d.data.Country); })\n + .attr("x", function(d) { return x(d[0]); })\n + .attr("width", function(d) { return x(d[1]) - x(d[0]); })\n + .attr("height", y.bandwidth());\n +\n +g.append("g")\n + .attr("class", "axis")\n + .attr("transform", "translate(0,0)")\n + .call(d3.axisLeft(y));\n +\n +g.append("g")\n + .attr("class", "axis")\n + .attr("transform", "translate(0,"+height+")")\n + .call(d3.axisBottom(x).ticks(null, "s"))\n + .append("text")\n + .attr("y", 2)\n + .attr("x", x(x.ticks().pop()) + 0.5)\n + .attr("dy", "0.32em")\n + .attr("fill", "#dddddd")\n + .attr("font-weight", "bold")\n + .attr("text-anchor", "start")\n + .text("Happiness Score")\n + .attr("transform", "translate("+ (-width) +",-10)");\n +\n +var legend = g.append("g")\n + .attr("font-family", "sans-serif")\n + .attr("font-size", 10)\n + .attr("font-weight", "bold")\n + .attr("text-anchor", "end")\n + .selectAll("g")\n + .data(keys.slice().reverse())\n + .enter().append("g")\n + //.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });\n + .attr("transform", function(d, i) { return "translate(-50," + (300 + i * 20) + ")"; });\n +\n +legend.append("rect")\n + .attr("x", width - 19)\n + .attr("width", 19)\n + .attr("height", 19)\n + .attr("fill", z);\n +\n +legend.append("text")\n + .attr("x", width - 24)\n + .attr("y", 9.5)\n + .attr("fill", "#dddddd")\n + .attr("dy", "0.32em")\n + .text(function(d) { return d; });\n +\n +%% js\n +dataset\n +\n +%% js\n +function unpack(key, data) {\n + return data.map(function(object) { return object[key]; });\n +}\n +\n +%% md\n +<div id=\'choropleth\'/>\n +\n +%% js\n +var data = [{\n + type: \'choropleth\',\n + locationmode: \'country names\',\n + locations: unpack(\'Country\', dataset),\n + z: unpack(\'Happiness score\', dataset),\n + text: unpack(\'Country\', dataset),\n + colorscale: [\n + [0, \'rgb(254,235,226)\'], [0.2, \'rgb(252,197,192)\'],\n + [0.4, \'rgb(250,159,181)\'], [0.6, \'rgb(247,104,161)\'],\n + [0.8, \'rgb(197,27,138)\'], [1, \'rgb(122,1,119)\']\n + ]\n + // autocolorscale: true\n +}];\n +\n +var layout = {\n + title: \'Happiness Score 2018\',\n + colorbar: {\n + tickfont: {\n + color: \'#ccc\'\n + }\n + },\n + plot_bgcolor: \'transparent\',\n + paper_bgcolor: \'transparent\',\n + width: 1080,\n + geo: {\n + projection: {\n + type: \'equirectangular\'\n + }\n + },\n + margin: {\n + l: 0,\n + r: 0,\n + b: 0,\n + t: 0,\n + pad: 2\n + },\n + marker: {\n + line:{\n + color: \'rgb(255,255,255)\',\n + width: 2\n + }\n + }\n +};\n +\n +Plotly.plot(choropleth, data, layout, {showLink: false});\n +\n +%% js\n +keys\n +\n +%% md\n +## Happiness Score\n +\n +<div class=\'stats\'>\n + <div class=\'count\'><span class=\'max\'></span>Max</div>\n + <div class=\'count\'><span class=\'mean\'></span>Mean</div>\n + <div class=\'count\'><span class=\'min\'></span>Min</div>\n +</div>\n +\n +%% css\n +.stats {\n + display: flex;\n + padding: 15px 15px 30px;\n +}\n +\n +.count {\n + text-align: center;\n + font-size: 20px;\n + border-radius: 50%;\n + width: 150px;\n + height: 150px;\n + padding: 25px;\n +}\n +\n +.count span {\n + display: block;\n + font-size: 34px;\n + font-weight: 100;\n +}\n +\n +%% js\n +var hapMax = d3.max(dataset, function(d) {return d[\'Happiness score\']})\n +var hapMin = d3.min(dataset, function(d) {return d[\'Happiness score\']})\n +var hapMean = d3.mean(dataset, function(d) {return d[\'Happiness score\']}).toFixed(3)\n +\n +var hapColors = [\'#f0675c\', \'#375d81\',\'#d4273e\'];\n +\n +d3.select(\'.max\').text(hapMax);\n +d3.select(\'.mean\').text(hapMean);\n +d3.select(\'.min\').text(hapMin);\n +\n +d3.select(\'.stats\')\n + .selectAll(\'.count\')\n + .data(hapColors)\n + .style(\'background\', function(d) {return d});\n +\n +%% js\n +keys\n +\n +%% md\n +The scores for various factors are in different scales and thus not suitable for individual comparison. We will normalize the dataset using the below formula in order to achieve uniformity throughout our dataset for a more natural comparison and analysis.\n +\n +$$\n +X_{norm} = \\dfrac{X - X_{min}}{X_{max} - X_{min}}\n +$$\n +\n +The **mean** value for the various parameters after normalizing them are -\n +\n +%% js\n +// Deep cloning array of objects for later use\n +var unscaled_dataset = JSON.parse(JSON.stringify(dataset));\n +\n +var extendedKeys = [\'Happiness score\', ...keys];\n +var scales = {};\n +\n +for (key of extendedKeys) {\n + scales[key] = d3.scaleLinear().domain(d3.extent(unpack(key, dataset)))\n +}\n +\n +function normalize(value, property) {\n + return scales[property](value);\n +}\n +\n +\n +dataset.forEach(function(d){\n + for(var property in d) {\n + if(extendedKeys.indexOf(property) >=0) {\n + d[property] = normalize(d[property], property).toFixed(3)\n + }\n + }\n +});\n +\n +%% js\n +dataset\n +\n +%% md\n +<div class=\'meanStats\'></div>\n +\n +%% md\n +Some interesting observations -\n +\n +1. Perceptions of corruption are bad throughout the world. With **Singapore** at the top, the rest of the world averages with a score of only **0.246**.\n +2. The world average for Social Support is reasonably close to the global maximum. **8** out of the bottom **10** countries in this category are **African**. The exceptions being Afghanistan and Georgia.\n +3. **Myanmar** is the most generous country whereas **Greece** is the least.\n +\n +%% css\n +.meanCount {\n + height: 150px;\n + width: 150px;\n + border-radius: 50%;\n + flex-direction: column-reverse;\n + font-size: 13px;\n + text-align: center;\n + justify-content: flex-end;\n + padding: 0 11px;\n + display: flex;\n + margin: 10px 25px;\n +}\n +\n +.meanCount h {\n + font-size: 30px;\n + margin-top: 30px;\n + font-weight: 100;\n +}\n +\n +.meanStats {\n + display: flex;\n + flex-wrap: wrap;\n + justify-content: center;\n +}\n +\n +%% js\n +var mean = [];\n +for(var key of keys) {\n + mean.push(d3.mean(dataset, function(d) {return d[key]}).toFixed(3))\n +}\n +\n + d3.select(\'.meanStats\')\n + .selectAll(\'g\')\n + .data(keys)\n + .enter()\n + .append(\'g\')\n + .attr(\'class\', \'meanCount\')\n + .text(function(d) {return d})\n + .append(\'h\')\n + .data(mean)\n + .text(function(d) {return d});\n +\n +var hapColors = [\'#c9283e\', \'#c42f59\', \'#0091ff\', \'#e88e34\', \'#5670d6\', \'#9d3bc0\', \'#006f67\'];\n +\n +d3.select(\'.meanStats\')\n + .selectAll(\'.meanCount\')\n + .data(hapColors)\n + .style(\'background\', function(d) {return d});\n +\n +%% md\n +## What makes a country happy?\n +\n +What are the things that make a country happy? Below we have a plot consisting of the top 5 and bottom 5 nations ranked according to their Happiness score.\n +\n +%% md\n +<div id=\'top5\'/>\n +<div id=\'bottom5\'/>\n +\n +%% js\n +var topTrace = [],\n + bottomTrace = [];\n +\n +var top5 = dataset.slice(0,5);\n +var bottom5 = dataset.slice(-5);\n +\n +for(var key of keys) {\n + topTrace.push({\n + x: unpack(\'Country\',top5),\n + y: unpack(key,top5),\n + name: key,\n + type: \'bar\'\n + })\n +\n + bottomTrace.push({\n + x: unpack(\'Country\',bottom5),\n + y: unpack(key,bottom5),\n + name: key,\n + type: \'bar\'\n + })\n +}\n +\n +var layout = {\n + height: 280,\n + width: 1080,\n + margin: {\n + t: 10,\n + },\n + xaxis: {\n + tickfont: {\n + color: \'#fefefe\'\n + },\n + },\n + yaxis: {\n + domain: [0, 1],\n + tickfont: {\n + color: \'#fefefe\'\n + },\n + gridcolor: \'#555\',\n + },\n + legend: {\n + font: {\n + color: \'#fefefe\'\n + }\n + },\n + plot_bgcolor: \'#302f33\',\n + paper_bgcolor: \'#302f33\'\n +};\n +\n +Plotly.newPlot(\'top5\', topTrace, layout, {displayModeBar: false});\n +Plotly.newPlot(\'bottom5\', bottomTrace, layout, {displayModeBar: false});\n +\n +%% md\n +Happy Countries share in common a high GDP, great Social Support, a good life expectancy and a relatively high Freedom to make life choices. Countries with a bad happy score are in general poor and rank low on perceptions of corruption.\n +\n +%% md\n +## Are Happiness and Money correlated?\n +\n +Happiness and Money are two states which are often compared. Let\'s see if they are correlated or not. Before we begin, we would need to remove the component of **GDP Per Capita** from **Happiness Score** for an unbiased comparison. Thus, we create a new parameter defined as -\n +\n +$$HapScore_{new} = HapScore_{original} - GDPPerCapita$$\n +\n +The below visualization depicts the spread of **Happiness** (new) with the change in **GDP Per capita** (un-normalized)\n +\n +%% js\n +var hap_new = [];\n +var GDP = unpack(\'GDP per capita\', unscaled_dataset)\n +\n +unscaled_dataset.forEach(function(d){\n + hap_new.push((d[\'Happiness score\'] - d[\'GDP per capita\']).toFixed(3))\n +});\n +\n +%% md\n +<div id=\'hapGDP\'/>\n +\n +%% js\n +var HapTrace = [{\n + x: GDP,\n + y: hap_new,\n + mode: \'markers\',\n + text: unpack(\'Country\', dataset),\n + marker: {\n + color: \'rgb(255, 217, 102)\',\n + size: 12\n + },\n + type: \'scatter\'\n +}];\n +\n +\n +var layout = {\n + width: 1080,\n + margin: {\n + t: 10,\n + },\n + xaxis: {\n + title: \'GDP per Capita\',\n + showgrid: false,\n + zeroline: false,\n + color: \'#fefefe\',\n + },\n + yaxis: {\n + title: \'Happiness\',\n + color: \'#fefefe\',\n + showline: false,\n + gridcolor: \'#555\',\n + },\n + plot_bgcolor: \'#302f33\',\n + paper_bgcolor: \'#302f33\'\n +};\n +\n +Plotly.newPlot(\'hapGDP\', HapTrace, layout,{displayModeBar: false});\n +\n +%% md\n +The data points are spread throughout the plot. We can observe that on average happiness increases as GDP per Capita increases. There are outliers such as **Somalia** and **Qatar**, both having similar Happiness score but are on the opposite end of the spectrum in terms of GDP Per Capita.\n +\n +On average countries with higher GDP Per Capita have higher happiness and countries with lower GDP Per Capita have lower happiness. The spread is very diverse for nations having GDP Per Capita in the mid range.\n +\n +%% md\n +## Does region affect Happiness?\n +\n +It is quite evident from the Choropleth map (at the beginning of this report) that some areas are more happy than the others. The below tables shows us the disparities between different regions of the world.\n +\n +%% js\n +var regions = [...new Set(unpack(\'Region indicator\', dataset))];\n +\n +var dataByRegion = d3.nest()\n + .key(function(d) { return d[\'Region indicator\']; })\n + .rollup(function(v) {\n + var regData = {};\n + for(key of keys) {\n + regData[key] = d3.mean(v, function(d) { return d[key]; }).toFixed(3)\n + }\n + return {...regData, \'Happiness score\': d3.mean(v, function(d) { return d[\'Happiness score\']; }).toFixed(3)}; })\n + .entries(dataset);\n +\n +dataByRegion\n +\n +%% css\n +#regionTable {\n + font: 13px\n +}\n +\n +#regionTable th {\n + text-align: right;\n + padding-right: 6px;\n + min-width: 43px;\n + text-align: left;\n +}\n +\n +#regionTable thead td {\n + cursor: s-resize;\n +}\n +\n +#regionTable tbody tr:first-child td {\n + padding-top: 2px;\n +}\n +\n +.user-markdown table th, .user-markdown table td {\n + border: none !important;\n +}\n +\n +#regionTable thead tr:first-child th {\n + text-align: center;\n +}\n +\n +#regionTable tbody td {\n + padding: 0;\n + border-left: solid 1px #000;\n + width: 110px;\n +}\n +\n +/* #regionTable tbody circle {\n + fill: steelblue;\n +} */\n +\n +.toolTip {\n + position: absolute;\n + display: none;\n + min-width: 80px;\n + height: auto;\n + background: none repeat scroll 0 0 #ffffff;\n + border: 1px solid #6F257F;\n + padding: 14px;\n + text-align: center;\n +}\n +\n +%% js\n +extendedKeys\n +\n +%% md\n +<table id=\'regionTable\'>\n + <thead>\n + <tr>\n + <td>Region</td>\n + <th>Happiness Score</th>\n + </tr>\n + </thead>\n + <tbody>\n + </tbody>\n +</table>\n +\n +%% md\n +North America and ANZ is the happiest region. They are doing considerably better than the other regions in almost all the categories. Sub-Saharan Africa and South Asia are lagging behind the others. Perceptions of corruption are bad in most of the regions. There is a great resemblance between Western Europe and North America with the current scoring parameters.\n +\n +%% js\n +d3.select("#regionTable thead tr").selectAll("th")\n + .data(extendedKeys)\n + .enter().append("th")\n + .text(function(d) { return d });\n +\n +var regColors = [\'#600ce8\', \'#c42f59\', \'#0574ab\', \'#5f4bb6\', \'#86a5d9\', \'#499f68\', \'#34515f\', \'#73c2be\', \'#d7907b\', \'#27476e\'];\n +\n +var tooltip = d3.select("body").append("div").attr("class", "toolTip");\n +\n +var tr = d3.select("#regionTable tbody").selectAll("th")\n + .data(dataByRegion)\n + .enter().append("tr");\n +\n +tr.append("th")\n + .text(function(d) { return d.key; });\n +\n +tr.selectAll("td")\n + .data(function(d) { return extendedKeys.map(function(k) { return d.value[k]}); })\n + .enter().append("td").append("svg")\n + .attr("width", 110)\n + .attr("height", 50)\n + .append("circle")\n + .attr("r", function(d) { return d * 25; })\n + .attr("cx", 55)\n + .attr("cy", 25)\n + .on("mousemove", function(d){\n + tooltip\n + .style("left", d3.event.pageX - 50 + "px")\n + .style("top", d3.event.pageY - 70 + "px")\n + .style("display", "inline-block")\n + .html(\'Value\' + "<br>" + (d));\n + })\n + .on("mouseout", function(d){ tooltip.style("display", "none");});\n + // .attr("width", function(d) { return d * 50; });\n +\n +d3.select("#regionTable tbody")\n + .selectAll("tr")\n + .data(regColors)\n + .style("fill", function(d) {return d});\n +\n +%% css\n +/* Notebook Presentation view settings */\n + @import url(\'https://fonts.googleapis.com/css?family=Roboto:700,900\');\n +.user-markdown h1, .user-markdown h2, .user-markdown h3, .user-markdown h4, .user-markdown h5, .user-markdown h6 {\n + font-family: \'Roboto\';\n + text-transform: uppercase;\n + text-align: center;\n +}\n +\n +.user-markdown p, .user-markdown h1, .user-markdown h2, .user-markdown h3, .user-markdown h4, .user-markdown h5, .user-markdown h6, .user-markdown ol, .user-markdown ul, .user-markdown pre, .user-markdown address, .user-markdown blockquote, .user-markdown dl, .user-markdown div, .user-markdown fieldset, .user-markdown form, .user-markdown hr, .user-markdown noscript, .user-markdown table {\n + max-width: 1080px;\n +}\n +\n +.pane-content {\n + background: #302f33;\n +}\n +.user-markdown a {\n + color: #f0675c;\n +}\n +\n +.user-markdown h1 {\n + font-size: 50px;\n + padding: 30px 0;\n + letter-spacing: 2px;\n + font-weight: 900;\n +}\n +\n +.user-markdown h2 {\n + font-size: 35px;\n + letter-spacing: 2px;\n + padding-top: 35px;\n +}\n +\n +.user-markdown {\n + color: #fefefe;\n +}\n +\n +.tick line {\n + stroke: #ddd;\n +}\n +\n +.tick text{\n + fill: #ddd;\n +}\n +\n +.axis .domain {\n + stroke: #ddd;\n +}\n +\n +#choropleth .cbaxis.crisp text {\n + fill: #fefefe !important;\n +}\n +\n +#choropleth .layer.bg rect {\n + fill-opacity: 0 !important;\n +}\n +\n +.user-markdown table tr {\n + background-color: transparent !important;\n + border-color: #444;\n +}\n +\n +%% js + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>World Happiness Report</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_3.xml b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_3.xml new file mode 100644 index 0000000000000000000000000000000000000000..61c6820dad2ded12eb7b13965ced6482ce7c86d6 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_3.xml @@ -0,0 +1,358 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Notebook" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_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>_Change_local_roles_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>_View_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_notebook_3</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Notebook</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content</string> </key> + <value> <string encoding="cdata">< project. \n +%% md\n +\n +<body>\n + <div id="container">\n + </div>\n +</body>\n +\n +%% js\n +var vShaderText = `\n + #ifdef GL_ES\n + precision highp float;\n + #endif\n + attribute float displacement;\n + varying vec2 vUv;\n + varying vec3 worldcoords;\n + varying vec4 projcoords;\n + void main()\n + {\n + vUv =uv;\n + vec3 newPos = position;\n + //worldcoords = (modelViewMatrix*vec4(position + vec3(0.5,0.5,0.5),1.0)).xyz; //changed slightly from first pass\n + worldcoords =position; //changed slightly from first pass\n + projcoords = projectionMatrix * modelViewMatrix * vec4(newPos,1.0);// this makes it screen coordinates\n + gl_Position = projectionMatrix * modelViewMatrix * vec4(newPos,1.0);\n + }\n +\n +`\n +\n +var fShaderText = `\n + #ifdef GL_ES\n + precision highp float;\n + #endif\n + varying vec2 vUv; \n + varying vec3 worldcoords;\n + varying vec4 projcoords;\n + uniform float shift;\n + uniform float scale;\n + uniform float xshift;\n + uniform sampler2D textyah;\n + uniform vec3 dir;\n + uniform float delta;\n + uniform float alphaCorrection;// not sure what alpha correction is\n + // lebarba code from github volumetric rendering\n + const int MAX_STEPS = 800;\n + // again lebarba code, but with some changes in the z indexing\n + //Acts like a texture3D using Z slices and trilinear filtering.\n +\n + //cpos was originally -6.5 to 6.5\n + vec4 marcher(vec3 cpos) { // cpos is the current position\n + vec3 colorCoords = cpos + shift; // takes position makesonly positive\n + //transforms (13,13,13) to 0-1 ranges\n + colorCoords /=scale;\n +\n + // convinced the problem is teh x\n + colorCoords.x += mod(floor(colorCoords.z*256.0),16.0); // 16 is the number of images on each axis\n + colorCoords.y += floor(colorCoords.z*256.0/16.0);\n + colorCoords/= 16.0;\n + vec4 colorSample = texture2D(textyah,colorCoords.xy);\n + return colorSample;\n + }\n + void main( void ) {\n + //!! I don\'t have the same setup for my alpha because I didn\'t alpha the background image\n + // worldcoords /16.0 will range 0-176 for height 0-240 for width a total of 256 slices so z will only go that high\n + // for each slice we have to move x up by 240 and after 16 of these go down (canvas is zero in top) \n + //gl_FragColor =vec4(colorCoords,1.0);\n + vec4 deepColor = vec4(0.0);// this is the total color through the cube\n + vec4 marchColor;// this is the color at part\n + float alphaSum;\n + //! unsure if this factor allows stepping through from all angles\n + const float mod_factor = sqrt(pow(13.0,2.0) + pow(13.0,2.0))/float(MAX_STEPS); // the sqrt part should be the longest len within the cube\n + vec3 pos = worldcoords;\n + vec3 mod_dir =normalize(pos -dir); // this may need to change depending on the direction we face\n + float dbg;\n + for (float i = 0.0; i < float(MAX_STEPS); i++) {\n + // stop marchin at sides of cube\n + if (pos.x < -6.5|| pos.x > 6.5||\n + pos.y < -6.5|| pos.y > 6.5||\n + pos.z < -6.5|| pos.z > 6.5 ) {\n + break;\n + }\n +\n + marchColor = marcher(pos);\n + if (marchColor.r > .1) { // prevents the black from taking over too much\n + alphaSum += marchColor.a*alphaCorrection;\n + deepColor += marchColor*alphaCorrection;\n + }\n + pos += mod_dir*mod_factor;\n + }\n + gl_FragColor =vec4(deepColor.r,deepColor.g,deepColor.b,alphaSum);\n + //gl_FragColor= vec4(dbg,0,0,1);\n + //gl_FragColor= vec4(mod_dir,1);\n + }\n + `\n +%% fetch\n +js: https://threejs.org/examples/js/controls/OrbitControls.js\n +\n +%% js\n + function changeScale (val) {\n + uniforms.scale.value = new THREE.Vector2(val,val)\n + uniforms.scale.value.needsUpdate = true\n + }\n +var WIDTH = 800,\n + HEIGHT = 600;\n +// set some camera attributes\n +var VIEW_ANGLE = 45,\n + ASPECT = WIDTH / HEIGHT,\n + NEAR = 1,\n + FAR = 1000;\n +// get the DOM element to attach to\n +// - assume we\'ve got jQuery to hand\n +var container = document.getElementById(\'container\');\n +// create a WebGL renderer, camera\n +// and a scene\n +var renderer = new THREE.WebGLRenderer();\n +var camera = new THREE.PerspectiveCamera(\n + VIEW_ANGLE,\n + ASPECT,\n + NEAR,\n + FAR );\n +\n +var scene_first_pass = new THREE.Scene();\n +var scene_second_pass = new THREE.Scene();\n +// the camera starts at 0,0,0 so pull it back\n +// start the renderer\n +renderer.setSize(WIDTH, HEIGHT);\n +// attach the render-supplied DOM element\n +container.append(renderer.domElement);\n +var uniforms ={} \n +var w = 100,\n + h = 100,\n + wsegs= 1,\n + hsegs= 1,\n + halfh = h/2,\n + halfw = w/2\n +var piecew = w/wsegs;\n +var pieceh = h/hsegs;\n +var uvs = []\n +for (var iy = 0;iy < hsegs+1 ;iy++) {\n + for (var ix = 0;ix < wsegs+1;ix++) {\n + uvs.push(ix/wsegs)\n + uvs.push(1-(iy/hsegs))\n + }\n + }\n + var loader = new THREE.TextureLoader()\n + var geo\n +\n + var boxDim = 13\n + var upscale = boxDim\n + var size =(boxDim)**3;\n + var dataDim = [2816,3840]\n + var totalDatapoints =dataDim[0]*dataDim[1] \n + var data = new Uint8Array(totalDatapoints);\n + console.log(size)\n +\n + function rawFetch() {\n + return fetch(\'https://cdn.glitch.com/105e4c0c-a685-402d-9aad-40fb3f0ad94b%2Fflatbrain%20(copy)?1551628542895\')\n + .then(function (res) {\n + return res.arrayBuffer()\n + })\n + .then(function(buf) {\n + return {buf}\n + })\n + }\n +\n + new Response(rawbrain).arrayBuffer().then(texturedata=> {\n +\n + var arr = new Uint8Array(texturedata)\n + texture = new THREE.DataTexture( arr, 240*16,176*16,THREE.LuminanceFormat, THREE.UnsignedByteType );\n + // create the sphere\'s material\n + // not sure yet why this is necessary, maybe backface tells us when to stop the marching?\n + // this connects the first pass and the second passes\n + rtTexture = new THREE.WebGLRenderTarget(HEIGHT,WIDTH,{ minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, wrapS: THREE.ClampToEdgeWrapping, wrapT: THREE.ClampToEdgeWrapping, type: THREE.FloatType, generateMipmaps: false} ); \n +\n +uniforms.textyah = {type:\'t\',value:texture}\n +uniforms.dir = {type:\'v3\',value:camera.position}\n +uniforms.delta = {type:\'1f\',value: .01}\n +uniforms.scale = {type:\'1f\',value:boxDim} // 733 is the ratio for the larger dimension to the smaller\n +uniforms.xshift = {type:\'1f\',value:.5} \n +\n +uniforms.scale.value.needsUpdate = true\n +uniforms.alphaCorrection = {type:\'1f\',value: 0.0080 }\n +uniforms.shift = {type:\'1f\',value:boxDim/2}\n +uniforms.shift.value.needsUpdate = true\n +var shaderMatSecondPass = new THREE.ShaderMaterial({\n + uniforms:uniforms,\n + vertexShader: vShaderText,\n + fragmentShader: fShaderText,\n + side: THREE.FrontSide,\n + transparent:true\n +\n +})\n +// create a new mesh with sphere geometry -\n + // we will cover the sphereMaterial next!\n + // create my uvs\n +geo2 = new THREE.BoxBufferGeometry(boxDim,boxDim,boxDim)\n +var boxmat = new THREE.MeshBasicMaterial({color:\'blue\'})\n +var bufbox2= new THREE.Mesh(geo2,shaderMatSecondPass)\n +// create axis tool to assist in sanity checks\n +// x axis is red, y axis is green z is blue\n +var axis = new THREE.AxesHelper(20)\n +bufbox2.add(axis)\n +//var bufbox2= new THREE.Mesh(geo2,boxmat)// sanity check for secondpass\n +scene_second_pass.add(bufbox2);\n +scene_second_pass.background = new THREE.Color(\'white\')\n +uniforms.textyah.value.needsUpdate = true\n +//scene_first_pass.add(camera);\n +//scene_second_pass.add(camera);\n +// create a rendering loop\n +var frame = 0;\n +//checking rendered textures\n +//bufbox2.rotation.y += 2.5\n +var range = 30\n +camera.position.set(0, -42, 0) // set first view upright\n +function update() {\n + frame += 1\n + camera.position.x =Math.cos(frame * .01)*range; \n + //camera.position.y =(Math.cos(frame * .01)*range + Math.sin(frame*.01)*range)/2; \n + camera.position.z =Math.sin(frame * .01)*range; \n + camera.lookAt(new THREE.Vector3(0,0,0))\n + //bufbox2.rotation.z += .01\n + //bufbox2.rotation.x += .01\n + //renderer.render(scene_first_pass, camera,rtTexture,true);// this will make nothing appear on screen from first render\n + renderer.render(scene_second_pass,camera)\n + uniforms.textyah.value.needsUpdate = true\n + uniforms.dir = {type:\'v3\',value:camera.position}\n + //console.log(camera.position)\n + uniforms.dir.value.needsUpdate = true\n + requestAnimationFrame(update)\n + }\n + requestAnimationFrame(update)\n + }) + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Peering into the Unknown</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_4.xml b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_4.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f62a4fc0973f56a945a5ff0b1864d4f5f4c56b9 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_4.xml @@ -0,0 +1,389 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Notebook" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_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>_Change_local_roles_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>_View_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_notebook_4</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Notebook</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content</string> </key> + <value> <string encoding="cdata"><, the City of San Francisco\'s data portal. The data updates monthly, maintained by the Rent Arbitration Board.\n +\n +There are many legal reasons for eviction notices - a tenant may fall behind in rent, or perhaps has violated their lease in a way that, to the property owner or manager, merits eviction. In many cases, however, owners pursue various legal means to push out tenants to charge more in rent for a property, or to demolish a building to make way for more dense or more upscale housing. It is no secret that housing prices in San Francisco have skyrocketed past what many residents were previously able to pay, and the consequence of this increased demand and unmatched supply often takes the form of evictions.\n +\n +## Articles that inspired this analysis\n +\n +- [Why S.F. evictions are on the rise](https://www.sfchronicle.com/politics/article/Why-S-F-evictions-are-on-the-rise-6408950.php) (2015)\n +- [San Francisco\'s new pro-tenant rules increased evictions](https://www.bizjournals.com/sanfrancisco/morning_call/2015/07/san-francisco-rent-control-buyout-rules-evictions.html) (2015)\n +- [San Francisco evictions continue to rise each year since 2010](http://www.sfexaminer.com/san-francisco-evictions-continue-rise-year-since-2010/) (2016)\n +\n +<!-- please fix this. I shouldn\'t have to create padding to make this report readable. -->\n +<div id=\'padding\'></div>\n +\n +%% js\n +\n +rawData = d3.csvParse(rawData)\n +\n +%% js\n +var data = rawData.map(d=>{\n + d[\'File Date\'] = d3.timeParse(\'%m/%d/%Y\')(d[\'File Date\'])\n + d.neighborhood = d[\'Neighborhoods - Analysis Boundaries\']\n + delete d[\'Neighborhoods - Analysis Boundaries\']\n + d.fileDate = d[\'File Date\']\n + delete d[\'File Date\']\n + d.supervisorDistrict = d[\'Supervisor District\']\n + delete d[\'Supervisor District\']\n + return d\n +}).filter(d => d.fileDate < new Date(\'2018-06-02\'))\n +\n +%% js\n +var DATA = new Ply(data)\n +\n +%% js\n +\n +var getYear = d => {\n + d.date = new Date(d.fileDate.getFullYear(), 0, 1)\n + return d\n + }\n +\n +var countAndDate = \t{\n + count: arr=>arr.length,\n + date: arr=>arr[0].date\n +}\n +\n +var byYear = DATA.clear()\n +\t.map(getYear)\n +\t.filter((d) => d.neighborhood !== \'\')\n +\t.group(\'neighborhood\', \'date\')\n +\t.reduce(countAndDate)\n +\t.group(\'neighborhood\')\n +\t.transform()\n +\n +var latLon = DATA.clear()\n +\t.filter(d=>d.Location.length)\n +\t.map(d=>{\n + let d2 = {}\n + let location = d.Location.split(\', \')\n + d2.lat = +location[0].slice(1)\n + d2.lon = +location[1].slice(0, -1)\n + return d2\n + }).transform()\n +\n +\n +%% js\n +\n +Object.keys(byYear).forEach(n=> {\n + byYear[n] = byYear[n].map(d=> {\n + d.date = new Date(d.date)\n + return d\n + })\n +})\n +%% raw\n +overall\n +// eviction rates by neighborhood\n +// eviction rates by supervisor\n +block most likely to have evictions\n +eviction rates by type\n +\n +%% js\n +var sm = new SmallMultiple({\n + width: 800,\n + target: \'#evictions-by-neighborhood\',\n + label: \'evictions-by-neighborhood\',\n + cols: 5,\n + left:30,\n + titleFontSize: 12,\n + cellHeaderHeight: 16,\n + showOnlyFirstXAxis: true,\n + titleTextAlign:\'center\'\n +})\n +\n +var neighborhoods = Object.keys(byYear).map(d=>{\n + let sum = Ply.sum(\'count\')(byYear[d])\n + return [sum, d]\n +})\n +neighborhoods.sort((a,b)=>{\n + return b[0] - a[0]\n +})\n +neighborhoods = neighborhoods.map(d=>d[1]).slice(0,15)\n +\n +var maxY = Math.max(...neighborhoods.map(d=> Math.max(...byYear[d].map(di=>di.count)) )) * 1.1\n +\n +neighborhoods.forEach(neighborhood=>{\n + let yearData = byYear[neighborhood]\n + sm.plot({\n + titleText: neighborhood,\n + //mainNumber: Ply.sum(\'count\')(yearData),\n + data: yearData,\n + x_accessor: \'date\',\n + y_accessor: \'count\',\n + xax_count:3,\n + max_y: maxY,\n + area: false,\n +\tlinked: true,\n + min_x: new Date(\'1996-12-31\'),\n + mouseover_align:\'center\',\n + x_rollover_format: \'%Y \',\n + y_rollover_format: function(d) { return d.count + \' notices\'},\n + })\n +})\n +\n +%% js\n +var PIXEL_RATIO = (function () {\n + var ctx = document.createElement("canvas").getContext("2d"),\n + dpr = window.devicePixelRatio || 1,\n + bsr = ctx.webkitBackingStorePixelRatio ||\n + ctx.mozBackingStorePixelRatio ||\n + ctx.msBackingStorePixelRatio ||\n + ctx.oBackingStorePixelRatio ||\n + ctx.backingStorePixelRatio || 1;\n +\n + return dpr / bsr;\n +})();\n +\n +var canvas = document.getElementById(\'lat-lon\')\n +var w = 700\n +var h = 700\n +\n +canvas.width = w * PIXEL_RATIO;\n +canvas.height = h * PIXEL_RATIO;\n +canvas.style.width = w + "px";\n +canvas.style.height = h + "px";\n +canvas.getContext("2d").setTransform(PIXEL_RATIO, 0, 0, PIXEL_RATIO, 0, 0);\n +\n +var pl = (ar, f) => ar.map((d)=>d[f])\n +var dom = (ar, f) => [Math.min(...pl(ar, f)), Math.max(...pl(ar, f))]\n +\n +var latDom = dom(latLon, \'lat\')\n +latDom.reverse()\n +var lonDom = dom(latLon, \'lon\')\n +\n +//var xs = d3.scaleLinear().domain([-123.51+.7, -122.56+.7]).range([0,w])\n +//var ys = d3.scaleLinear().domain([37.90, 37.35]).range([0,h])\n +var xs = d3.scaleLinear().domain(lonDom).range([0,w])\n +var ys = d3.scaleLinear().domain(latDom).range([0,h])\n +\n +var ctx = canvas.getContext(\'2d\')\n +ctx.imageSmoothingEnabled = true;\n +let noise = (amt=4) => (Math.random() -.5) * amt\n +function circle(x,y,group) {\n + ctx.beginPath()\n + ctx.arc(x + noise(), y + noise(), 1, 0, Math.PI * 2, true)\n + ctx.fillStyle = \'rgba(250,0,0,.5)\'\n + ctx.fill()\n + ctx.closePath()\n +}\n +\n +function draw() {\n + \tctx.clearRect(0, 0, w, h)\n +\tlatLon.forEach((d)=>{ \n + circle(xs(d.lon), ys(d.lat)) \n + }) \n +}\n +draw()\n +dom(latLon, \'lon\') + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Eviction Notices by SF Neighborhood, 1997-present</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_5.xml b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_5.xml new file mode 100644 index 0000000000000000000000000000000000000000..292eac54763a81e420b1ee9f3f745646b17893e8 --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_5.xml @@ -0,0 +1,284 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Notebook" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_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>_Change_local_roles_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>_View_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_notebook_5</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Notebook</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +%% md\n +# Pyodide 馃悕\n +\n +Pyodide brings the Python runtime to the browser via WebAssembly, along with NumPy, Pandas, Matplotlib, parts of SciPy, and NetworkX.\n +\n +press `shift+enter` to step through this notebook.\n +\n +%% raw\n +\n +As you can see, some basic parts of Python work as you might expect. To use Python, just use the `%% py` delimiter in your editor, and hit `shift+enter` to evaluate. Your browser will then go off to grab Python & initialize it.\n +\n +%% py\n +# python\n +import sys\n +sys.version\n +\n +%% raw\n +\n +It also does the parts you might be surprised by! Try evaluating the chunk below (`shift+enter`).\n +\n +%% py\n +import antigravity\n +\n +%% raw\n +\n +Pyodide performs quick translation of data types into javascript, so there is one clear interface for accessing data and representing it.\n +\n +%% py\n +[0, 1, 32.0, \'foo\', {\'a\': 10, \'b\': \'20\'}]\n +\n +%% raw\n +## Using Javascript from Python\n +\n +We\'ve built ways of importing anything from javascript land into python. Here, we\'ll import `document`, which should be familiar to javascript web developers everywhere, and use its APIs to manipulate a DOM element.\n +\n +Note that Markdown allows embedding of inline HTML, so we\'ll add target element in a Markdown block.\n +\n +%% md\n +#### Here\'s a DOM element to manipulate:\n +<div id="targetElement">Change me!</div>\n +\n +%% py\n +from js import document\n +elt = document.getElementById("targetElement")\n +elt.innerText = "I am changed!"\n +elt.style.backgroundColor = \'#ffcccc\'\n +\n +%% py\n +# let\'s switch it back\n +elt.style.backgroundColor = \'#ffffff\'\n +\n +%% raw\n +\n +Because we _have_ direct access to the DOM, we can do fun things like make UI widgets.\n +\n +Run the code chunk below (`shift+enter`) and then click on the "Report Preview" tab on the top right. This report preview should render everything you see in these `%% md` chunks, as well as a button. The code you just ran below generated that button. Take a look at what the code does, and then click the button.\n +\n +Don\'t forget to switch back to the "Console" view when you\'re finished here - we have more to show you.\n +\n +%% py\n +from js import iodide\n +button = iodide.output.element(\'button\')\n +button.textContent = "Click me!"\n +count = 0\n +def onclick(evt):\n + global count\n + if elt.style.backgroundColor == \'rgb(255, 255, 255)\':\n + elt.style.backgroundColor = \'#ffcccc\'\n + elt.innerText = "I\'ve been changed " + str(count) + " times!"\n + else:\n + elt.style.backgroundColor = \'#ffffff\'\n + elt.innerText = "I\'ve been changed " + str(count) + " times!"\n + count += 1\n +button.addEventListener(\'click\', onclick)\n +\n +%% raw\n +Or really make use of event callbacks to build a simple painting canvas...\n +\n +%% css\n +canvas {\n + border: 2px solid #ddd;\n +}\n +\n +%% py\n +from js import document, iodide\n +\n +canvas = iodide.output.element(\'canvas\')\n +canvas.setAttribute(\'width\', 450)\n +canvas.setAttribute(\'height\', 300)\n +context = canvas.getContext("2d")\n +context.strokeStyle = "#df4b26"\n +context.lineJoin = "round"\n +context.lineWidth = 8\n +pen = False\n +lastPoint = (0, 0)\n +\n +def onmousemove(e):\n + global lastPoint\n + if pen:\n + newPoint = (e.offsetX, e.offsetY)\n + context.beginPath()\n + context.moveTo(lastPoint[0], lastPoint[1])\n + context.lineTo(newPoint[0], newPoint[1])\n + context.closePath()\n + context.stroke()\n + lastPoint = newPoint\n + \n +def onmousedown(e):\n + global pen, lastPoint\n + pen = True\n + lastPoint = (e.offsetX, e.offsetY)\n + \n +def onmouseup(e):\n + global pen\n + pen = False\n +\n +canvas.addEventListener(\'mousemove\', onmousemove)\n +canvas.addEventListener(\'mousedown\', onmousedown)\n +canvas.addEventListener(\'mouseup\', onmouseup)\n +\n +%% raw\n +Using Python from Javascript\n +\n +So far so good, but wouldn\'t it be great to use Python from within Javascript as well? When you load Pyodide, you\'ll get `pyodide` in the JS namespace, which lets you import anything on the Py side.\n +\n +%% py\n +# python\n +class Foo:\n +\tdef __init__(self, val):\n +\t\tself.val = val\n +foo = Foo(42)\n +foo\n +%% js\n +// javascript\n +var foo = pyodide.pyimport("foo")\n +foo.val\n +\n +%% raw\n +## The Scientific libraries\n +\n +The real power of Pyodide comes from its scientific computing libraries. So far we\'ve compiled numpy, pandas, matplotlib, parts of scipy, and networkx. At the top of any py chunk, simply write something like `import numpy as np` and run the chunk, and it\'ll begin the process of grabbing numpy.\n +\n +\n +%% py\n +import numpy as np\n +x = np.linspace(0, 2.0 * np.pi, 100)\n +y = np.sin(x)\n +y\n +\n +%% raw\n +\n +Matplotlib defaults to printing into the report preview, so you can run the code chunk below and see the plot. It\'s easy to drag around the plot, zoom in, and zoom out, all pretty effortlessly.\n +\n +%% py\n +from matplotlib import pyplot as plt\n +plt.figure()\n +plt.plot(x, y)\n +plt.show()\n +\n +%% raw\n +\n +It should be clear by now that Pyodide makes it so you don\'t have to choose only one library, nor do you have to choose one language to do your data science. Let\'s download Plotly and create the same graph, but send Plotly over to Python and plot it from within python itself.\n +\n +Switch back to the console, and run the `%% fetch` chunk below (which fetches Plotly from a cdn), then run the `%% py` chunk below that, and switch back to the report view.\n +\n +%% fetch\n +js: https://cdn.plot.ly/plotly-latest.min.js\n +\n +\n +%% py\n +from js import Plotly\n +from js import iodide\n +Plotly.plot(\n + iodide.output.element(\'div\'),\n + [{ \'y\': y, \'x\': x }],\n +) + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>A Brief Tour through Pyodide</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_6.xml b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_6.xml new file mode 100644 index 0000000000000000000000000000000000000000..27ad745eff6d727128ec757af7711546bd23e7dd --- /dev/null +++ b/bt5/romain_dev/PathTemplateItem/notebook_module/romain_notebook_6.xml @@ -0,0 +1,298 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Notebook" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_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>_Change_local_roles_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>_View_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_notebook_6</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Notebook</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +%% raw\n + __ __ ___ _ ___ ___ __ __ ___ \n + \\ \\ / / | __| | | / __| / _ \\ | \\/ | | __|\n + \\ \\/\\/ / | _| | |__ | (__ | (_) | | |\\/| | | _| \n + \\_/\\_/ |___| |____| \\___| \\___/ |_| |_| |___|\n + \n + _____ ___ \n + |_ _| / _ \\ \n + | | | (_) |\n + |_| \\___/ \n + \n + ___ ___ ___ ___ ___ ___ \n + |_ _| / _ \\ | \\ |_ _| | \\ | __|\n + | | | (_) | | |) | | | | |) | | _| \n + |___| \\___/ |___/ |___| |___/ |___|\n + \n +\n +\n +Let\'s get started! You can just start trying things out, or you can follow the steps described below to get a quick introduction. Just read along and click or enter keystrokes when instructed.\n +\n +The first thing you\'ll need to know is how to navigate within the notebook. An iodide notebook is one flat text file in a format we call JSMD. Each cell is delimited by `%%`, and that means you can easily add cells just by typing those two characters on a new line. This cell, for instance, has `%% raw`, which means it\'s a raw cell. Raw cells are useful for taking notes and leaving comments in your notebook.\n +\n +Right below this is `%% js` which is a javascript cell.\n +\n +Click somewhere in the javascript cell right below this one, and hit `shift+enter`. This will evaluate whatever chunk your cursor is on. Notice in the console to the right, you\'ll see the code and the output.\n +\n +%% js\n +\n +var tableSize = 10\n +var range = []\n +for (let i=0; i<tableSize; i++){range.push(i)}\n +var A = range.map( (x,i) => range.map( (y,j) => (Math.random() + i + j )))\n +A\n +\n +%% raw\n +\n +This entire buffer is a single text editor, so you can add `%% js` or `%% raw` (or any of our cell types) at any point (starting with a new line) and that automatically creates a new cell.\n +\n +%% raw\n +\n +There is another kind of cell - `%% md`, the _Markdown cell_. The contents of this cell renders in the "Report Preview" pane. You don\'t have to evaluate it the way you did the `js` cell. \n +\n +Click the tab next to "Console", titled "Report Preview" in the top right to see that pane. \n +\n +Markdown cells are where the output of your data analysis will live. It\'s your way of separating your exploratory code with your final explanation.\n +\n +Try editing parts of the markdown cell directly below, and watch it live-update in the Report Preview. When you\'re done, click on the "Console" tab again - we\'re going to need it in a minute.\n +\n +%% md \n +\n +# My First Iodide Notebook ~~~\n +\n +Try editing this line. It\'s easy!\n +\n +<img src=\'https://media.giphy.com/media/lcjNHIJilbfGOdqIkd/giphy.gif\' width=250 style="display: block; margin: auto; margin-bottom:20px" />\n +\n +Markdown cells support the full range of normal markdown formatting, like _multiple_ **levels** of ***emphasis***,\n +## headings \n +### of different\n +#### sizes\n +\n +```\n +and multiline raw text blocks\n +```\n +\n +Markdown cells also support LaTeX, like this:\n +\n +$$\n +\\left[\\begin{array}{c}\n +\\mathbf{x}_{t,i}\\\\\n +\\mathbf{v}_{t,i}\\\\\n +\\theta_{t,i}\\\\\n +\\omega_{t,i}\n +\\end{array}\\right] = \\left[\\begin{array}{c}\n +\\mathbf{x}_{t-1,i}\\\\\n +\\mathbf{v}_{t-1,i}\\\\\n +\\theta_{t-1,i}\\\\\n +\\omega_{t-1,i}\n +\\end{array}\\right]+\\Delta\\left[\\begin{array}{c}\n +\\mathbf{v}_{t-1,i}\\\\\n +\\left(T_{t,i}+\\epsilon_{T}\\right)cos\\left(\\theta_{t-1,i}\\right)-\\rho_{\\mathbf{v}}\\left\\Vert \\mathbf{v}_{t-1,i}\\right\\Vert ^{2}\\frac{\\mathbf{v}_{t-1,i}}{\\left\\Vert \\mathbf{v}_{t-1,i}\\right\\Vert }\\\\\n +\\left(T_{t,i}+\\epsilon_{T}\\right)sin\\left(\\theta_{t-1,i}\\right)-\\rho_{\\mathbf{v}}\\left\\Vert \\mathbf{v}_{t-1,i}\\right\\Vert ^{2}\\frac{\\mathbf{v}_{t-1,i}}{\\left\\Vert \\mathbf{v}_{t-1,i}\\right\\Vert }\\\\\n +\\omega_{t-1,i}\\\\\n +Y_{t,i}-\\rho_{\\omega}\\omega_{t-1,i}^{2}+\\epsilon_{Y}\n +\\end{array}\\right]\n +$$\n +\n +%% raw\n +\n +The cell below this is an fetch cell, which allows you to load external libraries, css, and even data. It can be evaluated just like any other cell with `ctrl+enter` or `shift+enter`.\n +\n +When a resource is successfully loaded, you will see `SUCCESS` printed in the console. If a resource fails to load, then you will see `ERROR`.\n +\n +Let\'s go ahead and load the library "three.js", which we\'ll use a little farther below.\n +\n +%% fetch\n +// click inside this chunk and hit shift+enter to load the resource\n +js: https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js\n +\n +%% raw\n +\n +Ok! Time to do something interesting with three.js.\n +\n +%% md\n +\n +You can also use in-line html, which is very handy for creating DOM elements within the flow of a narrative that you can then manipulate. This is great for adding plots and figures.\n +\n +Let\'s create a `div` right below:\n +\n +<div id="totalRows"></div>\n +<div id="spinningThing"></div>\n +\n +...in a moment, we\'ll put something fancy right above this line.\n +\n +%% js\n +// We\'ll now define a real JS function that does something cool.\n +// Go ahead and evaluate this cell.\n +\n +// first off, let\'s clear the div where we draw, just in case.\n +document.getElementById(\'spinningThing\').innerHTML = \'\'\n +\n +function spinCubeInTarget(targetSelector) {\n + //\'use strict\';\n + var width = 600, height = 400\n + var scene = new THREE.Scene();\n + var camera = new THREE.PerspectiveCamera(75, \n +\t\twidth/height, 0.1, 100);\n + var renderer = new THREE.WebGLRenderer();\n + renderer.setSize(width, height);\n +\tconst COLOR = 0xFFFFFF\n + const LIGHT = 0xFFFFFF\n +\n +\tdocument.body\n +\t\t.querySelector(targetSelector)\n +\t\t.appendChild(renderer.domElement);\n + var geometry = new THREE.CubeGeometry(5, 5, 5);\n + var material = new THREE.MeshLambertMaterial({color: COLOR });\n + var cube = new THREE.Mesh(geometry, material);\n + scene.add(cube);\n + camera.position.z = 12; \n + var pointLight = new THREE.PointLight(LIGHT);\n + pointLight.position.z = 130;\n + scene.add(pointLight);\n + var reqAnimFrame = window.requestAnimationFrame\n + var render = function() {\n + reqAnimFrame(render);\n + var delta = (Math.random()/10) * (0.06 - 0.02) + 0.03;\n + cube.rotation.x += delta;\n + cube.rotation.y += delta;\n + renderer.render(scene, camera);\n + };\n + render();\n +}\n +\n +spinCubeInTarget("#spinningThing")\n +\n +%% raw\n +If you followed all the steps described, you should now see a cube spinning in the markdown cell above!\n +\n +Note that if you make any changes to that markdown cell, you will have to re-run the function `spinCubeInTarget("#targetDiv")`, because each time you change a markdown cell it\'s contents have to be regenerated, which will overwrite changes you\'ve made to it with code.\n +\n +%% raw\n +\n +One last cell type - `%% css`. This lets you change the styles of your presentation in realtime. Select the "Report Preview" tab on the top right, and then uncomment the css in the code below.\n +\n +%% css\n +/* remove the comments here */\n +/* \n +.user-markdown {\n +\tfont-style: italic;\n +} \n +*/\n +\n +%% md\n +\n +## to summarize:\n +\n +Ok! Let\'s end this notebook with a markdown cell. With all of these tools, you\'re ready to get started! For review, we covered the following tools:\n +\n +1. `raw` cells - make notes, add comments\n +2. `js` cells - run javascript code\n +3. `fetch` cells - grab libraries, external stylesheets, and data sets\n +4. `md` cells - write your report, add DOM elements, etc.\n +5. `css` cells - style your report\n +\n +For next steps, try these:\n +\n +- [JSMD Docs](https://iodide-project.github.io/docs/jsmd/)\n +- [Using Python in Iodide](https://github.com/iodide-project/pyodide/tree/master/docs)\n +- [Check out our example data analysis notebooks](https://iodide.io) + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>A Tour of an Iodide Notebook</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev.xml new file mode 100644 index 0000000000000000000000000000000000000000..550c27e5f5af3c1a8d837905e2541eb8b0241d01 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_local_properties</string> </key> + <value> + <tuple> + <dictionary> + <item> + <key> <string>id</string> </key> + <value> <string>business_template_skin_layer_priority</string> </value> + </item> + <item> + <key> <string>type</string> </key> + <value> <string>float</string> </value> + </item> + </dictionary> + </tuple> + </value> + </item> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>business_template_skin_layer_priority</string> </key> + <value> <float>51.0</float> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>romain_dev</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Base_getUpgradeBusinessTemplateList.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Base_getUpgradeBusinessTemplateList.py new file mode 100644 index 0000000000000000000000000000000000000000..e7e59889e33b86f9e81d18826730a539dfb57ff2 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Base_getUpgradeBusinessTemplateList.py @@ -0,0 +1,78 @@ +bt5_update_catalog_list = ('erp5_ingestion_mysql_innodb_catalog', 'erp5_full_text_mroonga_catalog') +bt5_installation_list = bt5_update_catalog_list + ('erp5_xhtml_style', + # 'erp5_officejs', 'erp5_web_jabber_client', + # 'erp5_officejs_ooffice', + 'erp5_upgrader', + 'erp5_hal_json_style', + 'erp5_ods_style', + 'erp5_odt_style', + 'erp5_deferred_style', + # 'erp5_officejs_ui_test', + 'erp5_crm_renderjs_ui_test', + 'erp5_trade_renderjs_ui_test', + 'erp5_web_renderjs_ui_test', + 'erp5_pdm_renderjs_ui_test', + 'erp5_accounting_renderjs_ui_test', + 'erp5_item_renderjs_ui_test', + 'erp5_officejs_ui_test', + 'erp5_officejs_support_request_ui_test', + # 'erp5_calendar', + # 'erp5_crm', + # 'erp5_mrp', + 'erp5_project', + 'erp5_bank_reconciliation', + + # test dependencies + # 'erp5_configurator_standard_trade_template', + # 'erp5_simulation_test', + # 'erp5_accounting', + 'erp5_monaco_editor_ui_test', + + # 'erp5_gadget_interface_validator_ui_test', + 'erp5_forge', + # 'erp5_web_jabber_client', + 'erp5_web_ui_test', + 'erp5_officejs_afs_directory_ui_test', + 'erp5_accounting_ui_test', + 'erp5_dms_ui_test', + # 'erp5_travel_expense', 'erp5_travel_expense_ui_test', + # 'officejs_olapy_demo', + 'erp5_discussion', + 'erp5_hr', + 'erp5_item', + 'erp5_mrp', + 'erp5_payroll', + 'erp5_authentication_policy', + 'erp5_l10n_fr', + 'erp5_mrp_item', + 'erp5_discount_resource', + 'erp5_administration', + 'erp5_document_scanner_ui_test', + # Graph url fix + 'erp5_graph_editor', + 'erp5_multimedia', + 'erp5_officejs_appstore_base', + 'erp5_officejs', + 'erp5_officejs_connector', + 'erp5_officejs_jquery_app', + 'erp5_officejs_ooffice', + 'erp5_project', + 'erp5_simulation_fast_input', + 'erp5_test_result', + 'erp5_trade', + 'erp5_web_project_ui', + 'erp5_officejs_jquery_app', + 'erp5_web_manifest_test', + 'erp5_officejs_afs_directory_data', + 'erp5_officejs_afs_directory_ui_test', + 'erp5_travel_expense_ui_test', + 'erp5_http_proxy', + 'erp5_corporate_identity_test', + # 'erp5_run_my_doc', + 'erp5_run_my_doc_renderjs_ui_test', + # 'erp5_no_style' + 'erp5_web_js_style', + 'erp5_web_js_style_test', + 'erp5_officejs_appstore_base', + ) +return bt5_installation_list, [] diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Base_getUpgradeBusinessTemplateList.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Base_getUpgradeBusinessTemplateList.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5789def3f63d3f175d96ab5d0b14250a323184c --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Base_getUpgradeBusinessTemplateList.xml @@ -0,0 +1,62 @@ +<?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>Base_getUpgradeBusinessTemplateList</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Couscous_deleteIfExpectedId.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Couscous_deleteIfExpectedId.py new file mode 100644 index 0000000000000000000000000000000000000000..dde93cfba6aaa0f7af05d3e89e62decc664cbd38 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Couscous_deleteIfExpectedId.py @@ -0,0 +1,11 @@ +can_delete = False +document_id = context.getId() +try: + can_delete = (document_id == str(int(document_id))) +except: + pass + +if can_delete: + context.getParentValue().manage_delObjects(ids=[document_id]) + return 'deleted' +return 'not deleted' diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Couscous_deleteIfExpectedId.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Couscous_deleteIfExpectedId.xml new file mode 100644 index 0000000000000000000000000000000000000000..30021207cdb02f779899ab471672d291fa565542 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/Couscous_deleteIfExpectedId.xml @@ -0,0 +1,62 @@ +<?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>Couscous_deleteIfExpectedId</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/ERP5Site_setupModuleList.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/ERP5Site_setupModuleList.py new file mode 100644 index 0000000000000000000000000000000000000000..6e130b5f5d2922dfab20d75b3ac534a0500cc336 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/ERP5Site_setupModuleList.py @@ -0,0 +1,42 @@ +portal = portal = context.getPortalObject() + +module_business_application_map = {'base': ('currency_module', + 'organisation_module', + 'person_module',), + 'accounting': ('accounting_module', + 'account_module',), + 'forge': ('bug_module', 'glossary_module', 'test_result_module', 'test_suite_module'), + 'dev': ('foo_module', 'bar_module', 'foo_bar_module'), + 'project': ('project_module', 'task_module', 'task_report_module'), + 'crm': ('campaign_module', + 'event_module', + 'meeting_module', + 'sale_opportunity_module', + 'support_request_module',), + 'dms': ('document_module', + 'image_module', + 'document_ingestion_module', + 'web_page_module',), + 'trade': ('internal_packing_list_module', + 'inventory_module', + 'purchase_order_module', + 'purchase_packing_list_module', + 'purchase_trade_condition_module', + 'returned_sale_packing_list_module', + 'sale_order_module', + 'sale_packing_list_module', + 'sale_trade_condition_module'), + 'pdm': ('component_module', + 'product_module', + 'purchase_supply_module', + 'sale_supply_module', + 'service_module', + 'transformation_module',), + } + +for business_application_category_id, module_ids in module_business_application_map.items(): + for module_id in module_ids: + module = getattr(portal, module_id, None) + if module is not None: + module.edit(business_application = business_application_category_id) +return 'ok' diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/ERP5Site_setupModuleList.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/ERP5Site_setupModuleList.xml new file mode 100644 index 0000000000000000000000000000000000000000..702c12e44da093172eafc37fcf6b8846c78bf7c8 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/ERP5Site_setupModuleList.xml @@ -0,0 +1,62 @@ +<?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>ERP5Site_setupModuleList</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/copy_of_testromain.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/copy_of_testromain.py new file mode 100644 index 0000000000000000000000000000000000000000..5b5744b81124fedceb8375528bad9ac2fae7f53c --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/copy_of_testromain.py @@ -0,0 +1,72 @@ +portal = context.getPortalObject() + +selection = portal.portal_selections.getSelectionFor('person_module_selection') + +print selection.checked_uids +print selection.domain_path +print selection.domain_list +if selection.domain is not None: + print selection.domain.asDomainDict() + +return printed + + +for _, obj in portal.portal_skins.ZopeFind(portal.portal_skins.erp5_core, obj_metatypes=('ERP5 Form',), search_sub=1): + if (obj.pt == 'form_view') and (obj.action == '') and ('FieldLibrary' not in obj.id): + print obj.id + +return printed + + + + +return + +portal_object = portal = context.getPortalObject() +module = portal.person_module + +i = counter +while i <= min(counter + 100, 80000): + # module.newContent(portal_type='Person', title='test %i' % i) + i += 1 + +if i != counter: + module.activate(activity='SQLQueue', priority=5).testromain(i) + +return 'couscous' + +raise NotImplementedError('nutnut') +return '%s\n' % context.absolute_url() + +from base64 import urlsafe_b64encode, urlsafe_b64decode +return 'data:text/css;base64,%s' % urlsafe_b64encode('couscous'); + +kw = { + # 'select_dict': {'count': 'select 1;drop table catalog;', 'portal_type': None}, + 'select_dict': {'count': 'count(*)', 'portal_type': None}, + # 'select_list': ['count(*)', 'portal_type'], + # 'select_list': ['portal_type'], + 'limit': None, + 'group_by': ["portal_type"], + # 'sort_on': [('portal_type', 'ASC')] +} + +print context.portal_catalog(src__=1, **kw) +""" +for x in context.portal_catalog(**kw): + print x.portal_type, x['count'] +""" +print '---' +return printed + +cp = context.manage_copyObjects(uids=uids) +context.manage_pasteObjects(cb_copy_data=cp) +return "couscous" + +""" +result_list = context.portal_catalog.countResults(select_dict={'date': 'DATE_FORMAT(creation_date, "%s")' % sql_format, 'portal_type': None}, + portal_type=portal_type_list,limit=None, + owner=reference, + group_by=['DATE_FORMAT(creation_date, "%s")' % sql_format, 'portal_type'], + **count_kw) +""" diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/copy_of_testromain.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/copy_of_testromain.xml new file mode 100644 index 0000000000000000000000000000000000000000..65e2069916ac064017b8bea341974c4cb39f5f71 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/copy_of_testromain.xml @@ -0,0 +1,62 @@ +<?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>copy_of_testromain</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/generateTristanDomain.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/generateTristanDomain.py new file mode 100644 index 0000000000000000000000000000000000000000..68f72f9db196a10d2f39b0d723b0182246d290ec --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/generateTristanDomain.py @@ -0,0 +1,66 @@ +domain_list = [] # [<Temporary Domain at /erp5/portal_domains/my_module_domain/sub_domain>, ...] + +##### Get parents' criterions ###### + +parents_criterion_dict = {} # {"portal_type": {"identity": ["Task Report"]}), ...} +parents_membership_criterion_category_set = set() # ["follow_up/project_module/xxx", ...] + +sub_parent = parent +while depth > 0: + for criterion in sub_parent.getCriterionList(): + property_id = criterion.property + if property_id not in parents_criterion_dict: + parents_criterion_dict[property_id] = {"min": criterion.min, "max": criterion.max, "identity": criterion.identity} + sub_parent_membership_criterion_category_list = sub_parent.getMembershipCriterionCategoryList() + # sub_parent.getMultimembershipCriterionBaseCategoryList() seems to return empty list... + parents_membership_criterion_category_set.update(sub_parent_membership_criterion_category_list) + depth -= 1 + sub_parent = sub_parent.getParentValue() + +##### Define domain_list.append helper ##### + +def appendNewTempDomain(id, criterion_dict=None, membership_criterion_category_list=None, **kw): + if criterion_dict is None: + criterion_dict = parents_criterion_dict + else: + criterion_dict.update(parents_criterion_dict) + if membership_criterion_category_list is None: + membership_criterion_category_list = list(parents_membership_criterion_category_set) + else: + membership_criterion_category_list = list(parents_membership_criterion_category_set.union(membership_criterion_category_list)) + multimembership_criterion_base_category_list = list(set([c[:c.index("/")] for c in membership_criterion_category_list])) + domain = parent.generateTempDomain(id=id) + domain.edit( + criterion_property_list=criterion_dict.keys(), + multimembership_criterion_base_category_list=multimembership_criterion_base_category_list, + membership_criterion_category_list=membership_criterion_category_list, + domain_generator_method_id=script.id, + **kw + ) + for property_id, criterion_kw in criterion_dict.items(): + domain.setCriterion(property_id, **criterion_kw) + domain_list.append(domain) + +##### Provide sub domains ##### +# Don't define domain that provides criterions already used by parents + +if "delivery.start_date" not in parents_criterion_dict: + now = DateTime() + for time_frame in (1, 7, 30, 365): + appendNewTempDomain( + id="sub_time_frame_{}".format(time_frame), + title="Last {} days".format(time_frame), + criterion_dict={"delivery.start_date": {"min": now - time_frame}}, + ) + +person = context.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() +if person is not None: + category_relative_url = "source/" + person.getRelativeUrl() + if category_relative_url not in parents_membership_criterion_category_set: + appendNewTempDomain( + id="sub_assigned_to_me_1", + title="Assigned to me", + membership_criterion_category_list=(category_relative_url,), + ) + +return domain_list diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/generateTristanDomain.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/generateTristanDomain.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca367ca5e6702187407943084c572a49e5e25581 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/generateTristanDomain.xml @@ -0,0 +1,62 @@ +<?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>parent, depth</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>generateTristanDomain</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/getObjectByOid.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/getObjectByOid.xml new file mode 100644 index 0000000000000000000000000000000000000000..12d244e82564717eaebd38e270f23feeb0831206 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/getObjectByOid.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_function</string> </key> + <value> <string>getObjectByOid</string> </value> + </item> + <item> + <key> <string>_module</string> </key> + <value> <string>test_kaz</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>getObjectByOid</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/printObjectByOid.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/printObjectByOid.py new file mode 100644 index 0000000000000000000000000000000000000000..564f02ad2963fb53a8e72eb8efe93f1a179eb69e --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/printObjectByOid.py @@ -0,0 +1,8 @@ +# you can pass oid like "?oid=0x123456" + +if oid.startswith('0x'): + oid = ('\x00'*8 + oid[2:].decode('hex'))[-8:] + +ob = context.getObjectByOid(oid) +print repr(ob)[:10*1024] +return printed diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/printObjectByOid.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/printObjectByOid.xml new file mode 100644 index 0000000000000000000000000000000000000000..d958fb31e1ee1f80172e76ffcbe4b38eab0fc1eb --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/printObjectByOid.xml @@ -0,0 +1,62 @@ +<?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>oid</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>printObjectByOid</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testrc.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testrc.xml new file mode 100644 index 0000000000000000000000000000000000000000..d59a4d39edfe5efdad0ddbab2e6c47244deedb73 --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testrc.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_function</string> </key> + <value> <string>testrc</string> </value> + </item> + <item> + <key> <string>_module</string> </key> + <value> <string>testrc</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>testrc</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>testrc</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testromain.py b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testromain.py new file mode 100644 index 0000000000000000000000000000000000000000..3b06b5c83d8bbbc0225ba33ffffb77e2f1f963aa --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testromain.py @@ -0,0 +1,503 @@ +sql_catalog = context.getPortalObject().portal_catalog.getSQLCatalog() + +invalid_column_list = [] +def isValidColumnOrRaise(column_id): + is_valid_column = sql_catalog.isValidColumn(column_id) + if not is_valid_column: + invalid_column_list.append(column_id) + return is_valid_column + +result = sql_catalog.parseSearchText( + 'couscous AND taboulet AND a:"b" AND title:"couscous" AND lalala', + search_key='FullTextKey', + # is_valid=lambda x: False) + is_valid=isValidColumnOrRaise) + +return str(invalid_column_list) + +# return context.portal_catalog(search_text='couscous AND taboulet AND a:"b" AND title:"couscous"', src__=1) +return context.portal_catalog(full_text='couscous AND taboulet AND a:"b" AND title:"couscous"', src__=1) + +portal = context.getPortalObject() +bug_module = portal.task_module +for i in range(10000): + task = bug_module.newContent( + portal_type='Task', + source_project='project_module/1' + ) + task.newContent(portal_type='Task Line') + task.newContent(portal_type='Task Line') + +return 'ok' + +result = ''# '---<br>' +i = 0 +for brain in context.getPortalObject().portal_catalog( + portal_type='Action Information', + sort_on=[['relative_url', 'ASC']] +): + action = brain.getObject() + action_type = action.getActionType() + """ + if not action.isVisible(): + continue + if ('Template' in action.getParentTitle()): + continue + if (action_type in ['object_button']): + continue + # if (action_type in ['object_report', 'object_exchange']): + # continue + if ('web' in action_type) or ('jio' in action_type) or (action_type in ['object_view', 'object_list', 'object_sort', 'object_ui', 'object_search']): + continue + """ + + if 'Base_viewDocumentList' not in (action.getActionText() or ''): + continue + if 'only' in action.getActionType(): + continue + """ + action.setActionType('object_onlyxhtml_view') + action.getParentValue().newContent( + portal_type='Action Information', + reference='jump_to_document', + title='Documents', + action="string:${object_url}/Base_jumpToRelatedDocumentList", + action_type='object_onlyjio_jump', + visible=True, + priority=1, + condition="python:portal.Base_checkPermission('document_module', 'View')" + ) + """ + i += 1 + result += '%s %s %s %s' % (action.getParentTitle(), '<a href="https://softinst114089.host.vifib.net/erp5/web_site_module/renderjs_runner/#/%s?editable=true">%s</a>' % (action.getRelativeUrl(), action.getTitle()), action.getActionType(), '<br>') + +result = '--- %i<br>%s' % (i, result) +print result +return printed + +##################################### + +from DateTime import DateTime +return DateTime() + + +alarm = context.getPortalObject().portal_alarms.promise_check_upgrade +# return alarm.getLastActiveProcess().getResultList() +return context.getPortalObject().portal_activities['2096'].getResultList()[0].detail + +from DateTime import DateTime +return DateTime() + +return "OK %s" % str(context.WebSection_getSiteMapTree(depth=99, include_subsection=1, include_document=1)) + + +context.edit(preferred_event_resource=None) +return "ok" + +context.getPortalObject().web_site_module.renderjs_runner.edit() +return 'OK' + +return context.portal_catalog(reference= {'query': 'aa', 'key':'ExactMatch'}, src__=1) + +# return context.getPortalObject().portal_catalog(reference='', src__=1) +# return 'ok' +context.log('--- traverse') +section = context.getPortalObject().restrictedTraverse('web_site_module/3/1') +context.log('--- document') +result = section.getDefaultDocumentValue() +context.log('--- result: %s', result) +return 'couscous' + +raise NotImplementedError(context.getPortalObject().restrictedTraverse('web_site_module/3/2//')) + + +REQUEST = context.REQUEST +raise NotImplementedError(REQUEST.environ.get('HTTP_USER_AGENT')) + +from urlparse import urlparse +parse_dict = urlparse(REQUEST.other.get('ACTUAL_URL')) +print parse_dict + +print "%s %s %s %s" % (parse_dict.scheme, parse_dict.port, parse_dict.hostname, parse_dict.path) + +import urllib +print REQUEST.other.get('SERVER_URL') + +print '---' + +# request.other + +for key, value in REQUEST.items(): + if key.startswith('HTTP') or key.startswith('BASE') or key.startswith('REMOTE') or key.startswith('SERVER') or ('PORT' in key) or ('PATH' in key) or ('URL' in key): + print "%s: %s" % (key, value) + +return printed +return "host%s \n%s %s" % (REQUEST.environ.get('HTTP_HOST'), '', '') + + + + +result = ''# '---<br>' +i = 0 +for brain in context.getPortalObject().portal_catalog(portal_type='Action Information', sort_on=[['relative_url', 'ASC']]): + action = brain.getObject() + action_type = action.getActionType() + if not action.isVisible(): + continue + if ('Template' in action.getParentTitle()): + continue + if (action_type in ['object_button']): + continue + # if (action_type in ['object_report', 'object_exchange']): + # continue + if ('web' in action_type) or ('jio' in action_type) or (action_type in ['object_view', 'object_list', 'object_sort', 'object_ui', 'object_search']): + continue + + i += 1 + result += '%s %s %s %s' % (action.getParentTitle(), '<a href="%s">%s</a>' % (action.getRelativeUrl(), action.getTitle()), action.getActionType(), '<br>') + +result = '--- %i<br>%s' % (i, result) +print result +return printed + + +return context.getPortalObject().portal_catalog(source_project_title='1234', src__=1) + +return context.getPortalObject().portal_catalog(source_project_uid='1234', src__=1) + + + +parameter_list = field.getTemplateField().get_value('default_params') + +# Some document subobjects have a workflow, and so, can be only be deleted from some state +# If the listbox does not display them, do not add the state filter parameter +filter_portal_type_list = [x[1] for x in parameter_list if x[0] == 'portal_type'] +if filter_portal_type_list: + if sametype(filter_portal_type_list, ''): + filter_portal_type_list = [filter_portal_type_list] +else: + filter_portal_type_list = None + +return parameter_list + context.Module_listWorkflowTransitionItemList(filter_portal_type_list=filter_portal_type_list) + + + + + + + + + +# check selection content +portal = context.getPortalObject() +print '---' +for selection_id in ('bar_selection', 'foo_selection'): + print selection_id + params = portal.portal_selections.getSelectionParamsFor(selection_id) + print '%s' % str(params) + print portal.portal_selections.getSelectionColumns(selection_id) + +print 'ok' +return printed + +# delete all persons +context.portal_catalog.searchAndActivate( + portal_type='Person', + parent_uid=context.getUid(), + method_id='Couscous_deleteIfExpectedId' +) +return 'ok' + + +context.getPortalObject().notebook_module.olapy_notebook.edit(title="olapy_notebook.jsmd", reference="olapy_notebook.jsmd") +return "ok" + +import time +time.sleep(360) +return 'cosucous' + + +portal_object = portal = context.getPortalObject() +module = portal.person_module + +i = 0 +while i < 80000: + module.newContent(portal_type='Person', title='test %i' % i) + i += 1 + +return 'couscous' + + +return 'ok' + +from DateTime import DateTime +portal = context.getPortalObject() + +token = portal.access_token_module.newContent( + id='%s-%s' % (DateTime().strftime('%Y%m%d'), portal.Base_generateAccessTokenHalID()), + portal_type='HAL Access Token', + agent='person_module/160295' +) +token.validate() +return token.getRelativeUrl() + + + + + + + +from DateTime import DateTime +i = 0 +while i < 700: + context.newContent( + portal_type='Test Result Line', + string_index=i, + title=i, + start_date=DateTime(), + duration=i, + all_tests=i, + errors=1, + failures=2, + skip=3, + ) + i += 1 +return 'ok' + + + + + +context.portal_catalog.searchAndActivate( + portal_type='Person', + parent_uid=context.getUid(), + method_id='testromain2' +) +return 'ok' + + + + + + + + +context.portal_catalog.searchAndActivate( + portal_type='Person', + parent_uid=context.getUid(), + method_id='testromain2' +) +return 'ok' + + + +return 'ok' + + + + +# python: here.Module_listWorkflowTransitionItemList()['form_id_dict'].get(request.get("field_your_mass_workflow_action", ""), '') + +result = None +form_id_dict = context.Module_listWorkflowTransitionItemList()['form_id_dict'] + +# During rendering, this variable has been set into the request +# Render what user selected +action = request.get("mass_workflow_action", "") +if action: + return form_id_dict.get(action, '') + +# Validate only if user didn't change the possible action +action = request.get("field_your_mass_workflow_action", "") +if (action and action == request.get("field_your_previous_mass_workflow_action", "")): + return form_id_dict.get(action, '') + +return '' + +portal_object = portal = context.getPortalObject() +module = portal.foo_module + +i = 0 +while i < 80000: + module.newContent(portal_type='Foo', title='test %i' % i) + i += 1 + +return 'couscous' + + +raise NotImplementedError(context.REQUEST) + +return '%s %s %s %s' % (portal.portal_url(), portal.absolute_url(), portal.absolute_url_path(), context.REQUEST.physicalPathToURL(portal.getPhysicalPath() + ("",))) + + +return portal_object.portal_preferences.getPreference('preferred_foo_use', None) + +domain_tool = portal_object.portal_domains +base_domain = domain_tool.foo_domain +url_domain = portal_object.portal_url + +def generateRecur(domain, depth, result_list): + if depth: + result_list.append(('/'.join(url_domain.getRelativeContentPath(domain)[2:]), domain.getTitle())) + new_depth = depth + 1 + for sub_domain in domain_tool.getChildDomainValueList(domain, depth=depth): + generateRecur(sub_domain, new_depth, result_list) + +value_list = [] +generateRecur(base_domain, 0, value_list) +print value_list + +value_list = [] +print value_list + +return printed + + +def getDomainSelection(domain_list): + root_dict = {} + + if len(domain_list) > 0: + category_tool = portal.portal_categories + domain_tool = portal.portal_domains + preference_tool = portal.portal_preferences + + for base_domain_id in domain_list: + domain = None + if category_tool is not None: + domain = category_tool.restrictedTraverse(base_domain_id, None) + if domain is not None : + + root_dict[base_domain_id] = getattr( + domain, + preference_tool.getPreference( + 'preferred_category_child_item_list_method_id', + 'getCategoryChildCompactLogicalPathItemList' + ) + )(local_sort_id=('int_index', 'translated_title'), checked_permission='View', + filter_node=0, display_none_category=0) + + elif domain_tool is not None: + try: + domain = domain_tool.getDomainByPath(base_domain_id, None) + except KeyError: + domain = None + if domain is not None: + # XXX Implement recursive fetch + root_dict[base_domain_id] = [(x.getTitle(), x.getId()) for x in domain_tool.getChildDomainValueList(domain, depth=0)] + + return root_dict + + + +return getDomainSelection(['foo_domain']) + + + + + + + + + + + + + +return portal_object.portal_catalog(selection_domain={'region': 'france'}, src__=1) + +return portal_object.portal_catalog(selection_domain={'region': portal_object.portal_categories.region.france}, src__=1) + +domain = portal_object.portal_domains.getDomainByPath('validated_project_domain') +sql_catalog = portal_object.portal_catalog.getSQLCatalog() + +return portal_object.portal_catalog(src__=1, full_text='title:"nutnut" AND validated_project_domain:"sub1" AND selection_domain:"region:france"') + +query_kw = dict(selection_domain={ + 'validated_project_domain': domain.getChildDomainValueList(domain, depth=0)[0], + 'region': portal_object.portal_categories.region.france + }) + +return sql_catalog.buildQuery(query_kw).asSearchTextExpression(sql_catalog) +return portal_object.portal_catalog(src__=1, **query_kw) + +return portal_object.portal_catalog(selection_domain={'region': portal_object.portal_categories.region.france}, src__=1) + + + +from Products.ERP5Form.Selection import Selection, DomainSelection + +def getDomainSelection(self, domain_list): + """Return a DomainSelection object wrapped with the context. + """ + portal_object = self.getPortalObject() + root_dict = {} + + if len(domain_list) > 0: + category_tool = portal_object.portal_categories + domain_tool = portal_object.portal_domains + preference_tool = portal_object.portal_preferences + + for domain in domain_list: + + root = None + base_domain = domain.split('/', 1)[0] + if category_tool is not None: + root = category_tool.restrictedTraverse(domain, None) + if root is not None : + + root_dict[base_domain] = getattr( + root, + preference_tool.getPreference( + 'preferred_category_child_item_list_method_id', + 'getCategoryChildCompactLogicalPathItemList' + ) + )(local_sort_id=('int_index', 'translated_title'), checked_permission='View', + filter_node=0, display_none_category=0) + + elif domain_tool is not None: + try: + root = domain_tool.getDomainByPath(domain, None) + except KeyError: + root = None + if root is not None: + root_dict[base_domain] = [(x.getTitle(), x.getId()) for x in root.getChildDomainValueList(root, depth=0)] + if root is None: + root = portal_object.restrictedTraverse(domain, None) + if root is not None: + root_dict[None] = (None, domain) + + return root_dict + # return DomainSelection(domain_dict = root_dict)#.__of__(self.getContext()) + +return getDomainSelection(context, ['parent', 'region', 'validated_project_domain', 'preferred_group_person_list_domain', 'ledger'])#.asDomainItemDict(portal=context.getPortalObject()) + + +return context.getPortalObject().TaskModule_viewTaskList.listbox.getDomainSelection() + + +# from Products.ERP5Form.Tool.SelectionTool import makeTreeList +# return makeTreeList() + +# return context.getPortalObject().portal_selections. + +return context.getPortalObject().portal_catalog(selection_domain={'group': context}, src__=1) + +return "couscous" + +context.setContentType(None) +context.edit(content_type=None) +# delete content.content_type +return "ok" +# Example code: + +# Import a standard function, and get the HTML request and response objects. +from Products.PythonScripts.standard import html_quote +request = container.REQUEST +response = request.response + +# Return a string identifying this script. +print "This is the", script.meta_type, '"%s"' % script.getId(), +if script.title: + print "(%s)" % html_quote(script.title), +print "in", container.absolute_url() +return printed diff --git a/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testromain.xml b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testromain.xml new file mode 100644 index 0000000000000000000000000000000000000000..5d789f5ecba53ab4a0e1ef7ea137e4291ed5d0eb --- /dev/null +++ b/bt5/romain_dev/SkinTemplateItem/portal_skins/romain_dev/testromain.xml @@ -0,0 +1,62 @@ +<?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>testromain</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/romain_dev/bt/dependency_list b/bt5/romain_dev/bt/dependency_list new file mode 100644 index 0000000000000000000000000000000000000000..0bf4a6fb55ef60166e9a58fdfd3de86cbf828177 --- /dev/null +++ b/bt5/romain_dev/bt/dependency_list @@ -0,0 +1,4 @@ +erp5_dms +erp5_notebook +erp5_full_text_mroonga_catalog +erp5_upgrader \ No newline at end of file diff --git a/bt5/romain_dev/bt/template_extension_id_list b/bt5/romain_dev/bt/template_extension_id_list new file mode 100644 index 0000000000000000000000000000000000000000..532fedd8cd7ba0dfa3ecfefb7db054d6470d5272 --- /dev/null +++ b/bt5/romain_dev/bt/template_extension_id_list @@ -0,0 +1,2 @@ +extension.erp5.test_kaz +extension.erp5.testrc \ No newline at end of file diff --git a/bt5/romain_dev/bt/template_format_version b/bt5/romain_dev/bt/template_format_version new file mode 100644 index 0000000000000000000000000000000000000000..56a6051ca2b02b04ef92d5150c9ef600403cb1de --- /dev/null +++ b/bt5/romain_dev/bt/template_format_version @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/bt5/romain_dev/bt/template_keep_last_workflow_history_only_path_list b/bt5/romain_dev/bt/template_keep_last_workflow_history_only_path_list new file mode 100644 index 0000000000000000000000000000000000000000..d6215f74bdd1fb788ff479ac64f63390b3be4614 --- /dev/null +++ b/bt5/romain_dev/bt/template_keep_last_workflow_history_only_path_list @@ -0,0 +1 @@ +image_module/romain_wallpaper_* \ No newline at end of file diff --git a/bt5/romain_dev/bt/template_keep_workflow_path_list b/bt5/romain_dev/bt/template_keep_workflow_path_list new file mode 100644 index 0000000000000000000000000000000000000000..d6215f74bdd1fb788ff479ac64f63390b3be4614 --- /dev/null +++ b/bt5/romain_dev/bt/template_keep_workflow_path_list @@ -0,0 +1 @@ +image_module/romain_wallpaper_* \ No newline at end of file diff --git a/bt5/romain_dev/bt/template_path_list b/bt5/romain_dev/bt/template_path_list new file mode 100644 index 0000000000000000000000000000000000000000..a781074566792248c4d848b43a1c7d0e57e90f8d --- /dev/null +++ b/bt5/romain_dev/bt/template_path_list @@ -0,0 +1,2 @@ +image_module/romain_wallpaper_* +notebook_module/romain_notebook_* \ No newline at end of file diff --git a/bt5/romain_dev/bt/template_skin_id_list b/bt5/romain_dev/bt/template_skin_id_list new file mode 100644 index 0000000000000000000000000000000000000000..099e3c19fe652380535dd037cc2ccaf9cd4a5e6c --- /dev/null +++ b/bt5/romain_dev/bt/template_skin_id_list @@ -0,0 +1 @@ +romain_dev \ No newline at end of file diff --git a/bt5/romain_dev/bt/title b/bt5/romain_dev/bt/title new file mode 100644 index 0000000000000000000000000000000000000000..099e3c19fe652380535dd037cc2ccaf9cd4a5e6c --- /dev/null +++ b/bt5/romain_dev/bt/title @@ -0,0 +1 @@ +romain_dev \ No newline at end of file diff --git a/bt5/romain_dev/bt/version b/bt5/romain_dev/bt/version new file mode 100644 index 0000000000000000000000000000000000000000..ceab6e11ece0bcec917c12e11d350946f085d549 --- /dev/null +++ b/bt5/romain_dev/bt/version @@ -0,0 +1 @@ +0.1 \ No newline at end of file