Example #1
0
 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))
Example #2
0
 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))
Example #3
0
 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))
Example #4
0
 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))