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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Eteri
erp5
Commits
ee0e915c
Commit
ee0e915c
authored
Jan 20, 2012
by
Łukasz Nowak
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into lazy_simulation_causality
parents
3bfb155c
9dd11e5e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
12 deletions
+17
-12
product/ERP5Type/dynamic/dynamic_module.py
product/ERP5Type/dynamic/dynamic_module.py
+17
-12
No files found.
product/ERP5Type/dynamic/dynamic_module.py
View file @
ee0e915c
from
types
import
ModuleType
import
sys
import
threading
class
DynamicModule
(
ModuleType
):
"""This module may generate new objects at runtime."""
...
...
@@ -11,23 +12,27 @@ class DynamicModule(ModuleType):
def
__init__
(
self
,
name
,
factory
,
doc
=
None
):
super
(
DynamicModule
,
self
).
__init__
(
name
,
doc
=
doc
)
self
.
_factory
=
factory
self
.
_lock
=
threading
.
Lock
()
def
__getattr__
(
self
,
name
):
if
name
[:
2
]
==
'__'
:
raise
AttributeError
(
'%r module has no attribute %r'
%
(
self
.
__name__
,
name
))
obj
=
self
.
_factory
(
name
)
# _factory can return an instance, a constant, or a class
if
isinstance
(
obj
,
type
):
# if it's a class we want to set __module__
obj
.
__module__
=
self
.
__name__
elif
isinstance
(
obj
,
ModuleType
):
# if it's a module we want to set the name according to the
# module it's being added to
obj
.
__name__
=
"%s.%s"
%
(
self
.
__name__
,
name
)
setattr
(
self
,
name
,
obj
)
return
obj
with
self
.
_lock
:
try
:
return
super
(
DynamicModule
,
self
).
__getattribute__
(
name
)
except
AttributeError
:
obj
=
self
.
_factory
(
name
)
# _factory can return an instance, a constant, or a class
if
isinstance
(
obj
,
type
):
# if it's a class we want to set __module__
obj
.
__module__
=
self
.
__name__
elif
isinstance
(
obj
,
ModuleType
):
# if it's a module we want to set the name according to the
# module it's being added to
obj
.
__name__
=
"%s.%s"
%
(
self
.
__name__
,
name
)
setattr
(
self
,
name
,
obj
)
return
obj
def
registerDynamicModule
(
name
,
factory
):
d
=
DynamicModule
(
name
,
factory
)
...
...
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