src/hp/utils.py
author ymh <ymh.work@gmail.com>
Fri, 16 Nov 2012 18:33:51 +0100
changeset 65 6289931858a7
parent 45 316a0101512e
child 83 07c9aa7de765
permissions -rw-r--r--
add a project property to override the front project.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Nov 14, 2012
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
import urlparse
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
import requests
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from . import settings
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
import logging
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
logger = logging.getLogger(__name__)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
def get_abs_url(url, default_domain):
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    if not url:
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
        return url
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    url_part = urlparse.urlparse(url)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    if url_part.netloc:
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        return url
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    else:
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        pr = urlparse.ParseResult('http', default_domain, url_part.path, url_part.params, url_part.query, url_part.fragment)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        return pr.geturl()
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
def get_all_objects(res_url, field_filter):
65
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    27
    objects = []
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    url = res_url
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    while url:        
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        r = requests.get(url)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        if r.status_code != requests.codes.ok: #@UndefinedVariable
65
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    32
            logger.error("Error when requesting objects " + repr(r.status_code) + " : " + repr(r.text))
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            break
65
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    34
        objects.extend([ c for c in  r.json['objects'] if field_filter is None or c.get(field_filter, None) ])
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        url = get_abs_url(r.json.get('meta',{}).get('next',None), settings.LDT_NETLOC)
65
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    36
    return objects
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    37
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    38