1"""Example usage of pyUSPTO for Image File Wrapper (IFW) retrieval.
2
3Demonstrates the PatentDataClient for retrieving IFW metadata via multiple identifier
4types, bulk-downloading prosecution documents, and downloading publication archives.
5"""
6
7import json
8import os
9
10from pyUSPTO import PatentDataClient, USPTOConfig
11
12DEST_PATH = "./notes/download-example"
13
14# --- Client Initialization ---
15api_key = os.environ.get("USPTO_API_KEY", "YOUR_API_KEY_HERE")
16if api_key == "YOUR_API_KEY_HERE":
17 raise ValueError(
18 "API key is not set. Set the USPTO_API_KEY environment variable."
19 )
20config = USPTOConfig(api_key=api_key)
21client = PatentDataClient(config=config)
22
23print("-" * 40)
24print("Example 1: Get IFW metadata by identifier type")
25print("-" * 40)
26
27# Application number
28application_number = "14412875"
29app_no_ifw = client.get_IFW_metadata(application_number=application_number)
30if app_no_ifw and app_no_ifw.application_meta_data:
31 print(f"Title: {app_no_ifw.application_meta_data.invention_title}")
32 print(f" IFW found via application number: {application_number}")
33
34# Patent number
35patent_number = "10765880"
36pat_no_ifw = client.get_IFW_metadata(patent_number=patent_number)
37if pat_no_ifw and pat_no_ifw.application_meta_data:
38 print(f"Title: {pat_no_ifw.application_meta_data.invention_title}")
39 print(f" IFW found via patent number: {patent_number}")
40
41# Publication number
42publication_number = "*20150157873*"
43pub_no_ifw = client.get_IFW_metadata(publication_number=publication_number)
44if pub_no_ifw and pub_no_ifw.application_meta_data:
45 print(f"Title: {pub_no_ifw.application_meta_data.invention_title}")
46 print(f" IFW found via publication number: {publication_number}")
47
48# PCT application number
49PCT_app_number = "PCT/US2008/12705"
50pct_app_no_ifw = client.get_IFW_metadata(PCT_app_number=PCT_app_number)
51if pct_app_no_ifw and pct_app_no_ifw.application_meta_data:
52 print(f"Title: {pct_app_no_ifw.application_meta_data.invention_title}")
53 print(f" IFW found via PCT application number: {PCT_app_number}")
54
55# PCT publication number
56PCT_pub_number = "*2009064413*"
57pct_pub_no_ifw = client.get_IFW_metadata(PCT_pub_number=PCT_pub_number)
58if pct_pub_no_ifw and pct_pub_no_ifw.application_meta_data:
59 print(f"Title: {pct_pub_no_ifw.application_meta_data.invention_title}")
60 print(f" IFW found via PCT publication number: {PCT_pub_number}")
61
62print("-" * 40)
63print("Example 2: Download IFW as ZIP archive")
64print("-" * 40)
65
66ifw_result = client.get_IFW(
67 application_number=application_number,
68 destination=DEST_PATH,
69 overwrite=True,
70)
71if ifw_result:
72 print(
73 f"Title: {ifw_result.wrapper.application_meta_data.invention_title if ifw_result.wrapper.application_meta_data else 'N/A'}"
74 )
75 print(f"Output: {ifw_result.output_path}")
76 doc_bag = ifw_result.wrapper.document_bag or []
77 print(
78 f"Documents downloaded: {len(ifw_result.downloaded_documents)} of {len(doc_bag)}"
79 )
80 for doc in doc_bag:
81 if doc.document_identifier:
82 filename = ifw_result.downloaded_documents.get(doc.document_identifier)
83 status = f"-> {filename}" if filename else "(skipped)"
84 print(f" {doc.document_code} [{doc.document_identifier}] {status}")
85
86print("-" * 40)
87print("Example 3: Download IFW as directory")
88print("-" * 40)
89
90ifw_dir_result = client.get_IFW(
91 application_number=application_number,
92 destination=DEST_PATH,
93 overwrite=True,
94 as_zip=False,
95)
96if ifw_dir_result:
97 print(f"Output directory: {ifw_dir_result.output_path}")
98
99print("-" * 40)
100print("Example 4: Download publication XML")
101print("-" * 40)
102
103if app_no_ifw and app_no_ifw.pgpub_document_meta_data:
104 pgpub_archive = app_no_ifw.pgpub_document_meta_data
105 print(json.dumps(pgpub_archive.to_dict(), indent=2))
106 file_path = client.download_archive(
107 printed_metadata=pgpub_archive, destination=DEST_PATH, overwrite=True
108 )
109 print(f"Downloaded publication XML to: {file_path}")
110
111print("-" * 40)
112print("Example 5: Download grant XML")
113print("-" * 40)
114
115if app_no_ifw and app_no_ifw.grant_document_meta_data:
116 grant_archive = app_no_ifw.grant_document_meta_data
117 print(json.dumps(grant_archive.to_dict(), indent=2))
118 file_path = client.download_archive(
119 printed_metadata=grant_archive, destination=DEST_PATH, overwrite=True
120 )
121 print(f"Downloaded grant XML to: {file_path}")