remove short_url and add in-tree URLencoder #53
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