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
Richard
erp5
Commits
5a7887b9
Commit
5a7887b9
authored
Mar 01, 2012
by
Arnaud Fontaine
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move resetting of package to component_package as it has always should been there.
parent
8139fdd3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
39 additions
and
30 deletions
+39
-30
product/ERP5/ERP5Site.py
product/ERP5/ERP5Site.py
+1
-1
product/ERP5Type/Tool/ComponentTool.py
product/ERP5Type/Tool/ComponentTool.py
+6
-23
product/ERP5Type/dynamic/component_package.py
product/ERP5Type/dynamic/component_package.py
+30
-4
product/ERP5Type/mixin/component.py
product/ERP5Type/mixin/component.py
+2
-2
No files found.
product/ERP5/ERP5Site.py
View file @
5a7887b9
...
...
@@ -348,7 +348,7 @@ class ERP5Site(FolderMixIn, CMFSite, CacheCookieMixin):
except
AttributeError
:
reset_portal_type
=
False
synchronizeDynamicModules
(
self
,
force
=
reset_portal_typ
e
)
synchronizeDynamicModules
(
self
,
force
=
Tru
e
)
return
self
def
manage_beforeDelete
(
self
,
item
,
container
):
...
...
product/ERP5Type/Tool/ComponentTool.py
View file @
5a7887b9
...
...
@@ -44,9 +44,9 @@ from zLOG import LOG, INFO, WARNING
last_sync
=
-
1
class
ComponentTool
(
BaseTool
):
"""
This tool provides methods to load the the different types of
components of the ERP5 framework: Document classes, interface
s,
mixin classes, fields,
accessors, etc.
This tool provides methods to load the the different types of
components of
the ERP5 framework: Document classes, interfaces, mixin classes, field
s,
accessors, etc.
"""
id
=
"portal_components"
meta_type
=
"ERP5 Component Tool"
...
...
@@ -55,22 +55,6 @@ class ComponentTool(BaseTool):
security
=
ClassSecurityInfo
()
security
.
declareObjectProtected
(
Permissions
.
AccessContentsInformation
)
def
_resetModule
(
self
,
module
):
for
name
,
klass
in
module
.
__dict__
.
items
():
if
not
(
name
[
0
]
!=
'_'
and
isinstance
(
klass
,
ModuleType
)):
continue
full_module_name
=
"%s.%s"
%
(
module
.
__name__
,
name
)
LOG
(
"ERP5Type.Tool.ComponentTool"
,
INFO
,
"Resetting "
+
full_module_name
)
if
name
.
endswith
(
'_version'
):
self
.
_resetModule
(
getattr
(
module
,
name
))
# The module must be deleted first
del
sys
.
modules
[
full_module_name
]
delattr
(
module
,
name
)
security
.
declareProtected
(
Permissions
.
ResetDynamicClasses
,
'reset'
)
def
reset
(
self
,
force
=
True
,
reset_portal_type
=
True
):
"""
...
...
@@ -103,16 +87,15 @@ class ComponentTool(BaseTool):
with
Base
.
aq_method_lock
:
for
content_type
in
allowed_content_type_list
:
modul
e_name
=
content_type
.
split
(
' '
)[
0
].
lower
()
packag
e_name
=
content_type
.
split
(
' '
)[
0
].
lower
()
try
:
module
=
getattr
(
erp5
.
component
,
modul
e_name
)
package
=
getattr
(
erp5
.
component
,
packag
e_name
)
# XXX-arnau: not everything is defined yet...
except
AttributeError
:
pass
else
:
module
.
_resetRegistry
()
self
.
_resetModule
(
module
)
package
.
reset
()
if
reset_portal_type
:
type_tool
.
resetDynamicDocumentsOnceAtTransactionBoundary
()
...
...
product/ERP5Type/dynamic/component_package.py
View file @
5a7887b9
...
...
@@ -35,7 +35,7 @@ import threading
from
Products.ERP5.ERP5Site
import
getSite
from
types
import
ModuleType
from
zLOG
import
LOG
,
INFO
from
zLOG
import
LOG
,
INFO
,
BLATHER
class
ComponentVersionPackage
(
ModuleType
):
"""
...
...
@@ -123,9 +123,6 @@ class ComponentDynamicPackage(ModuleType):
return
self
.
__registry_dict
def
_resetRegistry
(
self
):
self
.
__registry_dict
.
clear
()
def
find_module
(
self
,
fullname
,
path
=
None
):
# Ignore imports with a path which are filesystem-only and any
# absolute imports which does not start with this package prefix,
...
...
@@ -264,3 +261,32 @@ class ComponentDynamicPackage(ModuleType):
setattr
(
self
,
component_name
,
new_module
)
return
new_module
def
reset
(
self
,
sub_package
=
None
):
"""
Reset the content of the current package and its version package as well
recursively. This method must be called within a lock to avoid side
effects
"""
if
sub_package
is
None
:
# Clear the Component registry
self
.
__registry_dict
.
clear
()
package
=
self
else
:
package
=
sub_package
for
name
,
module
in
package
.
__dict__
.
items
():
if
name
[
0
]
==
'_'
or
not
isinstance
(
module
,
ModuleType
):
continue
# Reset the content of the version package before resetting it
elif
isinstance
(
module
,
ComponentVersionPackage
):
self
.
reset
(
sub_package
=
module
)
module_name
=
"%s.%s"
%
(
package
.
__name__
,
name
)
LOG
(
"ERP5Type.Tool.ComponentTool"
,
BLATHER
,
"Resetting "
+
module_name
)
# The module must be deleted first from sys.modules to avoid imports in
# the meantime
del
sys
.
modules
[
module_name
]
delattr
(
package
,
name
)
product/ERP5Type/mixin/component.py
View file @
5a7887b9
...
...
@@ -150,7 +150,7 @@ class ComponentMixin(PropertyRecordableMixin, Base):
_message_reference_not_set
=
"Reference must be set"
_message_invalid_reference
=
"Reference cannot end with '_version' or "
\
"start with '_' or be equal to find_module
or load_module
"
"start with '_' or be equal to find_module
, load_module or reset
"
_message_version_not_set
=
"Version must be set"
_message_invalid_version
=
"Version cannot start with '_'"
...
...
@@ -177,7 +177,7 @@ class ComponentMixin(PropertyRecordableMixin, Base):
elif
(
reference
.
endswith
(
'_version'
)
or
reference
[
0
]
==
'_'
or
reference
in
(
'find_module'
,
'load_module'
)):
reference
in
(
'find_module'
,
'load_module'
,
'reset'
)):
error_list
.
append
(
ConsistencyMessage
(
self
,
object_relative_url
,
...
...
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