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.10.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.10.0-cp314-cp314t-win_amd64.whl (8.0 MB view details)

Uploaded CPython 3.14tWindows x86-64

playa_pdf-0.10.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.4 MB view details)

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

playa_pdf-0.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (8.4 MB view details)

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

playa_pdf-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

playa_pdf-0.10.0-cp314-cp314t-macosx_10_15_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

playa_pdf-0.10.0-cp314-cp314-win_amd64.whl (7.9 MB view details)

Uploaded CPython 3.14Windows x86-64

playa_pdf-0.10.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.3 MB view details)

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

playa_pdf-0.10.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (8.2 MB view details)

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

playa_pdf-0.10.0-cp314-cp314-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

playa_pdf-0.10.0-cp314-cp314-macosx_10_15_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

playa_pdf-0.10.0-cp313-cp313-win_amd64.whl (7.7 MB view details)

Uploaded CPython 3.13Windows x86-64

playa_pdf-0.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.3 MB view details)

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

playa_pdf-0.10.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (8.2 MB view details)

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

playa_pdf-0.10.0-cp313-cp313-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

playa_pdf-0.10.0-cp313-cp313-macosx_10_13_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

playa_pdf-0.10.0-cp312-cp312-win_amd64.whl (7.7 MB view details)

Uploaded CPython 3.12Windows x86-64

playa_pdf-0.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.3 MB view details)

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

playa_pdf-0.10.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (8.2 MB view details)

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

playa_pdf-0.10.0-cp312-cp312-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

playa_pdf-0.10.0-cp312-cp312-macosx_10_13_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

playa_pdf-0.10.0-cp311-cp311-win_amd64.whl (7.7 MB view details)

Uploaded CPython 3.11Windows x86-64

playa_pdf-0.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.3 MB view details)

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

playa_pdf-0.10.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (8.2 MB view details)

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

playa_pdf-0.10.0-cp311-cp311-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

playa_pdf-0.10.0-cp311-cp311-macosx_10_9_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

playa_pdf-0.10.0-cp310-cp310-win_amd64.whl (7.7 MB view details)

Uploaded CPython 3.10Windows x86-64

playa_pdf-0.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.2 MB view details)

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

playa_pdf-0.10.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (8.2 MB view details)

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

playa_pdf-0.10.0-cp310-cp310-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

playa_pdf-0.10.0-cp310-cp310-macosx_10_9_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: playa_pdf-0.10.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.10.0.tar.gz
Algorithm Hash digest
SHA256 2824495a3166b8b84c752d9dceb4e67b7234865f16cc030e2a5a818a8d438c68
MD5 7023f7a623e8e718d38e67e44c620801
BLAKE2b-256 c1278aeba4777451224c776e7ac05a63b3a0073399bc7ca7eb2eb808ca5c1996

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 df27b5e09c74472b20265d0b7880715e451e5022167f55f5cfef2141e6a1649e
MD5 b445a703447fc69cdb960ecbc79daf29
BLAKE2b-256 c2cf95bb7a4db326d4717deadedb78f71864a850b545733c276c41b3fe4f6199

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.10.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.10.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.10.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ae9a14e36a3c15b1dc70a153e31b9dcb737145111a87137d828a1e56c2f89f8a
MD5 79fef3e461c365eec5235fcf0b5c61a1
BLAKE2b-256 db82db251885adda244052797a5047eda9e573eae602371c8f7b34254042f1b4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3c11dbb3b793e21ab33c55089c3df89c106592b250f34fbb98e2f6c1e2353303
MD5 4313a0ce97b572cf33df7cb44a2c350f
BLAKE2b-256 3bc6a06a244ce720894be2b34f6c70f1f3400e3ae96068c6e898fb0e260facfc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ceedc2871e769b09638c9efa084b0dd868ad00d578363045916d336539633f85
MD5 455a2abb538ef9b1fd0fc888f6a30747
BLAKE2b-256 953ae58606aec490543535831a200dafd4325754a721318c3f1be9e8fce0b43b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 07a1fbf28a428c075b5c32a6bf0a79f25c56fa02a65db8d8d19b9e6d3b83c825
MD5 1a033d8519738c265284aaa9a166d9ba
BLAKE2b-256 eec5020b78899a92044753577f24c849420352af62b69d9a7be5df7c5285f2c9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: playa_pdf-0.10.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 7.9 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.10.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 910e8b46874782fb0b326d0be429bef3ed5d9d3ca96344d349437462074c58b7
MD5 bb1d2916e18dbeb7e14046fb65cbef33
BLAKE2b-256 0b15a8f755c5409d6d86b323c8eb09fa6bdbc1c433149b577c1a50fa1d463c32

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.10.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.10.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.10.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cacb73f3d26928a795babf4e1e62e2b3f93df3158a07b2657b7582c9e4dc48db
MD5 5b4c60603ee2d45f5c2c75b9e7016a21
BLAKE2b-256 1ab75a48a154596d2aa9648244dca4b15b6762469962c3e77125fb955cdc3934

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e88c665ea730bd880f633404fc8dc8d1d650eca1b94bb8ef277f2ad2005d5935
MD5 a6cc641a41c43df10c7b458da9a01bb3
BLAKE2b-256 b69811ccf84160402d19b8f50b0f1c2d1dcf5ace9d2c46391c847dd053e50f5f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 208aa9c4d0d7e8b19aed9fd268de6e59feb0d8bfe33d703a64fbe65996b32034
MD5 0e00cd385165e5c4e83e9c0713030425
BLAKE2b-256 48e7c284d11b3c4efbd401714dd8a099071432a4c412f61c896b3d1677e7d49b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 1236060591050fb7b592ec624c9d0511a4334dadb2337856e1d885904151a6bc
MD5 0cd68a1395e70179f3536e1478a725b8
BLAKE2b-256 dabb81a42c75100f9a6adb02499b46bbdd8e6656791783884de20028dd770edf

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: playa_pdf-0.10.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 7.7 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.10.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 95cb2788d16a0fd81346f1da480084ce63d589abe334fc3e11a88fec7a90aca9
MD5 d5667867633dafaaa5aa6bce9d2b9e95
BLAKE2b-256 ed6533528d65a8f6bae52d4495050f12c66361e6ed023921eaca9e7a5a20097d

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.10.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.10.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.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 24b53abcf4376e283281f21b52b8a301a0103c25b4b579d7ebd1cf30f61c7e3e
MD5 6a79deac70c8fb1bab3162556897ee7b
BLAKE2b-256 1de3171b40f5bbd12bbb3c820f0ea6dadde9afff6a7239fb45ad11469ce1a1ff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b291409417a3a09f36b2e6fc175d0e4fb15b9821fb1771c9eb41dfa4acb0110b
MD5 871bc882a091e33853046dfb0c1f4424
BLAKE2b-256 b67860cde9215cca272f926d45d2e5ba03ce9f519da4d755e4a828898821a43a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ba06399bc60df4460c6d9fe2020e96473b8f03bb07bde029918acda09a9f07b
MD5 e8aad1ee217890de91534547f3e56e54
BLAKE2b-256 6eccf8266ba5fbd0d4e3bb82ee2b41ed7fe740833e8f10307f00aec28a0db946

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2af6d6348fcdf0aa3b4b726dda606336bac1b430321e4817b23c98e06becdb57
MD5 fefb72825ce3478c9e4b1cfe6ad3c708
BLAKE2b-256 7f9fd658b7397f62d98f76b57828a60f43aa6ca4a206a743e790e7dcdf6f4770

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: playa_pdf-0.10.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 7.7 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.10.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 479e6f2cc72ab3a942822b82ae28c77b35e3167115ca7bd28c6176b83182304d
MD5 10d2ac923128778da148eb7d44e45663
BLAKE2b-256 ca4da87f144eb3f9cf60055dd87215eaa1a046a153417294af875c8af972a66a

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.10.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.10.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.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 92113e899f113ab10606971536cd4a330ea7b244c5764a91f6e24fd0447ef05b
MD5 2c21c3b70f4c9f4b12bc65c6138c8848
BLAKE2b-256 b4827b1e5773e0f72be7d82b54c268b18087913622f417b1f28c2757b35ce6c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5b8babd76899790099f07eacd1b8e033c5f6439b4d0685e75672870f841ba26c
MD5 ed7368ffd4db37ec2583b6ddc2ee0519
BLAKE2b-256 0340b4622b2b0375923de7739b47003a8aad3ef28d8b6210ba04338f3b49161a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5045d2a515dfa02a1fc869858bd6700d4016b19f41b1eccf3d0d6d877d0e2ad5
MD5 3ad4948a1ee9cfb1fb5b2700c9933ed7
BLAKE2b-256 8cf379e0ca395e9fc83c541cc32af3fa0ed23a9a27aa1075ef80aaaebef31bf2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2c7658e04927e3a9e0328d35dc928f605499da6c1432c29338230bb8a78fd65b
MD5 4f59d5584e01bd935b83acb2fcdc7e36
BLAKE2b-256 a2569120ddfcee67e230edd3fe3b154e4ffe74d628a9def1513ba850f21dc437

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: playa_pdf-0.10.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 7.7 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.10.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f59355fe54c50149ac50ccbd821f1a83d50c78d95e89fbbda114484946b81daf
MD5 09348f3823a0eca5ca7bdc81134f8b3d
BLAKE2b-256 e9e0d1c9d66829e07fbcf14f4ff3151e17b120101b1c0fc827c0a72a39ac5876

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.10.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.10.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.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebd57833243a8a644c20a9c42a191d2939ad7a34c762c09535fb07d69c0898d9
MD5 763d36d067e0baaebdb89b7a47340fdd
BLAKE2b-256 23a57423484a429540ecc6531e096b9c4af0b6e24fdbd2e29ba55c7f1677c25b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 40059e799afdb7e56d885c7da6999b3565e278d212516694fe21d9a1e1b9bed1
MD5 fb4097c9ab71d3e91ef499caeb0ce0cb
BLAKE2b-256 a7110ab7cce0f1a2dec5c50f8fdc556a41e020c220aaeba576f5c5052f71a860

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70dae64146cbdacfce70c13c73d3fc92c1cf8fd93818fb7ef936074d68d3f5a7
MD5 70a803c468a5e96e3d2bb28a8e96f2ea
BLAKE2b-256 5d4c652ccc858499a0925c3cb4685675d1265d381484d231305ed801791d5c26

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 731ed17e351d4b0765aee7919aa580098953a5aadb8fd1170b29cb89a9d2f4da
MD5 1fba779756b5ec73f54dc108fdc43d04
BLAKE2b-256 9b1728c7ce59e28602fb71e99f18b5939735e244fde18ebdc4d2c6868389c48f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: playa_pdf-0.10.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 7.7 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.10.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 143f38cb9f57bfbb9de1481a7575c1219375e418d359dd79b4fd7c8de5066ba9
MD5 bf8d7dd972879692db02b400669ee509
BLAKE2b-256 b5f20cbf98eb139dc3d802a34e7636863e058e6bcaa7216b8cc523d5684ddc59

See more details on using hashes here.

Provenance

The following attestation bundles were made for playa_pdf-0.10.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.10.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.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0ad1da54dce45c15534299a75a8cd01e91d72b9db9e0b732be39943454d53704
MD5 abd1e1165818fc7c61052423b38de6f7
BLAKE2b-256 ec626c76b4062c8d9f26e9dd74128f92cf53a92a07eb8dc764fa8f283c56020c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b5bc6e9d1d5cbcea1b20eb679df02809b488cd5f1c45bbca6befcb0437a2b5a3
MD5 29f2d83c85d7409682ef9a53e3bd7f1f
BLAKE2b-256 854870044c7ab0a888f2b2824f7715863fb32aef78600fd2ef97db59b1f564e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2c0156667ee6c41ed874a7bbca5150c07ba28a750d705e3f06cf53356088e1e
MD5 8a3c3fb4e4489bdc3914f3c443e98a56
BLAKE2b-256 77e00f9212dc9bec0ebfd796f41ba986a9259562660d210b6e478332f038efae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for playa_pdf-0.10.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c8fd72bbf51d8cedc4d5adeafffeeb32bc15de101baddf6414009c667df82651
MD5 5a9ae7608addb6b72da39a5cb4646940
BLAKE2b-256 7bff45043ad71bf08b48a069ec783e94fc6620c47582b95c2e327cf92a6fee9d

See more details on using hashes here.

Provenance

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