Skip to main content

Parallel and LazY Analyzer for PDFs

Project description

Parallel and/or LAzY Analyzer for PDF 🏖️

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 15-50% faster, 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-0.11.0.tar.gz (8.0 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-0.11.0-cp314-cp314t-win_amd64.whl (8.5 MB view details)

Uploaded CPython 3.14tWindows x86-64

playa_pdf-0.11.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.5 MB view details)

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

playa_pdf-0.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.4 MB view details)

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

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.15+ x86-64

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

Uploaded CPython 3.14Windows x86-64

playa_pdf-0.11.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-0.11.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-0.11.0-cp314-cp314-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

playa_pdf-0.11.0-cp314-cp314-macosx_10_15_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

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

Uploaded CPython 3.13Windows x86-64

playa_pdf-0.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (9.1 MB view details)

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

playa_pdf-0.11.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-0.11.0-cp313-cp313-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.13+ x86-64

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

Uploaded CPython 3.12Windows x86-64

playa_pdf-0.11.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-0.11.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-0.11.0-cp312-cp312-macosx_11_0_arm64.whl (8.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.13+ x86-64

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

Uploaded CPython 3.11Windows x86-64

playa_pdf-0.11.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-0.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.0 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.9+ x86-64

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

Uploaded CPython 3.10Windows x86-64

playa_pdf-0.11.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-0.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (9.0 MB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

playa_pdf-0.11.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-0.11.0.tar.gz.

File metadata

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

File hashes

Hashes for playa_pdf-0.11.0.tar.gz
Algorithm Hash digest
SHA256 e9cefcf312a7ccd26b669c16dd9afac079184d4b19d026bd1fe5608067e16214
MD5 4e19ea02d578cfdf90bc4d92c915a66e
BLAKE2b-256 379cfe145ff0de942287c7b18fe4bbe5c1ed354d025993626c1b99dbe4ce6feb

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 5b2369507721ac6e73d82944737519ba1b4f1735adb9ceaa6183f6ac95c838e6
MD5 4571b761342562a56c0dc82c3162844d
BLAKE2b-256 f813cc62ebb61ec472dee11ab65c743d4bd1421acd0ebb07fd0a557c8ff54209

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.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-0.11.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 808f56cdc76b95e7852336581bf63fe3a61cc228c47fd6a4db8993be4a74c403
MD5 36253cf08fd145f055ecf5201eab43ae
BLAKE2b-256 dd27168b06123d41b829d02dee20f5fdaeb833f4de115e3ccdd60bfc8d67ca78

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bcadf0c6b107c0719a7b3dbca7e0f904dc2e934acc6531454a911380cdd30c02
MD5 1261e7ebcf299880d61546ecc5dd822a
BLAKE2b-256 1ec979e8fabf8f23afa0b0009dee8b52915053006487e068113ac5a42756c437

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a04d2b68a6e9a8a5fa4e820152427b2194a77fbf3f3e5656636742c67553d85
MD5 72d3d1f902bb03d2897b649f10c7abc5
BLAKE2b-256 7dc444a4b1fd980cf92bd40ccd1cdcad00b4e79d2cab35686d12d6991d242b7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 530e820f40e507720b9d07528fe6b20d9e5f0aee37d879cea21a4b08ddde2d3b
MD5 2fa753db61c967c16de875f625a524f5
BLAKE2b-256 a2f2d7c2a1ee1d0a01e43950168d44a16c0762077e22458f93765ed9a2e470ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-0.11.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-0.11.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 f8a0619c4d63ecb9ed694fca7d4025d77f4ed139f3078782dbbd0c9a9b1f319a
MD5 7b240767a25a34d635482413dff376f8
BLAKE2b-256 34efb2f14c8f3a80ddeeda0767749907595743e147f9cb0c9c43a9268b335362

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.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-0.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a4cddabc9bd775314c9936b4aac4982949f73cf00c0c9a14069510c1d9ec8612
MD5 9172117fb130874e9d3691add5eb684a
BLAKE2b-256 71442b3b1d0f5eb908caf60cad4a5cf05c584b7d4e9edb435f48bbdf2b904b89

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e123fd12dc0d08f80fea333835342dfd1c8289302fd6b0980f28656a367a8346
MD5 ea8e83f33412e27940d735f2bab7f7d9
BLAKE2b-256 d544f16d963f0b9a9284b070d56d8ef49eb48b147965e045fb25a490d1fa8586

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19568e382f7de34b6eab936ed552855fb92feed0f65c196a57bd1bac6b15cec0
MD5 4dc8493a9c5c3653d4e59823b9616591
BLAKE2b-256 7c8da2d28afb0e558ad192baa4981278373fd65b7cee12d511729d9439b0b4ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 f5d6d48ae204b7b802e242ee30b26a3b65a6ca15b423ac172667a2b882719d38
MD5 394373b9a918f85cc9b0cc2cf043ac05
BLAKE2b-256 752cd711489f6a88d43330f48d88a813a8630d63035b2478a4c03b84697abae2

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-0.11.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-0.11.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 02ae38bfc58c405f3c3c1012de0a21e0abfa1986b85596894d913576fcae944f
MD5 e6699e3380ec2ee8ee0fdfab007e6e2a
BLAKE2b-256 3b9ba239667012323339d4b56d3e88e887908a3bfb02b6f9dc03f9c170428a59

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.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-0.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fffc310e15d8d4c96a7b492d3fe60d3b66c60541ee7c137c319c036a69383496
MD5 727c7b574b137302102b486b069e6a73
BLAKE2b-256 c37757609736389dc7860ab72be0b5b38a3440ab3192e1e5e249b769639f83d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 febe8575221d3e913408cb932ae9ade773fd20028b29c0c17a6fff41ca17ccd1
MD5 ca78d61d27df2d88e47d9651ce150e6d
BLAKE2b-256 74d70b28d46049d6662a2d004d4f8aafd1485f20f38f3fe2a57b97d3ff130e56

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2c01e96eebb912b22b2113c47b57735e86f665e776a4e6c697e6b3e0418c01a
MD5 32d52eb1f3bce52fe3277b0b8fb8535a
BLAKE2b-256 b73779b26974bd87f709d23f102b8fc5cfe061563c5b3145041742d6c0e554c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 82e3c8b4cd49768cc6ec34ea88657e767996729dfab0fa9ab1af11b173247690
MD5 aa0871d27952cd616bb420837884e5e2
BLAKE2b-256 6b2a40ebde58fe741aedade8837a0f9a39ad49862ba345168cefb61db7e89425

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-0.11.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-0.11.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3b3c99b6649bb05173919094242879323112057fed1ee6b3fe16473bc1945796
MD5 98f7ccfe36e4fa78779baf1ec4e34ea6
BLAKE2b-256 4581f7f44d3ee53c17a2b4cdb0b4fdbb101d1aeee438405900eead152ee72aff

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.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-0.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b0b174c2bcb3ea488a1d34b5ed2146a724bd77b1566caa457525c0d8333449d3
MD5 4d2d114d05db9b3e1ff29e37993aa912
BLAKE2b-256 cea7da3dc10a4cb6cbcdd365a23a6186a5ebb12a1f4309bec1338c9930d82a5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 90a0a425c16c67f6e64525c3b4781ab654ad5fffbadd49487586944dab9b784d
MD5 8509dfbe5dfe39b11c909278e2db3547
BLAKE2b-256 f7329dd0a61280f4859da69798d72f5b9f9d385507334d4dfb76581ef5934a46

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a43ef7a3ceee4ba327b0af98014852007b74dd4a7b3caad195190d775e56a520
MD5 255ed5a82b292c767f2d2bf0d775695f
BLAKE2b-256 7e86e08fea73587aeb9c0d233b0f23f7a6e5ab57f79b15f1dc157681da4d9c43

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c17abba124d4cf54005ffa4254dbe5f9420216a707c7897bda9d7bf68ed7115f
MD5 d84db0598b87ec5e1d992e08f5a968d1
BLAKE2b-256 4a25b30d402403e1e16545d2fa48f02d32c6b7519a952b62cf7795da2cb3fd29

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-0.11.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-0.11.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2c3ad4290e9256ab950c7990f7f23ebaf2e60a2da10ec9056664966ba3585359
MD5 fb9e7c18c1cf6ecd8048e42c4e84e5a5
BLAKE2b-256 faab622cf3c94e42608ccc379f8a9fb9736515eca52014e816637e7dff60f5d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.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-0.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 06076d2c8de9e710fb3e689ad2ccb0c33a8f57c81c63c2bf0773c8b53429a641
MD5 d925da1d54c8c9ace4141e28ad0e124b
BLAKE2b-256 b1deee509e979edaa3385421e7408ff094fd0fe28e1ac7e51c989eeb6dad3182

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 54665fca79374afd8282054edda486335cf55507aa3b6e2c426ab644adeb7915
MD5 a24dddbbc1ad4cdc1b0de3e387bc0f88
BLAKE2b-256 226377f242afc3d48eb3b821185017e7942868f382ae57a570d763e58eb30162

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 339d2c33331071e63992d39c993a084a693d27bf04f9d56a33f8c7b0e956121e
MD5 490efcbb204c96db38ad00fa8c8d1138
BLAKE2b-256 fbb9ebd0b463b712f18c96a27fd52c3aa3bf5315438175a185a878a4472422e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 be73787e1e9b449e5fde5ca7bdc9212f13b995fe5be03f8b361cbe44bde81b09
MD5 8e8646f1839a94b1b51b448b868e10e7
BLAKE2b-256 e5b63b3235dc3f2771696cef1c27f39f06b3d46982808871adde5c10f27f8a39

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: playa_pdf-0.11.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-0.11.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1c2653659720ccfdb05df160136fb364091c10424d0f82415e3194bcf94657ee
MD5 dbff37a7240bcc8a6016b9bd93b4ac6b
BLAKE2b-256 9a65c9cead9cf770e71b0129a327c1f849c48080a818e24636a989d56ed05122

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.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-0.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9d42119d460d60ca20115d858a24e00747976d9509cc26e908aaff8623422865
MD5 83e4b5ccefe957f87ba361812970d69f
BLAKE2b-256 b0a4a040fd5df30c03b5ca340b1b2615b6d4cb46d79099d1f5aeb00995fbfa73

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e13f02d37f2213eb530d4829a26ad609182dee2bd28bee14db2f0dc92bc7308
MD5 d699644e498d20eb4d8257cef49b4f3e
BLAKE2b-256 994b403184a299d0e33626c3030b4fd426f08b023047b84f1514930f1a8ddf25

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c1fa981e6669c4e26dfc1b6ed28639716ef56735d7f991eea76f457918afb2f
MD5 50850c5384395428d0be7844004cc9cb
BLAKE2b-256 208494f88b061a5a095d4c179722365eb397f98bd3dddfa9e026425eb3c375d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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-0.11.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for playa_pdf-0.11.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 16d2affcfcf82ca64152a20ef39ee08637c6824cd0dd8575c1ee44994119eee7
MD5 da74c13987d0ca2ac276eebcdf544f6b
BLAKE2b-256 dcd1463b78fad187ec28cc7275b3dee663df7d15f76909f940772cd54fc024d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.11.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