Пример #1
0
 def download(self):
     logger.warning(
         'Processing: Station "%s-%s", AC "%s", District "%s"...' %
         (self.num, self.name, self.ac_name, self.dist_name))
     self.__fetch_pdf('telugu')
     self.__fetch_pdf('english')
     row = (self.dist_name, self.ac_name, self.num, self.name,
            self.location, relpath(self.telugu_file) if self.telugu_file
            is not None else DOWNLOAD_FAILED, relpath(self.english_file)
            if self.english_file is not None else DOWNLOAD_FAILED)
     append_csv(self.session.track.output, row)
     self.session.track.set_done_station(self.num)
Пример #2
0
def _build(t):
    if (os.path.exists(t) and not state.is_generated(t)
          and not os.path.exists('%s.do' % t)):
        # an existing source file that is not marked as a generated file.
        # This step is mentioned by djb in his notes.  It turns out to be
        # important to prevent infinite recursion.  For example, a rule
        # called default.c.do could be used to try to produce hello.c,
        # which is undesirable since hello.c existed already.
        state.stamp(t)
        return  # success
    state.start(t)
    (dofile, basename, ext) = _find_do_file(t)
    if not dofile:
        raise BuildError('no rule to make %r' % t)
    state.stamp(dofile)
    tmpname = '%s.redo.tmp' % t
    unlink(tmpname)
    f = open(tmpname, 'w+')

    # this will run in the dofile's directory, so use only basenames here
    argv = ['sh', '-e',
            os.path.basename(dofile),
            os.path.basename(basename),  # target name (extension removed)
            ext,  # extension (if any), including leading dot
            os.path.basename(tmpname)  # randomized output file name
            ]
    if vars.VERBOSE:
        argv[1] += 'v'
        log_('\n')
    log('%s\n' % relpath(t, vars.STARTDIR))
    rv = subprocess.call(argv, preexec_fn=lambda: _preexec(t),
                         stdout=f.fileno())
    if rv==0:
        if os.path.exists(tmpname) and os.stat(tmpname).st_size:
            # there's a race condition here, but if the tmpfile disappears
            # at *this* point you deserve to get an error, because you're
            # doing something totally scary.
            os.rename(tmpname, t)
        else:
            unlink(tmpname)
        state.stamp(t)
    else:
        unlink(tmpname)
        state.unstamp(t)
    f.close()
    if rv != 0:
        raise BuildError('%s: exit code %d' % (t,rv))
    if vars.VERBOSE:
        log('%s (done)\n\n' % relpath(t, vars.STARTDIR))
Пример #3
0
def main(targets, buildfunc):
    retcode = [0]  # a list so that it can be reassigned from done()
    if vars.SHUFFLE:
        random.shuffle(targets)

    locked = []

    def done(t, rv):
        if rv:
            err('%s: exit code was %r\n' % (t, rv))
            retcode[0] = 1

    for i in range(len(targets)):
        t = targets[i]
        if os.path.exists('%s/all.do' % t):
            # t is a directory, but it has a default target
            targets[i] = '%s/all' % t
    
    for t in targets:
        jwack.get_token(t)
        lock = state.Lock(t)
        lock.trylock()
        if not lock.owned:
            log('%s (locked...)\n' % relpath(t, vars.STARTDIR))
            locked.append(t)
        else:
            jwack.start_job(t, lock,
                            lambda: buildfunc(t), lambda t,rv: done(t,rv))
    
    while locked or jwack.running():
        jwack.wait_all()
        if locked:
            t = locked.pop(0)
            lock = state.Lock(t)
            while not lock.owned:
                lock.wait()
                lock.trylock()
            assert(lock.owned)
            relp = relpath(t, vars.STARTDIR)
            log('%s (...unlocked!)\n' % relp)
            if state.stamped(t) == None:
                err('%s: failed in another thread\n' % relp)
                retcode[0] = 2
                lock.unlock()
            else:
                jwack.start_job(t, lock, 
                                lambda: buildfunc(t), lambda t,rv: done(t,rv))
    return retcode[0]
Пример #4
0
def _sname(typ, t, fromdir=None):
    # FIXME: t.replace(...) is non-reversible and non-unique here!
    if fromdir:
        t = os.path.join(fromdir, t)
    tnew = relpath(t, vars.BASE)
    v = vars.BASE + ("/.redo/%s^%s" % (typ, tnew.replace("/", "^")))
    debug2("sname: (%r) %r -> %r\n" % (os.getcwd(), t, tnew))
    return v
Пример #5
0
    def download(self):
        try:
            self.file = urldown(url=self.url, dest=self.outdir)
        except AssertionError:
            pass

        row = (self.ac_num, self.ac_name, self.station_num, self.station_name,
               self.lang, relpath(self.file) if self.file is not None else
               'Not available / Unable to download')
        append_csv(OUTPUT_FILE, row)
Пример #6
0
    def download(self):
        try:
            js = urlget(self.js_url)
        except AssertionError:
            return

        self.js_content = js
        parsed = self.parse_js()

        for item in parsed:
            ac, polls = item
            ac_num, ac_name = ac
            for i in range(polls):
                poll_num = i + 1
                url = self.get_pdf_url(ac_num, poll_num)
                try:
                    file = urldown(url=url, dest=getpath(TRIPURA_PDF_DIR))
                except AssertionError:
                    file = None
                row = (self.name, str(ac_num), ac_name, str(poll_num),
                       relpath(file) if file is not None else
                       'Not available / Unable to download')
                self.rolls.append(row)
                append_csv(OUTPUT_FILE, row)
Пример #7
0
def add_dep(t, mode, dep):
    debug2("add-dep(%r)\n" % t)
    open(_sname("dep", t), "a").write("%s %s\n" % (mode, relpath(dep, vars.BASE)))
Пример #8
0
 def run_args_from_fn(self, fn):
     return ['python', helpers.relpath('runner.py'), fn]
Пример #9
0
 def run_args_from_fn(self, fn):
     return ['python', helpers.relpath('runner.py'), fn]