Add the rest of the project
This commit is contained in:
parent
6a2109ce3d
commit
49f2d8e924
6 changed files with 1080 additions and 0 deletions
127
utils.py
Normal file
127
utils.py
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
from based.db import DBConnector
|
||||
from based.columns import (
|
||||
ColumnDefinition,
|
||||
make_column_unique,
|
||||
PrimarySerialColumnDefinition,
|
||||
PrimaryUUIDColumnDefinition,
|
||||
TextColumnDefinition,
|
||||
BigintColumnDefinition,
|
||||
BooleanColumnDefinition,
|
||||
DateColumnDefinition,
|
||||
TimestampColumnDefinition,
|
||||
DoubleColumnDefinition,
|
||||
IntegerColumnDefinition,
|
||||
UUIDColumnDefinition,
|
||||
)
|
||||
from dba import get_user_by_access_token
|
||||
|
||||
|
||||
def check_if_admin_access_token(
|
||||
connector: DBConnector, access_token: str | None
|
||||
) -> bool:
|
||||
if access_token is None:
|
||||
return False
|
||||
|
||||
user, group = get_user_by_access_token(connector, access_token)
|
||||
if user is None or group is None or group.name != "admin":
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def get_column_from_definition(definition: str) -> ColumnDefinition | None:
|
||||
match definition.split(":"):
|
||||
case [name, "serial", "primary"]:
|
||||
return PrimarySerialColumnDefinition(name)
|
||||
|
||||
case [name, "uuid", "primary"]:
|
||||
return PrimaryUUIDColumnDefinition(name)
|
||||
|
||||
case [name, "str"]:
|
||||
return TextColumnDefinition(name)
|
||||
case [name, "str", "unique"]:
|
||||
return make_column_unique(TextColumnDefinition(name))
|
||||
case [name, "str", "default", default]:
|
||||
return TextColumnDefinition(name, default=default)
|
||||
case [name, "str", "default", default, "unique"]:
|
||||
return make_column_unique(TextColumnDefinition(name, default=default))
|
||||
|
||||
case [name, "bigint"]:
|
||||
return BigintColumnDefinition(name)
|
||||
case [name, "bigint", "unique"]:
|
||||
return make_column_unique(BigintColumnDefinition(name))
|
||||
case [name, "bigint", "default", default]:
|
||||
return BigintColumnDefinition(name, default=int(default))
|
||||
case [name, "bigint", "default", default, "unique"]:
|
||||
return make_column_unique(
|
||||
BigintColumnDefinition(name, default=int(default))
|
||||
)
|
||||
|
||||
case [name, "bool"]:
|
||||
return BooleanColumnDefinition(name)
|
||||
case [name, "bool", "unique"]:
|
||||
return make_column_unique(BooleanColumnDefinition(name))
|
||||
case [name, "bool", "default", default]:
|
||||
return BooleanColumnDefinition(name, default=bool(default))
|
||||
case [name, "bool", "default", default, "unique"]:
|
||||
return make_column_unique(
|
||||
BooleanColumnDefinition(name, default=bool(default))
|
||||
)
|
||||
|
||||
case [name, "date"]:
|
||||
return DateColumnDefinition(name)
|
||||
case [name, "date", "unique"]:
|
||||
return make_column_unique(DateColumnDefinition(name))
|
||||
# TODO: Add default value for date
|
||||
|
||||
case [name, "datetime"]:
|
||||
return TimestampColumnDefinition(name)
|
||||
case [name, "datetime", "unique"]:
|
||||
return make_column_unique(TimestampColumnDefinition(name))
|
||||
# TODO: Add default value for timestamp
|
||||
|
||||
case [name, "float"]:
|
||||
return DoubleColumnDefinition(name)
|
||||
case [name, "float", "unique"]:
|
||||
return make_column_unique(DoubleColumnDefinition(name))
|
||||
case [name, "float", "default", default]:
|
||||
return DoubleColumnDefinition(name, default=float(default))
|
||||
case [name, "float", "default", default, "unique"]:
|
||||
return make_column_unique(
|
||||
DoubleColumnDefinition(name, default=float(default))
|
||||
)
|
||||
|
||||
case [name, "int"]:
|
||||
return IntegerColumnDefinition(name)
|
||||
case [name, "int", "unique"]:
|
||||
return make_column_unique(IntegerColumnDefinition(name))
|
||||
case [name, "int", "default", default]:
|
||||
return IntegerColumnDefinition(name, default=int(default))
|
||||
case [name, "int", "default", default, "unique"]:
|
||||
return make_column_unique(
|
||||
IntegerColumnDefinition(name, default=int(default))
|
||||
)
|
||||
|
||||
case [name, "uuid"]:
|
||||
return UUIDColumnDefinition(name)
|
||||
case [name, "uuid", "unique"]:
|
||||
return make_column_unique(UUIDColumnDefinition(name))
|
||||
case [name, "uuid", "default", default]:
|
||||
return UUIDColumnDefinition(name, default=default)
|
||||
case [name, "uuid", "default", default, "unique"]:
|
||||
return make_column_unique(UUIDColumnDefinition(name, default=default))
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def parse_columns_from_definition(definition: str) -> list[ColumnDefinition]:
|
||||
columns = []
|
||||
for column_definition in definition.split(","):
|
||||
if column_definition == "":
|
||||
continue
|
||||
column = get_column_from_definition(column_definition)
|
||||
if column is None:
|
||||
raise ValueError(f"Invalid column definition: {column_definition}")
|
||||
columns.append(column)
|
||||
|
||||
return columns
|
||||
Loading…
Add table
Add a link
Reference in a new issue