def download(self, file, save_as=None, save=True, return_content=False):
        destination_path = None

        if save_as is None:
            save_as = file

        if len(re.findall(r"\.\.", save_as)) > 0:
            return None

        content = InformaCamClientFabricProcess(
            downloadGlobaleaksAsset,
            self.config["host"],
            self.config["user"],
            self.config["identity_file"],
            args={"file": file, "asset_root": self.config["asset_root"], "identity_file": self.config["identity_file"]},
            port=self.config["port"],
        )
        content.join()

        if content.output is None:
            return None

        destination_path = os.path.join(ANNEX_DIR, save_as)
        try:
            with open(destination_path, "wb+") as C:
                C.write(content.output.getvalue())
        except IOError as e:
            if DEBUG:
                print e
            return None

        if return_content:
            return content.output.getvalue()
        else:
            return destination_path
    def getAssetMimeType(self, file):
        mime_type = InformaCamClientFabricProcess(
            getGlobaleaksAssetMimeType,
            self.config["host"],
            self.config["user"],
            self.config["identity_file"],
            port=self.config["port"],
            args={"file": file, "asset_root": self.config["asset_root"], "identity_file": self.config["identity_file"]},
        )

        mime_type.join()
        return mime_type.output
    def listAssets(self, omit_absorbed=False):
        assets = []

        list_gl_assets = InformaCamClientFabricProcess(
            listGlobaleakAssets,
            self.config["host"],
            self.config["user"],
            self.config["identity_file"],
            port=self.config["port"],
            args={"asset_root": self.config["asset_root"], "identity_file": self.config["identity_file"]},
        )

        list_gl_assets.join()

        if list_gl_assets.error is None and list_gl_assets.output is not None:
            self.last_update_for_mode = time() * 1000

            # get mime types
            for l in list_gl_assets.output:
                mime_type = self.getAssetMimeType(l["file_name"])
                if mime_type is None:
                    continue

                date_str = l["date_created"].split(".")[0]
                date_created = mktime(strptime(date_str, "%Y-%m-%d %H:%M:%S")) * 1000

                if DEBUG:
                    print "\nFILENAME: %s" % l["file_name"]
                    print "MIME TYPE: %s" % mime_type
                    print "DATE CREATED: %s (%d)\n" % (date_str, date_created)

                if omit_absorbed and self.isAbsorbed(date_created, mime_type):
                    continue

                assets.append(l["file_name"])

            self.updateLog()

        if DEBUG:
            print "ASSETS TO BE ABSORBED FOR MODE %s" % self.mode
            print assets

        return assets