|
1 | 1 | from operator import attrgetter
|
2 |
| - |
3 | 2 | from django.core.exceptions import ObjectDoesNotExist
|
4 | 3 | from django.urls import NoReverseMatch
|
5 | 4 |
|
6 |
| - |
7 | 5 | class MockObject:
|
| 6 | + """ |
| 7 | + A mock object for testing purposes. |
| 8 | + """ |
| 9 | + |
8 | 10 | def __init__(self, **kwargs):
|
9 | 11 | self._kwargs = kwargs
|
10 |
| - for key, val in kwargs.items(): |
11 |
| - setattr(self, key, val) |
| 12 | + for key, value in kwargs.items(): |
| 13 | + setattr(self, key, value) |
12 | 14 |
|
13 | 15 | def __str__(self):
|
14 |
| - kwargs_str = ', '.join([ |
15 |
| - '%s=%s' % (key, value) |
16 |
| - for key, value in sorted(self._kwargs.items()) |
17 |
| - ]) |
18 |
| - return '<MockObject %s>' % kwargs_str |
| 16 | + sorted_kwargs = ', '.join(['%s=%s' % (key, value) for key, value in sorted(self._kwargs.items())]) |
| 17 | + return f'<MockObject {sorted_kwargs}>' |
19 | 18 |
|
20 | 19 |
|
21 | 20 | class MockQueryset:
|
| 21 | + """ |
| 22 | + A mock queryset for testing purposes. |
| 23 | + """ |
| 24 | + |
22 | 25 | def __init__(self, iterable):
|
23 | 26 | self.items = iterable
|
24 | 27 |
|
25 |
| - def __getitem__(self, val): |
26 |
| - return self.items[val] |
| 28 | + def __getitem__(self, index): |
| 29 | + return self.items[index] |
27 | 30 |
|
28 | 31 | def get(self, **lookup):
|
29 | 32 | for item in self.items:
|
30 |
| - if all([ |
31 |
| - attrgetter(key.replace('__', '.'))(item) == value |
32 |
| - for key, value in lookup.items() |
33 |
| - ]): |
| 33 | + if all(attrgetter(key.replace('__', '.'))(item) == value for key, value in lookup.items()): |
34 | 34 | return item
|
35 | 35 | raise ObjectDoesNotExist()
|
36 | 36 |
|
37 | 37 |
|
38 | 38 | class BadType:
|
39 | 39 | """
|
40 |
| - When used as a lookup with a `MockQueryset`, these objects |
41 |
| - will raise a `TypeError`, as occurs in Django when making |
42 |
| - queryset lookups with an incorrect type for the lookup value. |
| 40 | + Raise a `TypeError` when used as a lookup value with a `MockQueryset`. |
| 41 | + This behavior mimics Django's queryset lookups with incorrect types. |
43 | 42 | """
|
44 | 43 |
|
45 | 44 | def __eq__(self):
|
46 | 45 | raise TypeError()
|
47 | 46 |
|
48 | 47 |
|
49 | 48 | def mock_reverse(view_name, args=None, kwargs=None, request=None, format=None):
|
| 49 | + """ |
| 50 | + Mocked implementation of Django's reverse function for testing. |
| 51 | + """ |
| 52 | + |
50 | 53 | args = args or []
|
51 | 54 | kwargs = kwargs or {}
|
52 |
| - value = (args + list(kwargs.values()) + ['-'])[0] |
| 55 | + first_value = (args + list(kwargs.values()) + ['-'])[0] |
53 | 56 | prefix = 'http://example.org' if request else ''
|
54 |
| - suffix = ('.' + format) if (format is not None) else '' |
55 |
| - return '%s/%s/%s%s/' % (prefix, view_name, value, suffix) |
| 57 | + suffix = f'.{format}' if format is not None else '' |
| 58 | + return f'{prefix}/{view_name}/{first_value}{suffix}/' |
56 | 59 |
|
57 | 60 |
|
58 | 61 | def fail_reverse(view_name, args=None, kwargs=None, request=None, format=None):
|
| 62 | + """ |
| 63 | + Mocked implementation of Django's reverse function to raise a NoReverseMatch for testing. |
| 64 | + """ |
59 | 65 | raise NoReverseMatch()
|
0 commit comments