1414
1515try :
1616 from urllib import quote_plus
17- except Exception as e :
17+ except ImportError :
1818 from urllib .parse import quote_plus
1919
2020if TYPE_CHECKING :
@@ -117,7 +117,19 @@ def include(self, reference_field, reference_model=None, reverse=False):
117117
118118 self .includes .append ((reference_model , reference_field , reverse ))
119119 return self
120-
120+
121+ def _read_bundle (self , server ) -> 'Bundle' :
122+ """ Construct the search URL and execute it against the given server.
123+
124+ :param server: The server against which to perform the search
125+ :returns: A Bundle resource
126+ """
127+ if server is None :
128+ raise Exception ("Need a server to perform search" )
129+
130+ from .bundle import Bundle
131+ return Bundle .read_from (self .construct (), server )
132+
121133 def perform (self , server ) -> 'Bundle' :
122134 """ Construct the search URL and execute it against the given server.
123135
@@ -131,11 +143,7 @@ def perform(self, server) -> 'Bundle':
131143 DeprecationWarning ,
132144 )
133145
134- if server is None :
135- raise Exception ("Need a server to perform search" )
136-
137- from .bundle import Bundle
138- return Bundle .read_from (self .construct (), server )
146+ return self ._read_bundle (server )
139147
140148 # Use forward references to avoid circular imports
141149 def perform_iter (self , server ) -> Iterator ['Bundle' ]:
@@ -145,7 +153,7 @@ def perform_iter(self, server) -> Iterator['Bundle']:
145153 :param server: The server against which to perform the search
146154 :returns: An iterator of Bundle instances
147155 """
148- return iter_pages (self .perform (server ), server )
156+ return iter_pages (self ._read_bundle (server ), server )
149157
150158 def perform_resources (self , server ) -> 'list[Resource]' :
151159 """ Performs the search by calling `perform_resources_iter` and returns a list of Resource instances.
@@ -171,8 +179,10 @@ def perform_resources_iter(self, server) -> Iterator['Resource']:
171179 :returns: An iterator of Resource instances
172180 """
173181 for bundle in self .perform_iter (server ):
174- for entry in bundle .entry :
175- yield entry .resource
182+ entries = bundle .entry or []
183+ for entry in entries :
184+ if entry .resource :
185+ yield entry .resource
176186
177187
178188class FHIRSearchParam (object ):
@@ -205,7 +215,7 @@ def handle(self):
205215 return handler .handle (self .copy ())
206216
207217 def as_parameter (self ):
208- """ Return a string that represents the reciever as "key=value".
218+ """ Return a string that represents the receiver as "key=value".
209219 """
210220 return '{}={}' .format (self .name , quote_plus (self .value , safe = ',<=>' ))
211221
0 commit comments