Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Levin Zimmermann
erp5
Commits
617e91b1
Commit
617e91b1
authored
Jun 12, 2020
by
Arnaud Fontaine
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP: SessionTool
parent
e772b4fb
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
124 additions
and
15 deletions
+124
-15
bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testSessionTool.py
...mplateItem/portal_components/test.erp5.testSessionTool.py
+1
-1
product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SessionTool.py
...ntTemplateItem/portal_components/tool.erp5.SessionTool.py
+11
-12
product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SessionTool.xml
...tTemplateItem/portal_components/tool.erp5.SessionTool.xml
+110
-0
product/ERP5/bootstrap/erp5_core/bt/template_tool_component_id_list
...P5/bootstrap/erp5_core/bt/template_tool_component_id_list
+1
-0
product/ERP5Type/__init__.py
product/ERP5Type/__init__.py
+1
-2
No files found.
bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testSessionTool.py
View file @
617e91b1
...
...
@@ -31,7 +31,7 @@ import unittest
from
Products.ERP5Type.tests.ERP5TypeTestCase
import
ERP5TypeTestCase
from
AccessControl.SecurityManagement
import
newSecurityManager
from
Products.ERP5Type.tests.Sequence
import
SequenceList
from
Products.ERP5Type.T
ool.SessionTool
import
SESSION_CACHE_FACTORY
from
erp5.component.t
ool.SessionTool
import
SESSION_CACHE_FACTORY
from
string
import
letters
as
LETTERS
from
random
import
choice
import
time
...
...
product/ERP5
Type/Tool/
SessionTool.py
→
product/ERP5
/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.
SessionTool.py
View file @
617e91b1
...
...
@@ -111,7 +111,6 @@ class DistributedSession(Session):
def
_updateStorage
(
self
):
""" Update backend storage. """
global
storage_plugin
storage_plugin
.
set
(
self
.
session_id
,
\
SESSION_SCOPE
,
\
value
=
self
,
\
...
...
@@ -130,7 +129,7 @@ class DistributedSession(Session):
Session
.
clear
(
self
)
self
.
_updateStorage
()
def
update
(
self
,
dict
=
None
,
**
kwargs
):
def
update
(
self
,
dict
=
None
,
**
kwargs
):
# pylint: disable=redefined-builtin
Session
.
update
(
self
,
dict
,
**
kwargs
)
self
.
_updateStorage
()
...
...
@@ -198,13 +197,13 @@ class SessionTool(BaseTool):
security
.
declarePrivate
(
'getSession'
)
def
getSession
(
self
,
session_id
,
session_duration
=
None
):
""" Return session object. """
storage_plugin
=
self
.
_getStoragePlugin
()
storage_plugin
_
=
self
.
_getStoragePlugin
()
# expire explicitly as each session can have a different life duration
storage_plugin
.
expireOldCacheEntries
(
forceCheck
=
1
)
session
=
storage_plugin
.
get
(
session_id
,
SESSION_SCOPE
,
None
)
storage_plugin
_
.
expireOldCacheEntries
(
forceCheck
=
1
)
session
=
storage_plugin
_
.
get
(
session_id
,
SESSION_SCOPE
,
None
)
if
session
is
None
:
# init it in cache and use different Session types based on cache plugin type used as a storage
storage_plugin_type
=
storage_plugin
.
__class__
.
__name__
storage_plugin_type
=
storage_plugin
_
.
__class__
.
__name__
if
storage_plugin_type
in
(
"RamCache"
,):
session
=
RamSession
()
elif
storage_plugin_type
in
(
"DistributedRamCache"
,):
...
...
@@ -215,14 +214,14 @@ class SessionTool(BaseTool):
cache_plugin
=
self
.
portal_caches
[
SESSION_CACHE_FACTORY
].
objectValues
()[
0
]
session_duration
=
cache_plugin
.
getCacheDuration
()
session
.
_updateSessionDuration
(
session_duration
)
storage_plugin
.
set
(
session_id
,
SESSION_SCOPE
,
session
,
session_duration
)
storage_plugin
_
.
set
(
session_id
,
SESSION_SCOPE
,
session
,
session_duration
)
else
:
# cache plugin returns wrapper (CacheEntry instance)
session
=
session
.
getValue
()
return
session
security
.
declarePublic
(
'newContent'
)
def
newContent
(
self
,
id
,
**
kw
):
def
newContent
(
self
,
id
,
**
kw
):
# pylint: disable=redefined-builtin
""" Create new session object. """
session
=
self
.
getSession
(
id
)
session
.
_updatecontext
(
self
)
...
...
@@ -230,16 +229,16 @@ class SessionTool(BaseTool):
return
session
security
.
declareProtected
(
Permissions
.
AccessContentsInformation
,
'manage_delObjects'
)
def
manage_delObjects
(
self
,
ids
=
[],
REQUEST
=
None
):
def
manage_delObjects
(
self
,
ids
=
(),
REQUEST
=
None
,
*
args
,
**
kw
):
""" Delete session object. """
storage_plugin
=
self
.
_getStoragePlugin
()
storage_plugin
_
=
self
.
_getStoragePlugin
()
if
not
isinstance
(
ids
,
(
list
,
tuple
)):
ids
=
[
ids
]
for
session_id
in
ids
:
storage_plugin
.
delete
(
session_id
,
SESSION_SCOPE
)
storage_plugin
_
.
delete
(
session_id
,
SESSION_SCOPE
)
def
_getStoragePlugin
(
self
):
""" Get cache storage plugin."""
global
storage_plugin
global
storage_plugin
# pylint: disable=global-statement
storage_plugin
=
self
.
portal_caches
.
getRamCacheRoot
()[
SESSION_CACHE_FACTORY
].
getCachePluginList
()[
0
]
return
storage_plugin
product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SessionTool.xml
0 → 100644
View file @
617e91b1
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"Tool Component"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
default_reference
</string>
</key>
<value>
<string>
SessionTool
</string>
</value>
</item>
<item>
<key>
<string>
default_source_reference
</string>
</key>
<value>
<string>
Products.ERP5Type.Tool.SessionTool
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
tool.erp5.SessionTool
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Tool 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"
>
AAAAAAAAAAI=
</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>
<item>
<key>
<string>
component_validation_workflow
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAM=
</string>
</persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<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>
product/ERP5/bootstrap/erp5_core/bt/template_tool_component_id_list
View file @
617e91b1
...
...
@@ -12,5 +12,6 @@ tool.erp5.NotificationTool
tool.erp5.OrderTool
tool.erp5.PasswordTool
tool.erp5.RuleTool
tool.erp5.SessionTool
tool.erp5.SimulationTool
tool.erp5.TestTool
\ No newline at end of file
product/ERP5Type/__init__.py
View file @
617e91b1
...
...
@@ -88,7 +88,7 @@ import Products.ERP5Type.Workflow
def
initialize
(
context
):
# Import Product Components
from
Tool
import
(
MemcachedTool
,
SessionTool
,
from
Tool
import
(
MemcachedTool
,
TypesTool
,
WebServiceTool
,
PropertySheetTool
,
ComponentTool
)
import
Document
...
...
@@ -103,7 +103,6 @@ def initialize( context ):
XMLObject
.
XMLObject
,
ERP5TypeInformation
,
)
portal_tools
=
(
MemcachedTool
.
MemcachedTool
,
SessionTool
.
SessionTool
,
TypesTool
.
TypesTool
,
WebServiceTool
.
WebServiceTool
,
PropertySheetTool
.
PropertySheetTool
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment