Merge lp:~cjwatson/storm/reference-set-getslice into lp:storm

Proposed by Colin Watson
Status: Merged
Merged at revision: 554
Proposed branch: lp:~cjwatson/storm/reference-set-getslice
Merge into: lp:storm
Diff against target: 115 lines (+76/-0)
3 files modified
NEWS (+1/-0)
storm/tests/zope/README.txt (+74/-0)
storm/zope/configure.zcml (+1/-0)
To merge this branch: bzr merge lp:~cjwatson/storm/reference-set-getslice
Reviewer Review Type Date Requested Status
Kristian Glass (community) Approve
Storm Developers Pending
Review via email: mp+384167@code.launchpad.net

Commit message

Fix slicing of security-proxied bound ReferenceSets on Python 2.

To post a comment you must log in.
Revision history for this message
Kristian Glass (doismellburning) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'NEWS'
2--- NEWS 2020-04-25 16:02:54 +0000
3+++ NEWS 2020-05-19 09:03:37 +0000
4@@ -5,6 +5,7 @@
5 ---------
6
7 - Fix list() on security-proxied ResultSets on Python 3.
8+- Fix slicing of security-proxied bound ReferenceSets on Python 2.
9
10 0.23 (2020-03-18)
11 =================
12
13=== modified file 'storm/tests/zope/README.txt'
14--- storm/tests/zope/README.txt 2020-04-25 16:02:54 +0000
15+++ storm/tests/zope/README.txt 2020-05-19 09:03:37 +0000
16@@ -217,6 +217,9 @@
17 John Doe
18 >>> print(result[0].name)
19 Jane Doe
20+ >>> for person in result[:1]:
21+ ... print(person.name)
22+ Jane Doe
23 >>> another_person in result
24 True
25 >>> result.is_empty()
26@@ -244,6 +247,77 @@
27 >>> print(result.one().name)
28 John Doe
29
30+Security-wrapped reference sets work too.
31+
32+ >>> _ = store.execute("""
33+ ... CREATE TABLE team (
34+ ... id INTEGER PRIMARY KEY,
35+ ... name TEXT)
36+ ... """)
37+ >>> _ = store.execute("""
38+ ... CREATE TABLE teammembership (
39+ ... id INTEGER PRIMARY KEY,
40+ ... person INTEGER NOT NULL REFERENCES person,
41+ ... team INTEGER NOT NULL REFERENCES team)
42+ ... """)
43+ >>> store.commit()
44+
45+ >>> from storm.locals import Reference, ReferenceSet, Store
46+
47+ >>> class TeamMembership(Storm):
48+ ...
49+ ... __storm_table__ = "teammembership"
50+ ...
51+ ... id = Int(primary=True)
52+ ...
53+ ... person_id = Int(name="person", allow_none=False)
54+ ... person = Reference(person_id, "Person.id")
55+ ...
56+ ... team_id = Int(name="team", allow_none=False)
57+ ... team = Reference(team_id, "Team.id")
58+ ...
59+ ... def __init__(self, person, team):
60+ ... self.person = person
61+ ... self.team = team
62+
63+ >>> class Team(Person):
64+ ...
65+ ... __storm_table__ = "team"
66+ ...
67+ ... id = Int(primary=True)
68+ ... name = Unicode()
69+ ...
70+ ... def __init__(self, name):
71+ ... self.name = name
72+ ...
73+ ... members = ReferenceSet(
74+ ... "id", "TeamMembership.team_id",
75+ ... "TeamMembership.person_id", "Person.id",
76+ ... order_by="Person.name")
77+ ...
78+ ... def addMember(self, person):
79+ ... Store.of(self).add(TeamMembership(person, self))
80+
81+ >>> protectName(Team, "members", "zope.Public")
82+ >>> protectName(Team, "addMember", "zope.Public")
83+
84+ >>> doe_family = Team(U"does")
85+ >>> store.add(doe_family)
86+ <...Team object at ...>
87+ >>> doe_family = ProxyFactory(doe_family)
88+ >>> doe_family.addMember(person)
89+ >>> doe_family.addMember(another_person)
90+
91+ >>> for member in doe_family.members:
92+ ... print(member.name)
93+ Jane Doe
94+ John Doe
95+ >>> for person in doe_family.members[:1]:
96+ ... print(person.name)
97+ Jane Doe
98+ >>> print(doe_family.members[0].name)
99+ Jane Doe
100+
101 >>> tearDown()
102
103
104
105=== modified file 'storm/zope/configure.zcml'
106--- storm/zope/configure.zcml 2020-04-25 18:16:45 +0000
107+++ storm/zope/configure.zcml 2020-05-19 09:03:37 +0000
108@@ -35,6 +35,7 @@
109 __iter__
110 __len__
111 __getitem__
112+ __getslice__
113 __contains__
114 is_empty
115 first

Subscribers

People subscribed via source and target branches

to status/vote changes: