
Denis
01.02.2019
12:17:52

Алексей
01.02.2019
12:18:10

Andrew
01.02.2019
12:19:31

Bogdan (SirEdvin)
01.02.2019
12:19:42
А в этом какая проблема?
Проблема начинается тогда, когда этой логики становится ОЧЕНЬ много и из-за этого становится практически невозможно проводить юнит тестирование, так как все связано со всем. То есть изоляция между компонентами отсутствует, легко задеть один, изменяя другой и так далее.
Я это испытывал на проектах с odoo, когда каждый раз мы упирались в то, что юнит-тестирование практически невозможно, потому что отдельная функция делать ничего и все сразу

Google

Bogdan (SirEdvin)
01.02.2019
12:19:58
И только интеграционка, только очень долгие и сложные тесты

Denis
01.02.2019
12:20:50
Проблема начинается тогда, когда этой логики становится ОЧЕНЬ много и из-за этого становится практически невозможно проводить юнит тестирование, так как все связано со всем. То есть изоляция между компонентами отсутствует, легко задеть один, изменяя другой и так далее.
Я это испытывал на проектах с odoo, когда каждый раз мы упирались в то, что юнит-тестирование практически невозможно, потому что отдельная функция делать ничего и все сразу
Юнит-тестированию все равно, в модели это или отдельно. Оно тестирует логику метода. Если он распух, ты его не протестируешь нигде. Я вот ни разу не сталкивался с тем, что вынос чего-то из модели упрощал тестирование.

Bogdan (SirEdvin)
01.02.2019
12:20:51
Ну и логика разлезается по всем этим актив рекордам, вместо того, что бы быть сконцетрированной в нужных местах

Denis
01.02.2019
12:21:23

Bogdan (SirEdvin)
01.02.2019
12:21:44
Или ActivationService.active_user(user)?

Denis
01.02.2019
12:22:05

Bogdan (SirEdvin)
01.02.2019
12:22:23
Кусок логики, который оперирует сущностью или бизнес-процессом

Алексей
01.02.2019
12:22:47

Denis
01.02.2019
12:22:47
Если он оперирует сущностями, это все же часть модели
Если нет, это часть view, но тогда его придется дублировать

Bogdan (SirEdvin)
01.02.2019
12:23:27

Google

Bogdan (SirEdvin)
01.02.2019
12:24:04
По идее смысл в том, что в модели нужно хранить исключительно логику работы с данными модели - все остальное не должно в ней лежать

Denis
01.02.2019
12:24:04
Джанго орм с тобой не соглашается

Bogdan (SirEdvin)
01.02.2019
12:24:35
Например, в том, что для тестирования такого кода вам не нужна модель?

Denis
01.02.2019
12:25:11

Bogdan (SirEdvin)
01.02.2019
12:25:49

Denis
01.02.2019
12:26:00
Создание, проверка паролей, разрешений и всего такого

Bogdan (SirEdvin)
01.02.2019
12:27:58
Ну, у меня просто отходняк от odoo, где нельзя было просто создать один объект. Нужно было создать их штук 20, с кучей разных данных, правильно заполненный и так далее.

Denis
01.02.2019
12:28:40
Если надо создавать 20 объектов, то и одного мока не хватит

Bogdan (SirEdvin)
01.02.2019
12:29:19
Если разделить логику, что бы бизнес-операции были атомарны, то это не нужно
Но в active record после какого-то момента это слишком сложно сделать

Denis
01.02.2019
12:30:31
Но иногда активация юзера хочет еще отправить кому-то уведомление, изменить какую-то статистику и еще много всего. Тут вроде без разницы, каким способом тестировать, все равно будет сложно без моков

Алексей
01.02.2019
12:31:54

Denis
01.02.2019
12:32:40
Да где бы она ни была, тестирование проще не станет

Danil
01.02.2019
12:38:36
Подскажите, если я с первого процесса пишу в файл, а с другого процесса хочу проверить, открыл ли ещё этот файл на запись, как я могу сделать это?
Обычный open () не выдает никакого ексепшена

Alex
01.02.2019
12:44:03

Google

Danil
01.02.2019
12:44:24

Alex
01.02.2019
12:44:26
на самом деле надежного способа сделать это не существует. есть файловые блокировки через flock()

Danil
01.02.2019
12:45:30

Alex
01.02.2019
12:47:11
гугли по fcntl / flock или exlusive file lock linux
туда же в догонку (при всей моей не любвик к Автору) статья
http://0pointer.de/blog/projects/locking.html

Tishka17
01.02.2019
12:48:25
то ест ья конечно на локах делал себе локальный кэш файлов, но наверняка для твоего кейса есть решение лучше

Danil
01.02.2019
12:49:29

Tishka17
01.02.2019
12:49:49
а тебе для чего это?

Svyat
01.02.2019
12:52:19
Кто нибудь интересовался управлением linux через snmp?

Tishka17
01.02.2019
12:52:35
/me не доверяет snmp
там же авторизации толком нет

фей
01.02.2019
12:53:00
Здрасте. Подскажите, плиз, какими инструментами можно считать и визуализировать формат .csv через питон?

Svyat
01.02.2019
12:53:19

Alex
01.02.2019
12:53:22

Tishka17
01.02.2019
12:53:22
считать через import csv, визуализировать - это как?

фей
01.02.2019
12:54:53

Terminator
01.02.2019
12:54:53
@vyat1ch будет жить. Поприветствуем!

Tishka17
01.02.2019
12:55:17

Google

Danil
01.02.2019
12:55:41
а тебе для чего это?
ну есть скрпит который пишет в файлы. Есть другой скрпит,в котором первый процесс считывает названия этих файлов и складывает их названия в очередь. Другой процесс - пишет в базу с них, удаляет файлы. А проверять мне нужно, потому что между первым и и вторым процессом идет обмен СПИСКОМ, и если этот файл уже ждет своего удаления во втором процессе, то первый процесс этого знать не будет и запишет его вновь на отправку во второй процесс. Если он будет видеть, что тот файл открыл - он этого не сделает

Inf
01.02.2019
12:56:02
почему такая ошибка может происходить?
free() invalid next size (normal)

Tishka17
01.02.2019
12:56:47

Alex
01.02.2019
12:56:59

Danil
01.02.2019
12:57:37

Tishka17
01.02.2019
12:57:42
считайте это моей философией: если хочешь помочь, вместо того чтобы ответить человеку на вопрос уточни зачем ему это надо. Наверняка он уже делает что-то не то
ну я про данный кейс

Alex
01.02.2019
12:58:49

Tishka17
01.02.2019
12:59:05

Alex
01.02.2019
12:59:06
а мне лень докапываться.
=(

Danil
01.02.2019
12:59:18

Tishka17
01.02.2019
12:59:19
когда лень, я не пишу в чат

Alex
01.02.2019
12:59:54

Danil
01.02.2019
13:00:03
я не могу оспорить
я пытался

Tishka17
01.02.2019
13:00:09
ну либо произошло недопонимание

Google

Alex
01.02.2019
13:00:15
что тоже возможно

Danil
01.02.2019
13:00:18
еще с самой начала, когда возникла идея писать в файлы
но, увы)
ладно

Tishka17
01.02.2019
13:00:27
а какйо аргумент был?

Danil
01.02.2019
13:00:43
"это самое простое. Небольшой костылик но будет работать"

Alex
01.02.2019
13:00:47
вообще в идеале у тебя не должно быть ситуации когда с одним файлом работают > 1 процесса.
на запись

Tishka17
01.02.2019
13:01:28

Alex
01.02.2019
13:01:31

Tishka17
01.02.2019
13:01:32
и тут это делается просто

Alex
01.02.2019
13:01:35
хочется стреляться.

Danil
01.02.2019
13:02:22
а
вот, посмотрел в код и допишу: скрипт, который пишет в файл может долго держать паузу и поэтому файл моэет быть открымым очень долго
поэтому нужна проверка, открыт ли файл или нет

Tishka17
01.02.2019
13:03:44
Не надо так

Danil
01.02.2019
13:03:49
не могу(

Tishka17
01.02.2019
13:04:08
Зачем ты второму скрипту отдаёшь имя файла, если ещё не закрыл?

Danil
01.02.2019
13:04:14
этот скрипт - это АПИ функция. не будет запроса - функция не вызовится