File tree Expand file tree Collapse file tree 3 files changed +30
-2
lines changed
Expand file tree Collapse file tree 3 files changed +30
-2
lines changed Original file line number Diff line number Diff line change @@ -62,6 +62,7 @@ class RESTObject:
6262 _parent_attrs : Dict [str , Any ]
6363 _repr_attr : Optional [str ] = None
6464 _updated_attrs : Dict [str , Any ]
65+ _lazy : bool
6566 manager : "RESTManager"
6667
6768 def __init__ (
@@ -70,6 +71,7 @@ def __init__(
7071 attrs : Dict [str , Any ],
7172 * ,
7273 created_from_list : bool = False ,
74+ lazy : bool = False ,
7375 ) -> None :
7476 if not isinstance (attrs , dict ):
7577 raise GitlabParsingError (
@@ -84,6 +86,7 @@ def __init__(
8486 "_updated_attrs" : {},
8587 "_module" : importlib .import_module (self .__module__ ),
8688 "_created_from_list" : created_from_list ,
89+ "_lazy" : lazy ,
8790 }
8891 )
8992 self .__dict__ ["_parent_attrs" ] = self .manager .parent_attrs
Original file line number Diff line number Diff line change @@ -106,11 +106,11 @@ def get(
106106 if lazy is True :
107107 if TYPE_CHECKING :
108108 assert self ._obj_cls ._id_attr is not None
109- return self ._obj_cls (self , {self ._obj_cls ._id_attr : id })
109+ return self ._obj_cls (self , {self ._obj_cls ._id_attr : id }, lazy = lazy )
110110 server_data = self .gitlab .http_get (path , ** kwargs )
111111 if TYPE_CHECKING :
112112 assert not isinstance (server_data , requests .Response )
113- return self ._obj_cls (self , server_data )
113+ return self ._obj_cls (self , server_data , lazy = lazy )
114114
115115
116116class GetWithoutIdMixin (_RestManagerBase ):
Original file line number Diff line number Diff line change @@ -44,9 +44,34 @@ class M(GetMixin, FakeManager):
4444 assert isinstance (obj , FakeObject )
4545 assert obj .foo == "bar"
4646 assert obj .id == 42
47+ assert obj ._lazy is False
4748 assert responses .assert_call_count (url , 1 ) is True
4849
4950
51+ def test_get_mixin_lazy (gl ):
52+ class M (GetMixin , FakeManager ):
53+ pass
54+
55+ url = "http://localhost/api/v4/tests/42"
56+
57+ mgr = M (gl )
58+ with responses .RequestsMock (assert_all_requests_are_fired = False ) as rsps :
59+ rsps .add (
60+ method = responses .GET ,
61+ url = url ,
62+ json = {"id" : 42 , "foo" : "bar" },
63+ status = 200 ,
64+ match = [responses .matchers .query_param_matcher ({})],
65+ )
66+ obj = mgr .get (42 , lazy = True )
67+ assert isinstance (obj , FakeObject )
68+ assert not hasattr (obj , "foo" )
69+ assert obj .id == 42
70+ assert obj ._lazy is True
71+ # a `lazy` get does not make a network request
72+ assert len (rsps .calls ) == 0
73+
74+
5075@responses .activate
5176def test_refresh_mixin (gl ):
5277 class TestClass (RefreshMixin , FakeObject ):
You can’t perform that action at this time.
0 commit comments