2022-03-15 18:01:57 +00:00
|
|
|
from .utils import tilde_encode, path_with_format, HASH_LENGTH, PrefixedUrlString
|
2020-10-31 18:43:36 +00:00
|
|
|
import urllib
|
|
|
|
|
|
|
|
|
|
|
|
class Urls:
|
|
|
|
def __init__(self, ds):
|
|
|
|
self.ds = ds
|
|
|
|
|
|
|
|
def path(self, path, format=None):
|
2020-10-31 19:11:40 +00:00
|
|
|
if not isinstance(path, PrefixedUrlString):
|
|
|
|
if path.startswith("/"):
|
|
|
|
path = path[1:]
|
2020-11-24 22:06:32 +00:00
|
|
|
path = self.ds.setting("base_url") + path
|
2020-10-31 18:43:36 +00:00
|
|
|
if format is not None:
|
|
|
|
path = path_with_format(path=path, format=format)
|
2020-10-31 19:11:40 +00:00
|
|
|
return PrefixedUrlString(path)
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def instance(self, format=None):
|
|
|
|
return self.path("", format=format)
|
|
|
|
|
|
|
|
def static(self, path):
|
2020-11-15 23:24:22 +00:00
|
|
|
return self.path(f"-/static/{path}")
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def static_plugins(self, plugin, path):
|
2020-11-15 23:24:22 +00:00
|
|
|
return self.path(f"-/static-plugins/{plugin}/{path}")
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def logout(self):
|
|
|
|
return self.path("-/logout")
|
|
|
|
|
|
|
|
def database(self, database, format=None):
|
2022-03-20 00:31:23 +00:00
|
|
|
db = self.ds.get_database(database)
|
|
|
|
return self.path(tilde_encode(db.route), format=format)
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def table(self, database, table, format=None):
|
2022-03-15 18:01:57 +00:00
|
|
|
path = f"{self.database(database)}/{tilde_encode(table)}"
|
2020-10-31 18:43:36 +00:00
|
|
|
if format is not None:
|
|
|
|
path = path_with_format(path=path, format=format)
|
2020-10-31 19:11:40 +00:00
|
|
|
return PrefixedUrlString(path)
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def query(self, database, query, format=None):
|
2022-03-15 18:01:57 +00:00
|
|
|
path = f"{self.database(database)}/{tilde_encode(query)}"
|
2020-10-31 18:43:36 +00:00
|
|
|
if format is not None:
|
|
|
|
path = path_with_format(path=path, format=format)
|
2020-10-31 19:11:40 +00:00
|
|
|
return PrefixedUrlString(path)
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def row(self, database, table, row_path, format=None):
|
2020-11-15 23:24:22 +00:00
|
|
|
path = f"{self.table(database, table)}/{row_path}"
|
2020-10-31 18:43:36 +00:00
|
|
|
if format is not None:
|
|
|
|
path = path_with_format(path=path, format=format)
|
2020-10-31 19:11:40 +00:00
|
|
|
return PrefixedUrlString(path)
|
2020-10-31 18:43:36 +00:00
|
|
|
|
|
|
|
def row_blob(self, database, table, row_path, column):
|
|
|
|
return self.table(database, table) + "/{}.blob?_blob_column={}".format(
|
|
|
|
row_path, urllib.parse.quote_plus(column)
|
|
|
|
)
|