예제 #1
0
def _generate_system_metadata(scimeta_bytes, native_identifier_sid, record_date, symeta_settings_dict):
    """
    :param scimeta_bytes: Bytes of the node's original metadata document.
    :param native_identifier_sid: Node's system identifier for this object, which becomes the series ID.
    :param record_date: Date metadata document was created/modified in the source system. Becomes dateUploaded.
    :param sysmeta_settings_dict: A dict containing node-specific system metadata properties that will apply to all
    science metadata documents loaded into GMN.

    This function generates a system metadata document for describing the science metadata record being loaded. Some
    of the fields, such as checksum and size, are based off the bytes of the science metadata object itself. Other
    system metadata fields are passed to D1ClientManager in a dict which is configured in the main adapter program.
    Note that the checksum is assigned as an arbitrary version identifier to accommodate the source system's mutable
    content represented in the target system's immutable content standard. """
    sys_meta = v2.systemMetadata()
    sys_meta.seriesId = native_identifier_sid

    sys_meta.formatId = symeta_settings_dict['formatId_custom']
    sys_meta.size = len(scimeta_bytes)
    sys_meta.checksum = dataoneTypes.checksum(hashlib.md5(scimeta_bytes).hexdigest())
    sys_meta.checksum.algorithm = 'MD5'
    sys_meta.identifier = sys_meta.checksum.value()
    # sys_meta.dateUploaded = datetime.datetime.strptime(record_date, "%Y-%m-%dT%H:%M:%SZ")
    sys_meta.dateUploaded = record_date
    sys_meta.dateSysMetadataModified = datetime.datetime.now()
    sys_meta.rightsHolder = symeta_settings_dict['rightsholder']
    sys_meta.submitter = symeta_settings_dict['submitter']
    sys_meta.authoritativeMemberNode = symeta_settings_dict['authoritativeMN']
    sys_meta.originMemberNode = symeta_settings_dict['originMN']
    sys_meta.accessPolicy = _generate_public_access_policy()
    return sys_meta
 def _generate_sysmeta(self, scimeta_str, pid, sid, record_datetime):
   sysmeta_pyxb = v2.systemMetadata()
   sysmeta_pyxb.seriesId = sid
   sysmeta_pyxb.formatId = self.node_dict['sci_md_formatId']
   sysmeta_pyxb.size = len(scimeta_str)
   sysmeta_pyxb.checksum = d1_common.checksum.create_checksum_object_from_string(
     scimeta_str
   )
   sysmeta_pyxb.identifier = pid
   # sysmeta_pyxb.dateUploaded = datetime.datetime.strptime(record_datetime, "%Y-%m-%dT%H:%M:%SZ")
   sysmeta_pyxb.dateUploaded = record_datetime
   sysmeta_pyxb.dateSysMetadataModified = datetime.datetime.now()
   sysmeta_pyxb.rightsHolder = self.node_dict['rightsholder']
   sysmeta_pyxb.submitter = self.node_dict['submitter']
   sysmeta_pyxb.authoritativeMemberNode = self.node_dict['authoritativeMN']
   sysmeta_pyxb.originMemberNode = self.node_dict['originMN']
   # Access policies for SlenderNode design pattern default to public read only
   accessPolicy = v2.AccessPolicy()
   accessRule = v2.AccessRule()
   accessRule.subject.append(d1_common.const.SUBJECT_PUBLIC)
   permission = v2.Permission('read')
   accessRule.permission.append(permission)
   accessPolicy.append(accessRule)
   sysmeta_pyxb.accessPolicy = accessPolicy
   return sysmeta_pyxb
    def _generate_system_metadata(self, scimeta_bytes, sid, pid, record_date):

        sys_meta = v2.systemMetadata()
        sys_meta.seriesId = sid
        sys_meta.formatId = 'http://www.isotc211.org/2005/gmd-ieda'
        sys_meta.size = len(scimeta_bytes)

        digest = hashlib.md5(scimeta_bytes).hexdigest()
        sys_meta.checksum = v2.checksum(digest)
        sys_meta.checksum.algorithm = 'MD5'

        sys_meta.identifier = sys_meta.checksum.value()
        sys_meta.dateUploaded = record_date
        sys_meta.dateSysMetadataModified = dt.datetime.now()

        sys_meta.identifier = pid
        sys_meta.dateUploaded = d1_common.date_time.utc_now()
        sys_meta.dateSysMetadataModified = dt.datetime.now()
        sys_meta.rightsHolder = 'urn:node:IEDA'
        sys_meta.submitter = 'urn:node:IEDA'
        sys_meta.authoritativeMemberNode = 'urn:node:mnTestIEDA'
        sys_meta.originMemberNode = 'urn:node:IEDA'
        sys_meta.accessPolicy = v2.AccessPolicy()

        return sys_meta
예제 #4
0
def generate_sys_meta(pid, size, md5, now):
    sys_meta = dataoneTypes.systemMetadata()
    sys_meta.identifier = pid
    sys_meta.formatId = SYSMETA_FORMATID
    sys_meta.size = size
    sys_meta.rightsHolder = SYSMETA_RIGHTSHOLDER
    sys_meta.checksum = dataoneTypes.checksum(md5)
    sys_meta.checksum.algorithm = 'MD5'
    sys_meta.dateUploaded = now
    sys_meta.dateSysMetadataModified = now
    sys_meta.accessPolicy = generate_public_access_policy()
    return sys_meta
예제 #5
0
 def _generate_sys_meta(self,
                        pid,
                        format_id,
                        size,
                        checksum,
                        rights_holder,
                        modified=None):
     if modified is None:
         modified = datetime.datetime.now()
     sys_meta = dataoneTypes.systemMetadata()
     sys_meta.identifier = pid
     sys_meta.formatId = format_id
     sys_meta.size = size
     sys_meta.rightsHolder = rights_holder
     sys_meta.checksum = checksum
     sys_meta.dateUploaded = modified
     sys_meta.dateSysMetadataModified = modified
     sys_meta.accessPolicy = self.generate_public_access_policy()
     return sys_meta
예제 #6
0
def generate_system_metadata(scimeta_bytes, pid, sid):
  """
  :param scimeta_bytes: Bytes of the node's original metadata document.
  :param native_identifier_sid: Node's system identifier for this object, which
  becomes the series ID.
  :param record_date: Date metadata document was created/modified in the source
  system. Becomes dateUploaded.
  :param sysmeta_settings_dict: A dict containing node-specific system metadata
  properties that will apply to all science metadata documents loaded into GMN.

  This function generates a system metadata document for describing the science
  metadata record being loaded. Some of the fields, such as checksum and size,
  are based off the bytes of the science metadata object itself. Other system
  metadata fields are passed to D1ClientManager in a dict which is configured in
  the main adapter program. Note that the checksum is assigned as an arbitrary
  version identifier to accommodate the source system's mutable content
  represented in the target system's immutable content standard.
  """
  sysmeta_pyxb = v2.systemMetadata()
  sysmeta_pyxb.seriesId = sid
  sysmeta_pyxb.formatId = SCIMETA_FORMAT_ID
  sysmeta_pyxb.size = len(scimeta_bytes)
  sysmeta_pyxb.checksum = d1_common.checksum.create_checksum_object_from_string(
    scimeta_bytes
  )
  sysmeta_pyxb.identifier = pid
  sysmeta_pyxb.dateUploaded = d1_common.date_time.utc_now()
  sysmeta_pyxb.dateSysMetadataModified = datetime.datetime.now()
  sysmeta_pyxb.rightsHolder = SCIMETA_RIGHTS_HOLDER
  sysmeta_pyxb.submitter = SCIMETA_SUBMITTER
  sysmeta_pyxb.authoritativeMemberNode = SCIMETA_AUTHORITATIVE_MEMBER_NODE
  sysmeta_pyxb.originMemberNode = SCIMETA_AUTHORITATIVE_MEMBER_NODE
  sysmeta_pyxb.accessPolicy = v2.AccessPolicy()

  with d1_common.wrap.access_policy.wrap_sysmeta_pyxb(sysmeta_pyxb) as ap:
    ap.clear()
    ap.add_public_read()

  return sysmeta_pyxb
예제 #7
0
 def _generate_sysmeta_pyxb(self, metadata_et, xml_str, checksum_pyxb, obsoletes_pid):
   now = datetime.datetime.now()
   sysmeta_pyxb = v2.systemMetadata()
   sysmeta_pyxb.serialVersion = 1
   sysmeta_pyxb.identifier = checksum_pyxb.value()
   sysmeta_pyxb.seriesId = metadata_et.find(
     './gmd:fileIdentifier/gco:CharacterString', NS_DICT
   ).text
   sysmeta_pyxb.formatId = SCIOBJ_FORMAT_STR
   sysmeta_pyxb.size = len(xml_str)
   sysmeta_pyxb.submitter = SUBMITTER_SUBJECT_STR
   sysmeta_pyxb.rightsHolder = OWNER_SUBJECT_STR
   sysmeta_pyxb.checksum = checksum_pyxb
   sysmeta_pyxb.dateUploaded = d1_common.date_time.from_iso8601(
     metadata_et.find('./gmd:dateStamp/gco:DateTime', NS_DICT).text
   )
   sysmeta_pyxb.dateSysMetadataModified = now
   sysmeta_pyxb.originMemberNode = ORIGIN_MEMBER_NODE_URN
   sysmeta_pyxb.authoritativeMemberNode = AUTHORITATIVE_MEMBER_NODE_URN
   sysmeta_pyxb.obsoletes = obsoletes_pid
   sysmeta_pyxb.accessPolicy = self._generate_public_access_policy_pyxb()
   return sysmeta_pyxb
예제 #8
0
def _generate_system_metadata(scimeta_bytes, native_identifier_sid, version_pid, record_date, symeta_settings_dict):
    """This function generates a system metadata document for describing the science metadata record being loaded. Some
    of the fields, such as checksum and size, are based off the bytes of the science metadata object itself. Other
    system metadata fields are passed to D1ClientManager in a dict which is configured in the main adapter program."""
    sys_meta = v2.systemMetadata()
    sys_meta.seriesId = native_identifier_sid
    sys_meta.identifier = version_pid
    sys_meta.formatId = symeta_settings_dict['formatId']
    sys_meta.size = len(scimeta_bytes)
    # sys_meta.checksum = \
    #    d1_common.checksum.create_checksum_object_from_stream(StringIO.StringIO(scimeta_bytes), algorithm='MD5')
    sys_meta.checksum = dataoneTypes.checksum(hashlib.md5(scimeta_bytes).hexdigest())
    sys_meta.checksum.algorithm = 'MD5'
    #sys_meta.dateUploaded = datetime.datetime.strptime(record_date, "%Y-%m-%d %H:%M:%SZ")
    sys_meta.dateUploaded = record_date
    sys_meta.dateSysMetadataModified = datetime.datetime.now()
    sys_meta.rightsHolder = symeta_settings_dict['rightsholder']
    sys_meta.submitter = symeta_settings_dict['submitter']
    sys_meta.authoritativeMemberNode = symeta_settings_dict['authoritativeMN']
    sys_meta.originMemberNode = symeta_settings_dict['originMN']
    sys_meta.accessPolicy = _generate_public_access_policy()
    return sys_meta
예제 #9
0
def generate_system_metadata(scimeta_bytes, pid, sid):
    """
  :param scimeta_bytes: Bytes of the node's original metadata document.
  :param native_identifier_sid: Node's system identifier for this object, which
  becomes the series ID.
  :param record_date: Date metadata document was created/modified in the source
  system. Becomes dateUploaded.
  :param sysmeta_settings_dict: A dict containing node-specific system metadata
  properties that will apply to all science metadata documents loaded into GMN.

  This function generates a system metadata document for describing the science
  metadata record being loaded. Some of the fields, such as checksum and size,
  are based off the bytes of the science metadata object itself. Other system
  metadata fields are passed to D1ClientManager in a dict which is configured in
  the main adapter program. Note that the checksum is assigned as an arbitrary
  version identifier to accommodate the source system's mutable content
  represented in the target system's immutable content standard.
  """
    sysmeta_pyxb = v2.systemMetadata()
    sysmeta_pyxb.seriesId = sid
    sysmeta_pyxb.formatId = SCIMETA_FORMAT_ID
    sysmeta_pyxb.size = len(scimeta_bytes)
    sysmeta_pyxb.checksum = d1_common.checksum.create_checksum_object_from_string(
        scimeta_bytes)
    sysmeta_pyxb.identifier = pid
    sysmeta_pyxb.dateUploaded = d1_common.date_time.utc_now()
    sysmeta_pyxb.dateSysMetadataModified = datetime.datetime.now()
    sysmeta_pyxb.rightsHolder = SCIMETA_RIGHTS_HOLDER
    sysmeta_pyxb.submitter = SCIMETA_SUBMITTER
    sysmeta_pyxb.authoritativeMemberNode = SCIMETA_AUTHORITATIVE_MEMBER_NODE
    sysmeta_pyxb.originMemberNode = SCIMETA_AUTHORITATIVE_MEMBER_NODE
    sysmeta_pyxb.accessPolicy = v2.AccessPolicy()

    with d1_common.wrap.access_policy.wrap_sysmeta_pyxb(sysmeta_pyxb) as ap:
        ap.clear()
        ap.add_public_read()

    return sysmeta_pyxb
예제 #10
0
def build_sysmeta(pid=None, obj=None, fmt=None, sid=None):

    if pid is None:
        return 1
    if obj is None:
        return 1
    if fmt is None:
        fmt = 'application/octet-stream'

    obj_size = os.path.getsize(obj)
    obj_md5 = md5(obj)

    accessPolicy = dataoneTypes_v2_0.accessPolicy()
    accessRule = dataoneTypes_v2_0.AccessRule()
    accessRule.subject.append('gmn-local')
    accessRule.permission.append('changePermission')
    accessPolicy.append(accessRule)
    accessRule = dataoneTypes_v2_0.AccessRule()
    accessRule.subject.append('public')
    accessRule.permission.append('read')
    accessPolicy.append(accessRule)

    d1_sys_meta = dataoneTypes_v2_0.systemMetadata()
    d1_sys_meta.serialVersion = 1
    d1_sys_meta.identifier = pid
    d1_sys_meta.size = obj_size
    d1_sys_meta.formatId = fmt
    d1_sys_meta.rightsHolder = 'gmn-local'
    d1_sys_meta.checksum = obj_md5
    d1_sys_meta.checksum.algorithm = 'MD5'
    d1_sys_meta.accessPolicy = accessPolicy

    if sid is not None:
        d1_sys_meta.seriesId = sid

    return d1_sys_meta
예제 #11
0
    def generate_system_metadata(self,
                                 *,
                                 scimeta_bytes=None,
                                 native_identifier_sid=None,
                                 record_date=None,
                                 record_version=None):
        """
        This function generates a system metadata document for describing
        the science metadata record being loaded. Some of the fields,
        such as checksum and size, are based off the bytes of the science
        metadata object itself. Other system metadata fields are passed
        to D1ClientManager in a dict which is configured in the main
        adapter program.  Note that the checksum is assigned as an
        arbitrary version identifier to accommodate the source system's
        mutable content represented in the target system's immutable
        content standard.

        This is the default case.  It should be specialized by each slender
        nodes object.

        Parameters
        ----------
        scimeta_bytes :
            Bytes of the node's original metadata document.
        native_identifier_sid :
            Node's system identifier for this object, which becomes the series
            ID, or sid.
        record_date :
            Date metadata document was created/modified in the source
            system. Becomes dateUploaded.
        record_version : str
            Will be the pid.

        Returns
        -------
            A dict containing node-specific system metadata properties that
            will apply to all science metadata documents loaded into GMN.
        """
        sys_meta = v2.systemMetadata()
        sys_meta.seriesId = native_identifier_sid

        sys_meta.formatId = self.sys_meta_dict['formatId_custom']
        sys_meta.size = len(scimeta_bytes)

        digest = hashlib.md5(scimeta_bytes).hexdigest()
        sys_meta.checksum = dataoneTypes.checksum(digest)

        sys_meta.checksum.algorithm = 'MD5'

        if record_version is None:
            # only if we have nothing else.
            sys_meta.identifier = sys_meta.checksum.value()
        else:
            sys_meta.identifier = record_version

        sys_meta.dateUploaded = record_date
        sys_meta.dateSysMetadataModified = dt.datetime.now(dt.timezone.utc)
        sys_meta.rightsHolder = self.sys_meta_dict['rightsholder']
        sys_meta.submitter = self.sys_meta_dict['submitter']
        sys_meta.authoritativeMemberNode = self.sys_meta_dict[
            'authoritativeMN']  # noqa:  E501
        sys_meta.originMemberNode = self.sys_meta_dict['originMN']
        sys_meta.accessPolicy = self.generate_public_access_policy()
        return sys_meta