School Commit Init
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
from domain import Address
|
||||
|
||||
class Service:
|
||||
def __init__(self,repo) -> None:
|
||||
self.repo=repo
|
||||
|
||||
def add_address(self,id,name,number,x,y):
|
||||
if not id.isdigit():
|
||||
raise ValueError("Id must be a positive integer")
|
||||
if len(name)<3:
|
||||
raise ValueError("Name must be at least 3 characters")
|
||||
if not number.isdigit() or int(number)>100:
|
||||
raise ValueError("Number must be a positive integer less or equal to 100")
|
||||
try:
|
||||
int(x)
|
||||
except:
|
||||
raise ValueError("X must be an integer")
|
||||
if int(x)>100 or int(x)<-100:
|
||||
raise ValueError("X must be an integer between -100 and 100")
|
||||
try:
|
||||
int(y)
|
||||
except:
|
||||
raise ValueError("Y must be an integer")
|
||||
if int(y)>100 or int(y)<-100:
|
||||
raise ValueError("Y must be an integer between -100 and 100")
|
||||
address=Address(int(id),name,int(number),int(x),int(y))
|
||||
self.repo.add_address(address)
|
||||
|
||||
def get_addresses(self):
|
||||
return self.repo.get_addresses_as_string()
|
||||
|
||||
def get_distance(self,x,y,dist):
|
||||
"""
|
||||
:params:
|
||||
x - str
|
||||
y - str
|
||||
dist - str
|
||||
|
||||
:return:
|
||||
to_return - list of tuples of Address and int
|
||||
|
||||
The function verifies the input and calculates the distance between the given position and all adresses and return the adresses with the distance smaller than the one specify
|
||||
"""
|
||||
try:
|
||||
int(x)
|
||||
except:
|
||||
raise ValueError("X must be an integer")
|
||||
if int(x)>100 or int(x)<-100:
|
||||
raise ValueError("X must be an integer between -100 and 100")
|
||||
try:
|
||||
int(y)
|
||||
except:
|
||||
raise ValueError("Y must be an integer")
|
||||
if int(y)>100 or int(y)<-100:
|
||||
raise ValueError("Y must be an integer between -100 and 100")
|
||||
if not dist.isdigit():
|
||||
raise ValueError("Distance must be a positive integer")
|
||||
data=self.repo.get_addresses()
|
||||
to_return=[]
|
||||
for address in data:
|
||||
distance=((int(x)-address.get_x())**2+(int(y)-address.get_y())**2)**(1/2)
|
||||
if distance<=int(dist):
|
||||
to_return.append((address,distance))
|
||||
return to_return
|
||||
|
||||
def get_coordinates(self):
|
||||
n=0
|
||||
x=0
|
||||
y=0
|
||||
data=self.repo.get_addresses()
|
||||
for address in data:
|
||||
n+=1
|
||||
x+=address.get_x()
|
||||
y+=address.get_y()
|
||||
if n==0:
|
||||
raise ValueError("There are no addresses")
|
||||
return (x/n,y/n)
|
||||
Reference in New Issue
Block a user