This file is indexed.

/usr/share/pyshared/flickrapi/reportinghttp.py is in python-flickrapi 1.2-3.1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
# -*- encoding: utf-8 -*-

'''HTTPHandler that supports a callback method for progress reports.
'''

import urllib2
import httplib
import logging

__all__ = ['urlopen']

logging.basicConfig()
LOG = logging.getLogger(__name__)

progress_callback = None

class ReportingSocket(object):
    '''Wrapper around a socket. Gives progress report through a
    callback function.
    '''
    
    min_chunksize = 10240
    
    def __init__(self, socket):
        self.socket = socket

    def sendall(self, bits):
        '''Sends all data, calling the callback function for every
        sent chunk.
        '''

        LOG.debug("SENDING: %s..." % bits[0:30])
        total = len(bits)
        sent = 0
        chunksize = max(self.min_chunksize, total / 100)
        
        while len(bits) > 0:
            send = bits[0:chunksize]
            self.socket.sendall(send)
            sent += len(send)
            if progress_callback:
                progress = float(sent) / total * 100
                progress_callback(progress, sent == total)
            
            bits = bits[chunksize:]
    
    def makefile(self, mode, bufsize):
        '''Returns a file-like object for the socket.'''

        return self.socket.makefile(mode, bufsize)
    
    def close(self):
        '''Closes the socket.'''

        return self.socket.close()
    
class ProgressHTTPConnection(httplib.HTTPConnection):
    '''HTTPConnection that gives regular progress reports during
    sending of data.
    '''

    def connect(self):
        '''Connects to a HTTP server.'''

        httplib.HTTPConnection.connect(self)
        self.sock = ReportingSocket(self.sock)
        
class ProgressHTTPHandler(urllib2.HTTPHandler):
    '''HTTPHandler that gives regular progress reports during sending
    of data.
    '''
    def http_open(self, req):
        return self.do_open(ProgressHTTPConnection, req)

def set_callback(method):
    '''Sets the callback function to use for progress reports.'''

    global progress_callback # IGNORE:W0603

    if not callable(method):
        raise ValueError('Callback method must be callable')
    
    progress_callback = method

def urlopen(url_or_request, callback, body=None):
    '''Opens an URL using the ProgressHTTPHandler.'''

    set_callback(callback)
    opener = urllib2.build_opener(ProgressHTTPHandler)
    return opener.open(url_or_request, body)

if __name__ == '__main__':
    def upload(progress, finished):
        '''Upload progress demo'''

        LOG.info("%3.0f - %s" % (progress, finished))
    
    conn = urlopen("http://www.flickr.com/", 'x' * 10245, upload)
    data = conn.read()
    LOG.info("Read data")
    print data[:100].split('\n')[0]