Четвърта задача

  1. Струва ми се, че на hostname за "Валидно TLD: две или три букви, малки или главни опционално, символ . и още две малки или главни букви" трябва да са още две или три малки или главни букви накрая, за да може да се разпознават и неща от типа .com, а не само .bg, а и примера foo.bar.baz не би бил валиден ако завършва точно с 2 малки или главни букви.

  2. Също така в примерния тест има solution.Validations.is_date_time('2012-11-19 19:00:00')), а в условието е дадено Validations.is_datetime(value) # => True or False. В реалните тестове как се очаква да се казва функцията is_date_time или is_datetime?

    И един въпрос: където пише, че може да са букви и цифри (примерно за hostname - Валидно име на домейн или поддомейн: започва с цифра, малка или главна буква следват до 62 цифри, малки или големи букви или тире)

    можем ли да ползваме \w, което разпознава и _ или трябва да приемем, че \w не върши работа и да си пишем [a-zA-Z0-9]?

  3. Струва ми се, че на hostname за "Валидно TLD: две или три букви, малки или главни опционално, символ . и още две малки или главни букви" трябва да са още две или три малки или главни букви накрая, за да може да се разпознават и неща от типа .com, а не само .bg, а и примера foo.bar.baz не би бил валиден ако завършва точно с 2 малки или главни букви.

    Изрично сме указали, че сме опростили изискванията. Има и домейни .museum :) И това не важи само за домейните. Хвани тези за имейл, примерно. Има напълно валидни имейли в реалния свят, които няма да бъдат разпознати като такива от вашето решение.

    Също така в примерния тест има solution.Validations.is_date_time('2012-11-19 19:00:00')), а в условието е дадено Validations.is_datetime(value) # => True or False. В реалните тестове как се очаква да се казва функцията is_date_time или is_datetime?

    Прав си. Моя грешка, поправих я. Методът трябва да бъде is_datetime.

    можем ли да ползваме \w, което разпознава и _ или трябва да приемем, че \w не върши работа и да си пишем [a-zA-Z0-9]?

    След като ще хване повече от указаното, не можете :)

    А може ли, все пак, да качите последната лекция, за да си напиша домашното ? :D

    Последната лекция е качена.

  4. Всеки hostname е съставен от 0 или повече поддомейна и един домейн, разделени със символа . ... общата дължина трябва да е между 1 и 63 символа

    1. На целия домейн с всички под домейни заедно ли се има предвид или по отделно за всяка част ?

    2. Според правилата описани за телефонен номер излиза че 00000000000 (интернационален формат започващ с 2 нули международен код 000 и още 6 нули) не е валиден телефонен номер, но същият брой нули с интервал след първата 0 0000000000 e валиден локален номер ? Правилно ли съм разбрал ?

    3. Всеки от 4те байта в IP адрес трябва ли да отговаря на правилата за цяло число от условието ? Защото примерно в Python интерпретатора цяло десетично число 0 е и произволен брой нули което не е валидно според условието.
  5. На целия домейн с всички под домейни заедно ли се има предвид или по отделно за всяка част ?

    Е, така си изкарал нещата от контекста, че са неразбираеми :D

    общата дължина трябва да е между 1 и 63 символа

    това важи само за всеки домейн и поддомейн. Точките между тях не ги броим. Демек може да имаш {поддомейн1}.{поддомейн2}.{домейн}.bg и дължината на всеки един от тях може да е до 63 символа. Общо с точките между тях и TLD-то стават 194 символа.

    Според правилата описани за телефонен номер излиза че 00000000000 (интернационален формат започващ с 2 нули международен код 000 и още 6 нули) не е валиден телефонен номер, но същият брой нули с интервал след първата 0 0000000000 e валиден локален номер ? Правилно ли съм разбрал ?

    Да.

    Всеки от 4те байта в IP адрес трябва ли да отговаря на правилата за цяло число от условието?

    Да.

    Защото примерно в Python интерпретатора цяло десетично число 0 е и произволен брой нули което не е валидно според условието.

    Факт, не е валидно :)

  6. Може ли да обясните малко по-добре (по-ясно/по-просто) какво трябва да представлява Hostname, какво е TLD и защо foo.bar.baz е валидно след като сте написали

    Валидно TLD: две или три букви, малки или главни опционално, символ . и още две малки или главни букви

    П.П Ако може да допълните обясненията с валидни и невалидни примерчета, за да се хване логиката, ще е най-добре. Благодаря предварително :)

  7. опционално, символ . и още две малки или главни букви

    т.е. не е задължително да има . и още две малки или главни букви накрая, може да завършва на три букви

    TLD - http://en.wikipedia.org/wiki/TLD

    примери - валидни: some-thing.co.uk something.com something.bg some-third-thing.com.tt

    TLD - co.uk com bg com.tt

    невалидни: not-valid.co.notuk not-valid-2.word
    тук TLD-тата са co.notuk word

  8. @Никола, мисля, че Стефани имаше предвид, дали изобщо да пази първоначално подадения стринг или просто да го замени с вече филтрирания. Отговорът ми е: Пази си аргумента такъв, какъвто ти е подаден.

    Представи си следния сценарий:

    1. Създавам си инстанция на твоя PrivacyFilter
    2. Активирам флага partially_preserve_email_username, примерно
    3. Извиквам filtered
    4. Дезактивирам горния флаг
    5. Отново извиквам filtered

    :)

  9. Още няколко въпроса:

    Телефонен номер ... в интернационален формат, започва с 00 (след граница на дума) или + и следват една до три цифри международен код, без разделители в тях; международният код не може да започва с 0

    • Може ли да считаме че винаги телефонен номер и email адрес започват/свършват след/преди граница на дума с изключение когато телефона започва с + което не може да бъде граница на дума? Или поне когато телефона е в локален формат също да започва след граница на дума защото инъче можем да имаме EGN 8510135927 -> EGN 851[PHONE].

    Validations ... Този клас или модул трябва да предоставя няколко "класови" метода, които да ни позволят да извършваме проста валидация на текстови данни. Всички методи са тип предикат и трябва да връщат задължително или True, или False.

    • Това може би означава че в примерният тест вместо

        def test_returns_boolean_True_or_False(self):
            self.assertTrue(solution.Validations.is_email('foo@bar.com'))
            self.assertFalse(solution.Validations.is_email('invalid@email'))
      

    e по подходящо да бъде:

        def test_returns_boolean_True_or_False(self):
            self.assertTrue(isinstance(Validations.is_email('foo@bar.com'), bool))
            self.assertTrue(isinstance(Validations.is_email('invalid@email'), bool))
    
    • "Класови" нарочно е сложено в кавички за да не се възприема буквално в контекста на Python? Спокойно могат да бъдат и статични?

    • Съзнателно се допускат дати от типа на 2014-02-31 като част от опростяването на правилата?

  10. Може ли да считаме че винаги телефонен номер и email адрес започват/свършват след/преди граница на дума с изключение когато телефона започва с + което не може да бъде граница на дума? Или поне когато телефона е в локален формат също да започва след граница на дума защото инъче можем да имаме EGN 8510135927 -> EGN 851[PHONE].

    Да.

    Относно тестовете: Валидна забележка.

    "Класови" нарочно е сложено в кавички за да не се възприема буквално в контекста на Python? Спокойно могат да бъдат и статични?

    Не. Имаме предвид да classmethod.

    Съзнателно се допускат дати от типа на 2014-02-31 като част от опростяването на правилата?

    Да.

    0001 е валидна година нали?

    Да.

  11. Да речем че имаме телефона 0037288888888 в интернационален запис, тогава кое е кода на държавата - 3, 37 или 372?

    Има случаи .в които това може да се определи със сигурност, примерно 0035799999999999, защото 9-ките са 11 на брой,или 003555555, но в общия случай...

  12. Международните кодове са така избрани, че да няма възможност за объркване. Например има код 20 Египет, но няма 21, защото има 4 държави с код 21* (212 - Мароко, 213 - Алжирия, 216 - Тунис, 218 - Либия). Според мен единственият начин да се избегнат тези проблеми е да се направи регулярен израз, който разпознава всички възможни международни кодове (т.е. такъв, който няма да разпознае 214, защото не съществува). Аз лично ползвах http://countrycode.org/ за информация.

  13. А трябва ли очакваме whitespace преди/след края на имейла, тъй като например в този случай: 2@3someone@example.com.haha -> 2@[EMAIL].haha и това няма да бъде хванато от граница на дума, защото точката се брои за граница?

    P.S След като Markdown и той се лъже може би не се очаква :D

  14. От условието(за телефонния номер и същинската му част):

    • същинската част не може да завършва на разделител, но може да започва с разделител(и).

    Това означава ли,че ако имаме My phone is 08398349349(space) или My phone is +359 (47)(74)(38)(39) това ще си остане така,а не My phone is [PHONE]?Тоест има се предвид,че за всичките изброени разделители по-горе в условието (,),- и интервал телефонния номер ще си остане непроменен?

  15. Демек и за това:в локален формат, започва с 0, която не е предшествана от друга цифра, буква или символ +; след тази начална 0 не може да следва друга 0 ,ако имам например My phone is +0893898889 няма да си остане непроменено,ами ще е My phone is +[PHONE] ?...

  16. Мисля, че това в локален формат, започва с 0, която не е предшествана от друга цифра, буква или символ +; след тази начална 0 не може да следва друга 0 се отнася за Validations.is_phone(phone_number) и съответно то Validations.is_phone('+0893898889') ще ти върне False, но във PrivacyFilter би трябвало плюсът да не се счита за част от номера, тъй като аз не видях в условието да пише, че filtered() трябва да разпознава номера, отделени по някакъв начин от останалата част от текста. Т.е. ако приемем, че PrivacyFilter('My phone number is:0897323921').filtered() връща 'My phone number is:[PHONE]', то както : не се смята за част от номера, така и + не трябва да се смята.

    Вярно е обаче, че в примера filter = PrivacyFilter('Phone: +35925551212') номерът е разделен с интервал, а няма пример, в който това да не е така, така че може и да разсъждавам грешно.

  17. Прочетох всичко написано до тук и не видях на някой да му прави впечатление за IPv4 адреса, че може да започва с нула :D Специално за задачата ли да го приемаме така(за улеснение предполагам)

Трябва да сте влезли в системата, за да може да отговаряте на теми.