|
171 | 171 | "print(f\"Found {contracts.count:,} total contracts\\n\")\n", |
172 | 172 | "\n", |
173 | 173 | "for contract in contracts.results:\n", |
174 | | - " amount = f\"${contract['total_contract_value']:,.2f}\" if contract.get('total_contract_value') else \"N/A\"\n", |
175 | | - " date_str = contract.get('award_date', 'N/A')\n", |
176 | | - " recipient = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
177 | | - " description = contract.get('description', 'No description')[:100]\n", |
178 | | - " \n", |
| 174 | + " amount = (\n", |
| 175 | + " f\"${contract['total_contract_value']:,.2f}\"\n", |
| 176 | + " if contract.get(\"total_contract_value\")\n", |
| 177 | + " else \"N/A\"\n", |
| 178 | + " )\n", |
| 179 | + " date_str = contract.get(\"award_date\", \"N/A\")\n", |
| 180 | + " recipient = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
| 181 | + " description = contract.get(\"description\", \"No description\")[:100]\n", |
| 182 | + "\n", |
179 | 183 | " print(f\"{recipient}\")\n", |
180 | 184 | " print(f\" Amount: {amount}\")\n", |
181 | 185 | " print(f\" Date: {date_str}\")\n", |
|
223 | 227 | "\n", |
224 | 228 | "print(f\"Contracts from last 30 days: {recent_contracts.count:,}\")\n", |
225 | 229 | "for contract in recent_contracts.results:\n", |
226 | | - " amount = f\"${contract['total_contract_value']:,.2f}\" if contract.get('total_contract_value') else \"N/A\"\n", |
227 | | - " recipient = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
| 230 | + " amount = (\n", |
| 231 | + " f\"${contract['total_contract_value']:,.2f}\"\n", |
| 232 | + " if contract.get(\"total_contract_value\")\n", |
| 233 | + " else \"N/A\"\n", |
| 234 | + " )\n", |
| 235 | + " recipient = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
228 | 236 | " print(f\"- {recipient}: {amount}\")" |
229 | 237 | ] |
230 | 238 | }, |
|
255 | 263 | "\n", |
256 | 264 | "print(f\"IT services contracts (NAICS 541511): {it_contracts.count:,}\")\n", |
257 | 265 | "for contract in it_contracts.results:\n", |
258 | | - " amount = f\"${contract['total_contract_value']:,.2f}\" if contract.get('total_contract_value') else \"N/A\"\n", |
259 | | - " recipient = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
| 266 | + " amount = (\n", |
| 267 | + " f\"${contract['total_contract_value']:,.2f}\"\n", |
| 268 | + " if contract.get(\"total_contract_value\")\n", |
| 269 | + " else \"N/A\"\n", |
| 270 | + " )\n", |
| 271 | + " recipient = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
260 | 272 | " print(f\"- {recipient}: {amount}\")" |
261 | 273 | ] |
262 | 274 | }, |
|
283 | 295 | "gsa_contracts = client.list_contracts(awarding_agency=\"GSA\", limit=5)\n", |
284 | 296 | "print(f\"GSA contracts: {gsa_contracts.count:,}\")\n", |
285 | 297 | "for contract in gsa_contracts.results:\n", |
286 | | - " amount = f\"${contract['total_contract_value']:,.2f}\" if contract.get('total_contract_value') else \"N/A\"\n", |
287 | | - " description = contract.get('description', 'No description')[:80]\n", |
| 298 | + " amount = (\n", |
| 299 | + " f\"${contract['total_contract_value']:,.2f}\"\n", |
| 300 | + " if contract.get(\"total_contract_value\")\n", |
| 301 | + " else \"N/A\"\n", |
| 302 | + " )\n", |
| 303 | + " description = contract.get(\"description\", \"No description\")[:80]\n", |
288 | 304 | " print(f\"- {description}... ({amount})\")" |
289 | 305 | ] |
290 | 306 | }, |
|
345 | 361 | "print(f\"Found {results.count:,} contracts matching criteria\\n\")\n", |
346 | 362 | "\n", |
347 | 363 | "for contract in results.results:\n", |
348 | | - " recipient = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
349 | | - " amount = contract.get('total_contract_value')\n", |
350 | | - " date_str = contract.get('award_date', 'N/A')\n", |
351 | | - " \n", |
| 364 | + " recipient = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
| 365 | + " amount = contract.get(\"total_contract_value\")\n", |
| 366 | + " date_str = contract.get(\"award_date\", \"N/A\")\n", |
| 367 | + "\n", |
352 | 368 | " print(f\"{recipient}\")\n", |
353 | 369 | " print(f\" Amount: ${amount:,.2f}\" if amount else \" Amount: N/A\")\n", |
354 | 370 | " print(f\" Date: {date_str}\")\n", |
355 | | - " if contract.get('naics'):\n", |
356 | | - " naics = contract['naics']\n", |
| 371 | + " if contract.get(\"naics\"):\n", |
| 372 | + " naics = contract[\"naics\"]\n", |
357 | 373 | " print(f\" NAICS: {naics.get('code')} - {naics.get('description', '')}\")\n", |
358 | 374 | " print()" |
359 | 375 | ] |
|
386 | 402 | "source": [ |
387 | 403 | "# Use a custom shape to get only specific fields\n", |
388 | 404 | "contracts_shaped = client.list_contracts(\n", |
389 | | - " limit=3,\n", |
390 | | - " shape=\"key,piid,recipient(display_name),total_contract_value\"\n", |
| 405 | + " limit=3, shape=\"key,piid,recipient(display_name),total_contract_value\"\n", |
391 | 406 | ")\n", |
392 | 407 | "\n", |
393 | 408 | "print(\"Custom shape (key, recipient, amount):\")\n", |
394 | 409 | "for contract in contracts_shaped.results:\n", |
395 | | - " recipient = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
396 | | - " amount = contract.get('total_contract_value')\n", |
| 410 | + " recipient = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
| 411 | + " amount = contract.get(\"total_contract_value\")\n", |
397 | 412 | " print(f\" {recipient}: ${amount:,.2f}\" if amount else f\" {recipient}: N/A\")" |
398 | 413 | ] |
399 | 414 | }, |
|
423 | 438 | "print(\"Dictionary and attribute access both work:\")\n", |
424 | 439 | "for contract in contracts.results:\n", |
425 | 440 | " # Dictionary access (recommended) - works for all fields\n", |
426 | | - " recipient_dict = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
427 | | - " piid_dict = contract.get('piid', 'N/A')\n", |
428 | | - " \n", |
| 441 | + " recipient_dict = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
| 442 | + " piid_dict = contract.get(\"piid\", \"N/A\")\n", |
| 443 | + "\n", |
429 | 444 | " # Attribute access also works for top-level fields\n", |
430 | 445 | " # Note: Nested objects are dicts, so use dictionary access for nested fields\n", |
431 | | - " piid_attr = contract.piid if hasattr(contract, 'piid') else 'N/A'\n", |
432 | | - " \n", |
| 446 | + " piid_attr = contract.piid if hasattr(contract, \"piid\") else \"N/A\"\n", |
| 447 | + "\n", |
433 | 448 | " print(f\" PIID - Dictionary: {piid_dict}, Attribute: {piid_attr}\")\n", |
434 | 449 | " print(f\" Recipient (dict access): {recipient_dict}\")\n", |
435 | 450 | " print()" |
|
463 | 478 | "\n", |
464 | 479 | "print(\"Custom shape (only specific fields):\")\n", |
465 | 480 | "for contract in contracts_custom.results:\n", |
466 | | - " piid = contract.get('piid', 'N/A')\n", |
467 | | - " recipient = contract.get('recipient', {}).get('display_name', 'Unknown')\n", |
| 481 | + " piid = contract.get(\"piid\", \"N/A\")\n", |
| 482 | + " recipient = contract.get(\"recipient\", {}).get(\"display_name\", \"Unknown\")\n", |
468 | 483 | " print(f\" {piid}: {recipient}\")\n", |
469 | 484 | " print(f\" Date: {contract.get('award_date', 'N/A')}\")" |
470 | 485 | ] |
|
522 | 537 | "print(f\"Found {entities.count:,} entities\\n\")\n", |
523 | 538 | "\n", |
524 | 539 | "for entity in entities.results:\n", |
525 | | - " display_name = entity.get('display_name', 'Unknown')\n", |
| 540 | + " display_name = entity.get(\"display_name\", \"Unknown\")\n", |
526 | 541 | " print(f\"{display_name}\")\n", |
527 | | - " if entity.get('uei'):\n", |
| 542 | + " if entity.get(\"uei\"):\n", |
528 | 543 | " print(f\" UEI: {entity['uei']}\")\n", |
529 | | - " if entity.get('physical_address'):\n", |
530 | | - " addr = entity['physical_address']\n", |
531 | | - " if addr.get('city') and addr.get('state_code'):\n", |
| 544 | + " if entity.get(\"physical_address\"):\n", |
| 545 | + " addr = entity[\"physical_address\"]\n", |
| 546 | + " if addr.get(\"city\") and addr.get(\"state_code\"):\n", |
532 | 547 | " print(f\" Location: {addr['city']}, {addr['state_code']}\")\n", |
533 | | - " if entity.get('business_types'):\n", |
| 548 | + " if entity.get(\"business_types\"):\n", |
534 | 549 | " print(f\" Business Types: {entity['business_types'][:3]}\")\n", |
535 | 550 | " print()" |
536 | 551 | ] |
|
551 | 566 | "source": [ |
552 | 567 | "# Get specific entity by UEI or CAGE code\n", |
553 | 568 | "if entities.results:\n", |
554 | | - " entity_key = entities.results[0].get('uei') or entities.results[0].get('cage_code')\n", |
| 569 | + " entity_key = entities.results[0].get(\"uei\") or entities.results[0].get(\"cage_code\")\n", |
555 | 570 | " if entity_key:\n", |
556 | 571 | " entity = client.get_entity(entity_key)\n", |
557 | | - " if entity.get('legal_business_name'):\n", |
| 572 | + " if entity.get(\"legal_business_name\"):\n", |
558 | 573 | " print(f\"Legal Name: {entity['legal_business_name']}\")\n", |
559 | | - " if entity.get('physical_address'):\n", |
560 | | - " addr = entity['physical_address']\n", |
561 | | - " if addr.get('city') and addr.get('state_code'):\n", |
| 574 | + " if entity.get(\"physical_address\"):\n", |
| 575 | + " addr = entity[\"physical_address\"]\n", |
| 576 | + " if addr.get(\"city\") and addr.get(\"state_code\"):\n", |
562 | 577 | " print(f\"Location: {addr['city']}, {addr['state_code']}\")" |
563 | 578 | ] |
564 | 579 | }, |
|
615 | 630 | "print(f\"Found {forecasts.count:,} contract forecasts\\n\")\n", |
616 | 631 | "\n", |
617 | 632 | "for forecast in forecasts.results:\n", |
618 | | - " title = forecast.get('title', 'Untitled')\n", |
| 633 | + " title = forecast.get(\"title\", \"Untitled\")\n", |
619 | 634 | " print(f\"{title}\")\n", |
620 | | - " if forecast.get('anticipated_award_date'):\n", |
| 635 | + " if forecast.get(\"anticipated_award_date\"):\n", |
621 | 636 | " print(f\" Anticipated Award: {forecast['anticipated_award_date']}\")\n", |
622 | | - " if forecast.get('fiscal_year'):\n", |
| 637 | + " if forecast.get(\"fiscal_year\"):\n", |
623 | 638 | " print(f\" Fiscal Year: {forecast['fiscal_year']}\")\n", |
624 | | - " if forecast.get('naics_code'):\n", |
| 639 | + " if forecast.get(\"naics_code\"):\n", |
625 | 640 | " print(f\" NAICS: {forecast['naics_code']}\")\n", |
626 | 641 | " print()" |
627 | 642 | ] |
|
680 | 695 | "print(f\"Found {opportunities.count:,} contract opportunities\\n\")\n", |
681 | 696 | "\n", |
682 | 697 | "for opp in opportunities.results:\n", |
683 | | - " title = opp.get('title', 'Untitled')\n", |
| 698 | + " title = opp.get(\"title\", \"Untitled\")\n", |
684 | 699 | " print(f\"{title}\")\n", |
685 | | - " if opp.get('solicitation_number'):\n", |
| 700 | + " if opp.get(\"solicitation_number\"):\n", |
686 | 701 | " print(f\" Solicitation #: {opp['solicitation_number']}\")\n", |
687 | | - " if opp.get('response_deadline'):\n", |
| 702 | + " if opp.get(\"response_deadline\"):\n", |
688 | 703 | " print(f\" Response Deadline: {opp['response_deadline']}\")\n", |
689 | | - " if opp.get('active') is not None:\n", |
| 704 | + " if opp.get(\"active\") is not None:\n", |
690 | 705 | " print(f\" Active: {opp['active']}\")\n", |
691 | 706 | " print()" |
692 | 707 | ] |
|
744 | 759 | "print(f\"Found {notices.count:,} contract notices\\n\")\n", |
745 | 760 | "\n", |
746 | 761 | "for notice in notices.results:\n", |
747 | | - " title = notice.get('title', 'Untitled')\n", |
| 762 | + " title = notice.get(\"title\", \"Untitled\")\n", |
748 | 763 | " print(f\"{title}\")\n", |
749 | | - " if notice.get('solicitation_number'):\n", |
| 764 | + " if notice.get(\"solicitation_number\"):\n", |
750 | 765 | " print(f\" Solicitation #: {notice['solicitation_number']}\")\n", |
751 | | - " if notice.get('posted_date'):\n", |
| 766 | + " if notice.get(\"posted_date\"):\n", |
752 | 767 | " print(f\" Posted: {notice['posted_date']}\")\n", |
753 | | - " if notice.get('naics_code'):\n", |
| 768 | + " if notice.get(\"naics_code\"):\n", |
754 | 769 | " print(f\" NAICS: {notice['naics_code']}\")\n", |
755 | 770 | " print()" |
756 | 771 | ] |
|
0 commit comments