Coder Social home page Coder Social logo

learn-python-pnz-00's Introduction

learn-python-pnz-00's People

Contributors

alekseev-serg avatar kas2337 avatar tormundsv avatar totaki avatar

Watchers

 avatar  avatar

learn-python-pnz-00's Issues

Добавить базовый class для наших парсеров

В наш модуль добавить базовый абстрактный класс для наших парсеров
https://docs.python.org/3/library/abc.html#abc.abstractmethod

class BaseParser:
    name: str
    
    def __init__(self, name):
          self.items = []
   
    def get_request_params(self) -> Tuple[str, str, dict]:
           """
           Это метод должен возвращать кортеж следующих данных
           - имя метода requests (get, post)
           - url
           - kwargs, которые будут добавлены в параметры запроса 
           """
           pass
    
    def parse(self, string: str) -> None:
         """
         Это метод должен парсить страницу и добавлять найденные events в
         items
         """
         pass

Добавить базовый fetcher

Добавить class Fetcher

class Fetcher:
    def __init__(self, parsers: List[BaseParser]):
         self.parsers = parsers
    
    def __call__(self):
         """
         Данная функция должна в цикле проходить по всем классам парсеров, создава их    
         инстансы паресеров и последовательно вызывать у них get_request_params, 
         получать параметры запроса делать запрос, залогировав начало и конец запроса по 
         name парсера, далее передавать результат в методе парсе того же самого парсера 
         и добавлять результат в results. Каждый этап должен логироваться, не забываем про
         обработку ошибок
         """ 
        results = []

Добавить базовый Task

class Task:
    def __init__(self, timeout, runner, callback):
         self.timeout = timeout # в секундах
         self.runner = runner # Сама функция, которая будет запускаться, в нашем случае Fetcher
         self.callback = callback # Сюда мы будем передавать результат, сохранить ивенты
         self.next = datetime.utcnow()

    @property
    def need_run(self, datetime);
         """
         тут надо реализовать проверку того что мы должны запустить данные таск,
         в нашем случае просто проверяем что self.next меньше времени, которое мы передали
         """
    def update_next(self):
        """
        Тут обновляем наш next
        """

Добавить функция сохранения ивентов

Данная функция должна в ход принимать на вход список ивентов, в формате словаря, проверять что такого нет в базе и если нет то сохранять, возвращает она список id новых ивентов

Для авторизованных пользователей добавляем `Добавить Событие` и `Добавить место`

Текущие API routes изменить:
/api/v1/public/

Используемое API routes:
/api/v1/private/places
/api/v1/private/events

Добавить дополнительное поле owner для модели Place, null=True, blank=True

Добавление месте, форма должна проверять имена на уникальность.

Добавление события, список мест это выпадающий список с местами, который создал пользователь.

Добавить авторизацию в Телеграм

Для команды /auth нам генерится токен и возвращается ссылка типа
http://localhost:3000/auth?token={token}. Это токен мы сохраняем в React приложении в localStorage, шлем запрос на /api/v1/auth/success (тут шлем сообщение в телегу Login success) и потом все запросы отправляем на сервер с нашим токеном с заголовком
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b. И когда мы авторизованы у нас должна появится кнопка logout, слать запрос /api/v1/auth/logout, который будет удалять данный токен из базы и далее слать сообщение в телегу Logout success и в React приложении удаляем токен из localStorage

Добавить Scheduler

Добавить класс планировщик

class Scheduler:
    def __init__(self, tasks, timeout=1):
         self.tasks = tasks # список задач
         self.timeout = timeout
   
    def run(self):
        """
        Данная функция в бесконечном цикле проходит по все задачам, проверяет пришло ли
        время их запускать методом need_run передавая туда текущее время, 
        если да то   последовательно вызвает runner, полученный результат 
        передает в callback и делает update_next. После того как пройдет по все задачам,     
        засыпает на timeout
        """

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.