Skip to main content

Acquisition is a mechanism that allows objects to obtain attributes from the containment hierarchy they're in.

Project description

This package implements “environmental acquisiton” for Python, as proposed in the OOPSLA96 paper by Joseph Gil and David H. Lorenz:

We propose a new programming paradigm, environmental acquisition in the context of object aggregation, in which objects acquire behaviour from their current containers at runtime. The key idea is that the behaviour of a component may depend upon its enclosing composite(s). In particular, we propose a form of feature sharing in which an object “inherits” features from the classes of objects in its environment. By examining the declaration of classes, it is possible to determine which kinds of classes may contain a component, and which components must be contained in a given kind of composite. These relationships are the basis for language constructs that supports acquisition.

Introductory Example

Zope implements acquisition with “Extension Class” mix-in classes. To use acquisition your classes must inherit from an acquisition base class. For example:

>>> import ExtensionClass, Acquisition

>>> class C(ExtensionClass.Base):
...     color = 'red'

>>> class A(Acquisition.Implicit):
...     def report(self):
...         print(self.color)
...
>>> a = A()
>>> c = C()
>>> c.a = a

>>> c.a.report()
red

>>> d = C()
>>> d.color = 'green'
>>> d.a = a

>>> d.a.report()
green

>>> try:
...     a.report()
... except AttributeError:
...     pass
... else:
...     raise AssertionError('AttributeError not raised.')

The class A inherits acquisition behavior from Acquisition.Implicit. The object, a, “has” the color of objects c and d when it is accessed through them, but it has no color by itself. The object a obtains attributes from its environment, where its environment is defined by the access path used to reach a.

Acquisition Wrappers

When an object that supports acquisition is accessed through an extension class instance, a special object, called an acquisition wrapper, is returned. In the example above, the expression c.a returns an acquisition wrapper that contains references to both c and a. It is this wrapper that performs attribute lookup in c when an attribute cannot be found in a.

Acquisition wrappers provide access to the wrapped objects through the attributes aq_parent, aq_self, aq_base. Continue the example from above:

>>> c.a.aq_parent is c
True
>>> c.a.aq_self is a
True

Explicit and Implicit Acquisition

Two styles of acquisition are supported: implicit and explicit acquisition.

Implicit acquisition

Implicit acquisition is so named because it searches for attributes from the environment automatically whenever an attribute cannot be obtained directly from an object or through inheritance.

An attribute can be implicitly acquired if its name does not begin with an underscore.

To support implicit acquisition, your class should inherit from the mix-in class Acquisition.Implicit.

Explicit Acquisition

When explicit acquisition is used, attributes are not automatically obtained from the environment. Instead, the method aq_acquire must be used. For example:

>>> print(c.a.aq_acquire('color'))
red

To support explicit acquisition, your class should inherit from the mix-in class Acquisition.Explicit.

Controlling Acquisition

A class (or instance) can provide attribute by attribute control over acquisition. You should subclass from Acquisition.Explicit, and set all attributes that should be acquired to the special value Acquisition.Acquired. Setting an attribute to this value also allows inherited attributes to be overridden with acquired ones. For example:

>>> class C(Acquisition.Explicit):
...     id = 1
...     secret = 2
...     color = Acquisition.Acquired
...     __roles__ = Acquisition.Acquired

The only attributes that are automatically acquired from containing objects are color, and __roles__. Note that the __roles__ attribute is acquired even though its name begins with an underscore. In fact, the special Acquisition.Acquired value can be used in Acquisition.Implicit objects to implicitly acquire selected objects that smell like private objects.

Sometimes, you want to dynamically make an implicitly acquiring object acquire explicitly. You can do this by getting the object’s aq_explicit attribute. This attribute provides the object with an explicit wrapper that replaces the original implicit wrapper.

Filtered Acquisition

The acquisition method, aq_acquire, accepts two optional arguments. The first of the additional arguments is a “filtering” function that is used when considering whether to acquire an object. The second of the additional arguments is an object that is passed as extra data when calling the filtering function and which defaults to None. The filter function is called with five arguments:

  • The object that the aq_acquire method was called on,

  • The object where an object was found,

  • The name of the object, as passed to aq_acquire,

  • The object found, and

  • The extra data passed to aq_acquire.

If the filter returns a true object that the object found is returned, otherwise, the acquisition search continues.

Here’s an example:

>>> from Acquisition import Explicit

>>> class HandyForTesting(object):
...     def __init__(self, name):
...         self.name = name
...     def __str__(self):
...         return "%s(%s)" % (self.name, self.__class__.__name__)
...     __repr__=__str__
...
>>> class E(Explicit, HandyForTesting): pass
...
>>> class Nice(HandyForTesting):
...     isNice = 1
...     def __str__(self):
...         return HandyForTesting.__str__(self)+' and I am nice!'
...     __repr__ = __str__
...
>>> a = E('a')
>>> a.b = E('b')
>>> a.b.c = E('c')
>>> a.p = Nice('spam')
>>> a.b.p = E('p')

>>> def find_nice(self, ancestor, name, object, extra):
...     return hasattr(object,'isNice') and object.isNice

>>> print(a.b.c.aq_acquire('p', find_nice))
spam(Nice) and I am nice!

The filtered acquisition in the last line skips over the first attribute it finds with the name p, because the attribute doesn’t satisfy the condition given in the filter.

Filtered acquisition is rarely used in Zope.

Acquiring from Context

Normally acquisition allows objects to acquire data from their containers. However an object can acquire from objects that aren’t its containers.

Most of the examples we’ve seen so far show establishing of an acquisition context using getattr semantics. For example, a.b is a reference to b in the context of a.

You can also manually set acquisition context using the __of__ method. For example:

>>> from Acquisition import Implicit
>>> class C(Implicit): pass
...
>>> a = C()
>>> b = C()
>>> a.color = "red"
>>> print(b.__of__(a).color)
red

In this case, a does not contain b, but it is put in b’s context using the __of__ method.

Here’s another subtler example that shows how you can construct an acquisition context that includes non-container objects:

>>> from Acquisition import Implicit

>>> class C(Implicit):
...     def __init__(self, name):
...         self.name = name

>>> a = C("a")
>>> a.b = C("b")
>>> a.b.color = "red"
>>> a.x = C("x")

>>> print(a.b.x.color)
red

Even though b does not contain x, x can acquire the color attribute from b. This works because in this case, x is accessed in the context of b even though it is not contained by b.

Here acquisition context is defined by the objects used to access another object.

Containment Before Context

If in the example above suppose both a and b have an color attribute:

>>> a = C("a")
>>> a.color = "green"
>>> a.b = C("b")
>>> a.b.color = "red"
>>> a.x = C("x")

>>> print(a.b.x.color)
green

Why does a.b.x.color acquire color from a and not from b? The answer is that an object acquires from its containers before non-containers in its context.

To see why consider this example in terms of expressions using the __of__ method:

a.x -> x.__of__(a)

a.b -> b.__of__(a)

a.b.x -> x.__of__(a).__of__(b.__of__(a))

Keep in mind that attribute lookup in a wrapper is done by trying to look up the attribute in the wrapped object first and then in the parent object. So in the expressions above proceeds from left to right.

The upshot of these rules is that attributes are looked up by containment before context.

This rule holds true also for more complex examples. For example, a.b.c.d.e.f.g.attribute would search for attribute in g and all its containers first. (Containers are searched in order from the innermost parent to the outermost container.) If the attribute is not found in g or any of its containers, then the search moves to f and all its containers, and so on.

Additional Attributes and Methods

You can use the special method aq_inner to access an object wrapped only by containment. So in the example above, a.b.x.aq_inner is equivalent to a.x.

You can find out the acquisition context of an object using the aq_chain method like so:

>>> [obj.name for obj in a.b.x.aq_chain]
['x', 'b', 'a']

You can find out if an object is in the containment context of another object using the aq_inContextOf method. For example:

>>> a.b.aq_inContextOf(a)
True

Acquisition Module Functions

In addition to using acquisition attributes and methods directly on objects you can use similar functions defined in the Acquisition module. These functions have the advantage that you don’t need to check to make sure that the object has the method or attribute before calling it.

aq_acquire(object, name [, filter, extra, explicit, default, containment])

Acquires an object with the given name.

This function can be used to explictly acquire when using explicit acquisition and to acquire names that wouldn’t normally be acquired.

The function accepts a number of optional arguments:

filter

A callable filter object that is used to decide if an object should be acquired.

The filter is called with five arguments:

  • The object that the aq_acquire method was called on,

  • The object where an object was found,

  • The name of the object, as passed to aq_acquire,

  • The object found, and

  • The extra argument passed to aq_acquire.

If the filter returns a true object that the object found is returned, otherwise, the acquisition search continues.

extra

Extra data to be passed as the last argument to the filter.

explicit

A flag (boolean value) indicating whether explicit acquisition should be used. The default value is true. If the flag is true, then acquisition will proceed regardless of whether wrappers encountered in the search of the acquisition hierarchy are explicit or implicit wrappers. If the flag is false, then parents of explicit wrappers are not searched.

This argument is useful if you want to apply a filter without overriding explicit wrappers.

default

A default value to return if no value can be acquired.

containment

A flag indicating whether the search should be limited to the containment hierarchy.

In addition, arguments can be provided as keywords.

aq_base(object)

Return the object with all wrapping removed.

aq_chain(object [, containment])

Return a list containing the object and it’s acquisition parents. The optional argument, containment, controls whether the containment or access hierarchy is used.

aq_get(object, name [, default, containment])

Acquire an attribute, name. A default value can be provided, as can a flag that limits search to the containment hierarchy.

aq_inner(object)

Return the object with all but the innermost layer of wrapping removed.

aq_parent(object)

Return the acquisition parent of the object or None if the object is unwrapped.

aq_self(object)

Return the object with one layer of wrapping removed, unless the object is unwrapped, in which case the object is returned.

In most cases it is more convenient to use these module functions instead of the acquisition attributes and methods directly.

Acquisition and Methods

Python methods of objects that support acquisition can use acquired attributes. When a Python method is called on an object that is wrapped by an acquisition wrapper, the wrapper is passed to the method as the first argument. This rule also applies to user-defined method types and to C methods defined in pure mix-in classes.

Unfortunately, C methods defined in extension base classes that define their own data structures, cannot use aquired attributes at this time. This is because wrapper objects do not conform to the data structures expected by these methods. In practice, you will seldom find this a problem.

Conclusion

Acquisition provides a powerful way to dynamically share information between objects. Zope uses acquisition for a number of its key features including security, object publishing, and DTML variable lookup. Acquisition also provides an elegant solution to the problem of circular references for many classes of problems. While acquisition is powerful, you should take care when using acquisition in your applications. The details can get complex, especially with the differences between acquiring from context and acquiring from containment.

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

acquisition-6.2.tar.gz (60.4 kB view details)

Uploaded Source

Built Distributions

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

acquisition-6.2-cp314-cp314-win_amd64.whl (63.6 kB view details)

Uploaded CPython 3.14Windows x86-64

acquisition-6.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (119.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

acquisition-6.2-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl (119.0 kB view details)

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

acquisition-6.2-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl (111.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

acquisition-6.2-cp314-cp314-macosx_11_0_arm64.whl (60.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

acquisition-6.2-cp314-cp314-macosx_10_9_x86_64.whl (61.1 kB view details)

Uploaded CPython 3.14macOS 10.9+ x86-64

acquisition-6.2-cp313-cp313-win_amd64.whl (63.2 kB view details)

Uploaded CPython 3.13Windows x86-64

acquisition-6.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (119.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

acquisition-6.2-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl (119.6 kB view details)

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

acquisition-6.2-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl (111.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

acquisition-6.2-cp313-cp313-macosx_11_0_arm64.whl (60.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

acquisition-6.2-cp313-cp313-macosx_10_9_x86_64.whl (60.9 kB view details)

Uploaded CPython 3.13macOS 10.9+ x86-64

acquisition-6.2-cp312-cp312-win_amd64.whl (63.1 kB view details)

Uploaded CPython 3.12Windows x86-64

acquisition-6.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (119.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

acquisition-6.2-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl (119.6 kB view details)

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

acquisition-6.2-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl (111.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

acquisition-6.2-cp312-cp312-macosx_11_0_arm64.whl (60.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

acquisition-6.2-cp312-cp312-macosx_10_9_x86_64.whl (60.9 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

acquisition-6.2-cp311-cp311-win_amd64.whl (63.1 kB view details)

Uploaded CPython 3.11Windows x86-64

acquisition-6.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (119.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

acquisition-6.2-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl (120.2 kB view details)

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

acquisition-6.2-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl (113.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

acquisition-6.2-cp311-cp311-macosx_11_0_arm64.whl (60.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

acquisition-6.2-cp311-cp311-macosx_10_9_x86_64.whl (60.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

acquisition-6.2-cp310-cp310-win_amd64.whl (62.9 kB view details)

Uploaded CPython 3.10Windows x86-64

acquisition-6.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (116.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

acquisition-6.2-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl (116.7 kB view details)

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

acquisition-6.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl (109.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

acquisition-6.2-cp310-cp310-macosx_11_0_arm64.whl (60.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

acquisition-6.2-cp310-cp310-macosx_10_9_x86_64.whl (60.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file acquisition-6.2.tar.gz.

File metadata

  • Download URL: acquisition-6.2.tar.gz
  • Upload date:
  • Size: 60.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for acquisition-6.2.tar.gz
Algorithm Hash digest
SHA256 e06410ff0bb982a0d422cc7dab17d8b6631bfe672e55934f2c62e5da21e0d773
MD5 ed131ba44344d4a3806702a6b35a3622
BLAKE2b-256 51df612b7136e6d7bb106000fdf93a14ffdd602b2054f54e07082992225035ea

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: acquisition-6.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 63.6 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for acquisition-6.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d6b608f1df1769e47e1e9bb4397b9b2696a939dcc29e5ec939528cca420d15b9
MD5 7ce23b82fe9e8581227fa81587be5769
BLAKE2b-256 175f4d16333520e99db98d68c4fde28490de43dc60833a0f9b73a29eea499e15

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 9d387e47ac87e211872a0c5f3a308f5bfa2ae5f657365d556957a3dbfcd13ed7
MD5 c5a8c5a82e47f2d2d247617d253356b8
BLAKE2b-256 b23665f0732c306320dec33a6c3cbe1e33dbc1feed124f4a5f6ff7c0fd220acd

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 88f0b3dad6b694c10e25e0b9f2e5f6e2fab1113ea56d5cec731ec8878f8ac2bf
MD5 1e027669cf2d9b08031f36d1d123cb79
BLAKE2b-256 dc8532abe82df83859e4b3ce75ed053a649ee782332464132c4855fdf1b479e2

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 1dac875abafb9bb076f7362dda870f8e5b3c584abc1abf950c78f8acbdd22335
MD5 5c4fc181d05dcc32fab3fa7444c9583f
BLAKE2b-256 4b39c3accc10f547d048fbe9c7d2070340b653d1eaf54ab5147a33df20e99222

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 988691921dc41f562fc4179298483b311048211eab5a502701183a8acf839247
MD5 e8d85a647605f05d2d613990f5ab0c03
BLAKE2b-256 698a0203aa8e57f76b1265be06ecf1dc7cbed63e7463615e2bdab639a224666f

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp314-cp314-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp314-cp314-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 eb04d2b44d6f5a47cd3ac49837b11f61ca959e64c737a50b37e21ab8f655faff
MD5 c7f58cb8bea5930ef0c553c45cd08235
BLAKE2b-256 bee9e16fa7622042b3906e25631af0d4d66f36b43ef8d310466b551a360b90f1

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: acquisition-6.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 63.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for acquisition-6.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c8c1c90c31923b9c079045e80f3b41f7c1a9c083ab0116610066783d35699858
MD5 6b80df9b46ea5ada0c05f4478eb63ebe
BLAKE2b-256 6cbf8637bc5457ad72b7cc6ab13606cb5eb15522bbecd89071a660bf9b6b146f

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 b7a7e5935cf3076ea3fa75e766519080d6407a980531593b6376fda50d51d49f
MD5 9ed98e2c1c865fffe810d3bf186aeb6e
BLAKE2b-256 8f4fff2ddaf802a081db3f043728508c5397531f07b473e7062a1490507cdcf5

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 793dd58595f60105261486e815da5bf376f618c387ef2c40eb85ff4f49ebbfe5
MD5 02813735421fb57eabc049aa2eb03bd9
BLAKE2b-256 3141678f44dea9d5962e9d59f152cdf6194add0f132c7c5d0a5ad69d7a37183c

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 338a99ce5996f648eb57feae85bf446cfc190167a5c90563015bed6565ce45dc
MD5 e68f9bab26fb5a61b91342ab62e1409a
BLAKE2b-256 86bb6ddd82849b16100fffa21bf01d680c554534b28a76ea6893342dd0cfcbbd

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b56d0e1c5ccfcf05118a925f1d2eb41dcf9a2c4e99e53fd27355acc98612ec5
MD5 58c558111ddcffacbeacdabdc941989e
BLAKE2b-256 d32faa7fc33e207b9e82fb6c276c794d16268425c931e0f552a6f21a1533e615

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp313-cp313-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp313-cp313-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f8a0f4114521828092cd19bc02aa80e3cd273b762e035f4667e89aa443282f1a
MD5 50ed9a01311918e8f10e389380ecff83
BLAKE2b-256 57bb455c498e2475ce64dbf976bd947d3c969cb6ab02ee9c3918be7f39bfed58

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: acquisition-6.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 63.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for acquisition-6.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3ecfc0eff0128c0969b38f7c04cc4a5fab39af211651bfb32a2d646a4e7d7c16
MD5 62ef49a5a3910eaa9376c60ad28de667
BLAKE2b-256 ab8615b58193b2d689217d10f7fe65f1cf48eab5ee4c01698465800e6869631c

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 f3d672a44bea7f3578909d583bfb7966bdb1f044ef99dd07144a18689db9979b
MD5 5d6d3263efb872d6321035d6140cf600
BLAKE2b-256 f6ae884a448623e606ef734d08ca6b483ebdce94384fc7fe2a5107f0d30f2f8e

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 f18b5b63f7b8e497ce14e92b1ec16cf6ffba4d59f4607112db8ae4e785269d91
MD5 447813a6c3a6f86334d6360ff00640a7
BLAKE2b-256 87afaf2f3e8c5d783c7b86b4db2b7a35aa98ddf89408158399793a71de87cdd3

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 82d4c76a68be64badd1efda5e94f29265c869da06ebaa5d64969cb330aeabe5e
MD5 a8c15bfa1b7d18a0103f9ca2db18088f
BLAKE2b-256 6d66b302ba866d5fb22c8568ab6b12399cb1973e3db83257dc5792170706236c

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63f0db27d08f43db22214b6da608eaf3c39085ae2d47ef62279f4cb43909daea
MD5 673716eda7e220ad314958cf74050b1c
BLAKE2b-256 4fb5374c3c08724944d8ab1b86b6f54cdcc04f12678c7cd062109241a163c23c

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2991e4b7ed2091dc28a39ad19802bc8f220bb06ee0361e3a29d6bc46c97e1d9e
MD5 52bfb83c300983147cf4566302a96735
BLAKE2b-256 27d88a2813b88c7063d3ce8058e33b288e265dc1f271a77c85fd4abc0c88cd4b

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: acquisition-6.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 63.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for acquisition-6.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3beae96b8db26736b7a11aefacbc9f0f14abf594cb422f722fef4287f1e99204
MD5 2afa76cad78195cd8f4b6aca33a68e2f
BLAKE2b-256 857eb826ca9aae90aa5de2b5c9a68a29134f7d6a648e7a47ce6588f4802e0f04

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 8e74fb704f371bef03eb6527d68bfa8bfbff05a15a062517a55090f439dbf41d
MD5 4ea5c6635b2b0d5aa5242e7513fed8d0
BLAKE2b-256 b6e9db074a3ee058db930694344c01f86aa4d788ced629a370a70aea7e558425

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 171fb1dac7fd56cc46b10a790e6d4c3345a967f8db7a7ed98221842a286210a3
MD5 6f4e21e7baba7843494f18b4abf40c3b
BLAKE2b-256 9bc7b81905b67b0d05a4933330b85f05690401cb433254246f72035e59b49d77

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 e6916948c3204970a3b2f8ea16eb16a18e0640c8578c84a6ae38dff8fd949e47
MD5 b48a002ca5bad4873a77ef62a1a40636
BLAKE2b-256 98d3c415d84bdf097a9c8d04d10be22511ee7f66e9f6fedfab490ce5777d8a77

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 21b4a2ae378bbbfcfff773692fa1aea72758de9124147459ef9c29f5cbc7667f
MD5 c595621d4b12a3fe83ed2ee6a146c6e8
BLAKE2b-256 536262c94d6527bf4eaf377fbd8c908aed3f976d8d0d976305b2b3857b6d4ccd

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 df45e5e0f29808df9801b5de14f5a42a5c91bfab8fc89c3165f447157e0f2175
MD5 ecaabceecf4720d0ed5bd6908b0803be
BLAKE2b-256 240e19b3c96815564850d9b4330b5df98e44d4c7869c4762a8eee618269ad06c

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: acquisition-6.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 62.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for acquisition-6.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9346da652c69f680192cabbb08172f53034d954b2f3ca87b09a24c6bc2231f1d
MD5 d250caf63597e360474f0e94bb075c4d
BLAKE2b-256 aa1d8e7d337bdecf6090342261848f69d8fd5862c65bafc01fb2d22b90c97236

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 473a2d967582db5ea0b27dc2bfe7016fe0b71901cfd601fa07af9baf1aacb4dc
MD5 251d83624df25682cda3854c72e70b69
BLAKE2b-256 88583ffc2cda2990ac182afbfda2aa3e6a86aefe083f415c77b903d8d20142cb

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 d81ff1372a385de0feeb1d6f4c9f4b7a6cc6b9220c9804603f5fc93cc510777c
MD5 de187ef5f83b22a4daacda9afd4470fb
BLAKE2b-256 9aaf88d7f2d04580f19385184143d746fef55b38edd663957bad03dd93c4b1a2

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 e7c2b2c6a2a8b964a1d8d8728b4a217cf2f280d13dfdf1c5369a05fbbf81af0e
MD5 0f3b66869debb812f807b36f111a9add
BLAKE2b-256 69ad1d7824bb529119979887405890d3d53a386039eb4a91adbe72787dbb2862

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be7f3df4f44c36f3d5fa53dd12e2cfcee959998f0c9d407186ea9323277c2510
MD5 a6492c8105c7938f12f317975f5a0cda
BLAKE2b-256 30a25fdcb4f9039e8638d092022aec46bc3cfa7833ffd887b2f7fb822b7d2658

See more details on using hashes here.

File details

Details for the file acquisition-6.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for acquisition-6.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 abb025f81de52fe8187678b988a79bf9aeb6cc82f4ea3ddb9d444122519f5bf4
MD5 dac8216de73894e9fdc7f1d74dce6612
BLAKE2b-256 8fbc0c1b749660377f8c4c5d287feb2616403670ec07160a10caafcb21513941

See more details on using hashes here.

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