diff --git a/docs/dev.md b/docs/dev.md index c6c73e6..c263beb 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -1,5 +1,5 @@ ->Перед началом обязательно, хотя бы поверхностно, ознакомиться с документацией к -[Django](https://docs.djangoproject.com). +> Перед началом обязательно, хотя бы поверхностно, ознакомиться с документацией к +> [Django](https://docs.djangoproject.com). ## Добавление поддерживаемого устройства (Свича) Для того чтоб добавить новый тип устройства с которым потом сможет работать биллинг нужно открыть файл *devapp/dev_types.py* @@ -89,7 +89,7 @@ class EltexSwitch(DLinkDevice): Метод **@get_device_name** получает по SNMP имя устройства, просто укажите в вашей реализации нужный OID. -Метод **@uptime**, понятно что возвращает, укажите нужный OID. Вернётся тип *RuTimedelta*, это не тип Django, я сам его реализовал +Метод **@uptime**, понятно что возвращает, укажите нужный OID. Вернётся тип *RuTimedelta*, это переопределённый тип **timedelta**, я его реализовал для локализации временного промежутка на русский. Статический метод **@has_attachable_to_subscriber** возвращает правду если это устройство можно привязать к абоненту. @@ -97,7 +97,8 @@ class EltexSwitch(DLinkDevice): абонентам при авторизации. Статический метод **@is_use_device_port** используется в DHCP чтоб понять что мы используем для привязки к абоненту всё устройство или -только порт устройства. Например, если у устройства только 1 порт абонента (PON ONU), то нужно вернуть True, во всех остальных случаях False. +только порт устройства. Например, если у устройства только 1 порт абонента (PON ONU), и мы привязываем этого абонента ко всему устройству +а не к порту, то нужно вернуть False, На обычных свичах где мы авторизуем абонента на порту возвращаем True. Реализация SNMPBaseWorker по сути не нужна, класс абстрактных методов не имеет. Потому когда наследуем наследуемся от *DevBase* то в базовые классы добавим и SNMPBaseWorker, как это сделано в *DLinkDevice*: @@ -266,8 +267,10 @@ NasNetworkError, как понятно из названия, вызываетс Биллинг прослушивает эти исключения при выполнении, и при возбуждении этих исключений отображает текст ошибки на экране пользователя. -При переопределении базового класса пожалуйста не забывайте вызвать базовый метод чтоб отработали декораторы методов интерфейса, этот декоратор проверяет тип входных данных. -Динамическая типизация python иногда подкладывает свинью в том смысле что можно передать не то что вы хотели бы передать, потому типы лучше проконтролировать, и тогда интерпретатор станет вашим другом помошником :) +При переопределении базового класса пожалуйста не забывайте вызвать базовый метод чтоб отработали декораторы методов +интерфейса, этот декоратор проверяет тип входных данных. +Динамическая типизация python иногда подкладывает свинью в том смысле что можно передать не то что вы хотели бы передать, +потому типы лучше проконтролировать, и тогда интерпретатор станет вашим другом помошником :) Когда я прошу вызвать базовый метод, я имею ввиду это: ```python @@ -278,8 +281,9 @@ def add_user_range(self, user_list): ... ``` -Кстати, не все методы обязательно реализовывать, некоторые из них зарезервированы на будущие цели, в комментариях к их прототипам в интерфейсе *BaseTransmitter* это сказано. -Поэтому просто переопределите эти зарезервированные методы как пустые, например метод *add_tariff_range* нигде в биллинге пока не вызывается. так что можно определить его пустым. +Кстати, не все методы обязательно реализовывать, некоторые из них зарезервированы на будущие цели, в комментариях к их +прототипам в интерфейсе *BaseTransmitter* это сказано. Поэтому просто переопределите эти зарезервированные методы как +пустые, например метод *add_tariff_range* нигде в биллинге пока не вызывается. так что можно определить его пустым. ```python def add_tariff_range(self, tariff_list): pass