def posts_add(request): """Add a new bmark into the system given request params For example usage make sure to check out the unit tests in the test_delicious directory """ params = request.params request.response.content_type = 'text/xml' if 'url' in params and params['url']: # check if we already have this try: mark = BmarkMgr.get_by_url(params['url'], username=request.user.username) mark.description = params.get('description', mark.description) mark.extended = params.get('extended', mark.extended) new_tags = params.get('tags', None) if new_tags: mark.update_tags(new_tags) except NoResultFound: # then let's store this thing # if we have a dt param then set the date to be that manual # date if 'dt' in request.params: # date format by delapi specs: # CCYY-MM-DDThh:mm:ssZ fmt = "%Y-%m-%dT%H:%M:%SZ" stored_time = datetime.strptime(request.params['dt'], fmt) else: stored_time = None mark = BmarkMgr.store(params['url'], request.user.username, params.get('description', ''), params.get('extended', ''), params.get('tags', ''), dt=stored_time, inserted_by="DELICIOUS_API") # if we have content, stick it on the object here if 'content' in request.params: content = StringIO(request.params['content']) content.seek(0) parsed = ReadContent.parse(content, content_type="text/html", url=mark.hashed.url) mark.readable = Readable() mark.readable.content = parsed.content mark.readable.content_type = parsed.content_type mark.readable.status_code = parsed.status mark.readable.status_message = parsed.status_message return '<result code="done" />' else: return '<result code="Bad Request: missing url" />'
def test_given_content(self): """Test that we can parse out given html content ahead of time""" file_path = os.path.dirname(__file__) html_content = open(os.path.join(file_path, 'readable_sample.html')) read = ReadContent.parse(html_content) ok_(read.status == 1, "The status is 1: " + str(read.status)) ok_(not read.is_image(), "The content is not an image") ok_(read.content is not None, "Content should not be none") ok_('Bookie' in read.content, u"The word Bookie is in the content: " + unicode(read.content))
def bmark_add(request): """Add a new bookmark to the system""" rdict = request.matchdict if 'url' in request.params or 'hash_id' in request.params: params = request.params elif 'url' in request.json_body or 'hash_id' in request.json_body: params = request.json_body else: request.response.status_int = 400 return { 'error': 'Bad Request: missing url', } user = request.user if 'url' not in params and 'hash_id' not in rdict: request.response.status_int = 400 return { 'error': 'Bad Request: missing url', } elif 'hash_id' in rdict: try: mark = BmarkMgr.get_by_hash(rdict['hash_id'], username=user.username) mark = _update_mark(mark, params) except NoResultFound: request.response.status_code = 404 return { 'error': 'Bookmark with hash id {0} not found.'.format( rdict['hash_id']) } else: # check if we already have this try: mark = BmarkMgr.get_by_url(params['url'], username=user.username) mark = _update_mark(mark, params) except NoResultFound: # then let's store this thing # if we have a dt param then set the date to be that manual # date if 'dt' in request.params: # date format by delapi specs: # CCYY-MM-DDThh:mm:ssZ fmt = "%Y-%m-%dT%H:%M:%SZ" stored_time = datetime.strptime(request.params['dt'], fmt) else: stored_time = None # check to see if we know where this is coming from inserted_by = params.get('inserted_by', 'unknown_api') mark = BmarkMgr.store(params['url'], user.username, params.get('description', ''), params.get('extended', ''), params.get('tags', ''), dt=stored_time, inserted_by=inserted_by, ) # we need to process any commands associated as well commander = Commander(mark) mark = commander.process() # if we have content, stick it on the object here if 'content' in params: content = StringIO(params['content']) content.seek(0) parsed = ReadContent.parse(content, content_type="text/html", url=mark.hashed.url) mark.readable = Readable() mark.readable.content = parsed.content mark.readable.content_type = parsed.content_type mark.readable.status_code = parsed.status mark.readable.status_message = parsed.status_message # we need to flush here for new tag ids, etc DBSession.flush() mark_data = dict(mark) mark_data['tags'] = [dict(mark.tags[tag]) for tag in mark.tags.keys()] return { 'bmark': mark_data, 'location': request.route_url('bmark_readable', hash_id=mark.hash_id, username=user.username), }
def posts_add(request): """Add a new bmark into the system given request params For example usage make sure to check out the unit tests in the test_delicious directory """ params = request.params request.response.content_type = 'text/xml' if 'url' in params and params['url']: # check if we already have this try: mark = BmarkMgr.get_by_url(params['url'], username=request.user.username) mark.description = params.get('description', mark.description) mark.extended = params.get('extended', mark.extended) new_tags = params.get('tags', None) if new_tags: mark.update_tags(new_tags) except NoResultFound: # then let's store this thing # if we have a dt param then set the date to be that manual # date if 'dt' in request.params: # date format by delapi specs: # CCYY-MM-DDThh:mm:ssZ fmt = "%Y-%m-%dT%H:%M:%SZ" stored_time = datetime.strptime(request.params['dt'], fmt) else: stored_time = None mark = BmarkMgr.store(params['url'], request.user.username, params.get('description', ''), params.get('extended', ''), params.get('tags', ''), dt=stored_time, inserted_by="DELICIOUS_API" ) # if we have content, stick it on the object here if 'content' in request.params: content = StringIO(request.params['content']) content.seek(0) parsed = ReadContent.parse(content, content_type="text/html", url=mark.hashed.url) mark.readable = Readable() mark.readable.content = parsed.content mark.readable.content_type = parsed.content_type mark.readable.status_code = parsed.status mark.readable.status_message = parsed.status_message return '<result code="done" />' else: return '<result code="Bad Request: missing url" />'
def bmark_add(request): """Add a new bookmark to the system""" rdict = request.matchdict if 'url' in request.params or 'hash_id' in request.params: params = request.params elif 'url' in request.json_body or 'hash_id' in request.json_body: params = request.json_body else: request.response.status_int = 400 return { 'error': 'Bad Request: missing url', } user = request.user if 'url' not in params and 'hash_id' not in rdict: request.response.status_int = 400 return { 'error': 'Bad Request: missing url', } elif 'hash_id' in rdict: try: mark = BmarkMgr.get_by_hash(rdict['hash_id'], username=user.username) mark = _update_mark(mark, params) except NoResultFound: request.response.status_code = 404 return { 'error': 'Bookmark with hash id {0} not found.'.format(rdict['hash_id']) } else: # check if we already have this try: mark = BmarkMgr.get_by_url(params['url'], username=user.username) mark = _update_mark(mark, params) except NoResultFound: # then let's store this thing # if we have a dt param then set the date to be that manual # date if 'dt' in request.params: # date format by delapi specs: # CCYY-MM-DDThh:mm:ssZ fmt = "%Y-%m-%dT%H:%M:%SZ" stored_time = datetime.strptime(request.params['dt'], fmt) else: stored_time = None # check to see if we know where this is coming from inserted_by = params.get('inserted_by', 'unknown_api') mark = BmarkMgr.store( params['url'], user.username, params.get('description', ''), params.get('extended', ''), params.get('tags', ''), dt=stored_time, inserted_by=inserted_by, ) # we need to process any commands associated as well commander = Commander(mark) mark = commander.process() # if we have content, stick it on the object here if 'content' in params: content = StringIO(params['content']) content.seek(0) parsed = ReadContent.parse(content, content_type="text/html", url=mark.hashed.url) mark.readable = Readable() mark.readable.content = parsed.content mark.readable.content_type = parsed.content_type mark.readable.status_code = parsed.status mark.readable.status_message = parsed.status_message # we need to flush here for new tag ids, etc DBSession.flush() mark_data = dict(mark) mark_data['tags'] = [dict(mark.tags[tag]) for tag in mark.tags.keys()] return { 'bmark': mark_data, 'location': request.route_url('bmark_readable', hash_id=mark.hash_id, username=user.username), }
def posts_add(request): """Add a new bmark into the system given request params For example usage make sure to check out the unit tests in the test_delicious directory """ params = request.params with Authorize(request.registry.settings.get('api_key', ''), params.get('api_key', None)): request.response_content_type = 'text/xml' if 'url' in params and params['url']: # check if we already have this try: mark = BmarkMgr.get_by_url(params['url']) mark.description = params.get('description', mark.description) mark.extended = params.get('extended', mark.extended) new_tags = params.get('tags', None) if new_tags: mark.update_tags(new_tags) except NoResultFound: # then let's store this thing # if we have a dt param then set the date to be that manual # date if 'dt' in request.params: # date format by delapi specs: # CCYY-MM-DDThh:mm:ssZ fmt = "%Y-%m-%dT%H:%M:%SZ" stored_time = datetime.strptime(request.params['dt'], fmt) else: stored_time = None # we want to store fulltext info so send that along to the # import processor conn_str = request.registry.settings.get('sqlalchemy.url', False) fulltext = get_fulltext_handler(conn_str) mark = BmarkMgr.store(params['url'], params.get('description', ''), params.get('extended', ''), params.get('tags', ''), dt=stored_time, fulltext=fulltext, ) # if we have content, stick it on the object here if 'content' in request.params: content = StringIO(request.params['content']) content.seek(0) parsed = ReadContent.parse(content, content_type="text/html") mark.hashed.readable = Readable() mark.hashed.readable.content = parsed.content mark.hashed.readable.content_type = parsed.content_type mark.hashed.readable.status_code = parsed.status mark.hashed.readable.status_message = parsed.status_message return '<result code="done" />' else: return '<result code="Bad Request: missing url" />'