def transmogrify(self, item): self.seen_count += 1 original_path_key = self.originalPathKey(*item.keys())[0] if not original_path_key: # not enough info raise NothingToDoHere path = self.get_path(item) original_paths = item[original_path_key] if isinstance(original_paths, basestring): original_paths = [ original_paths, ] original_paths = [self._prepare_path(p) for p in original_paths] if self.assure_target_exists: # Bails out if can't retrieve object at item's current path: if self.get_object(item, raise_=False) is None: logger.warn("Ignoring item at %s - object not created" % path) raise NothingToDoHere if not path.startswith(self.portal_path): path = self.portal_path + "/" + path.lstrip("/") for original_path in original_paths: if original_path != path: self.redirector.add(original_path, path) self.changed_count += 1 return item
def transmogrify(self, item): self.seen_count += 1 original_path_key = self.originalPathKey(*item.keys())[0] if not original_path_key: # not enough info raise NothingToDoHere path = self.get_path(item) original_paths = item[original_path_key] if isinstance(original_paths, basestring): original_paths = [original_paths, ] original_paths = [self._prepare_path(p) for p in original_paths] if self.assure_target_exists: # Bails out if can't retrieve object at item's current path: if self.get_object(item, raise_=False) is None: logger.warn("Ignoring item at %s - object not created" % path) raise NothingToDoHere if not path.startswith(self.portal_path): path = self.portal_path + "/" + path.lstrip("/") for original_path in original_paths: if original_path != path: self.redirector.add(original_path, path) self.changed_count += 1 return item
def get_remote_image(url, item, img_title="", pathkey="_path", jsonmigrator = False): # FIXME: not making an extra call to get the real pathkey logger.info("""Fetching image %s for article %s """ % (url, item.get(pathkey, ""))) # Strip plone view from URL: url, it_worked = _strip_view(url) # it won't work if the image url does not have a proper image if not it_worked: jsonmigrator = False if jsonmigrator: url += "/get_item" try: http = urllib.urlopen(url) image_data = http.read() if http.code > 399: # we can't get the image here raise IOError real_url = http.url except Exception as error: logger.error("Could not retrieve image at %s: %s - skipping" % (url, error)) return None, None, [] if jsonmigrator and real_url.endswith("/get_item"): real_url = real_url[:len("/get_item")] image_filename, post_parts = _get_filename(real_url) if jsonmigrator: try: image = json.loads(image_data) except ValueError: logger.warn("Could not retrieve image json contents at %s " % url) raise None, None, [] else: # build object item for the pipeline image = {} image["_type"] = "Image" image["image"] = image_data image["creation_date"] = item.get("creation_date", None) image["modification_date"] = item.get("modification_date", None) image["_transitions"] = item.get("_transitions", "published") if not img_title: img_title = image_filename.split(".")[0].encode("utf-8") image["title"] = img_title image["_filename"] = image_filename return real_url, image, post_parts
def transmogrify(self, item): if (not "image" in item): raise NothingToDoHere if isinstance(item["image"] , dict): data = item["image"]["data"] else: data = item["image"] try: data= StringIO(data) img = Image.open(data) except (TypeError, IOError) as error: # We caught it: a fake image! :-) path = self.get_path(item) if item.get("_type", "") == "Image": logger.warn("Image at %s contains no image data - discarding" % path) raise ThouShallNotPass logger.warn("Item at %s contains no image data - scrubbing" " incorrecet data" % path) del item["image"] return item