Skip to content

Commit

Permalink
Merge pull request #13 from pSN0W/converter
Browse files Browse the repository at this point in the history
Added support for changing class and validating name
  • Loading branch information
DeadliestDemon authored Oct 15, 2022
2 parents 3113ade + dfe51f4 commit 91b2ab0
Showing 1 changed file with 43 additions and 5 deletions.
48 changes: 43 additions & 5 deletions convertor.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import re

class Convertor():
def __init__(self):
self.data = {}
Expand All @@ -7,20 +9,49 @@ def __init__(self):
float: "models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=10)",
bool: "models.BooleanField(default=False)"
}
self.primary_keys = {}

def ask_or_append(self,json_data,class_name):
def validString(self, dataString):
specialCharacters = "[^a-zA-Z0-9_]"

if len(dataString) == 0:
return False
elif dataString[0].isdigit():
return False
elif len(re.findall(specialCharacters, dataString)) != 0 :
return False
return True

def ask_or_append(self,json_data,class_name,primary_key=None):
class_name = class_name.title()
if class_name in self.data.keys():
print('Class with the same name already exists!!')
choice = input('Do you want to overwrite it (y|n) : ').lower()
if choice=='y' or choice=='yes':
for k in self.data.keys():
if not self.validString(k):
print(f'Json key {k} doesnt follow correct nomenclature')
return
self.append(json_data,class_name)
else:
print('Aborting operation')
return

else:
for k in self.data.keys():
if not self.validString(k):
print(f'Json key {k} doesnt follow correct nomenclature')
return
self.append(json_data,class_name)

if primary_key:
del self.data[class_name]['id']
prev_val = self.data[class_name][primary_key]
new_val = prev_val.split('(')[0]+'(primary_key=True,editable=False)'
self.data[class_name][primary_key] = new_val
self.primary_keys[class_name] = primary_key
else:
self.primary_keys[class_name] = "id"

def append(self,json_data,class_name):
class_dic = {
"id": "models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)",
Expand Down Expand Up @@ -54,7 +85,7 @@ def create_views_string(self):

def check_existence(class_name):
string_data = f"\t\ttry:\n"
string_data += f"\t\t\t{class_name.lower()} = {class_name}.objects.get(id=pk)\n"
string_data += f"\t\t\t{class_name.lower()} = {class_name}.objects.get({self.primary_keys[class_name]}=pk)\n"
string_data += f"\t\texcept:\n"
string_data += f"\t\t\treturn Response({{'detail':'{class_name} does not exist.'}},status=status.HTTP_400_BAD_REQUEST)\n"
return string_data
Expand Down Expand Up @@ -84,13 +115,20 @@ def add_put_or_patch(class_name,partial):
string_data += f"\t{class_name.lower()}s = {class_name}.objects.all()\n"
string_data += f"\tserialized = {class_name}Serializer({class_name.lower()}s,many=True)\n"
string_data += f"\treturn Response(serialized.data,status=status.HTTP_200_OK)\n\n"
string_data += "@api_view(['POST'])\n"
string_data += f"def create_{class_name.lower()}(request):\n"
string_data += f"\t{class_name.lower()} = {class_name}.objects.create()\n"
string_data += "\tdata = request.data\n"
if self.primary_keys[class_name]=="id":
string_data += f"\t{class_name.lower()} = {class_name}.objects.create()\n"
else:
string_data += "\ttry:\n"
string_data += f"\t\t{class_name.lower()} = {class_name}.objects.create({self.primary_keys[class_name]}=data['{self.primary_keys[class_name]}'])\n"
string_data += "\texcept:\n"
string_data += f"\t\treturn Response({{'detail':'{self.primary_keys[class_name]} should be prvided to create {class_name}'}},status=status.HTTP_400_BAD_REQUEST)\n"
string_data += f"\tserialized = {class_name}Serializer({class_name.lower()},data=data,partial=True)\n"
string_data += f"\tif serialized.is_valid():\n"
string_data += f"\t\tserialized.save()\n"
string_data += f"\t\treturn self.get(request=request,pk=pk)\n"
string_data += f"\t\treturn Response(serialized.data,status=status.HTTP_200_OK)\n\n"
string_data += f"\treturn Response({{'detail':'Some error occured check field names'}},status=status.HTTP_400_BAD_REQUEST)\n\n"
string_data += f"class {class_name}APIView(APIView):\n"
string_data += f"\tdef get(self,request,pk):\n"
Expand Down

0 comments on commit 91b2ab0

Please sign in to comment.