remove short_url and add in-tree URLencoder (#53)
This PR removes the short_url dependency as per issue #41. This implementation is pretty much the same as in short_url except I've rewritten the enbase() function to be iterative instead of recursive. The only functions of the class are enbase() and debase() since those were the only functions being used by fhost. Co-authored-by: 7415963987456321 <hrs70@hi.is> Reviewed-on: #53 Co-authored-by: mia <mia@0x0.st> Co-committed-by: mia <mia@0x0.st>
This commit is contained in:
parent
b8def71a94
commit
9c4a0fd5a6
2 changed files with 27 additions and 6 deletions
32
fhost.py
32
fhost.py
|
@ -29,7 +29,6 @@ from magic import Magic
|
||||||
from mimetypes import guess_extension
|
from mimetypes import guess_extension
|
||||||
import sys
|
import sys
|
||||||
import requests
|
import requests
|
||||||
from short_url import UrlEncoder
|
|
||||||
from validators import url as url_valid
|
from validators import url as url_valid
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
@ -91,8 +90,6 @@ Please install python-magic.""")
|
||||||
db = SQLAlchemy(app)
|
db = SQLAlchemy(app)
|
||||||
migrate = Migrate(app, db)
|
migrate = Migrate(app, db)
|
||||||
|
|
||||||
su = UrlEncoder(alphabet=app.config["URL_ALPHABET"], block_size=16)
|
|
||||||
|
|
||||||
class URL(db.Model):
|
class URL(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key = True)
|
id = db.Column(db.Integer, primary_key = True)
|
||||||
url = db.Column(db.UnicodeText, unique = True)
|
url = db.Column(db.UnicodeText, unique = True)
|
||||||
|
@ -101,7 +98,7 @@ class URL(db.Model):
|
||||||
self.url = url
|
self.url = url
|
||||||
|
|
||||||
def getname(self):
|
def getname(self):
|
||||||
return su.enbase(self.id, 1)
|
return su.enbase(self.id)
|
||||||
|
|
||||||
def geturl(self):
|
def geturl(self):
|
||||||
return url_for("get", path=self.getname(), _external=True) + "\n"
|
return url_for("get", path=self.getname(), _external=True) + "\n"
|
||||||
|
@ -132,7 +129,7 @@ class File(db.Model):
|
||||||
self.addr = addr
|
self.addr = addr
|
||||||
|
|
||||||
def getname(self):
|
def getname(self):
|
||||||
return u"{0}{1}".format(su.enbase(self.id, 1), self.ext)
|
return u"{0}{1}".format(su.enbase(self.id), self.ext)
|
||||||
|
|
||||||
def geturl(self):
|
def geturl(self):
|
||||||
n = self.getname()
|
n = self.getname()
|
||||||
|
@ -207,6 +204,31 @@ class File(db.Model):
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UrlEncoder(object):
|
||||||
|
def __init__(self,alphabet, min_length):
|
||||||
|
self.alphabet = alphabet
|
||||||
|
self.min_length = min_length
|
||||||
|
|
||||||
|
def enbase(self, x):
|
||||||
|
n = len(self.alphabet)
|
||||||
|
str = ""
|
||||||
|
while x > 0:
|
||||||
|
str = (self.alphabet[int(x % n)]) + str
|
||||||
|
x = int(x // n)
|
||||||
|
padding = self.alphabet[0] * (self.min_length - len(str))
|
||||||
|
return '%s%s' % (padding, str)
|
||||||
|
|
||||||
|
def debase(self, x):
|
||||||
|
n = len(self.alphabet)
|
||||||
|
result = 0
|
||||||
|
for i, c in enumerate(reversed(x)):
|
||||||
|
result += self.alphabet.index(c) * (n ** i)
|
||||||
|
return result
|
||||||
|
|
||||||
|
su = UrlEncoder(alphabet=app.config["URL_ALPHABET"], min_length=1)
|
||||||
|
|
||||||
def fhost_url(scheme=None):
|
def fhost_url(scheme=None):
|
||||||
if not scheme:
|
if not scheme:
|
||||||
return url_for(".fhost", _external=True).rstrip("/")
|
return url_for(".fhost", _external=True).rstrip("/")
|
||||||
|
|
|
@ -8,4 +8,3 @@ Flask_SQLAlchemy
|
||||||
validators
|
validators
|
||||||
flask_migrate
|
flask_migrate
|
||||||
python_magic
|
python_magic
|
||||||
short_url
|
|
||||||
|
|
Loading…
Reference in a new issue