44import json
55from typing import Literal
66
7- import requests
7+ import httpx
88
99from actual .api .models import (
1010 BankSyncAccountResponseDTO ,
@@ -65,11 +65,12 @@ def __init__(
6565 """
6666 self .api_url : str = base_url
6767 self ._token : str | None = token
68- self ._requests_session : requests .Session = requests .Session ()
69- if extra_headers :
70- self ._requests_session .headers = extra_headers
71- if cert is not None :
72- self ._requests_session .verify = cert
68+ _verify = cert if cert is not None else True
69+ self ._requests_session : httpx .Client = httpx .Client (
70+ headers = extra_headers ,
71+ verify = _verify ,
72+ )
73+ self ._requests_session .verify = _verify
7374 if token is None and password is None and not self .is_open_id_owner_created ():
7475 raise ValueError ("Either provide a valid token or a password." )
7576 # already try to log-in if password was provided
@@ -231,7 +232,7 @@ def upload_user_file(
231232 base_headers ["X-ACTUAL-ENCRYPT-META" ] = json .dumps (encryption_meta )
232233 request = self ._requests_session .post (
233234 f"{ self .api_url } /{ Endpoints .UPLOAD_USER_FILE } " ,
234- data = binary_data ,
235+ content = binary_data ,
235236 headers = self .headers (extra_headers = base_headers ),
236237 )
237238 request .raise_for_status ()
@@ -315,7 +316,7 @@ def sync_sync(self, request: SyncRequest) -> SyncResponse:
315316 response = self ._requests_session .post (
316317 f"{ self .api_url } /{ Endpoints .SYNC } " ,
317318 headers = self .headers (request .fileId , extra_headers = {"Content-Type" : "application/actual-sync" }),
318- data = SyncRequest .serialize (request ),
319+ content = SyncRequest .serialize (request ),
319320 )
320321 response .raise_for_status ()
321322 parsed_response = SyncResponse .deserialize (response .content )
@@ -339,7 +340,9 @@ def is_open_id_owner_created(self) -> bool:
339340 def open_id_config (self , password : str ) -> OpenIDConfigResponseDTO :
340341 """Gets the OpenID configuration for the server. You will need to provide the main password to access this
341342 config."""
342- response = self ._requests_session .post (f"{ self .api_url } /{ Endpoints .OPEN_ID_CONFIG } " , {"password" : password })
343+ response = self ._requests_session .post (
344+ f"{ self .api_url } /{ Endpoints .OPEN_ID_CONFIG } " , json = {"password" : password }
345+ )
343346 response .raise_for_status ()
344347 return OpenIDConfigResponseDTO .model_validate (response .json ())
345348
@@ -366,7 +369,7 @@ def create_open_id_user(
366369 "owner" : owner ,
367370 "role" : role ,
368371 }
369- response = self ._requests_session .post (f"{ self .api_url } /{ Endpoints .OPEN_ID_USERS } " , payload )
372+ response = self ._requests_session .post (f"{ self .api_url } /{ Endpoints .OPEN_ID_USERS } " , json = payload )
370373 response .raise_for_status ()
371374 model_response = OpenIDUserDTO .model_validate (payload )
372375 # fill entity since the endpoint does not return a DTO
@@ -401,7 +404,7 @@ def update_open_id_user(
401404 elif user .role is None :
402405 user .role = "BASIC" # seems like a bug from actual
403406 response = self ._requests_session .patch (
404- f"{ self .api_url } /{ Endpoints .OPEN_ID_USERS } " , user .model_dump (by_alias = True )
407+ f"{ self .api_url } /{ Endpoints .OPEN_ID_USERS } " , json = user .model_dump (by_alias = True )
405408 )
406409 response .raise_for_status ()
407410 return user
0 commit comments