Skip to content
This repository was archived by the owner on Nov 11, 2022. It is now read-only.

Commit 01176cb

Browse files
Some refactor
1 parent 4103b69 commit 01176cb

File tree

7 files changed

+75
-93
lines changed

7 files changed

+75
-93
lines changed

.gitignore

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,6 @@ obj/
77
Debug/
88

99

10-
*.sln
11-
*.csproj
12-
*.user
13-
14-
.sln/
15-
.csproj/
16-
.user/
17-
.vs/
18-
19-
2010
__pycache__/
2111

2212
# C extensions
@@ -65,4 +55,7 @@ target/
6555

6656
.ropeproject
6757
.drawio
68-
*.drawio
58+
*.drawio
59+
60+
response.json
61+
expected.json

expected.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

response.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

shop/serializers.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,6 @@
1-
from rest_framework import serializers
2-
from .models import ShopUnit
31
from .custom_types import SHOP_UNIT_TYPES
42

53

6-
class RecursiveField(serializers.Serializer):
7-
def to_representation(self, value):
8-
serializer = self.parent.parent.__class__(value, context=self.context)
9-
if self.parent.parent.__class__(value)['type'].value != SHOP_UNIT_TYPES[0][0]:
10-
return None
11-
12-
return serializer.data
13-
14-
15-
class ShopUnitSerializer(serializers.ModelSerializer):
16-
children = RecursiveField(many=True)
17-
18-
class Meta:
19-
model = ShopUnit
20-
fields = ('id', 'name', 'type', 'parentId', 'date', 'price', 'children')
21-
22-
234
def data_to_dict(data) -> dict:
245
response: dict = dict()
256

shop/utils.py

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,7 @@
1-
from datetime import datetime
2-
from uuid import UUID
31
from .custom_types import SHOP_UNIT_TYPES
42
from .models import ShopUnit
53

64

7-
def check_items_for_import(items_to_check: list[dict], update_date: str) -> bool:
8-
existing_units = ShopUnit.objects
9-
new_units: list = list()
10-
ids_set: set = set()
11-
12-
for item_to_check in items_to_check:
13-
# check name
14-
if item_to_check['name'] is None:
15-
return False
16-
17-
# check that all ids are different
18-
if item_to_check['id'] in ids_set:
19-
return False
20-
ids_set.add(item_to_check['id'])
21-
22-
# check parent
23-
if item_to_check['parentId'] is not None:
24-
found_parent_in_existing = existing_units.filter(id=item_to_check['parentId'])
25-
found_parent_in_new: list = list(filter(lambda unit: unit['id'] == item_to_check['parentId'], new_units))
26-
27-
if len(found_parent_in_existing) == 0 and len(found_parent_in_new) == 0:
28-
return False
29-
else:
30-
if len(found_parent_in_new) != 0:
31-
if found_parent_in_new[0]['type'] != SHOP_UNIT_TYPES[0][0]:
32-
return False
33-
else:
34-
if found_parent_in_existing[0].type != SHOP_UNIT_TYPES[0][0]:
35-
return False
36-
37-
# check price
38-
if item_to_check['type'] != SHOP_UNIT_TYPES[0][0] and item_to_check['price'] < 0:
39-
return False
40-
41-
new_units.append(item_to_check)
42-
43-
# check date
44-
try:
45-
datetime.fromisoformat(str(update_date).replace('Z', '+00:00'))
46-
except:
47-
return False
48-
49-
return True
50-
51-
525
def update_parent_prices_after_creating(item_to_start) -> None:
536
#print('UPDATING')
547
price_to_add: int = item_to_start.price
@@ -197,18 +150,6 @@ def update_existing_item(item: dict, date: str) -> None:
197150
existing_item.save()
198151

199152

200-
def check_valid_uuid(to_delete: str) -> bool:
201-
if to_delete is None:
202-
return False
203-
204-
try:
205-
uuid_obj = UUID(to_delete)
206-
except ValueError:
207-
return False
208-
209-
return True
210-
211-
212153
def remove_item(element) -> None:
213154
if element.type != SHOP_UNIT_TYPES[0][0]:
214155
element.delete()

shop/validators.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
from datetime import datetime
2+
from uuid import UUID
3+
4+
from .custom_types import SHOP_UNIT_TYPES
5+
from .models import ShopUnit
6+
7+
8+
def check_date_iso(date: str) -> bool:
9+
try:
10+
datetime.fromisoformat(str(date).replace('Z', '+00:00'))
11+
except:
12+
return False
13+
14+
return True
15+
16+
17+
def check_valid_uuid(to_delete: str) -> bool:
18+
if to_delete is None:
19+
return False
20+
21+
try:
22+
uuid_obj = UUID(to_delete)
23+
except ValueError:
24+
return False
25+
26+
return True
27+
28+
29+
def check_items_for_import(items_to_check: list[dict], update_date: str) -> bool:
30+
existing_units = ShopUnit.objects
31+
new_units: list = list()
32+
ids_set: set = set()
33+
34+
for item_to_check in items_to_check:
35+
# check name
36+
if item_to_check['name'] is None:
37+
return False
38+
39+
# check that all ids are different
40+
if item_to_check['id'] in ids_set:
41+
return False
42+
ids_set.add(item_to_check['id'])
43+
44+
# check parent
45+
if item_to_check['parentId'] is not None:
46+
found_parent_in_existing = existing_units.filter(id=item_to_check['parentId'])
47+
found_parent_in_new: list = list(filter(lambda unit: unit['id'] == item_to_check['parentId'], new_units))
48+
49+
if len(found_parent_in_existing) == 0 and len(found_parent_in_new) == 0:
50+
return False
51+
else:
52+
if len(found_parent_in_new) != 0:
53+
if found_parent_in_new[0]['type'] != SHOP_UNIT_TYPES[0][0]:
54+
return False
55+
else:
56+
if found_parent_in_existing[0].type != SHOP_UNIT_TYPES[0][0]:
57+
return False
58+
59+
# check price
60+
if item_to_check['type'] != SHOP_UNIT_TYPES[0][0] and item_to_check['price'] < 0:
61+
return False
62+
63+
new_units.append(item_to_check)
64+
65+
# check date
66+
if not check_date_iso(update_date):
67+
return False
68+
69+
return True

shop/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
from rest_framework.request import Request
44

55

6-
from .utils import check_items_for_import, check_valid_uuid
6+
from .validators import check_items_for_import, check_valid_uuid
77
from .utils import create_new_item, update_existing_item, remove_item
88
from .utils import update_parent_prices_after_deleting
99
from .custom_types import Error
1010
from .models import ShopUnit
11-
from .serializers import ShopUnitSerializer, data_to_dict
11+
from .serializers import data_to_dict
1212

1313

1414
class ImportsAPIView(views.APIView):

0 commit comments

Comments
 (0)