Image File Wrapper Example

  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}")