示例#1
0
 def insert_comment(self, pkgkey, userid, username, comment, title,
     keywords):
     idkey = self._handle_pkgkey(pkgkey)
     iddoc = self.insert_generic_doc(idkey, userid, username,
         self.DOC_TYPES['comments'], comment, title, '', keywords)
     if isinstance(iddoc, const_get_stringtype()):
         return False, iddoc
     return True, iddoc
示例#2
0
 def insert_comment(self, pkgkey, userid, username, comment, title,
                    keywords):
     idkey = self._handle_pkgkey(pkgkey)
     iddoc = self.insert_generic_doc(idkey, userid, username,
                                     self.DOC_TYPES['comments'], comment,
                                     title, '', keywords)
     if isinstance(iddoc, const_get_stringtype()):
         return False, iddoc
     return True, iddoc
示例#3
0
 def get_package_item(self, pkgdata):
     new = False
     yp = self._pkg_cache.get(pkgdata)
     if yp is None:
         new = True
         pkgset = None
         if isinstance(pkgdata, const_get_stringtype()): # package set
             pkgset = True
         yp = EntropyPackage(pkgdata, pkgset = pkgset)
         self._pkg_cache[pkgdata] = yp
     return yp, new
示例#4
0
    def _add_generic_file_document(self, repository_id, package_name,
                                   document_type, username,
                                   user_id):
        """
        Add Generic file-based (with payload in HTTP Request parameters)
        Document to the repo.
        """
        try:
            title = self._add_document_get_title(Document.DOCUMENT_TITLE_ID)
        except AttributeError:
            return self._generic_invalid_request(message = "invalid title")

        try:
            description = self._add_document_get_description(
                Document.DOCUMENT_DESCRIPTION_ID, document_type)
        except AttributeError:
            return self._generic_invalid_request(
                message = "invalid description")

        try:
            keywords = self._api_get_keywords()
        except AttributeError:
            # invalid keywords
            return self._generic_invalid_request(message = "invalid keywords")

        # get payload data
        try:
            payload_tmp_file, orig_filename = \
                self._add_document_get_payload_file()
        except AttributeError as err:
            return self._generic_invalid_request(message = str(err))

        if document_type == Document.ICON_TYPE_ID:
            # resize image
            try:
                self._resize_icon(payload_tmp_file)
            except AttributeError as err:
                return self._generic_invalid_request(message = str(err))

        doc = None
        ugc = None
        message = None
        try:
            ugc = self._ugc(https=False)
            file_name = os.path.join(package_name, orig_filename)
            status, iddoc = ugc.insert_document_autosense(package_name,
                document_type, user_id, username, None, payload_tmp_file,
                file_name, orig_filename, title, description, keywords)
            if not status:
                if isinstance(iddoc, const_get_stringtype()):
                    return self._generic_invalid_request(message = iddoc)
                return self._generic_invalid_request(message = "upload failed")

            ugc.commit()
            raw_docs = ugc.get_ugc_metadata_by_identifiers([iddoc])
            try:
                docs = self._ugc_document_data_to_document(
                    repository_id, raw_docs)
            except AttributeError:
                return self._generic_invalid_request(
                    message = "conversion error")
            doc = docs[0]
        except ServiceConnectionError:
            return self._generic_invalid_request(
                code = WebService.WEB_SERVICE_RESPONSE_ERROR_CODE)
        finally:
            if ugc is not None:
                ugc.disconnect()
                del ugc
            # not really atomic actually
            try:
                os.remove(payload_tmp_file)
            except OSError as err:
                if err.errno != errno.ENOENT:
                    raise

        response = self._api_base_response(
            WebService.WEB_SERVICE_RESPONSE_CODE_OK,
            message = message)
        response['r'] = doc
        return self._service_render(response)
示例#5
0
    def insert_youtube_video(self, pkgkey, userid, username, video_path,
                             file_name, title, description, keywords):

        idkey = self._handle_pkgkey(pkgkey)
        video_path = os.path.realpath(video_path)
        if not (os.access(video_path, os.R_OK) and os.path.isfile(video_path)):
            return False
        virus_found, virus_type = self._scan_for_viruses(video_path)
        if virus_found:
            os.remove(video_path)
            return False, None

        new_video_path = video_path
        if isinstance(file_name, const_get_stringtype()):
            # move file to the new filename
            new_video_path = os.path.join(
                os.path.dirname(video_path),
                os.path.basename(file_name))  # force basename
            scount = 0
            while os.path.lexists(new_video_path):
                scount += 1
                bpath = "%s.%s" % (
                    str(scount),
                    os.path.basename(file_name),
                )
                new_video_path = os.path.join(os.path.dirname(video_path),
                                              bpath)
            shutil.move(video_path, new_video_path)

        yt_service = self.get_youtube_service()
        if yt_service is None:
            return False, None

        mykeywords = ', '.join([x.strip().strip(',') for x in \
            keywords + ["sabayon"] if (x.strip() and x.strip(",") and \
                (len(x.strip()) > 4))])
        gd_keywords = gdata.media.Keywords(text=mykeywords)

        mydescription = "%s: %s" % (
            pkgkey,
            description,
        )
        mytitle = "%s: %s" % (
            self._system_name,
            title,
        )
        my_media_group = gdata.media.Group(
            title=gdata.media.Title(text=mytitle),
            description=gdata.media.Description(description_type='plain',
                                                text=mydescription),
            keywords=gd_keywords,
            category=gdata.media.Category(
                text='Tech',
                scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
                label='Tech'),
            player=None)
        video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)
        new_entry = yt_service.InsertVideoEntry(video_entry, new_video_path)
        if not isinstance(new_entry, gdata.youtube.YouTubeVideoEntry):
            return False, None
        video_url = new_entry.GetSwfUrl()
        video_id = os.path.basename(video_url)

        iddoc = self.insert_generic_doc(idkey, userid, username,
                                        self.DOC_TYPES['youtube_video'],
                                        video_id, title, description, keywords)
        if isinstance(iddoc, const_get_stringtype()):
            return False, (
                iddoc,
                None,
            )
        return True, (
            iddoc,
            video_id,
        )
示例#6
0
    def _add_generic_file_document(self, repository_id, package_name,
                                   document_type, username, user_id):
        """
        Add Generic file-based (with payload in HTTP Request parameters)
        Document to the repo.
        """
        try:
            title = self._add_document_get_title(Document.DOCUMENT_TITLE_ID)
        except AttributeError:
            return self._generic_invalid_request(message="invalid title")

        try:
            description = self._add_document_get_description(
                Document.DOCUMENT_DESCRIPTION_ID, document_type)
        except AttributeError:
            return self._generic_invalid_request(message="invalid description")

        try:
            keywords = self._api_get_keywords()
        except AttributeError:
            # invalid keywords
            return self._generic_invalid_request(message="invalid keywords")

        # get payload data
        try:
            payload_tmp_file, orig_filename = \
                self._add_document_get_payload_file()
        except AttributeError as err:
            return self._generic_invalid_request(message=str(err))

        if document_type == Document.ICON_TYPE_ID:
            # resize image
            try:
                self._resize_icon(payload_tmp_file)
            except AttributeError as err:
                return self._generic_invalid_request(message=str(err))

        doc = None
        ugc = None
        message = None
        try:
            ugc = self._ugc(https=False)
            file_name = os.path.join(package_name, orig_filename)
            status, iddoc = ugc.insert_document_autosense(
                package_name, document_type, user_id, username, None,
                payload_tmp_file, file_name, orig_filename, title, description,
                keywords)
            if not status:
                if isinstance(iddoc, const_get_stringtype()):
                    return self._generic_invalid_request(message=iddoc)
                return self._generic_invalid_request(message="upload failed")

            ugc.commit()
            raw_docs = ugc.get_ugc_metadata_by_identifiers([iddoc])
            try:
                docs = self._ugc_document_data_to_document(
                    repository_id, raw_docs)
            except AttributeError:
                return self._generic_invalid_request(
                    message="conversion error")
            doc = docs[0]
        except ServiceConnectionError:
            return self._generic_invalid_request(
                code=WebService.WEB_SERVICE_RESPONSE_ERROR_CODE)
        finally:
            if ugc is not None:
                ugc.disconnect()
                del ugc
            # not really atomic actually
            try:
                os.remove(payload_tmp_file)
            except OSError as err:
                if err.errno != errno.ENOENT:
                    raise

        response = self._api_base_response(
            WebService.WEB_SERVICE_RESPONSE_CODE_OK, message=message)
        response['r'] = doc
        return self._service_render(response)
示例#7
0
    def insert_youtube_video(self, pkgkey, userid, username, video_path,
        file_name, title, description, keywords):

        idkey = self._handle_pkgkey(pkgkey)
        video_path = os.path.realpath(video_path)
        if not (os.access(video_path, os.R_OK) and os.path.isfile(video_path)):
            return False
        virus_found, virus_type = self._scan_for_viruses(video_path)
        if virus_found:
            os.remove(video_path)
            return False, None

        new_video_path = video_path
        if isinstance(file_name, const_get_stringtype()):
            # move file to the new filename
            new_video_path = os.path.join(os.path.dirname(video_path),
                os.path.basename(file_name)) # force basename
            scount = 0
            while os.path.lexists(new_video_path):
                scount += 1
                bpath = "%s.%s" % (str(scount), os.path.basename(file_name),)
                new_video_path = os.path.join(
                    os.path.dirname(video_path), bpath)
            shutil.move(video_path, new_video_path)

        yt_service = self.get_youtube_service()
        if yt_service is None:
            return False, None

        mykeywords = ', '.join([x.strip().strip(',') for x in \
            keywords + ["sabayon"] if (x.strip() and x.strip(",") and \
                (len(x.strip()) > 4))])
        gd_keywords = gdata.media.Keywords(text = mykeywords)

        mydescription = "%s: %s" % (pkgkey, description,)
        mytitle = "%s: %s" % (self._system_name, title,)
        my_media_group = gdata.media.Group(
            title = gdata.media.Title(text = mytitle),
            description = gdata.media.Description(
                description_type = 'plain',
                text = mydescription
            ),
            keywords = gd_keywords,
            category = gdata.media.Category(
                text = 'Tech',
                scheme = 'http://gdata.youtube.com/schemas/2007/categories.cat',
                label = 'Tech'
            ),
            player = None
        )
        video_entry = gdata.youtube.YouTubeVideoEntry(media = my_media_group)
        new_entry = yt_service.InsertVideoEntry(video_entry, new_video_path)
        if not isinstance(new_entry, gdata.youtube.YouTubeVideoEntry):
            return False, None
        video_url = new_entry.GetSwfUrl()
        video_id = os.path.basename(video_url)

        iddoc = self.insert_generic_doc(idkey, userid, username,
            self.DOC_TYPES['youtube_video'], video_id, title, description,
            keywords)
        if isinstance(iddoc, const_get_stringtype()):
            return False, (iddoc, None,)
        return True, (iddoc, video_id,)