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
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
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)
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, )
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)
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,)