70 lines
2 KiB
Python
70 lines
2 KiB
Python
|
|
import json
|
||
|
|
import datetime
|
||
|
|
import utils
|
||
|
|
import photos
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
class DailyPhoto:
|
||
|
|
def __init__(self, date: datetime.date, photo: photos.SunriseOrSunsetPhoto):
|
||
|
|
self.date = date
|
||
|
|
self.photo = photo
|
||
|
|
|
||
|
|
def as_dict(self) -> dict:
|
||
|
|
return {
|
||
|
|
"date": self.date.strftime("%Y-%m-%d"),
|
||
|
|
"photo": self.photo.as_json()
|
||
|
|
}
|
||
|
|
|
||
|
|
class DailyPhotoSet:
|
||
|
|
def __init__(self, start_date: datetime.date = datetime.date(2023, 1, 21)):
|
||
|
|
self._date = start_date
|
||
|
|
self._photos = []
|
||
|
|
|
||
|
|
def add_photo(self, photo: photos.SunriseOrSunsetPhoto):
|
||
|
|
self._photos.append(DailyPhoto(self._date, photo))
|
||
|
|
self.photos.sort(key=lambda photo: photo.photo.id)
|
||
|
|
self._date += datetime.timedelta(days=1)
|
||
|
|
|
||
|
|
@property
|
||
|
|
def photos(self) -> list[DailyPhoto]:
|
||
|
|
return list(sorted(self._photos, key=lambda photo: photo.date))
|
||
|
|
|
||
|
|
@property
|
||
|
|
def current_date(self) -> datetime.date:
|
||
|
|
return self._date;
|
||
|
|
|
||
|
|
def as_json(self) -> str:
|
||
|
|
return json.dumps({
|
||
|
|
"photos": [photo.as_dict() for photo in self.photos]
|
||
|
|
})
|
||
|
|
|
||
|
|
|
||
|
|
def get_all_photos() -> list[photos.SunriseOrSunsetPhoto]:
|
||
|
|
file_names: list[str] = ["data/all_photos-0.json", "data/all_photos-1.json"]
|
||
|
|
sunrise_or_sunset_photos = photos.SunriseOrSunsetPhotoSet.from_no_data();
|
||
|
|
for file_name in file_names:
|
||
|
|
with open(utils.make_relative_file_name(file_name), "r") as infile:
|
||
|
|
photo_set = photos.SunriseOrSunsetPhotoSet.from_json(infile.read())
|
||
|
|
sunrise_or_sunset_photos.add_photos(photo_set.unique_photos)
|
||
|
|
|
||
|
|
return sunrise_or_sunset_photos.photos_sorted_by_id
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
print("Creating daily photo mapping...")
|
||
|
|
all_photos = get_all_photos()
|
||
|
|
print("Found {} photos".format(len(all_photos)))
|
||
|
|
|
||
|
|
daily_photos = DailyPhotoSet()
|
||
|
|
|
||
|
|
for photo in all_photos:
|
||
|
|
daily_photos.add_photo(photo)
|
||
|
|
|
||
|
|
|
||
|
|
with open(utils.make_relative_file_name('data/daily-photos.json'), 'w') as outfile:
|
||
|
|
outfile.write(daily_photos.as_json())
|
||
|
|
|
||
|
|
main()
|
||
|
|
|