Code Duplication    Length = 38-40 lines in 2 locations

wechatpy/component.py 2 locations

@@ 190-229 (lines=40) @@
187
188
        return self._handle_result(res, method, url, **kwargs)
189
190
    def _handle_result(self, res, method=None, url=None, **kwargs):
191
        result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False)
192
        if 'errcode' in result:
193
            result['errcode'] = int(result['errcode'])
194
195
        if 'errcode' in result and result['errcode'] != 0:
196
            errcode = result['errcode']
197
            errmsg = result.get('errmsg', errcode)
198
            if self.auto_retry and errcode in (
199
                    WeChatErrorCode.INVALID_CREDENTIAL.value,
200
                    WeChatErrorCode.INVALID_ACCESS_TOKEN.value,
201
                    WeChatErrorCode.EXPIRED_ACCESS_TOKEN.value):
202
                logger.info('Component access token expired, fetch a new one and retry request')
203
                self.fetch_access_token()
204
                kwargs['params']['component_access_token'] = self.session.get(
205
                    'component_access_token'
206
                )
207
                return self._request(
208
                    method=method,
209
                    url_or_endpoint=url,
210
                    **kwargs
211
                )
212
            elif errcode == WeChatErrorCode.OUT_OF_API_FREQ_LIMIT.value:
213
                # api freq out of limit
214
                raise APILimitedException(
215
                    errcode,
216
                    errmsg,
217
                    client=self,
218
                    request=res.request,
219
                    response=res
220
                )
221
            else:
222
                raise WeChatClientException(
223
                    errcode,
224
                    errmsg,
225
                    client=self,
226
                    request=res.request,
227
                    response=res
228
                )
229
        return result
230
231
    def fetch_access_token(self):
232
        """
@@ 744-781 (lines=38) @@
741
742
        return self._handle_result(res, method=method, url=url, **kwargs)
743
744
    def _handle_result(self, res, method=None, url=None, **kwargs):
745
        result = json.loads(res.content.decode('utf-8', 'ignore'), strict=False)
746
        if 'errcode' in result:
747
            result['errcode'] = int(result['errcode'])
748
749
        if 'errcode' in result and result['errcode'] != 0:
750
            errcode = result['errcode']
751
            errmsg = result.get('errmsg', errcode)
752
            if self.component.auto_retry and errcode in (
753
                    WeChatErrorCode.INVALID_CREDENTIAL.value,
754
                    WeChatErrorCode.INVALID_ACCESS_TOKEN.value,
755
                    WeChatErrorCode.EXPIRED_ACCESS_TOKEN.value):
756
                logger.info('Component access token expired, fetch a new one and retry request')
757
                self.component.fetch_access_token()
758
                kwargs['params']['component_access_token'] = self.component.access_token
759
                return self._request(
760
                    method=method,
761
                    url_or_endpoint=url,
762
                    **kwargs
763
                )
764
            elif errcode == WeChatErrorCode.OUT_OF_API_FREQ_LIMIT.value:
765
                # api freq out of limit
766
                raise APILimitedException(
767
                    errcode,
768
                    errmsg,
769
                    client=self,
770
                    request=res.request,
771
                    response=res
772
                )
773
            else:
774
                raise WeChatComponentOAuthException(
775
                    errcode,
776
                    errmsg,
777
                    client=self,
778
                    request=res.request,
779
                    response=res
780
                )
781
        return result
782
783
    def _get(self, url, **kwargs):
784
        return self._request(