Skip to content

Commit 4a0be5a

Browse files
authored
Merge pull request RustPython#3731 from CHOUMnote/addWeakProxyStr
Add weak proxy str
2 parents dfa4bdc + fabcfa6 commit 4a0be5a

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

Lib/test/test_deque.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -889,8 +889,6 @@ def test_pickle_recursive(self):
889889
for d in DequeWithBadIter('abc'), DequeWithBadIter('abc', 2):
890890
self.assertRaises(TypeError, pickle.dumps, d, proto)
891891

892-
# TODO: RUSTPYTHON
893-
@unittest.expectedFailure
894892
def test_weakref(self):
895893
d = deque('gallahad')
896894
p = weakref.proxy(d)

Lib/test/test_set.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,8 +613,6 @@ def test_inplace_on_self(self):
613613
t ^= t
614614
self.assertEqual(t, self.thetype())
615615

616-
# TODO: RUSTPYTHON
617-
@unittest.expectedFailure
618616
def test_weakref(self):
619617
s = self.thetype('gallahad')
620618
p = weakref.proxy(s)

vm/src/builtins/weakproxy.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,23 @@ impl PyWeakProxy {
6262
// TODO: callbacks
6363
#[pymethod(magic)]
6464
fn getattr(&self, attr_name: PyStrRef, vm: &VirtualMachine) -> PyResult {
65-
let obj = self.weak.upgrade().ok_or_else(|| {
66-
vm.new_exception_msg(
67-
vm.ctx.exceptions.reference_error.clone(),
68-
"weakly-referenced object no longer exists".to_owned(),
69-
)
70-
})?;
65+
let obj = self.weak.upgrade().ok_or_else(|| new_reference_error(vm))?;
7166
obj.get_attr(attr_name, vm)
7267
}
68+
#[pymethod(magic)]
69+
fn str(&self, vm: &VirtualMachine) -> PyResult<PyStrRef> {
70+
match self.weak.upgrade() {
71+
Some(obj) => obj.str(vm),
72+
None => Err(new_reference_error(vm)),
73+
}
74+
}
75+
}
76+
77+
fn new_reference_error(vm: &VirtualMachine) -> PyRef<super::PyBaseException> {
78+
vm.new_exception_msg(
79+
vm.ctx.exceptions.reference_error.clone(),
80+
"weakly-referenced object no longer exists".to_owned(),
81+
)
7382
}
7483

7584
impl SetAttr for PyWeakProxy {

0 commit comments

Comments
 (0)