def __updateResource(self, localResuri, respath): log.debug("ResourceSync.pushResearchObject: %s does was already aggregated in the remote RO" % (respath)) if self._localRo.isInternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is internal" % (localResuri)) if self._localRo.isAnnotationNode(respath): # annotations are handled separately pass else: log.debug("ResourceSync.pushResearchObject: %s is a resource" % (localResuri)) # Get remote ETag (status, reason, headers) = self._remoteRo.getHead(respath) if status != 200: raise Exception("Error retrieving RO resource", "%03d %s (%s)" % (status, reason, respath)) filename = ro_uriutils.getFilenameFromUri(localResuri) currentETag = headers.get("etag", None) currentChecksum = self._localRo.calculateChecksum(filename) # Check locally stored ETag previousETag = self._localRo.getRegistries().get("%s,etag" % filename, None) previousChecksum = self._localRo.getRegistries().get("%s,checksum" % filename, None) if ( not previousETag or previousETag != currentETag or not previousChecksum or previousChecksum != currentChecksum ): rf = open(ro_uriutils.getFilenameFromUri(localResuri), "r") try: (status, reason, headers, resuri) = self._remoteRo.updateResourceInt( respath, mimetypes.guess_type(localResuri)[0], rf ) self._localRo.getRegistries()["%s,etag" % filename] = headers.get("etag", None) self._localRo.getRegistries()["%s,checksum" % filename] = currentChecksum if not previousETag or previousETag != currentETag: log.debug( "ResourceSync.pushResearchObject: %s has been modified in ROSRS (ETag was %s is %s)" % (respath, previousETag, currentETag) ) yield (ACTION_UPDATE_OVERWRITE, respath) elif not previousChecksum or previousChecksum != currentChecksum: log.debug( "ResourceSync.pushResearchObject: %s has been modified locally (checksum was %s is %s)" % (respath, previousChecksum, currentChecksum) ) yield (ACTION_UPDATE, respath) except ROSRS_Error as e: yield (ACTION_ERROR, e) else: log.debug("ResourceSync.pushResearchObject: %s has NOT been modified" % (respath)) yield (ACTION_SKIP, respath) elif self._localRo.isExternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is external" % (localResuri)) yield (ACTION_SKIP, localResuri) else: log.error("ResourceSync.pushResearchObject: %s is neither internal nor external" % (localResuri))
def __createResource(self, localResuri, respath): log.debug( "ResourceSync.pushResearchObject: %s does was not aggregated in the remote RO" % (respath)) if self._localRo.isInternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is internal" % (localResuri)) if self._localRo.isAnnotationNode(respath): # annotations are handled separately pass else: yield (ACTION_AGGREGATE_INTERNAL, respath) filename = ro_uriutils.getFilenameFromUri(localResuri) currentChecksum = self._localRo.calculateChecksum(filename) rf = open(filename, 'r') (status, reason, headers, resuri) = self._remoteRo.aggregateResourceInt( respath, mimetypes.guess_type(respath)[0], rf) self._localRo.getRegistries()["%s,etag" % filename] = headers.get( "etag", None) self._localRo.getRegistries()["%s,checksum" % filename] = currentChecksum elif self._localRo.isExternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is external" % (localResuri)) yield (ACTION_AGGREGATE_EXTERNAL, respath) self._localRo.aggregateResourceExt(respath) else: log.error( "ResourceSync.pushResearchObject: %s is neither internal nor external" % (localResuri))
def __createResource(self, localResuri, respath): log.debug("ResourceSync.pushResearchObject: %s does was not aggregated in the remote RO" % (respath)) if self._localRo.isInternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is internal" % (localResuri)) if self._localRo.isAnnotationNode(respath): # annotations are handled separately pass else: yield (ACTION_AGGREGATE_INTERNAL, respath) filename = ro_uriutils.getFilenameFromUri(localResuri) currentChecksum = self._localRo.calculateChecksum(filename) rf = open(filename, "r") (status, reason, headers, resuri) = self._remoteRo.aggregateResourceInt( respath, mimetypes.guess_type(respath)[0], rf ) self._localRo.getRegistries()["%s,etag" % filename] = headers.get("etag", None) self._localRo.getRegistries()["%s,checksum" % filename] = currentChecksum elif self._localRo.isExternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is external" % (localResuri)) yield (ACTION_AGGREGATE_EXTERNAL, respath) self._localRo.aggregateResourceExt(respath) else: log.error("ResourceSync.pushResearchObject: %s is neither internal nor external" % (localResuri))
def __updateResource(self, localResuri, respath): log.debug( "ResourceSync.pushResearchObject: %s does was already aggregated in the remote RO" % (respath)) if self._localRo.isInternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is internal" % (localResuri)) if self._localRo.isAnnotationNode(respath): # annotations are handled separately pass else: log.debug("ResourceSync.pushResearchObject: %s is a resource" % (localResuri)) # Get remote ETag (status, reason, headers) = self._remoteRo.getHead(respath) if status != 200: raise Exception("Error retrieving RO resource", "%03d %s (%s)" % (status, reason, respath)) filename = ro_uriutils.getFilenameFromUri(localResuri) currentETag = headers.get("etag", None) currentChecksum = self._localRo.calculateChecksum(filename) # Check locally stored ETag previousETag = self._localRo.getRegistries().get( "%s,etag" % filename, None) previousChecksum = self._localRo.getRegistries().get( "%s,checksum" % filename, None) if not previousETag or previousETag != currentETag or not previousChecksum or previousChecksum != currentChecksum: rf = open(ro_uriutils.getFilenameFromUri(localResuri), 'r') try: (status, reason, headers, resuri) = self._remoteRo.updateResourceInt( respath, mimetypes.guess_type(localResuri)[0], rf) self._localRo.getRegistries()["%s,etag" % filename] = headers.get( "etag", None) self._localRo.getRegistries()[ "%s,checksum" % filename] = currentChecksum if not previousETag or previousETag != currentETag: log.debug( "ResourceSync.pushResearchObject: %s has been modified in ROSRS (ETag was %s is %s)" % (respath, previousETag, currentETag)) yield (ACTION_UPDATE_OVERWRITE, respath) elif not previousChecksum or previousChecksum != currentChecksum: log.debug( "ResourceSync.pushResearchObject: %s has been modified locally (checksum was %s is %s)" % (respath, previousChecksum, currentChecksum)) yield (ACTION_UPDATE, respath) except ROSRS_Error as e: yield (ACTION_ERROR, e) else: log.debug( "ResourceSync.pushResearchObject: %s has NOT been modified" % (respath)) yield (ACTION_SKIP, respath) elif self._localRo.isExternalResource(localResuri): log.debug("ResourceSync.pushResearchObject: %s is external" % (localResuri)) yield (ACTION_SKIP, localResuri) else: log.error( "ResourceSync.pushResearchObject: %s is neither internal nor external" % (localResuri))