Skip to content

Commit 792c57a

Browse files
Major Bugs Fixed; v1.1.1
1 parent e996740 commit 792c57a

File tree

4 files changed

+67
-37
lines changed

4 files changed

+67
-37
lines changed

NHXDB/NHXDB.py

+59-22
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def __init__(self):
2828
self.cwd = os.getcwd()
2929
self.initialized = True
3030
self.permissions = True
31+
self.pop = False
3132
except PermissionError:
3233
self.permissions = False
3334
self.initialized = False
@@ -297,8 +298,8 @@ def create_table(self, structure, override=False):
297298
else:
298299
buff.update({"null": False})
299300
if "default" in field and (((type(field["default"]) == int and field["type"] != "int") or (type(field["default"]) == str and field["type"] != "str") or (type(field["default"]) == bool and field["type"] != "bool") or (type(field["default"]) == float and field["type"] != "float")) or (len(str(field["default"])) > buff["length"])):
300-
# Returns status code 511 = Invalid default values for Field
301-
return self.returner(511)
301+
# Returns status code 510 = Invalid default values for Field
302+
return self.returner(510)
302303
elif "default" in field and ("ai" not in field or field["ai"] != True):
303304
buff.update({"default": field["default"]})
304305
else:
@@ -337,9 +338,9 @@ def drop_table(self, table_name):
337338
if type(table_name) != str:
338339
return self.returner(300)
339340
os.chdir("./NHX_DB_Dat/" + self.logged_DB + "/tables/")
340-
if os.path.exists(table_name) != True:
341+
if os.path.exists(table_name.lower()) != True:
341342
return self.returner(404)
342-
shutil.rmtree(table_name)
343+
shutil.rmtree(table_name.lower())
343344
return self.returner(200)
344345

345346

@@ -421,8 +422,8 @@ def alter_table(self, values):
421422
else:
422423
buff.update({"null": False})
423424
if "default" in field and (((type(field["default"]) == int and field["type"] != "int") or (type(field["default"]) == str and field["type"] != "str") or (type(field["default"]) == bool and field["type"] != "bool") or (type(field["default"]) == float and field["type"] != "float")) or (len(str(field["default"])) > buff["length"])):
424-
# Returns status code 511 = Invalid default values for Field
425-
return self.returner(511)
425+
# Returns status code 510 = Invalid default values for Field
426+
return self.returner(510)
426427
elif "default" in field and ("ai" not in field or field["ai"] != True):
427428
buff.update({"default": field["default"]})
428429
else:
@@ -462,28 +463,33 @@ def alter_table(self, values):
462463
for field in values["fields"]:
463464
if type(field) != str:
464465
return self.returner(300)
466+
initial_dir = os.getcwd()
467+
to_edit = {}
468+
for field in values["fields"]:
469+
to_edit.update({field: None})
470+
self.pop = True
471+
status_code = self.update_data(values["table_name"], {"fields": to_edit, "criteria": "*"})
472+
self.pop = False
473+
if status_code != 200:
474+
return self.returner(status_code)
475+
os.chdir(initial_dir)
465476
with open("config.NHX", "r+", newline="") as file:
466477
reader = csv.reader(file, delimiter="|")
467478
for index, row in enumerate(reader):
468479
if index == 0:
469480
fields = row
470481
for field in fields:
471482
field = literal_eval(field)
472-
flagged = True
473483
if field["name"].lower() in to_drop:
474-
flagged = False
475484
pass
476485
else:
477486
to_update.append(field)
478-
if flagged:
479-
# Returns status Code 509 = Cannot drop a field already not in Table
480-
return self.returner(509)
481487
with open("config.NHX", "w+", newline='') as file:
482488
writer = csv.writer(file, delimiter='|')
483489
writer.writerow(to_update)
484490
else:
485-
# Returns status code 510 = Unsupported Operation
486-
return self.returner(510)
491+
# Returns status code 509 = Unsupported Operation
492+
return self.returner(509)
487493
return self.returner(200)
488494

489495

@@ -598,6 +604,8 @@ def update_data(self, table_name, values):
598604
return self.returner(304)
599605
if type(table_name) != str or type(values) != dict:
600606
return self.returner(300)
607+
if "fields" not in values or "criteria" not in values:
608+
return self.returner(302)
601609
if os.getcwd() != self.cwd:
602610
os.chdir(self.cwd)
603611
if os.path.exists("./NHX_DB_Dat/" + self.logged_DB + "/tables/" + table_name.lower()) == False:
@@ -622,31 +630,50 @@ def update_data(self, table_name, values):
622630
else:
623631
nindexread.append(field["name"].lower())
624632
flagged = True
625-
if "criteria" not in values or values["criteria"] == "*":
633+
if values["criteria"] == "*":
626634
for field in fields:
627635
field = literal_eval(field)
628636
if field["name"] in to_alter:
629-
if field["attribute"] == "primary" or field["attribute"] == "unique":
630-
return self.returner(603)
637+
if self.pop != True:
638+
if field["attribute"] == "primary" or field["attribute"] == "unique":
639+
return self.returner(603)
640+
if (field["null"] == False) and (values["fields"][field["name"]] == "" or values["fields"][field["name"]] == None) and (field["ai"] == False and field["default"] == None):
641+
return self.returner(600)
642+
if len(str(values["fields"][field["name"]])) > field["length"]:
643+
return self.returner(602)
644+
if (field["type"].lower() == "int" and type(values["fields"][field["name"]]) != int) or (field["type"] == "float" and type(values["fields"][field["name"]]) != float) or (field["type"] == "str" and type(values["fields"][field["name"]]) != str) or ((field["type"] == "bool" and type(values["fields"][field["name"]]) != bool)):
645+
return self.returner(601)
631646
flagged = False
632647
to_up = []
633648
if field["attribute"] != None:
634649
with open("index.NHX", "r+", newline='') as file:
635650
reader = csv.DictReader(file, fieldnames=indexread, delimiter="|")
636651
for index, row in enumerate(reader):
637-
row.update({field["name"] : values["fields"][field["name"]]})
638-
to_up.append(row)
652+
if self.pop and field["name"] in values["fields"]:
653+
row.pop(field["name"])
654+
to_up.append(row)
655+
else:
656+
row.update({field["name"] : values["fields"][field["name"]]})
657+
to_up.append(row)
639658
with open("index.NHX", "w+", newline='') as file:
659+
if self.pop:
660+
indexread.remove(field["name"])
640661
writer = csv.DictWriter(file, fieldnames=indexread, delimiter="|")
641662
for index, row in enumerate(to_up):
642663
writer.writerow(row)
643664
else:
644665
with open("nindex.NHX", "r+", newline='') as file:
645666
reader = csv.DictReader(file, fieldnames=nindexread, delimiter="|")
646667
for index, row in enumerate(reader):
647-
row.update({field["name"] : values["fields"][field["name"]]})
648-
to_up.append(row)
668+
if self.pop and field["name"] in values["fields"]:
669+
row.pop(field["name"])
670+
to_up.append(row)
671+
else:
672+
row.update({field["name"] : values["fields"][field["name"]]})
673+
to_up.append(row)
649674
with open("nindex.NHX", "w+", newline='') as file:
675+
if self.pop:
676+
nindexread.remove(field["name"])
650677
writer = csv.DictWriter(file, fieldnames=nindexread, delimiter="|")
651678
for index, row in enumerate(to_up):
652679
writer.writerow(row)
@@ -827,7 +854,6 @@ def update_data(self, table_name, values):
827854
reader = csv.DictReader(file, delimiter="|", fieldnames=indexread)
828855
flagged = False
829856
for row in reader:
830-
print(fieldx, values, row)
831857
if str(values["fields"][fieldx["name"].lower()]) == str(row[fieldx["name"]]):
832858
flag = True
833859
break
@@ -1100,7 +1126,18 @@ def select_data(self, table_name, criteria):
11001126
reader = csv.DictReader(file, delimiter="|", fieldnames=nindexread)
11011127
for row in reader:
11021128
nindexlines.append(row)
1103-
tout = indexlines + nindexlines
1129+
tout = []
1130+
try:
1131+
nindexlines[0]
1132+
except IndexError:
1133+
return self.returner(indexlines)
1134+
try:
1135+
indexlines[0]
1136+
except IndexError:
1137+
return self.returner(nindexlines)
1138+
for index, row in enumerate(indexlines):
1139+
row.update(nindexlines[index])
1140+
tout.append(row)
11041141
return self.returner(tout)
11051142
if criteria != "*":
11061143
splitted = []

README.md

+2-9
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,8 @@ Since this Database is designed to be as developer friendly as possible, we beli
210210
| 506 | Cannot create two fields with same name
211211
| 507 | Cannot have length more than 255 for int and more than 16384 for str
212212
| 508 | Cannot have bool type in an attributed field
213-
| 509 | Cannot drop a field already not in table
214-
| 510 | Unsupported Operation
215-
| 511 | Invalid Default values for Field
213+
| 509 | Unsupported Operation
214+
| 510 | Invalid Default values for Field
216215
| 600 | Values for a non Null field is not specified
217216
| 601 | Values provided do not match their types
218217
| 602 | Values provided are longer than the size allocated
@@ -228,10 +227,4 @@ Since this Database is designed to be as developer friendly as possible, we beli
228227

229228
> Key: 1xx is Database Setting Up, 200 is Success, 3xx is Database related error, 404 is not found error for any, 5xx is Table related Error, 6xx is data related error, and 700 is Internal error. (Approximately)
230229
231-
License
232-
----
233-
234-
MIT
235-
236-
237230
**Found it useful? Go, install the module and get started!**

checker.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@
4343
dropx = {
4444
"table_name": "NHX",
4545
"operation": "drop",
46-
"fields": ["hq"]
46+
"fields": ["true"]
4747
}
4848
datax = {
49-
"true": "afehsdufsr",
50-
"hq": 131,
51-
"password": 97127
49+
"true": "dsadsaddsa",
50+
"hq": 1331,
51+
"password": 9714227
5252
}
5353
criteria = {
5454
"fields": {
55-
"name": "SomethfsfsjfgdingDIFF",
55+
"true": "SomethfsfsjfgdingDIFF",
5656
"password": 12164342113,
5757
"hq": 101
5858
},

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="NHXDB",
8-
version="v1.1.0",
8+
version="v1.1.1",
99
author="Ch. Muhammad Sohaib",
1010
author_email="chmuhammadsohaib@gmail.com",
1111
description="A lightweight Database Module with a blend of SQL Language and ORM syntax",

0 commit comments

Comments
 (0)