Форум сайта python.su
Ищу наставника-ментора к которому можно обратиться с возникшим вопросом и получить развернутый, внятный ответ. Человека, которому интересно этим заниматься и готовому изредка уделять этому время.
Со своей стороны, готов предложить свое время и кое-какие умения для выполнение рутинных и, возможно, не самых интересных задач, которые стоят перед ментором.
Так же, рассмотрю предложения о платных консультациях.
Изучаю Python уже около полугода. Есть опыт работы с HTML/CSS; фреймворками Flask, Selenium; библиотеками requests, Beautiful Soup, docx, xlsxwriter; модулями re, json, os. Создавал ботов с tweepy и python-telegram-bot.
Сейчас активно ищу работу джиниор разработчика и пытаюсь побольше практиковаться.
На данный момент, есть небольшая программа, которая работает с Google Spreadsheets Python API (gspread) и выполняет несложный расчёт. Проблема, с которой столкнулся - это тестирование c помощью фреймворка py.test.
Мне удалось написать пару тестов, но не протестировать программу полностью. Все же, хотел бы хорошо разобраться и понять, как работать с py.test.
Линк на GitHub репозиторий.
Поэтому кто может помочь / подсказать / показать пишите в личку или в скайп (frizbn), буду Вам очень благодарен!
Отредактировано frizbn (Янв. 4, 2017 11:18:35)
Офлайн
Советы:
- Уберите почту, пока боты не подхватили.
- Код программы желательно выложить, чтобы тому, кто надумает помогать сразу было понятно с чем он имеет дело.
- Напишите сразу, что читали / изучали / смотрели.
- Итоговые цели, которых хотите достичь тоже не помешают.
P.S. Удачи в поиске.
Отредактировано 4kpt_IV (Янв. 3, 2017 18:23:46)
Офлайн
4kpt_IVСпасибо! Исправил.
Советы:- Уберите почту, пока боты не подхватили.- Код программы желательно выложить, чтобы тому, кто надумает помогать сразу было понятно с чем он имеет дело. - Напишите сразу, что читали / изучали / смотрели.- Итоговые цели, которых хотите достичь тоже не помешают.P.S. Удачи в поиске.
Офлайн
frizbn
В принципе код читаемый, но некоторых ваших находок я не понял, к примеру, что вы пытаетесь вот тут сделать?
try: return int(cell.value) if cell.value not in "" else None except ValueError: return None
Отредактировано FishHook (Янв. 4, 2017 12:07:17)
Офлайн
frizbn
Да. Код вменяем. Есть что поправить, но не критично. В общем-то хорошо.
Офлайн
frizbn
Забыл написать, что с удовольствием помог бы, но тесты давно не писал. У нас для этого есть специальный человек
Офлайн
FishHookСпасибо! Действительно что-то перемудрил здесь. Исправил.
frizbnВ принципе код читаемый, но некоторых ваших находок я не понял, к примеру, что вы пытаетесь вот тут сделать?
Отредактировано frizbn (Янв. 5, 2017 13:36:45)
Офлайн
4kpt_IVА этот прекрасный человек тут, случайно, не появляеться?
frizbnЗабыл написать, что с удовольствием помог бы, но тесты давно не писал. У нас для этого есть специальный человек
Офлайн
frizbn
Вы кажется не понимаете о чем я говорю. Вы пытаетесь сделать класс-комбайн, который и карандаши точит и член дрочит. Понятно, что у вас сложности с тестированием всего этого хозяйства. Сложности как раз и возникают потому, что одна сущность выполняет сразу много задач и у вас нет четкого понимания, как провести тестирования отдельных подзадач в одной большой задаче. Я предлагаю выделить отдельные компоненты согласно их функционалу. И уже из них собирать нужный вам класс.
Сейчас придумаю пример, погодите.
Офлайн
Допустим у нас есть задача принимать по сети xml-документ, содержащий структуру образовательного учреждения (из какого-нибудь сапа нам это выгружают), назовем его условно Школой, и вам нужно на основании этих данных вести учет средней успеваемости учеников по региону или еще какие-то данные собирать.
Что мы можем сделать? Мы делаем класс, который в ините принимает урл удаленного сервиса и реализует метод get_avg_rate. Вроде бы и все. Но давайте сделаем умнее.
Во-первых, у нас есть модели предметной области, которые описывают нашу Школу, классы в ней и учеников. Как-то так
class Student: def __init__(self): self.family = None self.name = None self.rate = None class Group: def __init__(self): self.name = None self.students = [] class School: def __init__(self): self.groups =[]
class School: def __init__(self): self.groups =[] def get_avg_rate(self): """some calculations""" return
class AbstactDataSource: __metaclass__ = ABCMeta @abstractmethod def get_school(): pass
class TestDataSource(AbstactDataSource): def get_school(): school = School() school.add_group(....) # etc.
class XMLDataSource(AbstactDataSource): def __init__(self, xml): self.xml = xml def get_school(): # parse xml here
class SoapClient: def __init__(self, url): self.url = url def get_xml(): """ get data from url""" return xml_text
class SchoolAnalizer: url = "http://school.ru/soap" def __init__(self): self.datasource = None def set_datasource(self, datasource = None): if datasource: self.datasource = datasource else: client = SoapClient(self.url) self.datasource = XMLDataSource(client.get_xml()) def get_avg_rate(self): school = self.datasource.get_school() return school.get_avg_rate()
def test_analizer(self): with open("test.xml", "r") as xml: data = xml.read() ds = XMLDataSource(data) analizer = SchoolAnalizer() analizer.set_datasource(ds) assert analizer.get_avg_rate() == 4.56
Отредактировано FishHook (Янв. 5, 2017 14:41:03)
Офлайн