Рубрики
Без рубрики

Создание пользовательского обработчика протокола и схемы URI! – Часть 1

Введение В этом мини -сериале я расскажу вам, как сделать пользовательскую схему URI или … Tagged с Python, PythonProjects, Projects.

URI и протокол (3 серии деталей)

Введение

В этом мини -сериале я расскажу вам, как сделать пользовательскую схему URI или URI и обработчик протокола для этого URI. Примером одного такого URI является vscode:/// ! Возможно, вы видели это, когда пытаетесь войти в GitHub, используя VS -код, верно? Но мы не собираемся делать именно это, немного отличается! Готовый продукт приведен ниже!

Готовый продукт?

Ну, так что мы на самом деле сделаем? Ну, мы будем делать протокол Python:// Это позволит нам выполнить любой сценарий Python на нашем компьютере прямо из нашего браузера! Разве это не круто? И, возможно, в будущем мы могли бы сделать это так, чтобы он мог запустить любой файл Python в Интернете! Видео готового продукта приведено ниже! Извините за плохое качество, мне пришлось сократить его, чтобы Hashnode вписывался в статью!

Итак, что мы делаем сегодня?

Сегодня мы собираемся сделать базовый обработчик в Python, используя Urllib! Я буду использовать Python 3, но его можно легко перевести в Python 2 с помощью модуля Urllib2! Итак, начнем!

Предварительные условия

  1. Питон
  2. модуль Urllib – включен в стандартную библиотеку
  3. Stringio – включен в стандартную библиотеку

Фактический код!

Что ж, в этом посте мы просто сделаем основной обработчик, выполнение скрипта будет в следующем посте!

Импорт

import urllib.request as urlreq
from io import StringIO as strio

Нам нужен urllib.request для анализа адреса протокола и создания обработчика! Нам не понадобится Stringio, с следующего поста, это только для этого поста!

Обработчик

Хорошо, поэтому импорт сделан, теперь давайте перейдем к фактическому обработчику! Это будет использовать какое-то очень основное объектно-ориентированное программирование (ООП), поэтому даже если вы не знакомы с ним, не будет проблем, но если вы знакомы, это поможет!

class PyProtoHandler(urlreq.BaseHandler):
    def python_open(self, req):
        fullUrl = req.get_full_url()
        return strio(fileUrl)

Итак, в приведенном выше коде мы сделали класс с именем Pyprotohandler который наследует от urllib.request. Basehandler . В этом классе мы определяем новую функцию с именем python_open , который принимает 1 параметр req В Но вот критический бит, эта функция должна быть названа определенным образом, то есть {имя протокола} _open Анкет Если вы, например, определите функцию как myproto_open И ваш фактический протокол – протомия Тогда это просто даст ошибку, так что имейте это в виду!

Затем мы храним полный URL, возвращенный req.get_full_url () в полном. И, наконец, вернуться Fullurl завернут в Stringio.

Установка обработчика

Хорошо, так что обработчик сделан, давайте установим и построим его. Этот шаг действительно прост, нам просто нужно назвать 2 встроенные функции Urllib!

opener = urlreq.build_opener(PyProtoHandler())
urlreq.install_opener(opener)

Итак, мы строим новичок, используя urlreq.build_opener (pyprotohandler) и хранить возвращаемый результат или вывод в переменной новичок Анкет Далее мы устанавливаем новичок используя urlreq.install_opener (Opener) . И мы закончили! Виола! Итак, давайте проверим это!

Тестирование обработчика

Мы будем использовать другую строку кода с этим файлом, чтобы проверить его!

print(urlreq.urlopen("python://something/random/file.txt").read())

Теперь, чтобы проверить, мы должны запустить файл из нашего терминала, удара или командной строки, что бы вы ни хотели! Вам, возможно, придется использовать Python или Python3 в зависимости от вашей системы.

$ python protoHandler.py
python://something/random/file.txt

Запуск файла еще раз с изменениями в коде:

print(urlreq.urlopen("python://hashnode/non-existing/dir/non/existing/file.py").read())

И выход:

$ python protoHandler.py
python://hashnode/non-existing/dir/non/existing/file.py

Конец Получите путь файла!?

Я не думал, что включу это здесь, но, наконец, я сделал! Итак, наслаждайтесь всеми!

Что ж, теперь, когда мы можем получить весь протокол, теперь мы можем извлечь путь в файл.

class PyProtoHandler(urlreq.BaseHandler):
    def python_open(self, req):
        fullUrl = req.get_full_url()
        filePath = "".join(fullUrl.split("://")[1:])
        return filePath

Итак, как вы можете видеть, я только что добавил строку в python_open функция Который разбивает протокол в список, где 1 -й элемент – это протокол («Python»), а второй элемент – это путь файла. И мы завершаем это в ".join () Чтобы преобразовать путь в строку и соединить все элементы из и после элемента в индексе 1 с «» в качестве сепаратора. Даже если в индексе 1 должен быть один элемент, если введен правильный путь.

Окончательно, Конец

Я не должен ссылаться на это как конец, так как часть 2 еще впереди! В любом случае, до свидания на сегодня и подпишитесь на список рассылки, чтобы получить уведомление, когда я опубликовал часть 2! Хорошо, что!

URI и протокол (3 серии деталей)

Оригинал: “https://dev.to/pybash/making-a-custom-protocol-handler-and-uri-scheme-part-1-37mh”