2. dxpy.bindings
Module¶
Documentation on classes and methods:
This module contains useful Python bindings for calling API methods on
the DNAnexus Platform. Data objects (such as records, files, and
applets) are represented locally by a handler that inherits from the
abstract class DXDataObject
. This abstract base
class supports functionality common to all of the data object
classes–for example, setting properties and types, as well as cloning
the object to a different project, moving it to a different folder in
the same project, or removing the object from a project.
Note
While this documentation will largely refer to data containers
as simply “projects”, both project and container IDs can generally be
provided as input and will be returned as output anywhere a “project”
is expected, except in methods of the
DXProject
class specifically or
where otherwise noted.
Object and Project IDs
A remote handler for a data object has two IDs associated with it: one ID representing the underlying data and a project ID to indicate which project’s copy it represents. (If not explicitly specified for a particular handler, the project defaults to the default data container.) The ID of a data object remains the same when it is moved within a project or cloned to another project.
The project ID is only relevant when using certain metadata fields
that are tied to a particular project. These are the name, properties,
and tags fields, and are read and updated using the following methods:
describe()
(“name”, “properties”, and
“tags” fields), rename()
,
get_properties()
,
set_properties()
,
add_tags()
,
remove_tags()
.
Creating new handlers and remote objects
To access a preexisting object, a remote handler for that class can be
set up via two methods: the constructor or the
set_ids()
method. For example:
# Provide ID in constructor
dxFileHandle = DXFile("file-1234")
# Provide no ID initially, then call set_ids()
dxOtherFH = DXFile()
dxOtherFH.set_ids("file-4321")
Neither of these methods perform API calls; they merely set the local
state of the remote file handler. The object ID and project ID stored in
the handler can be overwritten with subsequent calls to
set_ids()
.
The object handler __init__
methods do not create new remote
objects; they only initialize whatever local state the handler needs.
Creation of a new remote object can be performed using the method
dxpy.bindings.DXDataObject.new()
. In each subclass of
DXDataObject
the method can take class-specific
arguments, for example:
newDXFileHandle = DXFile()
newDXFileHandle.new(media_type="application/json")
Some of the classes provide additional functions that are shorthand for
some of these common use cases. For instance,
dxpy.bindings.dxfile_functions.open_dxfile()
opens a preexisting
file, and dxpy.bindings.dxfile_functions.new_dxfile()
creates a
new file and opens it for writing. Both of those methods return a remote
object handler on which additional methods can be called.
In addition, class-specific handlers provide extra functionality for
their respective classes. For example,
DXFile
provides functionality for
reading, writing, downloading, and uploading files.
Though not explicitly documented in each method as such, all methods
that interact with the API server may raise the exception
dxpy.exceptions.DXAPIError
.
Thread safety
dxpy.bindings
are designed for single threaded use, however, it
is possible to use multiple threads on different bindings. For
example, using two threads to modify an applet is not allowed, but
using two threads to download two different files is allowed. Note
that the Python multiprocessing library, in its default process pool
mode, is incompatible with dxpy. In order to use that library, please
employ the thread pool instead.