Amelioration des classes boat, position et restApiBoatLoader pour mieux respecter SOLID

tests
Allan Point 3 years ago
parent e4a1805066
commit 6699910ff1

@ -1,7 +1,7 @@
#! encode: utf8 #coding:utf-8
class Boat: class Boat:
def __init__(self, boat_id, name, sismer_id, url, avatar, temperatures, positions): def __init__(self, boat_id: str, name: str, sismer_id: str, url: str, avatar:str , temperatures: list, positions: list):
self.boat_id = boat_id self.boat_id = boat_id
self.name = name self.name = name
self.sismer_id = sismer_id self.sismer_id = sismer_id
@ -10,16 +10,18 @@ class Boat:
self.temperatures = temperatures self.temperatures = temperatures
self.positions = positions self.positions = positions
def __str__(self): def __str__(self):
return f"[{self.name}({self.boat_id})]\nSISMER ID: {self.sismer_id}\nURL: {self.url}\nAvatar: {self.avatar}" return f"{self.name}"
def get_max_temp(self): def get_max_temp(self):
return max(self.temperatures) return max(self.temperatures)
def get_nothiet_coords(self): def get_northiest_coords(self):
if len(self.positions == 0): if len(self.positions) == 0:
raise Exception(f"{self.name} must have coords to compare") raise Exception(f"{self.name} must have coords to compare")
best = slef.positions[0] best = self.positions[0]
for position in self.positions: for position in self.positions:
if position.is_northiest_than(best): if position.is_northiest_than(best):
best = position best = position
return best return best
def print_details(self):
print(f"[{self.name}({self.boat_id})]\nSISMER ID: {self.sismer_id}\nURL: {self.url}\nAvatar: {self.avatar}")

@ -1,14 +1,16 @@
#! encoding: utf-8 #! encoding: utf-8
from rest_api_boats_loader import RestApiBoatsLoader
from sys import argv from sys import argv
import fleet
from rest_api_boats_loader import RestApiBoatsLoader
if len(argv) <= 1: if len(argv) <= 1:
raise Exception("You must give the year you want to get") raise Exception("You must give the year you want to get")
year = int(argv[1]) year = int(argv[1])
boats_loader = RestApiBoatsLoader() my_fleet = fleet.Fleet(year, RestApiBoatsLoader())
for boat in my_fleet.boats:
for boat in boats_loader.load_boats(year): boat.print_details()
print(boat)
print() print()
northiest_boat, northiest_coords = my_fleet.get_northiest()
print(f"The boat which has gone northiest is the {northiest_boat}. It went in {northiest_coords}")

@ -1,11 +1,13 @@
#! encoding: utf8 #coding:utf-8
class Position: class Position:
def __init__(self, latitude, longitude): def __init__(self, latitude: float, longitude: float):
self.latitude = latitude self.latitude = latitude
self.longitude = longitude self.longitude = longitude
def __str__(self): def __str__(self):
return f"[{self.latitude}; {self.latitude}]" return f"[{self.latitude}; {self.latitude}]"
def is_northiest_than(self, position): def is_northiest_than(self, position):
if position == None:
return True
return self.latitude >= position.latitude return self.latitude >= position.latitude

@ -1,17 +1,18 @@
#! encode: utf8 #coding:utf-8
from boat import Boat from boat import Boat
from position import Position from position import Position
from data_loader import DataLoader from boats_loader import BoatsLoader
import requests
class RestApiBoatsLoader(DataLoader): class RestApiBoatsLoader(BoatsLoader):
def __init__(self): def __init__(self):
self.url = 'https://localisation.flotteoceanographique.fr/api/v2/vessels' self.url = 'https://localisation.flotteoceanographique.fr/api/v2/vessels'
self.search_begin = '-01-01T00:00:00.000Z' self.search_begin = '-01-01T00:00:00.000Z'
self.search_end = '-12-31T23:59:59.000Z' self.search_end = '-12-31T23:59:59.000Z'
def load_boats(self, year): def load_boats(self, year: int):
raw_data = self.load_from_url(self.url) raw_data = self.load_from_url(self.url)
boats = [] boats = []
for boat in raw_data.json(): for boat in raw_data.json():
@ -19,7 +20,7 @@ class RestApiBoatsLoader(DataLoader):
tmp_boat = Boat(boat['id'], boat['name'], boat['sismerId'], boat['url'], boat['avatar'], boat_data['temp'], boat_data['pos']) tmp_boat = Boat(boat['id'], boat['name'], boat['sismerId'], boat['url'], boat['avatar'], boat_data['temp'], boat_data['pos'])
boats.append(tmp_boat) boats.append(tmp_boat)
return boats return boats
def _load_boat_data(self, boat_id, year): def _load_boat_data(self, boat_id: str, year: int):
json_data = self.load_from_url(self.url + f"/{boat_id}/positions?startDate={year}{self.search_begin}&endDate={year}{self.search_end}").json() json_data = self.load_from_url(self.url + f"/{boat_id}/positions?startDate={year}{self.search_begin}&endDate={year}{self.search_end}").json()
data = {} data = {}
data['pos'] = [] data['pos'] = []
@ -33,3 +34,8 @@ class RestApiBoatsLoader(DataLoader):
data['temp'].append(single_data['data']['airtemp']) data['temp'].append(single_data['data']['airtemp'])
return data return data
def load_from_url(self, url: str):
data = requests.get(url)
if(data.status_code != 200):
raise Exception(f"Error {data.status_code}")
return data

Loading…
Cancel
Save