get-css-fonts/get-css-fonts at master · albertodonato/get-css-fonts · GitHub
| #!/usr/bin/env python3 |
| |
| «»»Создайте файл CSS шрифтов с локальными ресурсами из URL-адреса шрифтов Google.»»» |
| |
| импорт ОС |
| импорт относительно |
| система импорта |
| журнал импорта |
| из импорта коллекций namedtuple |
| из argparse import ArgumentParser |
| |
| запросов на импорт |
| 9(?P\s+src:. *)local\(‘(?P.*?)’\),\s+»
| r»url\((?P.*?)\)(?P.*)») |
| |
| Шрифт = namedtuple(‘Шрифт’, [‘имя файла’, ‘url’]) |
| |
| # ведение журнала настройки |
| logging.basicConfig (поток = sys.stdout, уровень = logging.INFO) |
| регистратор = logging.getLogger() |
| |
| |
| деф parse_args(): |
| «»»Разобрать командную строку. «»» |
| анализатор = ArgumentParser (описание = __doc__) |
| parser.add_argument(‘url’, help=’URL для шрифтов CSS’) |
| parser.add_argument( |
| ‘—cssfile’, default=’fonts.css’, help=’целевое имя файла для шрифтов CSS’) |
| parser.add_argument( |
| ‘—fontdir’, default=’fonts’, help=’целевой каталог для шрифтов’) |
| вернуть parser.parse_args() |
| |
| |
| def fetch_file (url, имя файла = нет): |
| «»»Получить файл по URL-адресу. |
| |
| Если указано имя файла, содержимое сохраняется в файл, в противном случае возвращается. |
| |
| «»» |
| ответ = запросы.get(url) |
| logger.info(‘извлечение {url}’.format(url=url)) |
| , если response.status_code != 200: |
| поднять Исключение( |
| ‘Не удалось получить «{url}: {r.status_code} {r.reason}’.format( |
| url=url, r=ответ)) |
| |
| если не имя файла: |
| возврат ответа. текст |
| |
| с открытым (имя файла, ‘w’) как fd: |
| logger.info(‘сохранение содержимого в {имя файла}’.format(имя файла=имя файла)) |
| fd.write(ответ.текст) |
| |
| |
| по определению make_css_urls_local (содержимое, каталог шрифтов): |
| «»»Обработка содержимого CSS и преобразование URL-адресов в локальные файлы. |
| |
| Вернуть преобразованный текст CSS и список шрифтов. |
| |
| «»» |
| шрифтов = [] |
| преобразовано = [] |
| для строки в content.splitlines(): |
| строка, шрифт = _process_line(line, fontdir) |
| , если шрифт: |
| fonts.append(шрифт) |
| convert.append(строка) |
| возврат ‘\n’.join(преобразованный), шрифты |
| |
| |
| по определению _process_line (строка, каталог шрифтов): |
| совпадение = CSS_RE. match(строка) |
| если не совпадает: |
| обратная линия, нет |
| |
| данных = match.groupdict() |
| имя файла = os.path.join (каталог шрифта, данные [‘имя’] + ‘.ttf’) |
| строка = «{начало} локальный (‘{имя}’), url (‘{имя файла}’) {конец}». Формат ( |
| имя_файла=имя файла, **данные) |
| строка возврата, Шрифт (имя файла, данные [‘url’]) |
| |
| |
| по умолчанию main(): |
| аргументов = parse_args() |
| |
| # получить шрифты CSS |
| css = fetch_file(args. url) |
| relative_fontdir = os.path.relpath( |
| args.fontdir, os.path.dirname(args.cssfile)) |
| CSS, шрифты = make_css_urls_local (CSS, относительный_шрифт) |
| |
| # запись обновленного CSS |
| с открытым (args.cssfile, ‘w’) как fd: |
| logger.info( |
| ‘сохранение обновленного CSS в {filename}’.format(filename=args.cssfile)) |
| fd.write(css) |
| |
| # получить файлы шрифтов |
| os.
|