Esempio n. 1
0
def process(order):
    """ Process this timestamp """
    cursor = PGCONN.cursor()
    ts = datetime.datetime.strptime(order[:6],
                                    "%y%m%d").replace(tzinfo=pytz.utc)
    base = ts - datetime.timedelta(days=2)
    ceiling = ts + datetime.timedelta(days=2)
    subprocess.call("tar -xzf %s" % (order, ), shell=True)
    inserts = 0
    deletes = 0
    filesparsed = 0
    bad = 0
    for fn in glob.glob("%s[0-2][0-9].*" % (order[:6], )):
        content = re.sub(BAD_CHARS, "",
                         open(fn, 'rb').read().decode('ascii', 'ignore'))
        # Now we are getting closer, lets split by the delimter as we
        # may have multiple products in one file!
        for bulletin in content.split("\001"):
            if bulletin == '':
                continue
            try:
                bulletin = noaaport_text(bulletin)
                prod = TextProduct(bulletin, utcnow=ts, parse_segments=False)
                prod.source = XREF_SOURCE.get(prod.source, prod.source)
            except Exception as exp:
                if DEBUG:
                    print('Parsing Failure %s' % (exp, ))
                bad += 1
                continue
            if prod.valid < base or prod.valid > ceiling:
                # print('Timestamp out of bounds %s %s %s' % (base, prod.valid,
                #                                            ceiling))
                bad += 1
                continue

            table = "products_%s_%s" % (prod.valid.year,
                                        ("0712"
                                         if prod.valid.month > 6 else "0106"))
            cursor.execute(
                """
            DELETE from """ + table + """ WHERE pil = %s and
            entered = %s and source = %s and data = %s
            """, (prod.afos, prod.valid, prod.source, bulletin))
            deletes += cursor.rowcount
            cursor.execute(
                """INSERT into """ + table + """
        (data, pil, entered, source, wmo) values (%s,%s,%s,%s,%s)
        """, (bulletin, prod.afos, prod.valid, prod.source, prod.wmo))
            inserts += 1

        os.unlink(fn)
        filesparsed += 1
    print(("%s Files Parsed: %s Inserts: %s Deletes: %s Bad: %s") %
          (order, filesparsed, inserts, deletes, bad))
    cursor.close()
    PGCONN.commit()