Source code for dxpy.bindings.dxrecord

# Copyright (C) 2013-2016 DNAnexus, Inc.
#
# This file is part of dx-toolkit (DNAnexus platform client libraries).
#
#   Licensed under the Apache License, Version 2.0 (the "License"); you may not
#   use this file except in compliance with the License. You may obtain a copy
#   of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#   License for the specific language governing permissions and limitations
#   under the License.

"""
Records are the most basic data object and do not store additional data beyond those available in
all data objects (details, properties, etc.).
"""

from __future__ import print_function, unicode_literals, division, absolute_import

import dxpy
from . import DXDataObject
from ..exceptions import DXError

############
# DXRecord #
############

[docs]def new_dxrecord(details=None, **kwargs): ''' :rtype: :class:`DXRecord` :param details: The contents of the record to be created. :type details: dict Additional optional parameters not listed: all those under :func:`dxpy.bindings.DXDataObject.new`, except `details`. Creates a new remote record object with project set to *project* and returns the appropriate handler. Example: r = dxpy.new_dxrecord({"x": 1, "y": 2}) Note that this function is shorthand for:: dxrecord = DXRecord() dxrecord.new(**kwargs) ''' dxrecord = DXRecord() dxrecord.new(details=details, **kwargs) return dxrecord
[docs]class DXRecord(DXDataObject): ''' Remote record object handler. ''' _class = "record" _describe = staticmethod(dxpy.api.record_describe) _add_types = staticmethod(dxpy.api.record_add_types) _remove_types = staticmethod(dxpy.api.record_remove_types) _get_details = staticmethod(dxpy.api.record_get_details) _set_details = staticmethod(dxpy.api.record_set_details) _set_visibility = staticmethod(dxpy.api.record_set_visibility) _rename = staticmethod(dxpy.api.record_rename) _set_properties = staticmethod(dxpy.api.record_set_properties) _add_tags = staticmethod(dxpy.api.record_add_tags) _remove_tags = staticmethod(dxpy.api.record_remove_tags) _close = staticmethod(dxpy.api.record_close) _list_projects = staticmethod(dxpy.api.record_list_projects) def _new(self, dx_hash, close=False, **kwargs): """ :param dx_hash: Standard hash populated in :func:`dxpy.bindings.DXDataObject.new()` containing attributes common to all data object classes. :type dx_hash: dict :param init_from: Record from which to initialize the metadata :type init_from: :class:`DXRecord` :param close: Whether or not to close the record immediately after creating it :type close: boolean Create a new remote record object. """ if "init_from" in kwargs: if kwargs["init_from"] is not None: if not isinstance(kwargs["init_from"], DXRecord): raise DXError("Expected instance of DXRecord to init_from") dx_hash["initializeFrom"] = \ {"id": kwargs["init_from"].get_id(), "project": kwargs["init_from"].get_proj_id()} del kwargs["init_from"] if close: dx_hash["close"] = True resp = dxpy.api.record_new(dx_hash, **kwargs) self.set_ids(resp["id"], dx_hash["project"])