import asyncio import json import requests from altair import DateTime from streamlit.runtime.state.query_params import QueryParams import pandas as pd from datetime import datetime from neoserra_api_module import EcCenterId, CounselingSessionRepository, ClientRepository, ClientType, DefaultFundingSource async def main(): repo = ClientRepository("https://pasbdc.neoserra.com/api/v1/", "03776e46-a914-4996-95a0-3451ff68ebaa") #sessions = repo.get_sessions(datetime(2025, 10, 1), datetime(2026, 9, 30), is_reportable=True, centers=[EcCenterId.KUTZTOWN_UNIVERSITY_SBDC, EcCenterId.PENN_STATE_SBDC], neoserra_columns=["center_id", "date", "is_reportable", "clients"]) centers = [c for c in EcCenterId] funding_sources = [DefaultFundingSource.CORE_SERVICES, DefaultFundingSource.EMAP, DefaultFundingSource.LEXNET, DefaultFundingSource.NAP, DefaultFundingSource.PDA] active_statuses = [ClientType.ACTIVE_CLIENT, ClientType.INACTIVE_CLIENT] batch_size = 4 tasks = [] for center in centers: tasks.append(repo.get_clients_async(centers=center, active_status=active_statuses, funding_sources=funding_sources)) print(f"Number of calls: {len(tasks)}") all_results = [] for i in range(0, len(tasks), batch_size): current_batch = tasks[i:i + batch_size] print("starting batch!") batch_results = await asyncio.gather(*current_batch) print("batch completed!\n") all_results.extend(batch_results) for client_list in all_results: all_results.extend(client_list) pd.DataFrame(all_results).to_csv("api_clients.csv") exit(0) all_results = [] for i in range(0, len(tasks), batch_size): current_batch = tasks[i:i + batch_size] print("starting batch!") batch_results = await asyncio.gather(*current_batch) print("batch completed!\n") all_results.extend(batch_results) df = pd.DataFrame(all_results) df.to_csv("api_clients.csv") asyncio.run(main()) exit(0) clients = repo.get_clients_sync( centers=[EcCenterId.KUTZTOWN_UNIVERSITY_SBDC], active_status=[ClientType.ACTIVE_CLIENT, ClientType.INACTIVE_CLIENT], funding_sources=[DefaultFundingSource.CORE_SERVICES] ) for client in clients: print(json.dumps(client, indent=4)) print(f"\n\n") exit(0) for session in sessions: print(json.dumps(session, indent=4)) print(f"\n\n") test_df = pd.DataFrame(sessions) print(f"HEAD OF DF:\n\n") print(test_df.head()) """ base_url = "https://pasbdc.neoserra.com/api/v1/" endpoint = "centers/" # Added the new fields to the columns parameter so the API actually returns them new_columns = ",ecCenterId,ecCenterName,ecDescription,ecBannerLogo,ecBannerBkgd,ecBannerTextColor,urlEctrBanner,ecPocFirst,ecPocLast,ecPocEmail,ecPocPhone,sbaAreas,ecSignupInfoLevel,ecPayeeId,url1Type,url1,url2Type,url2,url3Type,url3,centerNotes" query = f"?visibility=N&columns=center,visibility,centerName,centerType,orgType,taRel,taServices,taBudget,sediOwned,region,sbaLoc,commnavs,counselId,phone,fax,email,url,account,accountPassword,mailaddr,mailcity,mailst,mailzip,county,country,clientidmask,nextclientnbr,conferenceidmask,nextconferencenbr{new_columns}" headers = {"Authorization": "Bearer 03776e46-a914-4996-95a0-3451ff68ebaa"} response = requests.get(f"{base_url}{endpoint}{query}", headers=headers) if response.status_code == 200: json_object = response.json() print("RAW JSON") print("=======================") print(json.dumps(json_object, indent=4)) print("Converted center records") print("=======================") centers = Center.from_api_json_list(json_object) for center in centers: print(f"Center id: {center.center_id.name if center.center_id else None}") print(f"Center name: {center.center_name.name if center.center_name else None}") print(f"Center visibility: {center.center_visibility.name if center.center_visibility else None}") print(f"Center type: {center.center_type.name if center.center_type else None}") print(f"Org type: {center.org_type.name if center.org_type else None}") print(f"TA Grant Relationship: {center.ta_grant_relationship.name if center.ta_grant_relationship else None}") print(f"TA Services:", end='') if center.ta_services: for ta_service in center.ta_services: print(f"{ta_service.name}", end=',') print() print(f"TA Budget: ${center.ta_budget}") print(f"SEDI Owned: {center.sedi_owned}") print(f"Region: {center.region}") print(f"SBA Loc: {center.sba_location}") print(f"Commnavs: {center.navigator_location_id}") print(f"Default Contact: {center.default_contact_id}") print(f"Phone: {center.phone_number}") print(f"Fax: {center.fax_number}") print(f"Email: {center.email}") print(f"url: {center.website_url}") print(f"Account: {center.outreach_account}") print(f"Account Password: {center.outreach_account_password}") print(f"Mail Address: {center.mailing_address}") print(f"Mail City: {center.mailing_address_city}") print(f"Mail State: {center.mailing_address_state}") print(f"Mail Zip: {center.mailing_address_zip}") print(f"Physical Address County: {center.physical_address_county}") print(f"Country Code: {center.country}") print(f"Client ID Mask: {center.client_id_format}") print(f"Next client id: {center.next_client_id}") print(f"Training ID Format: {center.training_event_id_format}") print(f"Next training id: {center.next_training_id}") # --- NEW FIELDS START HERE --- print(f"eCenter ID: {center.ec_center_id.name if center.ec_center_id else None}") print(f"eCenter Name: {center.ec_center_name}") print(f"eCenter Description: {center.ec_description}") print(f"eCenter Banner Logo: {center.ec_banner_logo}") print(f"eCenter Banner Background: {center.ec_banner_background}") print(f"eCenter Banner Text Color: {center.ec_banner_text_color.name if center.ec_banner_text_color else None}") print(f"eCenter Banner URL: {center.url_ectr_banner}") print(f"eCenter POC First Name: {center.ec_poc_first}") print(f"eCenter POC Last Name: {center.ec_poc_last}") print(f"eCenter POC Email: {center.ec_poc_email}") print(f"eCenter POC Phone: {center.ec_poc_phone}") print(f"SBA Areas:", end='') if center.sba_areas: for area in center.sba_areas: print(f"{area.name}", end=',') print() print(f"eCenter Signup Info Level: {center.ec_signup_info_level.name if center.ec_signup_info_level else None}") print(f"eCenter Payee ID: {center.ec_payee_id.name if center.ec_payee_id else None}") print(f"URL 1 Type: {center.url1_type.name if center.url1_type else None}") print(f"URL 1: {center.url1}") print(f"URL 2 Type: {center.url2_type.name if center.url2_type else None}") print(f"URL 2: {center.url2}") print(f"URL 3 Type: {center.url3_type.name if center.url3_type else None}") print(f"URL 3: {center.url3}") print(f"Center Notes: {center.center_notes}") print("=======") else: print(f"status: {response.status_code}") print(f"{response.content}") """ """ headers = {"Authorization": "Bearer 03776e46-a914-4996-95a0-3451ff68ebaa"} response = requests.get(f"https://pasbdc.neoserra.com/api/v1/clients?centerId=13&type2=AC&columns=client", headers=headers) json_object = response.json() print("RAW JSON") print("=======================") print(json.dumps(json_object, indent=4)) """