[{"data":1,"prerenderedAt":659},["ShallowReactive",2],{"navigation_docs":3,"-registries-pypi":72,"-registries-pypi-surround":654},[4,40],{"title":5,"path":6,"stem":7,"children":8,"icon":39},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"PURLs","\u002Fguide\u002Fpurl","1.guide\u002F2.purl",{"title":16,"path":17,"stem":18},"Lookups","\u002Fguide\u002Flookups","1.guide\u002F3.lookups",{"title":20,"path":21,"stem":22},"Caching","\u002Fguide\u002Fcache","1.guide\u002F4.cache",{"title":24,"path":25,"stem":26},"CLI","\u002Fguide\u002Fcli","1.guide\u002F5.cli",{"title":28,"path":29,"stem":30},"Agents","\u002Fguide\u002Fagents","1.guide\u002F6.agents",{"title":32,"path":33,"stem":34},"Custom Registries","\u002Fguide\u002Fcustom","1.guide\u002F7.custom",{"title":36,"path":37,"stem":38},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F8.explorer","i-lucide-book-open",{"title":41,"path":42,"stem":43,"children":44,"icon":71},"Registries","\u002Fregistries","2.registries\u002F0.index",[45,47,51,55,59,63,67],{"title":46,"path":42,"stem":43},"Overview",{"title":48,"path":49,"stem":50},"npm","\u002Fregistries\u002Fnpm","2.registries\u002F01.npm",{"title":52,"path":53,"stem":54},"crates.io","\u002Fregistries\u002Fcargo","2.registries\u002F02.cargo",{"title":56,"path":57,"stem":58},"PyPI","\u002Fregistries\u002Fpypi","2.registries\u002F03.pypi",{"title":60,"path":61,"stem":62},"RubyGems","\u002Fregistries\u002Frubygems","2.registries\u002F04.rubygems",{"title":64,"path":65,"stem":66},"Packagist","\u002Fregistries\u002Fpackagist","2.registries\u002F05.packagist",{"title":68,"path":69,"stem":70},"Arch Linux","\u002Fregistries\u002Falpm","2.registries\u002F06.alpm","i-lucide-library",{"id":73,"title":56,"body":74,"description":646,"extension":647,"links":648,"meta":649,"navigation":651,"path":57,"seo":652,"stem":58,"__hash__":653},"docs\u002F2.registries\u002F03.pypi.md",{"type":75,"value":76,"toc":636},"minimark",[77,81,86,170,197,201,282,323,327,351,355,364,453,460,464,478,482,594,598,623,627,632],[78,79],"registry-facts",{"ecosystem":80},"pypi",[82,83,85],"h2",{"id":84},"address-it","Address it",[87,88,93],"pre",{"className":89,"code":90,"language":91,"meta":92,"style":92},"language-ts shiki shiki-themes github-light github-light poimandres","await fetchPackageFromPURL(\"pkg:pypi\u002Fflask\");\nawait fetchPackageFromPURL(\"pkg:pypi\u002FFlask\"); \u002F\u002F the same package\nawait fetchPackageFromPURL(\"pkg:pypi\u002Ftyping_extensions\"); \u002F\u002F normalized to typing-extensions\n","ts","",[94,95,96,126,149],"code",{"__ignoreMap":92},[97,98,101,105,109,113,117,121,123],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"sZW6a","await",[97,106,108],{"class":107},"sULi6"," fetchPackageFromPURL",[97,110,112],{"class":111},"sKlNE","(",[97,114,116],{"class":115},"scVjq","\"",[97,118,120],{"class":119},"sQ7BG","pkg:pypi\u002Fflask",[97,122,116],{"class":115},[97,124,125],{"class":111},");\n",[97,127,129,131,133,135,137,140,142,145],{"class":99,"line":128},2,[97,130,104],{"class":103},[97,132,108],{"class":107},[97,134,112],{"class":111},[97,136,116],{"class":115},[97,138,139],{"class":119},"pkg:pypi\u002FFlask",[97,141,116],{"class":115},[97,143,144],{"class":111},"); ",[97,146,148],{"class":147},"sjhu3","\u002F\u002F the same package\n",[97,150,152,154,156,158,160,163,165,167],{"class":99,"line":151},3,[97,153,104],{"class":103},[97,155,108],{"class":107},[97,157,112],{"class":111},[97,159,116],{"class":115},[97,161,162],{"class":119},"pkg:pypi\u002Ftyping_extensions",[97,164,116],{"class":115},[97,166,144],{"class":111},[97,168,169],{"class":147},"\u002F\u002F normalized to typing-extensions\n",[171,172,173,174,177,178,181,182,185,186,188,189,192,193,196],"p",{},"Names are normalized the way PEP 503 says: lowercase, runs of ",[94,175,176],{},"-",", ",[94,179,180],{},"_"," and ",[94,183,184],{},"."," collapsed to ",[94,187,176],{},". ",[94,190,191],{},"parsePURL"," does it for PyPI types, and the adapter does it again on any name it receives, so ",[94,194,195],{},"PyPIRegistry"," called directly behaves the same.",[82,198,200],{"id":199},"what-it-reads","What it reads",[202,203,204,217],"table",{},[205,206,207],"thead",{},[208,209,210,214],"tr",{},[211,212,213],"th",{},"Call",[211,215,216],{},"Endpoint",[218,219,220,233,250,265],"tbody",{},[208,221,222,228],{},[223,224,225],"td",{},[94,226,227],{},"fetchPackage",[223,229,230],{},[94,231,232],{},"GET \u002Fpypi\u002F{name}\u002Fjson",[208,234,235,240],{},[223,236,237],{},[94,238,239],{},"fetchVersions",[223,241,242,245,246,249],{},[94,243,244],{},"GET \u002Fsimple\u002F{name}\u002F"," with ",[94,247,248],{},"Accept: application\u002Fvnd.pypi.simple.v1+json"," (PEP 691)",[208,251,252,257],{},[223,253,254],{},[94,255,256],{},"fetchDependencies",[223,258,259,177,262],{},[94,260,261],{},"GET \u002Fpypi\u002F{name}\u002F{version}\u002Fjson",[94,263,264],{},"requires_dist",[208,266,267,272],{},[223,268,269],{},[94,270,271],{},"fetchMaintainers",[223,273,274,177,276,181,279],{},[94,275,232],{},[94,277,278],{},"author",[94,280,281],{},"author_email",[171,283,284,287,288,188,291,294,295,177,298,177,301,177,304,181,307,310,311,314,315,318,319,322],{},[94,285,286],{},"latestVersion"," is ",[94,289,290],{},"info.version",[94,292,293],{},"repository"," is the first of the ",[94,296,297],{},"Repository",[94,299,300],{},"Source",[94,302,303],{},"Source Code",[94,305,306],{},"GitHub",[94,308,309],{},"Homepage"," project URLs, normalized. ",[94,312,313],{},"documentation"," is the ",[94,316,317],{},"Documentation"," project URL. Keywords are split from the ",[94,320,321],{},"keywords"," string on commas or spaces.",[82,324,326],{"id":325},"versions","Versions",[171,328,329,330,333,334,177,337,340,341,177,344,287,347,350],{},"The Simple API lists every version and every file. The adapter groups files by version, matching wheel and sdist filenames against the version list, and takes the sdist when there is one. ",[94,331,332],{},"publishedAt"," is that file's ",[94,335,336],{},"upload-time",[94,338,339],{},"integrity"," its ",[94,342,343],{},"sha256-",[94,345,346],{},"status",[94,348,349],{},"yanked"," when the file is yanked. A version with no files has no date and no hash.",[82,352,354],{"id":353},"dependencies","Dependencies",[171,356,357,359,360,363],{},[94,358,264],{}," entries are parsed for the name, the version specifier and the environment marker. An ",[94,361,362],{},"extra == \"…\""," marker sets the scope:",[202,365,366,383],{},[205,367,368],{},[208,369,370,373,378],{},[211,371,372],{},"Extra",[211,374,375],{},[94,376,377],{},"scope",[211,379,380],{},[94,381,382],{},"optional",[218,384,385,400,419,440],{},[208,386,387,390,395],{},[223,388,389],{},"none",[223,391,392],{},[94,393,394],{},"runtime",[223,396,397],{},[94,398,399],{},"false",[208,401,402,410,414],{},[223,403,404,177,407],{},[94,405,406],{},"dev",[94,408,409],{},"development",[223,411,412],{},[94,413,409],{},[223,415,416],{},[94,417,418],{},"true",[208,420,421,432,436],{},[223,422,423,177,426,177,429],{},[94,424,425],{},"test",[94,427,428],{},"tests",[94,430,431],{},"testing",[223,433,434],{},[94,435,425],{},[223,437,438],{},[94,439,418],{},[208,441,442,445,449],{},[223,443,444],{},"anything else",[223,446,447],{},[94,448,394],{},[223,450,451],{},[94,452,418],{},[171,454,455,456,459],{},"Other markers, such as ",[94,457,458],{},"python_version",", are dropped; the dependency stays.",[82,461,463],{"id":462},"maintainers","Maintainers",[171,465,466,467,469,470,473,474,477],{},"One entry, the ",[94,468,278],{},", with ",[94,471,472],{},"role: \"author\"",", when the project declares one. PyPI's ",[94,475,476],{},"maintainer"," field and the project's owners on pypi.org are not read.",[82,479,481],{"id":480},"urls","URLs",[87,483,485],{"className":89,"code":484,"language":91,"meta":92,"style":92},"urls.registry(\"flask\"); \u002F\u002F https:\u002F\u002Fpypi.org\u002Fproject\u002Fflask\u002F\nurls.download(\"flask\", \"3.1.3\"); \u002F\u002F the sdist URL seen during fetchVersions, else the project page\nurls.documentation(\"flask\"); \u002F\u002F https:\u002F\u002Fpypi.org\u002Fproject\u002Fflask\nurls.readme(\"flask\", \"3.1.3\"); \u002F\u002F https:\u002F\u002Fpypi.org\u002Fproject\u002Fflask\u002F3.1.3\u002F\n",[94,486,487,511,542,563],{"__ignoreMap":92},[97,488,489,492,494,497,499,501,504,506,508],{"class":99,"line":100},[97,490,480],{"class":491},"spVlQ",[97,493,184],{"class":111},[97,495,496],{"class":107},"registry",[97,498,112],{"class":111},[97,500,116],{"class":115},[97,502,503],{"class":119},"flask",[97,505,116],{"class":115},[97,507,144],{"class":111},[97,509,510],{"class":147},"\u002F\u002F https:\u002F\u002Fpypi.org\u002Fproject\u002Fflask\u002F\n",[97,512,513,515,517,520,522,524,526,528,530,532,535,537,539],{"class":99,"line":128},[97,514,480],{"class":491},[97,516,184],{"class":111},[97,518,519],{"class":107},"download",[97,521,112],{"class":111},[97,523,116],{"class":115},[97,525,503],{"class":119},[97,527,116],{"class":115},[97,529,177],{"class":111},[97,531,116],{"class":115},[97,533,534],{"class":119},"3.1.3",[97,536,116],{"class":115},[97,538,144],{"class":111},[97,540,541],{"class":147},"\u002F\u002F the sdist URL seen during fetchVersions, else the project page\n",[97,543,544,546,548,550,552,554,556,558,560],{"class":99,"line":151},[97,545,480],{"class":491},[97,547,184],{"class":111},[97,549,313],{"class":107},[97,551,112],{"class":111},[97,553,116],{"class":115},[97,555,503],{"class":119},[97,557,116],{"class":115},[97,559,144],{"class":111},[97,561,562],{"class":147},"\u002F\u002F https:\u002F\u002Fpypi.org\u002Fproject\u002Fflask\n",[97,564,566,568,570,573,575,577,579,581,583,585,587,589,591],{"class":99,"line":565},4,[97,567,480],{"class":491},[97,569,184],{"class":111},[97,571,572],{"class":107},"readme",[97,574,112],{"class":111},[97,576,116],{"class":115},[97,578,503],{"class":119},[97,580,116],{"class":115},[97,582,177],{"class":111},[97,584,116],{"class":115},[97,586,534],{"class":119},[97,588,116],{"class":115},[97,590,144],{"class":111},[97,592,593],{"class":147},"\u002F\u002F https:\u002F\u002Fpypi.org\u002Fproject\u002Fflask\u002F3.1.3\u002F\n",[82,595,597],{"id":596},"gotchas","Gotchas",[599,600,601,611,616],"ul",{},[602,603,604,607,608,610],"li",{},[94,605,606],{},"download()"," only knows a file URL after ",[94,609,239],{}," ran on the same adapter instance; before that it points at the project page.",[602,612,613,615],{},[94,614,264],{}," is what the sdist or wheel declared, not what pip resolved. Conditional dependencies show up unconditionally.",[602,617,618,619,622],{},"Licenses on PyPI are free text. ",[94,620,621],{},"normalizeLicense"," maps the common spellings; a long license body is returned as is.",[82,624,626],{"id":625},"where-it-lives","Where it lives",[171,628,629,184],{},[94,630,631],{},"src\u002Fregistries\u002Fpypi.ts",[633,634,635],"style",{},"html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}",{"title":92,"searchDepth":128,"depth":128,"links":637},[638,639,640,641,642,643,644,645],{"id":84,"depth":128,"text":85},{"id":199,"depth":128,"text":200},{"id":325,"depth":128,"text":326},{"id":353,"depth":128,"text":354},{"id":462,"depth":128,"text":463},{"id":480,"depth":128,"text":481},{"id":596,"depth":128,"text":597},{"id":625,"depth":128,"text":626},"PyPI's JSON API for metadata and the Simple API for versions, with PEP 503 name normalization and extras turned into dependency scopes.","md",null,{"icon":650},"i-simple-icons-pypi",true,{"title":56,"description":646},"UpG6Q-GxYbbf4eF6MWDfUBxev5ovUQC9hrlfvigb_hY",[655,657],{"title":52,"path":53,"stem":54,"description":656,"children":-1},"The crates.io API across four endpoints, with yanked versions as a status and docs.rs as the documentation home.",{"title":60,"path":61,"stem":62,"description":658,"children":-1},"The rubygems.org API for gems, versions, dependencies of each version and owners, with yanked versions as a status.",1788462724332]