-
Notifications
You must be signed in to change notification settings - Fork 18
Молоденова Александра #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| from copy import deepcopy | ||
| from re import fullmatch, sub, search | ||
| from datetime import date as dt | ||
|
|
||
|
|
||
| # from homework.Log import validerr | ||
|
|
||
| def nameReal(name_): | ||
| pattern = "[0-9]" | ||
| name = sub(pattern, "", name_) | ||
| if len(name) == 0: | ||
| return None | ||
| return name | ||
|
|
||
|
|
||
| def dateIsValid(date): | ||
| pattern1 = "\d{4}.\d{2}.\d{2}" # y-m-d | ||
| pattern2 = "\d{2}.\d{2}.\d{4}" # d-m-y | ||
| match1 = fullmatch(pattern1, date) | ||
| match2 = fullmatch(pattern2, date) | ||
|
|
||
| if match1: | ||
| try: | ||
| d = str(dt(int(date[:4]), int(date[5:7]), int(date[8:]))) | ||
| except: | ||
| return None | ||
| elif match2: | ||
| try: | ||
| d = dt(int(date[8:]), int(date[5:7]), int(date[:4])) | ||
| except: | ||
| return None | ||
| else: | ||
| return None | ||
| return d | ||
|
|
||
|
|
||
| def phoneIsValid(phone_): | ||
| pattern = "[^+,0,1,2,3,4,5,6,7,8,9]" | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. \D |
||
| phone = sub(pattern, "", phone_) | ||
| if len(phone) < 10: | ||
| return None | ||
| if phone[0] == '8' or phone[0] == '7': | ||
| phone = ''.join(['+7', phone[1:]]) | ||
| elif not phone[0] == '+' or not phone[1] == '7': | ||
| # validerr.paterr.warning(["Only Russians numbers are valid. +7-xxx-xxx-xx-xx or 8-xxx-xxx-xx-xx. Your num: ", phone]) | ||
| return None | ||
|
|
||
| if not len(phone) == 12: | ||
| # validerr.paterr.warning(["Only Russians numbers are valid. len !=12 . Your num: ", phone]) | ||
| return None | ||
| if not (phone[2:5] == '495' or phone[2:5] == '499' or phone[2] == '9'): | ||
| # validerr.paterr.warning(["Only Russians numbers are valid. +7-499-... or +7-495-... or +7-9..-.... Your num: ", phone]) | ||
| return None | ||
| return phone | ||
|
|
||
|
|
||
| def docTypeIsValid(doc_type): | ||
| if not isinstance(doc_type, str): | ||
| return None | ||
| doc_type = doc_type.lower() | ||
|
|
||
| passport = "паспорт" | ||
| passportruen = "gfcgjhn" | ||
| zPassport = "загран" | ||
| zpassportruen = "pfuhfy" | ||
| prav1 = "водительск" | ||
| prav1ruen = "djlbntkmcr" | ||
| prav2 = "права" | ||
| prav2ruen = "ghfdf" | ||
|
|
||
| if search(zPassport, doc_type) or search(zpassportruen, doc_type): | ||
| return "загран" | ||
| elif search(passport, doc_type) or search(passportruen, doc_type): | ||
| return "паспорт" | ||
| elif search(prav1, doc_type) or search(prav2, doc_type) or search(prav1ruen, doc_type) or search(prav2ruen, | ||
| doc_type): | ||
| return "права" | ||
|
|
||
| return None | ||
|
|
||
|
|
||
| def docIdIsValid(id, type=None): | ||
| pattern = "[^0,1,2,3,4,5,6,7,8,9]" | ||
| id = sub(pattern, "", id) | ||
| if len(id) == 10: | ||
| if type == "паспорт" or type == "права" or not type: | ||
| return id | ||
| else: | ||
| # validerr.paterr.warning(["Zpass - len ==9. In dr and pass-10. Your type: ", type, ". Your id: ", id]) | ||
| return None | ||
| elif len(id) == 9 and (type == "загран" or not type): | ||
| # validerr.paterr.warning(["Zpass - len ==9. In dr and pass-10. Your type: ", type, ". Your id: ", id]) | ||
| return id | ||
| else: | ||
| return None | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,125 @@ | ||
| from homework.DataIsValid import * | ||
| # from homework.Log import validator,validerr | ||
|
|
||
| class Name: | ||
| def __get__(self, instance, owner): | ||
| return instance.__dict__[self.name] | ||
| # return instance.__dict__[self.name] | ||
|
|
||
| def __set__(self, instance, val): | ||
| if not isinstance(val, str): | ||
| instance.paterr.error('Invalid name.') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise TypeError("not str") | ||
| elif instance.is_created(): | ||
| instance.paterr.error("You can't change name") | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise AttributeError("can't change name") | ||
| # val = sub(" ", "-", val) | ||
| n = nameReal(val) | ||
| if not n: | ||
| instance.paterr.error("Wrong name") | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise ValueError("wrong name") | ||
| instance.__dict__[self.name] = n | ||
| instance.patinfo.debug(["name is okey:", val]) | ||
|
|
||
|
|
||
| def __set_name__(self, owner, name): | ||
| self.name = name | ||
|
|
||
|
|
||
|
|
||
| class Phone: | ||
| def __get__(self, instance, owner): | ||
| return instance.__dict__[self.name] | ||
|
|
||
| def __set__(self, instance, number): | ||
| if not isinstance(number, str): | ||
| instance.paterr.error('Invalid number.') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise TypeError("not str") | ||
| prov = phoneIsValid(number) | ||
| if not prov: | ||
| instance.paterr.error('Invalid number. +code-xxx-xxx-xx-xx') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise ValueError("phone error") | ||
| number = prov | ||
| instance.__dict__[self.name] = number | ||
| instance.patinfo.debug(["number is okey: ", number]) | ||
| if instance.is_created(): | ||
| instance.patinfo.info(["number is okey: ", number]) | ||
|
|
||
| def __set_name__(self, owner, name): | ||
| self.name = name | ||
|
|
||
|
|
||
| class DocType(): | ||
| def __get__(self, instance, owner): | ||
| return instance.__dict__[self.name] | ||
|
|
||
| def __set__(self, instance, type): | ||
| if not isinstance(type, str): | ||
| instance.paterr.error('Invalid type.') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise TypeError("not str") | ||
| prov = docTypeIsValid(type) | ||
| if not prov: | ||
| instance.paterr.error('Invalid doc type. паспорт, загран или права') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise ValueError("doctype error") | ||
| instance.__dict__[self.name] = prov | ||
| instance.patinfo.debug(["Doc type is okey:", prov]) | ||
| if instance.is_created(): | ||
| instance.patinfo.info(["Dov type is okey: ", prov]) | ||
|
|
||
| def __set_name__(self, owner, name): | ||
| self.name = name | ||
|
|
||
|
|
||
| class DocId: | ||
| def __get__(self, instance, owner): | ||
| return instance.__dict__[self.name] | ||
|
|
||
| def __set__(self, instance,id): | ||
| if not isinstance(id, str): | ||
| instance.paterr.error('Invalid id.') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise TypeError("not str") | ||
| self.type = instance.document_type | ||
| prov = docIdIsValid(id, self.type) | ||
| if not prov: | ||
| instance.paterr.error('Invalid doc id. паспорт(10 цифр), загран(9 цифр) или права(10 цифр)') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise ValueError("docid error") | ||
| instance.__dict__[self.name] = prov | ||
| instance.patinfo.debug(["Doc id okey: ", prov]) | ||
| if instance.is_created(): | ||
| instance.patinfo.info(["Doc id is okey: ", prov]) | ||
|
|
||
| def __set_name__(self, owner, name): | ||
| self.name = name | ||
| self.type = None | ||
|
|
||
|
|
||
| class Date: | ||
| def __get__(self, instance, owner): | ||
| return instance.__dict__[self.name] | ||
|
|
||
| def __set__(self, instance, date): | ||
| if not isinstance(date, str): | ||
| instance.paterr.error('Invalid name.') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise TypeError("not str") | ||
| prov = dateIsValid(date) | ||
| if not prov: | ||
| instance.paterr.error('Invalid date. year-month-day') | ||
| instance.paterr.error("Error. User was not created.") | ||
| raise ValueError("date error") | ||
| instance.__dict__[self.name] = prov | ||
| instance.patinfo.debug(["Date is okey: ", prov]) | ||
| if instance.is_created(): | ||
| instance.patinfo.info(["Date is okey: ", prov]) | ||
|
|
||
| def __set_name__(self, owner, name): | ||
| self.name = name |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| Кондрат,Рюрик,1971-01-31,+79160000000,паспорт,0228000000 | ||
| Евпатий,Коловрат,1972-01-31,+79160000001,паспорт,0228000001 | ||
| Ада,Лавлейс,1978-01-21,+79160000002,паспорт,0228000002 | ||
| Миртл,Плакса,1980-01-31,+79160000003,паспорт,0228000003 | ||
| Евлампия,Фамилия,1999-01-31,+79160000004,паспорт,0228000004 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,13 +1,13 @@ | ||
| GOOD_LOG_FILE = "good_log.txt" | ||
| ERROR_LOG_FILE = "error_log.txt" | ||
| CSV_PATH = "csv.csv" | ||
| PHONE_FORMAT = "79160000000" # Здесь запишите телефон +7-916-000-00-00 в том формате, в котором вы храните телефоны | ||
| GOOD_LOG_FILE = "/home/alexsun8/kib/ДЗ2/python_developer_hw2/homework/Good_Logs.txt" | ||
| ERROR_LOG_FILE = "/home/alexsun8/kib/ДЗ2/python_developer_hw2/homework/Bad_Logs.txt" | ||
| CSV_PATH = "PatienList.csv" | ||
| PHONE_FORMAT = "+79160000000" # Здесь запишите телефон +7-916-000-00-00 в том формате, в котором вы храните телефоны | ||
|
|
||
| PASSPORT_TYPE = "паспорт" # тип документа, когда он паспорт | ||
| PASSPORT_FORMAT = "0000 000000" # Здесь запишите номер парспорта 0000 000000 в том формате, в котором вы его храните | ||
| PASSPORT_FORMAT = "0000000000" # Здесь запишите номер парспорта 0000 000000 в том формате, в котором вы его храните | ||
|
|
||
| INTERNATIONAL_PASSPORT_TYPE = "заграничный паспорт" # тип документа, если это загран | ||
| INTERNATIONAL_PASSPORT_FORMAT = "00 0000000" # формат хранения заграна для номера 00 0000000 | ||
| INTERNATIONAL_PASSPORT_TYPE = "загран" # тип документа, если это загран | ||
| INTERNATIONAL_PASSPORT_FORMAT = "000000000" # формат хранения заграна для номера 00 0000000 | ||
|
|
||
| DRIVER_LICENSE_TYPE = "водительское удостоверение" # тип документа, если это водительское удостоверение | ||
| DRIVER_LICENSE_FORMAT = "00 00 000000" # формат хранения номера ВУ | ||
| DRIVER_LICENSE_TYPE = "права" # тип документа, если это водительское удостоверение | ||
| DRIVER_LICENSE_FORMAT = "0000000000" # формат хранения номера ВУ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,17 +1,123 @@ | ||
| import csv | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ну тут код повторяется, надо бы убрать ненужный файл
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. те два файла, а этот оставить =) правда, я уже комментарии там написал |
||
| import os | ||
| from homework.Descriptor import * | ||
| import logging | ||
| # from homework.config import CSV_PATH | ||
|
|
||
|
|
||
| class Patient: | ||
| def __init__(self, *args, **kwargs): | ||
| pass | ||
| first_name = Name() | ||
| last_name = Name() | ||
| birth_date = Date() | ||
| phone = Phone() | ||
| document_type = DocType() | ||
| document_id = DocId() | ||
| created = False | ||
|
|
||
| formatter = logging.Formatter("%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s") | ||
| handler = logging.FileHandler('/home/alexsun8/kib/ДЗ2/python_developer_hw2/homework/Good_Logs.txt', 'a', 'utf-8') | ||
| handlerbad = logging.FileHandler('/home/alexsun8/kib/ДЗ2/python_developer_hw2/homework/Bad_Logs.txt', 'a', 'utf-8') | ||
| handler.setFormatter(formatter) | ||
| # handlerbad = handler | ||
| # handlerbad = handler2 | ||
|
|
||
| # logs in Patient class | ||
| patinfo = logging.getLogger("Patient info") | ||
| patinfo.setLevel(logging.INFO) | ||
| patinfo.addHandler(handler) | ||
| paterr = logging.getLogger("Patient errors") | ||
| paterr.setLevel(logging.ERROR) | ||
| paterr.addHandler(handlerbad) | ||
|
|
||
| def __init__(self, *args): | ||
| if len(args) == 0: | ||
| self.created = False | ||
| self.patinfo.debug("Empty Patient was created") | ||
| # patinfo.info("Empty Patient was created") | ||
| return | ||
| elif not len(args) == 6: | ||
| self.created = False | ||
| self.paterr.error( | ||
| "There shold be 6 args: first_name_, last_name_, birth_date_, phone_, document_type_, document_id_. Patient wasn't created") | ||
| return | ||
| # try: | ||
|
|
||
| self.created = False | ||
| self.first_name = args[0] | ||
| self.last_name = args[1] | ||
| self.birth_date = args[2] | ||
| self.phone = args[3] | ||
| self.document_type = args[4] | ||
| self.document_id = args[5] | ||
| if not ( | ||
| self.first_name or self.last_name or self.birth_date or self.phone or self.document_type or self.document_id): | ||
| raise AttributeError | ||
| self.created = True | ||
| self.patinfo.info("User was created") | ||
| # except: | ||
| # self.created = False | ||
| # self.paterr.error("Error. User was not created.") | ||
| # raise AttributeError | ||
|
|
||
| def create(*args, **kwargs): | ||
| raise NotImplementedError() | ||
| @staticmethod | ||
| def create(*args): | ||
| return Patient(*args) | ||
|
|
||
| def save(self): | ||
| pass | ||
| if not self.created: | ||
| self.paterr.warning("User is NONE, so it wasn't saved.") | ||
| filename = "PatienList.csv" | ||
| try: | ||
| with open(filename, "a", newline="", encoding='utf-8') as file: | ||
| writer = csv.writer(file) | ||
| except: | ||
| raise AttributeError("Can't open csv file") | ||
|
|
||
| try: | ||
| data = [self.first_name, self.last_name, self.birth_date, self.phone, self.document_type, self.document_id] | ||
| # filename = CSV_PATH | ||
| with open(filename, "a", newline="", encoding='utf-8') as file: | ||
| writer = csv.writer(file) | ||
| writer.writerow(data) | ||
| self.patinfo.info("User was saved.") | ||
| except: | ||
| self.paterr.error("User was not saved!") | ||
| raise AttributeError | ||
|
|
||
| def __str__(self): | ||
| if not self.created: | ||
| return "" | ||
| data = ' '.join( | ||
| [self.first_name, self.last_name, self.birth_date, self.phone, self.document_type, self.document_id]) | ||
| # self.patinfo.info(data) | ||
| return data | ||
|
|
||
| def is_created(self): | ||
| return self.created | ||
|
|
||
|
|
||
| class PatientCollection: | ||
| def __init__(self, log_file): | ||
| pass | ||
| def __init__(self, path_to_file): | ||
| if not os.path.isfile(path_to_file): | ||
| raise ValueError("Path does,") | ||
| self.filepath = path_to_file | ||
|
|
||
| def __iter__(self): | ||
| with open('PatienList.csv', 'r', encoding='utf-8') as File: | ||
| reader = csv.reader(File) | ||
| for row in reader: | ||
| a = Patient(*row) | ||
| yield a | ||
|
|
||
| def limit(self, num): | ||
| if num < 1: | ||
| raise ValueError("Argument in limit should be >1.") | ||
| counter = 0 | ||
| with open('PatienList.csv', 'r', encoding='utf-8') as File: | ||
| reader = csv.reader(File) | ||
| for row in reader: | ||
| if counter >=num: | ||
| return | ||
| a = Patient(*row) | ||
| yield a | ||
|
|
||
| def limit(self, n): | ||
| raise NotImplementedError() | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
логика объект/булево значение редко используется. Лучше либо True/False, либо объект/None