Compare commits

..

No commits in common. "4fe26db1db4351909833d88eebee1ff2d0539f18" and "83857a0dcdc19ef75c7d5f144467334058a928bc" have entirely different histories.

12 changed files with 71 additions and 125 deletions

View file

@ -1,12 +1,5 @@
# Major Change Log: # Major Change Log:
# Transition
### Aug 6, 2026
1) Transition ticket prep from old requests-based GET/POST system to the new httpx one.
2) Adjusted server-side for application_versions, and then the client to match it. It now has a single endpoint, instead of 4 different ones.
3) Have Tor bootstrap use a new config, but same data folder on first attempt.
<br/>
# Sync on No Database Start # Sync on No Database Start
### August 5, 2026 ### August 5, 2026
Added a forced sync at startup if there's no DB pre-existing, to handle a bug in GUI with no application versions. Isolated application_version database calls to their own module. And fixed a bug in SyncController to catch if application_version updates and split them into the different tables. Added a forced sync at startup if there's no DB pre-existing, to handle a bug in GUI with no application versions. Isolated application_version database calls to their own module. And fixed a bug in SyncController to catch if application_version updates and split them into the different tables.

View file

@ -16,8 +16,8 @@ from core.errors.exceptions import ServerSideError, NetworkingError
from core.services.prepare_tickets.ticket_tracker import does_ticket_tracker_exist from core.services.prepare_tickets.ticket_tracker import does_ticket_tracker_exist
# from core.services.networking.api_requests.step1_get_or_post import send_data_to_server # from core.services.networking.send_data_to_server import send_data_to_server
from core.services.networking.httpx import connect from core.services.networking.api_requests.step1_get_or_post import send_data_to_server
from core.services.networking.make_url import make_url from core.services.networking.make_url import make_url
@ -185,30 +185,23 @@ def check_if_paid(
url = make_url(which_endpoint) url = make_url(which_endpoint)
# literally send: # literally send:
# api_reply_object = send_data_to_server(payload, url, connection_observer) api_reply_object = send_data_to_server(payload, url, connection_observer)
api_reply_object = connect.single_endpoint(
method="post",
url=url,
observer=connection_observer,
payload=payload
)
if not api_reply_object.valid: if not api_reply_object.valid:
api_reply_object = solve_api_problems(
api_reply_object=api_reply_object,
get_or_post="post",
url=url,
payload=payload,
connection_observer=connection_observer,
client_observer=None
)
if not api_reply_object.valid:
# 2nd try, return the error of why we have no payload:
error_msg = f"Connection/API Error: {api_reply_object.message}" error_msg = f"Connection/API Error: {api_reply_object.message}"
logger.error(f"[TICKET PayController] 2nd Post Request inside ticketpay controller had a {error_msg}") logger.error(f"[TICKET PayController] 2nd Post Request inside ticketpay controller had a {error_msg}")
return {"valid": False, "message": error_msg} return {"valid": False, "message": error_msg}
# if not api_reply_object.valid:
# api_reply_object = solve_api_problems(
# api_reply_object=api_reply_object,
# get_or_post="post",
# url=url,
# payload=payload,
# connection_observer=connection_observer,
# client_observer=None
# )
# return the payload with GUI/CLI to interpret results: # return the payload with GUI/CLI to interpret results:
reply_dict = api_reply_object.data reply_dict = api_reply_object.data
logger.debug(f"[TICKET PayController] We have a valid reply from the API inside ticketpay controller of {reply_dict}") logger.debug(f"[TICKET PayController] We have a valid reply from the API inside ticketpay controller of {reply_dict}")

View file

@ -7,9 +7,7 @@ if TYPE_CHECKING:
from core.Constants import Constants from core.Constants import Constants
from core.observers.BaseObserver import BaseObserver from core.observers.BaseObserver import BaseObserver
# from core.services.networking.api_requests.step1_get_or_post import get_data_from_api from core.services.networking.api_requests.step1_get_or_post import get_data_from_api
from core.services.networking.httpx import connect
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType
from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems
@ -34,34 +32,23 @@ def sync_ticket_prices(
url = f"{base_url}/sync" url = f"{base_url}/sync"
try: try:
# api_result = get_data_from_api(url, None, connection_observer) api_result = get_data_from_api(url, None, connection_observer)
api_result = connect.single_endpoint(
method="get",
url=url,
observer=connection_observer,
payload=None
)
if not api_result.valid:
error_msg = api_result.message
logger.error(f"[TICKET SYNC Controller] There's an issue with the sync of endpoint {url} the API Reply: {error_msg}")
api_result = solve_api_problems(
api_reply_object=api_result,
get_or_post="get",
url=url,
payload=None,
connection_observer=connection_observer,
client_observer=None
)
# 2nd try: # 2nd try:
if not api_result.valid: if not api_result.valid:
logger.error(f"Invalid API call result: {api_result.error_type}")
return {"valid": False, "error_code": "sync_failed"} return {"valid": False, "error_code": "sync_failed"}
# if not api_result.valid:
# error_msg = api_result.message
# logger.error(f"[TICKET SYNC Controller] There's an issue with the sync of endpoint {url} the API Reply: {error_msg}")
# api_result = solve_api_problems(
# api_reply_object=api_result,
# get_or_post="get",
# url=url,
# payload=None,
# connection_observer=connection_observer,
# client_observer=None
# )
# # 2nd try:
# if not api_result.valid:
# return {"valid": False, "error_code": "sync_failed"}
return {"valid": True, "data": api_result.data} return {"valid": True, "data": api_result.data}
except: except:

View file

@ -11,6 +11,7 @@ from core.services.prepare_tickets.get_public_key_by_config import get_public_ke
from core.services.prepare_tickets.get_pub_key import key_is_in_valid_format, get_pub_key from core.services.prepare_tickets.get_pub_key import key_is_in_valid_format, get_pub_key
from core.services.failed_verification.test_if_new_key_works import test_if_new_key_works from core.services.failed_verification.test_if_new_key_works import test_if_new_key_works
from core.services.networking.make_url import make_url from core.services.networking.make_url import make_url
from core.services.networking.api_requests.step1_get_or_post import get_data_from_api
from core.services.networking.httpx import connect from core.services.networking.httpx import connect
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType

View file

@ -5,8 +5,8 @@ if TYPE_CHECKING:
from essentials.observers.ConnectionObserver import ConnectionObserver from essentials.observers.ConnectionObserver import ConnectionObserver
# services # services
from core.services.networking.make_url import make_url from core.services.networking.make_url import make_url
# from core.services.networking.api_requests.step1_get_or_post import send_data_to_server # from core.services.networking.send_data_to_server import send_data_to_server
from core.services.networking.httpx import connect from core.services.networking.api_requests.step1_get_or_post import send_data_to_server
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType
@ -14,19 +14,8 @@ from core.services.networking.api_requests.ApiResponseModel import ApiResponse,
def get_plan_data( def get_plan_data(
temp_billing_code: str, connection_observer: ConnectionObserver temp_billing_code: str, connection_observer: ConnectionObserver
) -> dict | ApiResponse: ) -> dict | ApiResponse:
# prep:
which_endpoint = "/plan" which_endpoint = "/plan"
url = make_url(which_endpoint) url = make_url(which_endpoint)
payload = {"temp_billing_code": temp_billing_code} payload = {"temp_billing_code": temp_billing_code}
reply = send_data_to_server(payload, url, connection_observer)
# legacy: return reply
# reply = send_data_to_server(payload, url, connection_observer)
# send:
return connect.single_endpoint(
method="post",
url=url,
observer=connection_observer,
payload=payload
)

View file

@ -74,10 +74,6 @@ def single_endpoint(method: str, url: str, observer: ConnectionObserver, payload
######################################################## ########################################################
# FROM THIS POINT ON, WE HAVE PROBLEMS # FROM THIS POINT ON, WE HAVE PROBLEMS
######################################################## ########################################################
# Since it did NOT work, wipe the client,
httpx_client.close_http_session()
if connection_type == ConnectionChoice.SYSTEM: if connection_type == ConnectionChoice.SYSTEM:
# We have no solutions for clearweb that weren't tried already. # We have no solutions for clearweb that weren't tried already.
# But may add more in the future # But may add more in the future
@ -105,7 +101,7 @@ def single_endpoint(method: str, url: str, observer: ConnectionObserver, payload
payload=payload payload=payload
) )
# nothing we can do here, so # nothing we can do here
else: else:
return initial_result return initial_result

View file

@ -7,6 +7,7 @@ if TYPE_CHECKING:
from core.models.invoice.TicketInvoice import TicketInvoice from core.models.invoice.TicketInvoice import TicketInvoice
from core.services.networking.api_requests.step1_get_or_post import send_data_to_server from core.services.networking.api_requests.step1_get_or_post import send_data_to_server
# from core.services.networking.send_data_to_server import send_data_to_server
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType
from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems

View file

@ -6,6 +6,7 @@ if TYPE_CHECKING:
from typing import Any from typing import Any
# services # services
from core.services.networking.make_url import make_url from core.services.networking.make_url import make_url
from core.services.networking.api_requests.step1_get_or_post import get_data_from_api
from core.services.networking.httpx import connect from core.services.networking.httpx import connect
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType

View file

@ -5,8 +5,7 @@ if TYPE_CHECKING:
from essentials.observers.ConnectionObserver import ConnectionObserver from essentials.observers.ConnectionObserver import ConnectionObserver
from core.observers.TicketObserver import TicketObserver from core.observers.TicketObserver import TicketObserver
# services # services
# from core.services.networking.api_requests.step1_get_or_post import send_data_to_server from core.services.networking.api_requests.step1_get_or_post import send_data_to_server
from core.services.networking.httpx import connect
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType
from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems
@ -48,33 +47,25 @@ def send_blind_commitments(
# send it: # send it:
which_endpoint = "sign" which_endpoint = "sign"
url = make_url(which_endpoint) url = make_url(which_endpoint)
# api_reply_object = send_data_to_server(payload, url, connection_observer) api_reply_object = send_data_to_server(payload, url, connection_observer)
api_reply_object = connect.single_endpoint( # did API call work?
method="post",
url=url,
observer=connection_observer,
payload=payload
)
# # did API call work?
if not api_reply_object.valid: if not api_reply_object.valid:
logger.error(f"[SEND BLIND COMMITMENTS] Second Post request failed. {api_reply_object.error_type} {api_reply_object.message}") final_error_msg = f"[SEND BLIND COMMITMENTS] First Post request failed {api_reply_object.message}"
logger.error(final_error_msg)
api_reply_object = solve_api_problems(
api_reply_object=api_reply_object,
get_or_post="post",
url=url,
payload=payload,
connection_observer=connection_observer,
client_observer=None
)
if not api_reply_object.valid:
logger.error(f"[SEND BLIND COMMITMENTS] Second Post request failed. {api_reply_object.message}")
ticket_observer.notify("error", subject=api_reply_object.message) ticket_observer.notify("error", subject=api_reply_object.message)
return None return None
# if not api_reply_object.valid:
# final_error_msg = f"[SEND BLIND COMMITMENTS] First Post request failed {api_reply_object.message}"
# logger.error(final_error_msg)
# api_reply_object = solve_api_problems(
# api_reply_object=api_reply_object,
# get_or_post="post",
# url=url,
# payload=payload,
# connection_observer=connection_observer,
# client_observer=None
# )
# assuming it worked, extract the data: # assuming it worked, extract the data:
reply = api_reply_object.data reply = api_reply_object.data

View file

@ -1,6 +1,7 @@
# API # API
from core.services.networking.api_requests.step1_get_or_post import get_data_from_api
from core.services.networking.api_requests.ApiResponseModel import ApiResponse from core.services.networking.api_requests.ApiResponseModel import ApiResponse
# from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems
# Database # Database
from core.models.DatabaseOperation import DatabaseOperation, DBErrorType from core.models.DatabaseOperation import DatabaseOperation, DBErrorType

View file

@ -5,6 +5,7 @@ from core.services.networking.httpx import connect
from core.services.sync.compare_tables import compare_tables from core.services.sync.compare_tables import compare_tables
# from core.services.networking.api_requests.step1_get_or_post import get_data_from_api
from core.services.networking.httpx import connect from core.services.networking.httpx import connect
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType
from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems

View file

@ -5,8 +5,7 @@ if TYPE_CHECKING:
from essentials.observers.ConnectionObserver import ConnectionObserver from essentials.observers.ConnectionObserver import ConnectionObserver
# services & helpers # services & helpers
# from core.services.networking.api_requests.step1_get_or_post import send_data_to_server from core.services.networking.api_requests.step1_get_or_post import send_data_to_server
from core.services.networking.httpx import connect
from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType
from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems
@ -51,27 +50,20 @@ def send_unblinded_ticket_to_server(
# send it: # send it:
which_endpoint = "validate" which_endpoint = "validate"
url = make_url(which_endpoint) url = make_url(which_endpoint)
# api_reply_object = send_data_to_server(payload, url, connection_observer) api_reply_object = send_data_to_server(payload, url, connection_observer)
return connect.single_endpoint(
method="post",
url=url,
observer=connection_observer,
payload=payload
)
# This is if the API failed, not if it's not a valid ticket: # This is if the API failed, not if it's not a valid ticket:
# if not api_reply_object.valid: if not api_reply_object.valid:
# api_reply_object = solve_api_problems( api_reply_object = solve_api_problems(
# api_reply_object=api_reply_object, api_reply_object=api_reply_object,
# get_or_post="post", get_or_post="post",
# url=url, url=url,
# payload=payload, payload=payload,
# connection_observer=connection_observer, connection_observer=connection_observer,
# client_observer=None client_observer=None
# ) )
# return api_reply_object return api_reply_object
except Exception as e: except Exception as e:
human_readable_error_msg = f"The send_unblinded_ticket_to_server function's try-except block failed for ticket {which_ticket}. Returning False..." human_readable_error_msg = f"The send_unblinded_ticket_to_server function's try-except block failed for ticket {which_ticket}. Returning False..."