+ moon_phase.py integration module for Astronomy API: implements Pydantic models for handling API request and response
+ auth.py integration module for Astronomy API: responsible for generating an API authentication hash to be placed in request header
This commit is contained in:
parent
48aa47c0f6
commit
94b7677108
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
12
astronomy_api/auth.py
Normal file
12
astronomy_api/auth.py
Normal file
@ -0,0 +1,12 @@
|
||||
"""Authentication header encoding"""
|
||||
import base64
|
||||
from os import environ
|
||||
|
||||
app_id, app_key = environ.get('ASTRONOMY_API_APP_ID'), environ.get('ASTRONOMY_API_APP_SECRET')
|
||||
userpass = f'{app_id}: {app_key}'
|
||||
auth_string = base64.b64encode(userpass.encode()).decode()
|
||||
auth_header = {'Authorization': f'Basic {auth_string}'}
|
||||
app_id, app_key, userpass = None, None, None
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(auth_header)
|
||||
53
astronomy_api/moon_phase.py
Normal file
53
astronomy_api/moon_phase.py
Normal file
@ -0,0 +1,53 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Literal
|
||||
import datetime
|
||||
|
||||
|
||||
class Style(BaseModel):
|
||||
moon_style: Literal['default', 'sketch', 'shaded'] = Field(default='default', serialization_alias='moonStyle')
|
||||
background_style: Literal['stars', 'solid'] = Field(default='solid', serialization_alias='backgroundStyle')
|
||||
background_color: str = Field(default='black', serialization_alias='backgroundColor')
|
||||
heading_color: str = Field(default='white', serialization_alias='headingColor')
|
||||
text_color: str = Field(default='white', serialization_alias='textColor')
|
||||
|
||||
|
||||
class Observer(BaseModel):
|
||||
latitude: float = Field(default=0, lt=-90, gt=90)
|
||||
longitude: float = Field(default=0, lt=-180, gt=180)
|
||||
date: datetime.date = Field(default_factory=datetime.date.today)
|
||||
|
||||
class Config:
|
||||
json_encoders = {
|
||||
datetime: lambda dt: dt.strftime('%Y-%m-%d') # customize the format as needed
|
||||
}
|
||||
|
||||
|
||||
class View(BaseModel):
|
||||
image_type: Literal['portrait-simple', 'landscape-simple']\
|
||||
= Field(default='landscape-simple', serialization_alias='type')
|
||||
orientation: Literal['north-up', 'south-up'] = 'north-up'
|
||||
|
||||
|
||||
class MoonPhase(BaseModel):
|
||||
format: Literal['png', 'svg'] = 'png'
|
||||
style: Style = Field(default_factory=Style)
|
||||
observer: Observer = Field(default_factory=Observer)
|
||||
view: View = Field(default_factory=View)
|
||||
|
||||
class Config:
|
||||
populate_by_name = True
|
||||
|
||||
|
||||
class ImageURL(BaseModel):
|
||||
image_url: str = Field()
|
||||
|
||||
|
||||
class Data(BaseModel):
|
||||
data: dict[Literal['data'], ImageURL]
|
||||
|
||||
|
||||
url = 'https://api.astronomyapi.com/api/v2/studio/moon-phase'
|
||||
|
||||
if __name__ == '__main__':
|
||||
model = MoonPhase()
|
||||
print(model.model_dump_json(indent=4, by_alias=True))
|
||||
Loading…
x
Reference in New Issue
Block a user