Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions homework/DataIsValid.py
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]"
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
125 changes: 125 additions & 0 deletions homework/Descriptor.py
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
5 changes: 5 additions & 0 deletions homework/PatienList.csv
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
18 changes: 9 additions & 9 deletions homework/config.py
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" # формат хранения номера ВУ
124 changes: 115 additions & 9 deletions homework/patient.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,123 @@
import csv
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()
Loading