Skip to main content

Parallel and LazY Analyzer for PDFs

Project description

Parallel and/or LAzY Analyzer for PDF 🏖️

TL;DR

You can read this document, or just go look at some notebooks to get an idea of what this package does.

About

There are already too many PDF libraries, unfortunately none of which does everything that everybody wants it to do, and we probably don't need another one. It is not recommended that you use this library for anything at all, but if you were going to use it for something, it might be one of these things, which you may currently be doing with pdfminer.six, for instance:

  1. Accessing the document catalog, page tree, structure tree, outline, content streams, cross-reference table, XObjects, fonts, images, annotations, and other low-level PDF metadata.
  2. Obtaining the absolute position and attributes of every character, line, path, and image in every page of a PDF.

Note that while PLAYA Ain't a LAYout Analyzer, it does in fact implement the layout analysis algorithm from pdfminer.six anyways. See the documentation for more information on how to migrate your code. You may be interested to know that PLAYA's implementation is also up to 10x faster (benchmarks), depending on how many CPUs you use.

All that said, the primary purpose of PLAYA is to provide a parallel, parallelizable, pure-Python and Pythonic (for its author's definition of the term), lazy interface to the internals of PDF files.

But, it does more than that! It also includes a command-line interface which can dump out various types of PDF data and metadata quickly. For instance, you might want to dump out all the PDF operators in all the content streams on all the pages:

playa --content-streams my-awesome-document.pdf

Or you could look at the document outline or logical structure tree:

playa --outline some-interesting-stuff.pdf
playa --structure tagged-pdf-wow.pdf

And, yes, it does extract text, or also text objects (with associated metadata):

playa --text fascinating-research-paper.pdf
playa --text-objects colorful-presentation.pdf

Or images, in JPEG and PNM (or sometimes TIFF) format (may not work for all images):

playa --images imagedir splashy-resume.pdf

Or fonts, in various esoteric formats (may not work for all fonts):

playa --fonts fontdir typographic-horror.pdf

If you just want to extract text from a PDF, there are better and/or faster tools and libraries out there, notably pypdfium2 and pypdf, among others. See these benchmarks for a comparison. Nonetheless, you will notice in this comparison that:

  • PLAYA (using 2 CPUs) is the fastest pure-Python PDF reader by far
  • PLAYA has no dependencies and no C++
  • PLAYA is MIT licensed

PLAYA is also very good at reading logical structure trees. On my town's 486-page zoning bylaw, extracting the entire tree with its text contents as JSON using playa --structure takes only 23 seconds, whereas pdfplumber --structure-text takes 69 seconds and pdfinfo -struct-text (which doesn't output JSON) takes 110 seconds.

I cannot stress this enough, text extraction is not the primary use case for PLAYA, because extracting text from PDFs is not fun, and I like fun. Do you like fun? Then read on.

Installation

Installing it should be really simple as long as you have Python 3.8 or newer:

pipx install playa-pdf

Yes it's not just "playa". Sorry about that. If you wish to read certain encrypted PDFs then you will need the crypto add-on:

pipx install playa-pdf[crypto]

Usage

Do you want to get stuff out of a PDF? You have come to the right place! Let's open up a PDF and see what's in it:

pdf = playa.open("my_awesome_document.pdf")
raw_byte_stream = pdf.buffer
a_bunch_of_tokens = list(pdf.tokens)
a_bunch_of_indirect_object_ids = list(pdf.keys())
a_bunch_of_indirect_objects = list(pdf.values())
a_bunch_of_pages = list(pdf.pages)

Yes, a Document is fundamentally a Mapping of object IDs to objects, which are represented to the extent possible by native Python objects. These may not be terribly useful to you, but you might find them interesting. Note that these are "indirect objects" where the actual object is accompanied by an object number and "generation number". If you wish to find all the objects in a PDF file, then you will need to iterate over the objects property:

for indobj in pdf.objects:
    objid, genno, obj = indobj

It is possible you will encounter multiple objects with the same objid due to the "incremental updates" feature of PDF. As expected, you can subscript the document to access indirect objects by number (this will return the object with most recent generation number):

a_particular_object = pdf[42]

Your PDF document probably has some pages. How many? What are their numbers/labels? They could be things like "xvi" (pronounced "gzvee"), 'a", or "42", for instance!

npages = len(pdf.pages)
page_numbers = [page.label for page in pdf.pages]

You can also subscript pages in various other ways, using a slice or an iterable of int, which will give you a new page list object that behaves similarly. Pages and page lists can refer back to their document (using weak reference magic to avoid memory leaks) with their doc property.

Some (by no means all) helpful metadata

A PDF often contains a "document outline" which is a sequence of trees representing the coarse-grained logical structure of the document, accessible via the outline property:

for entry in pdf.outline:
    entry.title, entry.destination, entry.action, entry.element
    for child in entry:
        child.title, child.destination, child.action, child.element
        ...

If you are lucky it has a "logical structure tree". The elements here might even be referenced from the outline above! (or, they might not... with PDF you never know).

for element in pdf.structure:
   for child in element:
       ...
sections = structure.find_all("Sect")
first_p = structure.find("P")

Now perhaps we want to look at a specific page. Okay! You can also look at its contents, more on that in a bit:

page = next(iter(pdf.pages)) # Fast and lazy way to get the first page
page = pdf.pages[0]          # they are numbered from 0
page = pdf.pages["xviii"]    # but you can get them by label (a string)
page = pdf.pages["42"]       # or "logical" page number (also a string)
print(f"Page {page.label} is {page.width} x {page.height}")

Since PDF is at heart a page-oriented, presentation format, many types of metadata are mostly accessible via the page objects. For instance you can access the fonts used in page with, obviously, the fonts property, or the annotations via the annotations property.

For example, annotations (internal or external links) are defined on pages (since their position would not make any sense otherwise). There are umpteen zillion kinds of annotations (PDF 1.7 sect 12.5.6) but they all have at least these attributes in common:

for annot in page.annotations:
    annot.subtype, annot.rect, annot.props

The set of possible entries in annotation dictionaries (PDF 1.7 sect 12.5.2) is vast and confusing and inconsistently implemented. You can access the raw annotation dictionary via props in the Annotation object.

If the document has logical structure, then the pages will also have a slightly different form of logical structure. You can use the find and find_all methods to get all of the enclosing structure elements of a given type (actually a role) for a page. So for instance if you wanted to get the text contents for all the cells in all the tables on a page, assuming the creator of said page was kind enough to check the "PDF/UA" box, you can do:

for table in page.structure.find_all("Table"):
    print(f"Table at {table.bbox}: {[x.text for x in table.contents]}")

Accessing content

What are these "contents" of which you speak, which were surely created by a Content Creator? Well, you can look at the stream of tokens or mysterious PDF objects:

for token in page.tokens:
    ...
for object in page.contents:
    ...

But that isn't very useful, so you can also access actual textual and graphical objects (if you wanted to, for instance, do layout analysis).

for item in page:
    ...

Because it is quite inefficient to expand, calculate, and copy every possible piece of information, PLAYA gives you some options here. Wherever possible this information can be computed lazily, but this involves some more work on the user's part.

Using multiple CPUs

You may be wondering, what does "Parallel and Lazy" really mean? PLAYA allows you to take advantage of multiple CPUs, which can greatly speed up some operations on large documents. This parallelism currently operates at the page level since this is the most logical way to split up a PDF. To enable it, pass the max_workers argument to playa.open with the number of cores you wish to use (you can also explicitly pass None to use the maximum):

with playa.open(path, max_workers=4) as pdf:
    ...

Now, you can apply a function across the pages of the PDF in parallel using the map method of pdf.pages, for example:

def get_page_size(page: Page) -> Tuple[int, int]:
    return page.width, page.height

page_sizes = pdf.pages.map(get_page_size)

You could also just do this for certain pages by subscripting pdf.pages (this can be a slice, an iterable of int, or a generator expression over int and/or str):

some_page_sizes = pdf.pages[2:5].map(get_page_size)

There are some limitations to this, because it uses multiprocessing. The function you pass to map must be serializable by pickle, which in practice means that an inner function or lambda generally doesn't work. You can get around this in a very Java-like way by passing a callable object that encapsulates the necessary state. If you wish to avoid traumatising readers of your code, then use functools.partial instead:

pdf.pages.map(partial(myfunc, arg1=value1, arg2=value2))

Also, any value returned by your function must also be serializable. There is a bit of magic that enables this to work for PDF objects containing indirect object references, so you should be able to, for instance, get the annotations from every page without any trouble. But if you have your own complex objects that you return you may encounter problems (or slowness).

An important note about coordinate spaces

Wait, what is this "absolute position" of which you speak, and which PLAYA gives you? It's important to understand that there is no definition of "device space" in the PDF standard, and I quote (PDF 1.7 sec 8.3.2.2):

A particular device’s coordinate system is called its device space. The origin of the device space on different devices can fall in different places on the output page; on displays, the origin can vary depending on the window system. Because the paper or other output medium moves through different printers and imagesetters in different directions, the axes of their device spaces may be oriented differently.

You may immediately think of CSS when you hear the phrase "absolute position" and this is exactly what PLAYA gives you as its default device space, specifically:

  • Units are default user space units (1/72 of an inch).
  • (0, 0) is the top-left corner of the page, as defined by its MediaBox after rotation is applied.
  • Coordinates increase from the top-left corner of the page towards the bottom-right corner.

However, for compatibility with pdfminer.six, you can also pass space="page" to playa.open. In this case, (0, 0) is the bottom-left corner of the page as defined by the MediaBox, after rotation, and coordinates increase from the bottom-left corner of the page towards the top-right, as they do in PDF user space.

If you don't care about absolute positioning, you can use space="default", which may be somewhat faster in the future (currently it isn't). In this case, no translation or rotation of the default user space is done (in other words any values of MediaBox or Rotate in the page dictionary are simply ignored).

In general, where the API provides you with coordinates, they are translated to the device space, unless indicated otherwise (for example, sometimes there is a rect property which gives the default user-space rectangle, and a bbox property which gives device space).

Lazy object API

Fundamentally you may just want to know what is where on the page, and PLAYA has you covered there (note that the bbox is normalized, and in the aforementioned interpretation of "device space"):

for obj in page:
    print(f"{obj.object_type} at {obj.bbox}")

    # With space="screen" (the default)
    left, top, right, bottom = obj.bbox
    print(f"  top left is {left, top}")
    print(f"  bottom right is {right, bottom}")

    # With space="page" or space="default"
    left, bottom, right, top = obj.bbox
    print(f"  bottom left is {left, bottom}")
    print(f"  top right is {right, top}")

Another important piece of information (which pdfminer.six does not really handle) is the relationship between layout and logical structure, done using marked content sections:

for obj in page:
    print(f"{obj.object_type} is in marked content section {obj.mcs.mcid}")
    print(f"    which is tag {obj.mcs.tag.name}")
    print(f"    with properties {obj.mcs.tag.props}")
    print(f"    in structure element {obj.parent}")

The mcid here is the same one referenced in elements of the structure tree as shown above (but remember that tag has nothing to do with the structure tree element, because Reasons). Logical structure elements can contain one or more marked content sections, and the parent element can be found using the parent property on content objects or the structure property on pages and Form XObjects, which contains them indexed by mcid.

A marked content section does not necessarily have a mcid or props, but it will always have a tag. Exceptionally, because marked content sections may (unfortunately) be nested, you can find the mcid of the nearest containing marked content section, if one exists, with the mcid property on objects.

PDF also has the concept of "marked content points". PLAYA suports these with objects of object_type == "tag". The tag name and properties are also accessible via the mcs attribute.

You may also wish to know the complete stack of enclosing marked content sections. This is accessible from the mcstack property. Note that though it's called a "stack", it's actually a tuple. This means that it is immutable, and you can check if it has changed from one object to the next using the is operator.

All content objects can also refer back to their containing Page from the page property. This uses weak reference magic in order to avoid causing memory leaks.

Form XObjects

A PDF page may also contain "Form XObjects" which are like tiny embedded PDF documents (they have nothing to do with fillable forms). Simply iterating over a Page will not expand these for you which may be a source of surprise, but you can recurse into them with the flatten method, or with the convenience properties paths, images, texts and glyphs. You can also identify them in iteration because they have object_type == "xobject". The layout objects inside are accessible by iteration, as with pages:

for obj in page:
    if obj.object_type == "xobject":
        for item in obj:
            ...

You can also iterate over them in the page context with page.xobjects (this will also find Form XObjects contained inside other Form XObjects, which is unfortunately a thing):

for xobj in page.xobjects:
    for item in xobj:
        ...

Exceptionally, these have a few more features than the ordinary ContentObject - you can look at their raw stream contents as well as the tokens, and you can also see raw, mysterious PDF objects with contents.

Graphics state

You may also wish to know what color an object is, and other aspects of what PDF refers to as the graphics state, which is accessible through obj.gstate. This is a mutable object, and since there are quite a few parameters in the graphics state, PLAYA does not create a copy of it for every object in the layout. If you wish to reuse these objects, you should call finalize on them, which will freeze the graphics state and any other necessary context, allowing the object to be stored and reused as long as the document exists:

for obj in page:
    print(f"{obj.object_type} at {obj.bbox} is:")
    print(f"    {obj.gstate.scolor} stroking color")
    print(f"    {obj.gstate.ncolor} non-stroking color")
    print(f"    {obj.gstate.dash} dashing style")
    object_of_interest = obj.finalize()
print("interesting object:", playa.asobj(obj))

You should thus be aware that storing content objects to a list, then iterating over that list, will give unpredictable and undefined results! Don't do this:

objs = list(page)  # DO NOT do this

Do this instead:

objs = [obj.finalize() for obj in page]  # DO this instead

Path Objects

Unlike pdfminer.six, PLAYA does not try to interpret paths (as rectangles or whatever) nor does it break them into "subpaths". You just get path segments (it does, however, do some basic normalization to remove redundant segments). You can look at the actual path segments in user space (fast):

for seg in path.raw_segments:
   print(f"segment: {seg}")

Or in PLAYA's "device space" (not so fast):

for seg in path.segments:
   print(f"segment: {seg}")

Text Objects

Since most PDFs consist primarily of text, obviously you may wish to know something about the actual text (or the ActualText, which you can sometimes find in obj.mcs.tag.props["ActualText"]). This is more difficult than it looks, as fundamentally PDF just positions arbitrarily numbered glyphs on a page, and the vast majority of PDFs embed their own fonts, using subsetting to include only the glyphs actually used.

Whereas pdfminer.six would break down text objects into their individual glyphs (which might or might not correspond to characters), this is not always what you want, and moreover it is computationally quite expensive. So PLAYA, by default, does not do this. If you don't need to know the actual bounding box of a text object, then don't access obj.bbox and it won't be computed. If you don't need to know the position of each glyph but simply want the Unicode characters, then just look at obj.chars.

It is also important to understand that obj.chars may or may not correspond to the actual text that a human will read on the page. To actually extract text from a PDF necessarily involves Heuristics or Machine Learning. PLAYA has some simple heuristics to do this, which will work better with tagged and accessible PDFs, but don't expect miracles.

This is because PDFs, especially ones produced by OCR, don't organize text objects in any meaningful fashion, so you will want to actually look at the glyphs. This becomes a matter of iterating over the item, giving you, well, more items, which are the individual glyphs:

for glyph in item:
    print("Glyph has CID {glyph.cid} and Unicode {glyph.text}")

Note that the actual positioning of the glyphs is only done once you actually look at their bbox property, so for instance, if you wish to ignore glyphs with glyph.gstate.render_mode == 3 (which means "invisible") or glyph.gstate.scolor.values == (1.0,) (which means "written in white ink") then you could do that.

For text extraction you really don't care about the bbox, but you probably do care about the origin of each glyph relative to its neighbours. For this reason PLAYA provides you with two convenience properties, origin. and displacement, which are considerably faster to compute than the bbox.

PLAYA doesn't guarantee that text objects come at you in anything other than the order they occur in the file (but it does guarantee that).

An important note about text objects

But wait! What do we mean by "Text Objects"? What is "text", anyway? While philosophers have debated this question for millennia, PDF has a somewhat more precise definition (PDF 1.7, sec 9.4.1):

A PDF text object consists of operators that may show text strings, move the text position, and set text state and certain other parameters ... A text object begins with the BT operator and ends with the ET operator ... specific categories of text-related operators may appear in a text object ...

Except that this is not entirely true! Many other operators may also appear in a text object (PDF 1.7, sec 8.2, table 9):

Text object: Allowed operators:

  • General graphics state
  • Color
  • Text state
  • Text-showing
  • Text-positioning
  • Marked-content

In other words, as usual:

Adobe is Spiderman

(above meme does not apply to PDF 2.0, where you, yes you, can help to eradicate the numerous inconsistencies, contradictions, and ambiguities of the previous standard)

In particular, we care a lot about marked content operators, because of the abovementioned ActualText property. For this reason a TextObject in PLAYA does not and will never correspond to a PDF text object as defined by the BT and ET operators. For the moment, every text-showing operator triggers a new TextObject. It is possible (though unlikely) that in the future, only changes in marked content or graphics state will do this.

Conclusion

As mentioned earlier, if you really just want to do text extraction, there's always pdfplumber, pymupdf, pypdfium2, pikepdf, pypdf, borb, etc, etc, etc.

Acknowledgement

This repository obviously includes code from pdfminer.six. Original license text is included in LICENSE. The license itself has not changed!

For the moment PLAYA is developed and maintained by David Huggins-Daines.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

playa_pdf-1.0.0.tar.gz (8.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

playa_pdf-1.0.0-cp314-cp314t-win_amd64.whl (8.5 MB view details)

Uploaded CPython 3.14tWindows x86-64

playa_pdf-1.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

playa_pdf-1.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.5 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

playa_pdf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

playa_pdf-1.0.0-cp314-cp314t-macosx_10_15_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

playa_pdf-1.0.0-cp314-cp314-win_amd64.whl (8.4 MB view details)

Uploaded CPython 3.14Windows x86-64

playa_pdf-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

playa_pdf-1.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

playa_pdf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

playa_pdf-1.0.0-cp314-cp314-macosx_10_15_x86_64.whl (8.6 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

playa_pdf-1.0.0-cp313-cp313-win_amd64.whl (8.2 MB view details)

Uploaded CPython 3.13Windows x86-64

playa_pdf-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

playa_pdf-1.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

playa_pdf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

playa_pdf-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

playa_pdf-1.0.0-cp312-cp312-win_amd64.whl (8.2 MB view details)

Uploaded CPython 3.12Windows x86-64

playa_pdf-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

playa_pdf-1.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

playa_pdf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

playa_pdf-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

playa_pdf-1.0.0-cp311-cp311-win_amd64.whl (8.2 MB view details)

Uploaded CPython 3.11Windows x86-64

playa_pdf-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

playa_pdf-1.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

playa_pdf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

playa_pdf-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

playa_pdf-1.0.0-cp310-cp310-win_amd64.whl (8.2 MB view details)

Uploaded CPython 3.10Windows x86-64

playa_pdf-1.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

playa_pdf-1.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

playa_pdf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

playa_pdf-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file playa_pdf-1.0.0.tar.gz.

File metadata

  • Download URL: playa_pdf-1.0.0.tar.gz
  • Upload date:
  • Size: 8.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f1781b4fde1ae82d8f316c5330f14f403eeb8ed90f43a2b2161873542dbbd95b
MD5 3c3cae3c91277dbb0868264dc5c936fc
BLAKE2b-256 0c47fad2f5fcdaf9e1a6a0ece1caaf0e4a3752b1dd3912df655a250ab99f79d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0.tar.gz:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-1.0.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 8.5 MB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 0796ca219d08351c34981092b24d69dcd14790ed0796bfb3fa3254919f79cec5
MD5 bfa2347a8a5b273f07574341dd151a4c
BLAKE2b-256 bed5c0ee60f9fc61493ddd771648d4266f0285be97ef5e57ba864b53215df54e

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314t-win_amd64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 24257c66bca0d39e48a1358f46b3d99c7eefe4dd2e298717bb1f6cbc7cde8f71
MD5 3049683faafbd02510bffeb42791282c
BLAKE2b-256 3384c237b18f00e4040ae2c02224a1418dd66ea8dce7a6f29f4bd29d19e053ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 256b2f0ebfd63d0f87e3c32cebec1c8917821598bdc43ac9b9c2d65cb3239da7
MD5 98735b72a53077640b65a457ef20f6b3
BLAKE2b-256 f399d9bd6c490959c418fd52c535a9c01f429dc75e59886bce6a2b5ddab5f00e

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e42ea6989eff79d47c934a1bc70d510cb1ff00a4beef43b0e890d70ba1f566ce
MD5 f83d0cdccc5384e58ba7fd79929a4c70
BLAKE2b-256 d5d345bfaf35e6515a97b5b22f7ea57e1e1a07faa88abac5fc4ad06dc36eea79

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 1a9812c6464f0f054e5e687194bdf456ef47d46e85ddb69ac804b1db945d0276
MD5 f7b540f93e260c499e74b3265f411d39
BLAKE2b-256 eb6d2b7539b071da00e1ce19a03000f5d3d37a505d04e062cc3ba74695443291

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-1.0.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 8.4 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6e7480ddaa7142e352bbf2c9f8fed33b21330582b47eb5b7ecc1c7fd4ff6a25d
MD5 4bc53faff3d12d508a780b66414d0829
BLAKE2b-256 09606805cedbb301c0a69b8aad86bbfe93856474b34a290768d52ace8c07adef

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314-win_amd64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9aad594e4e2b3087aecc5889e3b2b7de28b359dd3767c8ca0d6f02097c33db5f
MD5 8b04355b8a3415718450635b02651d7a
BLAKE2b-256 fc3728390a305140fc1cbe3c631ce10603a2ced44b6a3353071c8d34d7b19f3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee11596168be9d948a27bff9b7561de9d0072735faa41e6155416cc7df8e83b5
MD5 0c94f68ee4328553644f27823c463b8a
BLAKE2b-256 e1ec877be96cf0f9816067a5b2e4bd4f124477acfac4897269e9734836657cf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ca944e65c105c0663ef317ad0ac7d8705a51256c7e765656f747f8f6935a877
MD5 46b4da8254484636699f5eaf5b599758
BLAKE2b-256 aa1be36b4473600dfa88b15ba06d705fdbad2681d009107c7b83ca2125fc4abd

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 4a0f433db35e7f471a993a2a7bd162316bc0381e2279b130a1a7d510122119f4
MD5 ae45a782efcc43ee8b826914d9fba905
BLAKE2b-256 f184cd4d9fdfd032d4a5a01cbf16c9e627fd6150e420ab983f266a78489d334a

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-1.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 8.2 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c56b8b3f3a509bfdabcdea71c3280a3bc7e62d213b84f1d714b87c154fa8de08
MD5 2ecd9eee3ff47d7d056caf104fa735c8
BLAKE2b-256 19f1bcf8a8a33fb1a8a6ec0e98a3920c6845d1a10d4d46c4d4a00998adc2898d

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp313-cp313-win_amd64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2857843747894fa8b1ec777a84c72699d6f0f52d662f3e43677ae25f16a9a7fd
MD5 8f24878f911fdb5a6fd7e625adfe69c5
BLAKE2b-256 7f6911bb26e66f1c535d11dda15b0037580df9e785c1e7b57abc57a73472a394

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 172f05dbd0f6e83973783d868caec08ce80cd39d8cf0535ed6bced85d5ff834a
MD5 1b0e69c022224017a722e0462458cdf2
BLAKE2b-256 f4cda4fbca84956cb3097b9d62d0c43c2582825c94c79cf4d6d3dae770152992

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cabab106e4d74cac9f6f20598966ca2e44a1875be94694e406926e07dff53557
MD5 32969455112ea84f359e84c156a61b64
BLAKE2b-256 80d80fd86279294ca76539b5ba9ed69810e4ddc2e972d1107463b6b04adf546a

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 39df56b2b94e9430c0a03f119a738ff2a3858db8f9b4bcce3f058e842d314cca
MD5 897b4f09da9d3bfd8a5883ea99828849
BLAKE2b-256 6a93821ad60068fa3db60d458639b41a47a687d6eb2d0bfceebf7136f047284e

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-1.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 8.2 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b33d0d45b2fdd98932691f77b83ddf4b2e95f8f9e4e21037e995c86ba56c3e95
MD5 bc3e2f19e899ada553e8fa66cc45107f
BLAKE2b-256 a1f7ca4e20a11f9b6aee5069b15a7348fac950b954a2fafb08e4206186c1dbc1

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 16529f5060cabffee7db9342dfe753c4f742ecd56956ae3932168c996fb436f8
MD5 3a748b5c35354f8fac37b59fbe9900a8
BLAKE2b-256 2dfc9d5354e7fd3701f340402ba40ace6bb3971e87b9afab50bfc50272d4c766

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 53aa39a9782b3059303c4ff2c252210c38d808801c97caef251d1e9318253c02
MD5 72676acca1e9c36529997d74bbc74578
BLAKE2b-256 6fc8b050b29dd293440dd5c7d4493bfdb45753867b85d2438c0e16ababafd89b

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd5ea6cfdca600eb3279261a7a3505999b51cfa2c2f729385964d2b20f30e3dc
MD5 54b9d4fcb51e3a45c5f5c1c1c47a962f
BLAKE2b-256 3e31e1368969c90e3993bb8d0f10c54eeb5c0e5824428008e9bac357dd733eb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c0ae23d64c510543e93a8e06d7cdfc6b3bf35c8e87caf5b9298e9731ddfad176
MD5 29670c935ef2142145d71ead1af5aba3
BLAKE2b-256 d5fb5d612a392d42a12794069a77f26877ed9a9bea6a2ba60bad10096b1d69e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 8.2 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 aaa66f66326e513ab01799409c7b4e94838a4033bdf4bed7b6c0931ddd3e8762
MD5 01b085e9b6d9d591f7ba7f29321b63c6
BLAKE2b-256 f196cd467466c10bfbaccc015eb562c56b632312061a255fef1f869c6710f662

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp311-cp311-win_amd64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e266be8c1967361a703e9322716dd5fd672e656db8db5a25b0923e9ff959798
MD5 e7014c52601bda1e19dd66298fcb31fe
BLAKE2b-256 61a4a74705e6326dff7c95abd577e57a510aa86e15837a3cd02a18928013d5d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bc3d31fc96aac69d47493bda8c93d8be48be4699ce496af5754e02b8e5b1b398
MD5 60c26db9aa2e797be998044123a409eb
BLAKE2b-256 f896a80af24cf813638647d63631f15f1cab0cd9e13d980c2983ac89a6a674e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 425734967bba6fd2aa2d2d59949914d6c4c9e26be9901722e6cde6b63fa16273
MD5 9cd38d061483316c4d60f93e294f7a63
BLAKE2b-256 73553fd772a26fb752a87856c14e21063d90548741eea222217e548cbc1d70d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7ac0f06e84a03a9a5b0e0aaead28048f455db488ca72b74ecad005b79e8d9c6f
MD5 56ce4d7da51cd09dcd9fd92c2a06f566
BLAKE2b-256 1c8f14996153ac6fdcf9addfb54943ce98c2c84cd5b32808b55e2cf467131bbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-1.0.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 8.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for playa_pdf-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8f176272e4f355a6617023cbbffef5f5248fc1b8c9e692747babe08862e083d7
MD5 c67a8327c39305e231555d5f8afa900b
BLAKE2b-256 929c97df33feca40409371e1bd08beb0e81e249c2c389f73f51271c5e6ee5324

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp310-cp310-win_amd64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3849d4197fa8bf3306e36e873d06877f4c0bf898d09b69d1d5874ea12aa4d906
MD5 047bfca1c2fde95b77c5c945dbed1da8
BLAKE2b-256 df410df7a1cf746ab00c65ee35d7f6fbdedfe4c480d8563b0c2fe58a40300d58

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a03d2246ea619104d8c9c782bb445a78f4e29ed83dca1182977d83b2c501bbe0
MD5 c0663e55b2d6b2e95cd23dc896ca120f
BLAKE2b-256 532f64b77ea9e5a2e43d026b302e8d016af59a2117a8f3cdb945c4535579e08e

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4166c1ede268a78a2feb770dce55d89ff331244813448073064523fc920fffe3
MD5 98f0684ff1c87775fa17ae2dcaaf440f
BLAKE2b-256 bbed6f6962190e9258bef3c6fd61dd275c9750f566c39c161412f940c045b0ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file playa_pdf-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8df2e9ca8c2736a7ec6f3e5057b7234b620c3c9dacc1f0d9784bbde1429c8b06
MD5 eb65f3480e54da4094ebb4f2677d69fe
BLAKE2b-256 e03aa3bfc87ae6daf5654c190a6e2b0b29ace92effe7765e0cf5f328feee22a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release.yml on dhdaines/playa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page