Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
finesse
pykat
Commits
e4409568
Commit
e4409568
authored
Jan 09, 2017
by
Daniel Brown
Browse files
further work for freezing components
parent
0b5db2fb
Pipeline
#1771
passed with stage
in 19 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
pykat/commands.py
View file @
e4409568
...
...
@@ -43,31 +43,25 @@ class Command(object):
When deep copying a kat object we need to take into account
the instance specific properties.
"""
cls
=
self
.
__class__
result
=
cls
.
__new__
(
cls
)
result
.
_unfreeze
()
result
.
__dict__
=
copy
.
deepcopy
(
self
.
__dict__
,
memo
)
for
_
in
result
.
_putters
:
_
.
_updateOwner
(
result
)
result
.
_freeze
()
return
result
def
_freeze
(
self
):
self
.
__dict__
[
"____FROZEN____"
]
=
True
def
_unfreeze
(
self
):
self
.
__dict__
[
"____FROZEN____"
]
=
False
def
__setattr__
(
self
,
name
,
value
):
if
self
.
__dict__
[
"____FROZEN____"
]
and
not
hasattr
(
self
,
name
):
if
"____FROZEN____"
in
self
.
__dict__
and
self
.
__dict__
[
"____FROZEN____"
]
and
not
hasattr
(
self
,
name
):
warnings
.
warn
(
"'%s' does not have attribute called '%s'"
%
(
self
.
__name
,
name
),
stacklevel
=
2
)
if
hasattr
(
self
,
name
)
and
hasattr
(
self
.
__class__
,
name
):
prop
=
getattr
(
self
.
__class__
,
name
)
if
isinstance
(
prop
,
property
):
prop
.
fset
(
self
,
value
)
return
self
.
__dict__
[
name
]
=
value
super
(
Command
,
self
).
__setattr__
(
name
,
value
)
def
getFinesseText
(
self
):
""" Base class for individual finesse optical components """
...
...
pykat/components.py
View file @
e4409568
...
...
@@ -100,7 +100,8 @@ class Component(object):
cnew
=
type
(
cnew_name
,
(
cls
,),
{})
return
object
.
__new__
(
cnew
)
o
=
object
.
__new__
(
cnew
)
return
o
def
__init__
(
self
,
name
=
None
):
self
.
_unfreeze
()
...
...
@@ -125,32 +126,26 @@ class Component(object):
def
_unfreeze
(
self
):
self
.
__dict__
[
"____FROZEN____"
]
=
False
def
__setattr__
(
self
,
name
,
value
):
if
self
.
__dict__
[
"____FROZEN____"
]
and
not
hasattr
(
self
,
name
):
if
"____FROZEN____"
in
self
.
__dict__
and
self
.
__dict__
[
"____FROZEN____"
]
and
not
hasattr
(
self
,
name
):
warnings
.
warn
(
"'%s' does not have attribute called '%s'"
%
(
self
.
__name
,
name
),
stacklevel
=
2
)
if
hasattr
(
self
,
name
)
and
hasattr
(
self
.
__class__
,
name
):
prop
=
getattr
(
self
.
__class__
,
name
)
if
isinstance
(
prop
,
property
):
prop
.
fset
(
self
,
value
)
return
self
.
__dict__
[
name
]
=
value
super
(
Component
,
self
).
__setattr__
(
name
,
value
)
def
__deepcopy__
(
self
,
memo
):
"""
When deep copying a kat object we need to take into account
the instance specific properties.
"""
# Here we create a copy of this object based of the base class
# of this one, otherwise we're making a copy of a copy of a copy...
result
=
self
.
__class__
.
__new__
(
self
.
__class__
.
__base__
)
result
.
_unfreeze
()
result
.
__dict__
=
copy
.
deepcopy
(
self
.
__dict__
,
memo
)
for
_
in
result
.
_params
:
_
.
_updateOwner
(
result
)
result
.
_freeze
()
return
result
def
_register_param
(
self
,
param
):
...
...
pykat/detectors.py
View file @
e4409568
...
...
@@ -51,11 +51,12 @@ class BaseDetector(object) :
cnew
=
type
(
cnew_name
,
(
cls
,),
{})
return
object
.
__new__
(
cnew
)
o
=
object
.
__new__
(
cnew
)
return
o
def
__init__
(
self
,
name
,
nodes
=
None
,
max_nodes
=
1
):
self
.
_
_dict__
[
"____FROZEN____"
]
=
False
self
.
_
unfreeze
()
self
.
__name
=
name
self
.
_svgItem
=
None
...
...
@@ -103,17 +104,10 @@ class BaseDetector(object) :
def
_unfreeze
(
self
):
self
.
__dict__
[
"____FROZEN____"
]
=
False
def
__setattr__
(
self
,
name
,
value
):
if
self
.
__dict__
[
"____FROZEN____"
]
and
not
hasattr
(
self
,
name
):
if
"____FROZEN____"
in
self
.
__dict__
and
self
.
__dict__
[
"____FROZEN____"
]
and
not
hasattr
(
self
,
name
):
warnings
.
warn
(
"'%s' does not have attribute called '%s'"
%
(
self
.
__name
,
name
),
stacklevel
=
2
)
if
hasattr
(
self
,
name
)
and
hasattr
(
self
.
__class__
,
name
):
prop
=
getattr
(
self
.
__class__
,
name
)
if
isinstance
(
prop
,
property
):
prop
.
fset
(
self
,
value
)
return
self
.
__dict__
[
name
]
=
value
super
(
BaseDetector
,
self
).
__setattr__
(
name
,
value
)
def
__deepcopy__
(
self
,
memo
):
"""
...
...
@@ -124,8 +118,10 @@ class BaseDetector(object) :
# Here we create a copy of this object based of the base class
# of this one, otherwise we're making a copy of a copy of a copy...
result
=
self
.
__class__
.
__new__
(
self
.
__class__
.
__base__
)
result
.
_unfreeze
()
result
.
__dict__
=
copy
.
deepcopy
(
self
.
__dict__
,
memo
)
result
.
_freeze
()
return
result
def
_register_param
(
self
,
param
):
...
...
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