Commit b6820cef authored by AntonKras's avatar AntonKras
Browse files

тесты и документация

parent a08baec2
from flask import Flask, render_template, redirect, request, abort, flash
import re, os, random, string
import yaml, sys, redis
from werkzeug.urls import url_fix
from urllib.parse import urlparse, urlunparse, quote
import re, os, random, string, yaml, redis, sys
import argparse
app = Flask(__name__)
app.secret_key = os.urandom(24)
file = sys.argv[1]
@app.route('/', methods=['GET', 'POST'])
def main():
"""
функция рендерит шаблон
:return отрендеренный html-файл:
"""
yaml_dict = extract_data_from_yml(file)
return render_template('index.html', yaml_dict=yaml_dict)
......@@ -21,7 +20,7 @@ def main():
def add():
"""
функция добавления соответствия
:return redirect:
:return redirect(перенаправление на главную страницу):
"""
url = request.args.get("url1")
yaml_dict = extract_data_from_yml(file)
......@@ -42,6 +41,11 @@ def add():
@app.route('/<path:path>')
def redirect_somewhere(path):
"""
функция перенаправляет пользователя на соответствующую короткой ссылке страницу
:param path (передается часть ссылки после /):
:return redirect or 404 Error:
"""
yml_dict = extract_data_from_yml(file)
if path in yml_dict:
return redirect(normalize(yml_dict[path]))
......@@ -51,9 +55,9 @@ def redirect_somewhere(path):
def extract_data_from_yml(urls) -> dict:
"""
извлекает данные из yml
:param urls:
:return dict:
извлекает данные из yml и записывает в redis
:param файл формата yml или yaml:
:return словарь с соответствиями:
"""
r = redis.Redis()
......@@ -71,8 +75,8 @@ def extract_data_from_yml(urls) -> dict:
def generate_short_url() -> str:
"""
функция генерирования короткой ссылки
:return str:
функция генерирования короткой ссылки из букв
:return сгенерированная строчка:
"""
rand_str = lambda n: ''.join(
[random.choice(string.ascii_lowercase) for i in range(n)]) # составление короткой ссылки
......@@ -81,9 +85,9 @@ def generate_short_url() -> str:
def check_if_input_is_url(url) -> None or not None:
"""
проверка является ли входной параметр ссылкой
:param url:
:return:
проверка ссылку на валидность
:param ссылка:
:return None or not None:
"""
regex = re.compile(
r'^(?:http|ftp)s?://' # http:// или https://
......@@ -99,8 +103,8 @@ def check_if_input_is_url(url) -> None or not None:
def normalize(url: str) -> str:
"""
нормализация ссылки
:param url:
:return:
:param ссылка:
:return нормализованная ссылка:
"""
if 'http' not in url:
url = 'http://' + url
......@@ -108,4 +112,5 @@ def normalize(url: str) -> str:
if __name__ == '__main__':
file = sys.argv[1]
app.run()
......@@ -6,3 +6,4 @@ vktlm: https://www.oslogic.ru/knowledge/598/shpargalka-po-osnovnym-komandam-post
mwimu: https://radiojazzfm.ru/
ahfsm: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%B5%D1%80%D1%8F%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D0%BE%D0%BA%D0%BE%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5
ulido: https://pythonbasics.org/flask-tutorial-routes/
xcurl: https://www.imdb.com/list/ls025873906/?ref_=otl_3
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment