Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
persistent
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
Kirill Smelkov
persistent
Commits
8f6000b0
Commit
8f6000b0
authored
Feb 23, 2011
by
Tres Seaver
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Match behavior of C Persistent: tests pass both ways.
parent
5b8f7b80
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
220 additions
and
134 deletions
+220
-134
buildout.cfg
buildout.cfg
+6
-0
persistent/pyPersistence.py
persistent/pyPersistence.py
+23
-27
persistent/tests/test_pyPersistence.py
persistent/tests/test_pyPersistence.py
+184
-102
setup.py
setup.py
+7
-5
No files found.
buildout.cfg
View file @
8f6000b0
...
...
@@ -2,8 +2,14 @@
develop = .
parts =
test
scripts
[test]
recipe = zc.recipe.testrunner
eggs =
persistent
[scripts]
recipe = zc.recipe.egg
eggs = persistent [test]
interpreter = py
persistent/pyPersistence.py
View file @
8f6000b0
...
...
@@ -94,13 +94,14 @@ class Persistent(object):
return
self
.
__jar
def
_set_jar
(
self
,
value
):
if
value
is
self
.
__jar
:
return
if
self
.
__jar
is
not
None
:
raise
ValueError
(
'Already assigned a data manager'
)
if
not
IPersistentDataManager
.
providedBy
(
value
):
raise
ValueError
(
'Not a data manager: %s'
%
value
)
self
.
__jar
=
value
if
self
.
__jar
!=
value
:
raise
ValueError
(
'Already assigned a data manager'
)
else
:
if
not
IPersistentDataManager
.
providedBy
(
value
):
raise
ValueError
(
'Not a data manager: %s'
%
value
)
self
.
__jar
=
value
self
.
__flags
=
0
_p_jar
=
property
(
_get_jar
,
_set_jar
)
...
...
@@ -132,11 +133,10 @@ class Persistent(object):
return
_INITIAL_SERIAL
def
_set_serial
(
self
,
value
):
if
value
is
not
None
:
if
not
isinstance
(
value
,
SERIAL_TYPE
):
raise
ValueError
(
'Invalid SERIAL type: %s'
%
value
)
if
len
(
value
)
!=
8
:
raise
ValueError
(
'SERIAL must be 8 octets'
)
if
not
isinstance
(
value
,
SERIAL_TYPE
):
raise
ValueError
(
'Invalid SERIAL type: %s'
%
value
)
if
len
(
value
)
!=
8
:
raise
ValueError
(
'SERIAL must be 8 octets'
)
self
.
__serial
=
value
def
_del_serial
(
self
):
...
...
@@ -154,7 +154,7 @@ class Persistent(object):
def
_set_changed
(
self
,
value
):
if
self
.
__flags
is
None
:
if
value
is
not
None
:
if
value
:
self
.
_p_activate
()
self
.
_p_set_changed_flag
(
value
)
else
:
...
...
@@ -209,7 +209,7 @@ class Persistent(object):
def
_get_sticky
(
self
):
if
self
.
__flags
is
None
:
return
False
return
self
.
__flags
&
_STICKY
return
bool
(
self
.
__flags
&
_STICKY
)
def
_set_sticky
(
self
,
value
):
if
self
.
__flags
is
None
:
raise
ValueError
(
'Ghost'
)
...
...
@@ -226,13 +226,11 @@ class Persistent(object):
return
'unsaved'
if
self
.
__flags
is
None
:
return
'ghost'
if
self
.
__flags
&
_CHANGED
:
result
=
'changed'
else
:
result
=
'saved'
if
self
.
__flags
&
_STICKY
:
return
'%s (sticky)'
%
result
return
result
return
'sticky'
if
self
.
__flags
&
_CHANGED
:
return
'changed'
return
'saved'
_p_status
=
property
(
_get_status
)
...
...
@@ -275,8 +273,6 @@ class Persistent(object):
if
_OGA
(
self
,
'_Persistent__flags'
)
is
None
:
_OGA
(
self
,
'_p_activate'
)()
_OGA
(
self
,
'_p_accessed'
)()
object
.
__delattr__
(
self
,
name
)
if
not
special_name
:
before
=
_OGA
(
self
,
'_Persistent__flags'
)
after
=
before
|
_CHANGED
if
before
!=
after
:
...
...
@@ -284,6 +280,7 @@ class Persistent(object):
if
(
_OGA
(
self
,
'_Persistent__jar'
)
is
not
None
and
_OGA
(
self
,
'_Persistent__oid'
)
is
not
None
):
_OGA
(
self
,
'_p_register'
)()
object
.
__delattr__
(
self
,
name
)
def
__getstate__
(
self
):
""" See IPersistent.
...
...
@@ -293,7 +290,7 @@ class Persistent(object):
return
dict
([
x
for
x
in
idict
.
items
()
if
not
x
[
0
].
startswith
(
'_p_'
)
and
not
x
[
0
].
startswith
(
'_v_'
)])
return
()
return
None
def
__setstate__
(
self
,
state
):
""" See IPersistent.
...
...
@@ -303,7 +300,7 @@ class Persistent(object):
idict
.
clear
()
idict
.
update
(
state
)
else
:
if
state
!=
()
:
if
state
!=
None
:
raise
ValueError
(
'No state allowed on base Persistent class'
)
def
__reduce__
(
self
):
...
...
@@ -323,16 +320,15 @@ class Persistent(object):
def
_p_deactivate
(
self
):
""" See IPersistent.
"""
if
self
.
__flags
is
not
None
and
not
self
.
__flags
&
_CHANGED
:
if
self
.
__flags
is
not
None
and
not
self
.
__flags
:
self
.
_p_invalidate
()
def
_p_invalidate
(
self
):
""" See IPersistent.
"""
if
self
.
__jar
is
not
None
:
if
self
.
__flags
is
not
None
and
self
.
__flags
&
_STICKY
:
raise
ValueError
(
'Sticky'
)
self
.
__flags
=
None
if
self
.
__flags
is
not
None
:
self
.
__flags
=
None
idict
=
getattr
(
self
,
'__dict__'
,
None
)
if
idict
is
not
None
:
idict
.
clear
()
...
...
persistent/tests/test_pyPersistence.py
View file @
8f6000b0
This diff is collapsed.
Click to expand it.
setup.py
View file @
8f6000b0
...
...
@@ -23,6 +23,11 @@ from setuptools import Extension
from
setuptools
import
find_packages
from
setuptools
import
setup
TESTS_REQUIRE
=
[
'zope.interface'
,
'zope.testing>=3.7.0'
,
'zope.testrunner'
,
]
here
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
README
=
(
open
(
os
.
path
.
join
(
here
,
'README.txt'
)).
read
()
...
...
@@ -75,11 +80,8 @@ setup(name='persistent',
],
headers
=
[
'persistent/cPersistence.h'
,
'persistent/ring.h'
],
tests_require
=
[
'zope.interface'
,
'zope.testing>=3.7.0'
,
'zope.testrunner'
,
],
tests_require
=
TESTS_REQUIRE
,
extras_require
=
{
'test'
:
TESTS_REQUIRE
},
test_loader
=
"zope.testrunner.eggsupport:SkipLayers"
,
test_suite
=
"persistent.tests"
,
install_requires
=
[
...
...
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