Is it possible to override functions behaviour in class with mock?
This is for python 3.6.8, django 2.2.2
views.py:
YEAR_PATTERN = r"\(\d{4}\)\s*$"
LOCKED_FROM_EXTERNAL_API = False
class FetchFromExternalApi(APIView):
@staticmethod
def fetch_from_url(source):
return urlopen('http://files.grouplens.org/datasets/movielens/%s.zip' % source, timeout=1)
def post(self, request):
global LOCKED_FROM_EXTERNAL_API, YEAR_PATTERN
if LOCKED_FROM_EXTERNAL_API is False:
LOCKED_FROM_EXTERNAL_API = True
try:
source = request.data['source']
except KeyError:
LOCKED_FROM_EXTERNAL_API = False
return Response('no source data in body',
status=status.HTTP_400_BAD_REQUEST)
if source in settings.AVAILABLE_SOURCES:
try:
response = self.fetch_from_url(request.data['source'])
except URLError:
LOCKED_FROM_EXTERNAL_API = False
return Response("External server respond time out",
status=status.HTTP_504_GATEWAY_TIMEOUT)
I would like to write test that will override behaviour of fetch_from_url method, and fully simulate it.