Beispiel #1
0
def test_iteration_stops():
    q.clear(q.TEST)
    items = ["one", "two", "three"]
    for item in items:
        q.add(q.TEST, item)

    gen = q.iterate(q.TEST)
    for i in next(gen):
        pass
def test_iteration_stops():
    q.clear(q.TEST)
    items = ["one", "two", "three"]
    for item in items:
        q.add(q.TEST, item)

    gen = q.iterate(q.TEST)
    for i in next(gen):
        pass
def test_pop():
    q.clear(q.TEST)
    b = bookmark.Bookmark(bookmark={"bookmark": "bookmark"}, info={"info": "info"}, errors={"errors": "errors"},
                          status={"status": "status"})
    q.add(q.TEST, b)

    stack = q.pop_bookmark(q.TEST)

    assert stack.bookmark == b.bookmark
    assert stack.info == b.info
    assert stack.errors == b.errors
    assert stack.status == None  #status isn't serialized
def test_iteration():
    q.clear(q.TEST)
    items = ["one", "two", "three"]
    for item in items:
        q.add(q.TEST, item)

    gen = q.iterate(q.TEST)
    results = [next(gen), next(gen), next(gen)]
    assert results == items

    with pytest.raises(StopIteration):
        results = next(gen)
Beispiel #5
0
def test_iteration():
    q.clear(q.TEST)
    items = ["one", "two", "three"]
    for item in items:
        q.add(q.TEST, item)

    gen = q.iterate(q.TEST)
    results = [next(gen), next(gen), next(gen)]
    assert results == items

    with pytest.raises(StopIteration):
        results = next(gen)
Beispiel #6
0
def test_pop():
    q.clear(q.TEST)
    b = bookmark.Bookmark(bookmark={"bookmark": "bookmark"},
                          info={"info": "info"},
                          errors={"errors": "errors"},
                          status={"status": "status"})
    q.add(q.TEST, b)

    stack = q.pop_bookmark(q.TEST)

    assert stack.bookmark == b.bookmark
    assert stack.info == b.info
    assert stack.errors == b.errors
    assert stack.status == None  #status isn't serialized
Beispiel #7
0
def delete_bookmark():
    """
    Grab a bookmark from the delete queue
    and tell pinboard to delete it
    """
    item = q.pop_bookmark(q.DELETE)
    if not item:
        logging.info("Queue is empty, returning")
        return

    url = item.bookmark['href']

    if not pinboard_is_available():
        q.add(q.DELETE, item)
        return

    params = __base_request_params(url)

    result = requests.get(config.PINBOARD['api_base_url'] + "posts/delete", params=params)
    if result.status_code == requests.codes.too_many_requests: # 429 - Too many requests - give it a rest
        logging.warning("Pinboard returned error 429 - adding backoff flag")
        q.add(q.DELETE, item)
    elif result.status_code != requests.codes.ok:
        q.add(q.RETRY, item)
    return result.status_code
Beispiel #8
0
    def update_bookmark_location():
        """
        Update a pinboard bookmark.  Create a new bookmark with the new location.
        If successful, add the old bookmark to the delete queue.
        #TODO? call the delete task in celery? will it run amok?
        """

        if not pinboard_is_available():
            logging.info("Pinboard is unavailable.")
            return

        item = q.pop_bookmark(q.INSPECT)

        if not item:
            logging.info("Queue is empty, returning")
            return

        logging.info("Starting an update")

        bookmark = item.bookmark

        if (not bookmark['tags'] or
            not INSPECTION_TAG in bookmark['tags']):
            bookmark['tags'] = INSPECTION_TAG + " " + bookmark['tags']
        params = __full_request_params(item.info['url'], bookmark)
        params['replace'] = 'yes'

        try:
            response = requests.get(config.PINBOARD['api_base_url'] + 'posts/add', params)

            if response.status_code == requests.codes.ok:
                logging.info("Successfully updated tag")
            else:
                logging.info("booo, got a code of {}".format(response.status_code))
                q.add(q.INSPECT, item)

        except Exception as e:
            logging.error("Failed on PB tag for inspection: url: {} error: {}".format(item.bookmark, e))
            q.add(q.INSPECT, item)  # inspect
Beispiel #9
0
def update_bookmark_location():
    """
    Update a pinboard bookmark.  Create a new bookmark with the new location.
    If successful, add the old bookmark to the delete queue.
    #TODO? call the delete task in celery? will it run amok?
    """

    if not pinboard_is_available():
        logging.info("Pinboard is unavailable.")
        return

    item = q.pop_bookmark(q.UPDATE)

    if not item:
        logging.info("Queue is empty, returning")
        return

    logging.info("Starting an update")

    bookmark = item.bookmark
    params = __full_request_params(item.info['url'], bookmark)
    params['replace'] = 'no', # throw the error so we can check it out

    """
    params = {'url': item.info['url'],
              'auth_token': API_TOKEN,
              'format': 'json',
              'description': bookmark['description'],
              'tags': bookmark['tags'],
              'dt': bookmark['time'],
              'replace': 'no',  # throw the error so we can check it out
              'shared': bookmark['shared'],
              'toread': bookmark['toread']
              }
    """
    try:
        response = requests.get(config.PINBOARD['api_base_url'] + 'posts/add', params )

        if response.status_code == requests.codes.ok:
            logging.info("Got a success code, queueing for deletion")
            #old_url = bookmark['href']# item.info['old_location']
            old_bookmark = Bookmark(bookmark={'href': bookmark['href']}, info=item.info)
            q.add(q.DELETE, old_bookmark)
        else:
            logging.info("booo, got a code of {}".format(response.status_code))
            q.add(q.UPDATE, item)

    except Exception as e:
        logging.error("Failed on PB add: url: {} error: {}".format(item.bookmark, e))
        q.add(q.RETRY, item) #inspect
Beispiel #10
0
import neat_as_a_pin.src.pinboard
from neat_as_a_pin.conf import config
from neat_as_a_pin.src import url_checker
from neat_as_a_pin.src import url_store
"""
Given a pinboard export file, do an HTTP HEAD request on each link.
Save results to a redis queue based on HTTP status and next action to take.
"""

if __name__ == "__main__":
    pinboard_bookmarks_file = os.environ.get('FILE') or (
        config.DATA_DIR + '/pinboard_export.json')

    bookmarks = neat_as_a_pin.src.pinboard.read_pinboard_exports(
        pinboard_bookmarks_file)

    counter = 0

    for bookmark in bookmarks:
        result = url_checker.check_status_and_make_bookmark(bookmark)
        queue = url_store.status_to_queue(result.status)
        if queue is not url_store.DONE:
            url_store.add(queue, result, autosave=False)
        counter += 1

        if counter % 100 == 0:
            url_store.save()
        if counter % 400 == 0:
            print("At #{} {}".format(counter, datetime.datetime.now()))
import os
import datetime

import neat_as_a_pin.src.pinboard
from neat_as_a_pin.conf import config
from neat_as_a_pin.src import url_store

"""
Given a pinboard export file, do an HTTP HEAD request on each link.
Save results to a redis queue based on HTTP status and next action to take.
"""

if __name__ == "__main__":
    pinboard_bookmarks_file = os.environ.get('FILE') or (config.DATA_DIR + '/pinboard_export.json')

    bookmarks = neat_as_a_pin.src.pinboard.read_pinboard_exports(pinboard_bookmarks_file)

    counter = 0

    for bookmark in bookmarks:
        url_store.add(url_store.INBOX, bookmark, autosave=False)
        counter += 1
        if counter % 100 == 0:
            url_store.save()
            break
        if counter % 400 == 0:
            print("At #{} {}".format(counter, datetime.datetime.now()))

    url_store.save()
    print("Finished at #{}, total {}".format(datetime.datetime.now(), counter))
import datetime

import neat_as_a_pin.src.pinboard
from neat_as_a_pin.conf import config
from neat_as_a_pin.src import url_checker
from neat_as_a_pin.src import url_store

"""
Given a pinboard export file, do an HTTP HEAD request on each link.
Save results to a redis queue based on HTTP status and next action to take.
"""

if __name__ == "__main__":
    pinboard_bookmarks_file = os.environ.get('FILE') or (config.DATA_DIR + '/pinboard_export.json')

    bookmarks = neat_as_a_pin.src.pinboard.read_pinboard_exports(pinboard_bookmarks_file)

    counter = 0

    for bookmark in bookmarks:
        result = url_checker.check_status_and_make_bookmark(bookmark)
        queue = url_store.status_to_queue(result.status)
        if queue is not url_store.DONE:
            url_store.add(queue, result, autosave=False)
        counter += 1

        if counter % 100 == 0:
            url_store.save()
        if counter % 400 == 0:
            print("At #{} {}".format(counter, datetime.datetime.now()))