Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- FAQ = '''
- =================
- ====== ФАК ======
- =================
- В: ЧТО ЭТО ТАКОЕ?
- О: Скрипт для просмотра анимированных гифок в отдельно взятой папке.
- В: ЧТО ОН ДЕЛАЕТ?
- О: Открывает браузер с веб-страницей, на которой отображаются гифки.
- В: ЧТО ЕМУ НАДО?
- О: Питон 3.6. Можно 3.5, но никак не 2.7.
- В: КАК ЭТИМ ПОЛЬЗОВАТЬСЯ?
- О: Есть джва пути:
- 1. Закинуть файл со скриптом (gview.py) в папку с гифками и просто дважды щелкнуть.
- 2. Через командную строку вписать первым агрументом путь к папке, типа так:
- > python gview.py C:\Pics\Gifs
- В: ТАМ ВИРУС?
- О: Обязательно.
- В: А КРОМЕ .GIF ЕЩЕ ФОРМАТОВ МОЖНО?
- О: Ниже (в коде) есть массив FILE_FORMATS, его можно дополнить расширениями.
- Или вообще удалить фрагмент строки 'if x.suffix in FILE_FORMATS' ниже в коде.
- В: У МЕНЯ ЭТОТ ПОРТ НЕ ОТКРЫВАЕТСЯ.
- О: Порт и адрес сервера можно указать аргументами -p и -a соответственно.
- '''
- from http.server import BaseHTTPRequestHandler, HTTPServer, SimpleHTTPRequestHandler
- from pathlib import Path
- import webbrowser
- import os
- import argparse
- FILE_FORMATS = ['.gif']
- HTML_TEMPLATE = '''
- <!DOCTYPE html>
- <html>
- <head>
- <title>Гифки</title>
- <meta charset="utf-8">
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
- <link rel="shortcut icon" href="https://nowere.net/favicon.gif">
- </head>
- <body>
- <main class="container">
- <div class="row">
- {}
- </div>
- </div>
- </main>
- </body>
- </html>
- '''
- IMG_TEMPLATE = '''
- <div class="col">
- <img src="{path}" title="{title}" class="img-thumbnail"/>
- <a href="{path}">{title}</a>
- </div>
- '''
- # HTTPRequestHandler class
- class testHTTPServer_RequestHandler(SimpleHTTPRequestHandler):
- # GET
- def do_GET(self):
- print('p', self.path)
- if self.path == '/':
- self.sendHTML()
- else:
- super().do_GET()
- def sendHTML(self):
- # Send response status code
- self.send_response(200)
- # Send headers
- self.send_header('Content-type','text/html')
- self.end_headers()
- # Send message back to client
- os.chdir(args.path)
- p = Path('.')
- content = ''.join([IMG_TEMPLATE.format_map({'path': os.fspath(x), 'title': x}) for x in p.iterdir() if x.suffix in FILE_FORMATS])
- # Write content as utf-8 data
- message = HTML_TEMPLATE
- message = message.format(content)
- self.wfile.write(bytes(message, "utf8"))
- return
- def run(ip, port):
- print('starting server...')
- server_address = (ip, port)
- httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
- print('running server...')
- httpd.serve_forever()
- if __name__ == '__main__':
- parser = argparse.ArgumentParser(prog='gview.py', description=FAQ, formatter_class=argparse.RawDescriptionHelpFormatter,
- usage='python %(prog)s [options]')
- parser.add_argument('path', type=str, nargs='?', default='.',
- help='Путь к папке с гифками, если не указан, откроется текущая папка')
- parser.add_argument('-p', '--port', type=int, default=8080, metavar='P',
- help='Порт сервера, по умолчанию 8080')
- parser.add_argument('-a', '--address', type=str, default='127.0.0.1', metavar='A',
- help='Адрес сервера, по умолчанию 127.0.0.1')
- args = parser.parse_args()
- print(args)
- parser.print_help()
- url = 'http://{}:{}'.format(args.address, args.port)
- webbrowser.open_new(url)
- run(args.address, args.port)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement