#!/usr/bin/env python

"""

"""

__author__ = 'Jay Taylor [@jtaylor]'


import os, sys, subprocess
from multiprocessing import Pool
from subprocess import Popen


class LineGrouping(object):
    def __init__(self, fileResource):
        """
        File resource can be either the actual file handle or a string
        containing a file path.

        # Test LineGrouping class
        >>> from StringIO import StringIO
        >>> fh = StringIO()
        >>> lg = LineGrouping(fh)
        >>> lg.lines = [1,2,3,4,5,6,7,8,9,10]
        >>> lg.getNLines(3)
        [1, 2, 3]
        >>> lg.getNLines(4)
        [4, 5, 6, 7]
        >>> lg.getNLines(5)
        [8, 9, 10, None, None]
        >>> lg.getNLines(6)
        [None, None, None, None, None, None]
        """
        tfr = type(fileResource)
        if tfr is str:
            with open(fileResource, 'r') as fh:
                self.lines = [line.strip() for line in fh]
        else:
            self.lines = [line.strip() for line in fileResource]

        self.lastOffset = 0

    def getNLines(self, thisMany):
        if len(self.lines) == self.lastOffset:
            return ([None] * thisMany)

        if len(self.lines) >= self.lastOffset + thisMany:
            result = self.lines[self.lastOffset:self.lastOffset + thisMany]
            self.lastOffset += thisMany

        else:
            result = self.lines[self.lastOffset:]
            if len(result) < thisMany:
                result = result + ([None] * (thisMany - len(result)))

            self.lastOffset = len(self.lines)

        return result


basePath = 'http://repo.typesafe.com/typesafe/releases/'

def test(subPath):
    if subPath is None:
        return

    url = basePath + subPath

    print url
    args = ['wget', url, '-e', 'robots=off', '-r', '-np', '-m', '-k', '-U', 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.9']
    p = Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return p.wait()
#    subprocess.call(
#        ['wget', url, '-e', 'robots=off', '-m', '-k', '-U', 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.9'],
#        shell=True
#    )

def typesafe():
    with open('typesafe.txt', 'r') as fh:
        lg = LineGrouping(fh) #'typesafe.txt')
    print lg.getNLines(10)

    pool = Pool(5)
    lines = lg.getNLines(5)
    while len(filter(lambda x: x is not None, lines)) > 0:
        print 'Another round..'
        pool.map(test, lines)
        lines = lg.getNLines(5)


if __name__ == '__main__':
    import doctest
    doctest.testmod()
    typesafe()

