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:
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.name = name
self.sismer_id = sismer_id
@ -10,16 +10,18 @@ class Boat:
self.temperatures = temperatures
self.positions = positions
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):
return max(self.temperatures)
def get_nothiet_coords(self):
if len(self.positions == 0):
def get_northiest_coords(self):
if len(self.positions) == 0:
raise Exception(f"{self.name} must have coords to compare")
best = slef.positions[0]
best = self.positions[0]
for position in self.positions:
if position.is_northiest_than(best):
best = position
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
from rest_api_boats_loader import RestApiBoatsLoader
from sys import argv
import fleet
from rest_api_boats_loader import RestApiBoatsLoader
if len(argv) <= 1:
raise Exception("You must give the year you want to get")
year = int(argv[1])
boats_loader = RestApiBoatsLoader()
for boat in boats_loader.load_boats(year):
print(boat)
my_fleet = fleet.Fleet(year, RestApiBoatsLoader())
for boat in my_fleet.boats:
boat.print_details()
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:
def __init__(self, latitude, longitude):
def __init__(self, latitude: float, longitude: float):
self.latitude = latitude
self.longitude = longitude
def __str__(self):
return f"[{self.latitude}; {self.latitude}]"
def is_northiest_than(self, position):
if position == None:
return True
return self.latitude >= position.latitude

@ -1,17 +1,18 @@
#! encode: utf8
#coding:utf-8
from boat import Boat
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):
self.url = 'https://localisation.flotteoceanographique.fr/api/v2/vessels'
self.search_begin = '-01-01T00:00:00.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)
boats = []
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'])
boats.append(tmp_boat)
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()
data = {}
data['pos'] = []
@ -32,4 +33,9 @@ class RestApiBoatsLoader(DataLoader):
if 'airtemp' in single_data['data']:
data['temp'].append(single_data['data']['airtemp'])
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