Comments (5)
from parser-rosstat-kep.
Валидатор - это название подхода, имплементация может быть как ф-цией так и классом.
Примеров море, но пока что мне не на 100% понятно, какой следует выбрать подход, т.к. сперва нужно определиться с желаемым поведением (как я изложил выше): что делать с невалидными данными (дефиниции, спецификации), лучше бросить эксепшн на ранней стадии и как-то это зарегистрировать/отрапортовать об ошибке или отложить диагностику на дальнейший этап?
В самом простом случае подход через дескрипторы подойдет. Простейший пример представлен здесь:
https://www.codevoila.com/post/69/python-descriptors-example
начиная с параграфа "2.2 Use Python descriptor".
Есть еще тяжеловесный http://www.formencode.org/en/latest/Validator.html
, но тащить лишние зависимости не хочется.
Хотел бы напомнить, что мы хотим уйти от необходимости наличия методов validate в классах, тем самым избежать заведения "невалидных" объектов.
from parser-rosstat-kep.
Some implementations at 027a92a
from parser-rosstat-kep.
Посмотрите плс - получилось реализовать классы IsuueWarning и Check по parse.py.
Как классы они не особо симпатичные, но зато чище выглядят сами функции и методы, где они вызываются (нет всяких проверок), SILENT не маячит внутри кода. Наверное есть более профессиональные способы проверок, нопока так. Несколько исключений внутри кода осатлось (ERROR когда не находится заголовок) и что-то компактное.
from parser-rosstat-kep.
Неочень понятна зона ответственности у класса Check и IssueWarning.
Вся разница в том что первый выдает эксепшн в случае найденных проблем (+ знает сам как искать проблемы), второй фактически просто обертка над print.
Грубо говоря Check - это "фатальная проверка", а IssueWarning - "нефатальный репорт" о проблеме.
Может быть не работать внешне с IssueWarning, а пусть все проверки (и нефатальные тоже) идут через класс Check,
а тот сам уже будет знать, как какую проблему рапортовать (выдавать эксепшн или печатать в консоль, используя IssueWarning)?
Скажем, сейчас в конструкторе Таблицы есть такое:
if self.coln not in self.VALID_ROW_LENGTHS:
IssueWarning().bad_row_length(self)
Чем это словесно отличается от метода table_defined класса Check, кроме того что в table_defined отлавливаются фатальные ошибки, а в этих строках просто варнинг?
Понятнее было бы как-то так, в конструкторе Таблицы:
Check.table_has_valid_row_length(self)
Может выше непрозрачно написал; если перефразировать, то предлагаю сделать класс IssueWarning вспомогательным, который будет вызываться только из класса Check.
from parser-rosstat-kep.
Related Issues (20)
- add Vintage.upload() method HOT 1
- processed/latest folder needs better handling
- certain variables not found in Vinatage.validate() HOT 2
- review check procedure HOT 7
- Missing values should not be False at dataframe construction HOT 5
- shorter decimal representation in CSV file HOT 2
- replace Table class with Table2
- add coverable badge
- adapt code to create html with headers and charts HOT 8
- code review for `dev-sceleton` branch
- speed up manage.parse() HOT 3
- create parsing definition for 'profit' variable
- start of minimal example in julia HOT 1
- start of minimal example in go
- clean notebooks folder and dev_scrap branch
- duplicate code: get_year() vs clean year()
- why smaller code has longer running time?
- trace where duplicate values are created
- how to control warnings issue?
- industial goods production
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from parser-rosstat-kep.