# Path: xdfile/utils.py
# EOL = '\n'
# COLSEP = '\t'
# COLUMN_SEPARATOR = COLSEP
# WEEKDAYS = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ]
#     HEADER = '\033[95m'
#     OKBLUE = '\033[94m'
#     OKGREEN = '\033[92m'
#     WARNING = '\033[93m'
#     FAIL = '\033[91m'
#     ENDC = '\033[0m'
#     BOLD = '\033[1m'
#     UNDERLINE = '\033[4m'
# class bcolors:
# class AttrDict(dict):
# class OutputZipFile(zipfile.ZipFile):
# class OutputFile:
# class OutputDirectory:
# def space_with_nbsp(text):
# def split_xdid(xdid):
# def br_with_n(text):
# def get_log():
# def log(s, minverbose=0, severity='INFO'):
# def info(_s, _m=0):
# def warn(_s, _m=0):
# def error(_s, _m=0):
# def summary(_s, _m=0):
# def debug(s):
# def progress(rest=None, every=1):
# def args_parser(desc=""):
# def get_args(desc="", parser=None):
# def find_files(*paths, **kwargs):
# def to_timet(y, mon=1, d=1, h=0, m=0, s=0):
# def generate_zip_files(data):
# def find_files_with_time(*paths, **kwargs):
# def filetime(fn):
# def iso8601(timet=None):
# def datestr_to_datetime(s):
# def parse_xdid(path):
# def parse_pathname(path):
# def parse_pubid(fn):
# def construct_date(y, m, d):
# def parse_iso8601(s):
# def parse_seqnum(s):
# def parse_date_from_filename(fn):
# def clean_filename(fn):
# def replace_ext(fn, newext):
#     def __init__(self, *args, **kwargs):
# def autoconvert(v):
# def parse_tsv_data(contents, objname=None):
# def parse_tsv(fn, objname=None):
# def parse_tsv_rows(fn, objname=None):
#     def __init__(self, fnzip, toplevel="", log=True):
#     def write_file(self, fn, contents, timet=None):
#     def write(self, data):
#     def __del__(self):
#     def __init__(self, outfp=None):
#     def write_file(self, fn, contents, timet=None):
#     def write(self, data):
#     def write_row(self, fields):
#     def write_html(self, fn, innerhtml, title=""):
# def strip_toplevel(fn):
# def disambiguate_fn(fn, all_filenames):
#     def __init__(self, toplevel_dir):
#     def exists(self, fn):
#     def open_file(self, fn, mode='w'):
#     def close_file(self, fn):
#     def write_file(self, fn, contents, timet=None):
#     def write_html(self, fn, innerhtml, title=""):
#     def write_row(self, fn, headerstr, values):
# def open_output(fnout=None):
# def memoize(obj):
#     def memoizer(*args, **kwargs):
# def __dict_replace(s, d):
# def escape(data, entities={}):
# def consecutive(text):
# 
# Path: xdfile/metadatabase.py
# RECEIPTS_TSV = "gxd/receipts.tsv"
# SIMILAR_TSV = "gxd/similar.tsv"
# PUBLICATIONS_TSV = "gxd/publications.tsv"
# PUZZLE_SOURCES_TSV = "gxd/sources.tsv"
# RECENT_DOWNLOADS_TSV = "gxd/recent-downloads.tsv"
# STATS_TSV = "pub/stats.tsv"
# class Error(Exception):
# def xd_receipts():
# def xd_receipts_rows():
# def xd_publications():
# def xd_puzzle(xdid):
# def xd_puzzles_dict():
# def xd_puzzles(xdid=''):
# def get_author(xdid=''):
# def _puzzles():
# def xd_puzzle_sources():
# def xd_recent_downloads():
# def delete_stats():
# def stats():
# def read_rows(tablename):
# def append_row(tablename, row):
# def get_last_receipt_id():
# def xd_receipts_row(CaptureTime="", ReceivedTime="", ExternalSource="", InternalSource="", SourceFilename="", xdid=""):
# def check_already_received(ExternalSource, SourceFilename):
# def xd_sources_row(SourceFilename, ExternalSource, DownloadTime):
# def xd_recent_download(pubid, dt):
# def update_puzzles_row(xd):
# def xd_similar(xdid=''):
# def xd_similar_all():
# def public_patterns():
# def is_public(xdid):
# 
# Path: xdfile/catalog.py
# PUBREGEX_TSV = 'gxd/pubregex.tsv'
# def get_publication(xd):
# def find_pubid(rowstr):
# def deduce_set_seqnum(xd):
# def deduce_xdid(xd, mdtext):
# def get_shelf_path(xd, pubid, mdtext):


import re
from xdfile import utils, metadatabase as metadb, catalog
#


def main():
    args = utils.get_args()

    all_receipts = metadb.xd_receipts_header

    receipts = metadb.xd_receipts_rows()
    rids = set()  # set of ReceiptId

    for r in receipts:
        oldpubid = ""
        oldpubid = utils.parse_pubid(r.xdid or '')

        newpubid = catalog.find_pubid("|".join((str(x) for x in r)))

        d = r._asdict()

        if newpubid and newpubid != oldpubid:
            seqnum = utils.parse_seqnum(r.xdid or r.SourceFilename)
            if seqnum:
                newxdid = newpubid + seqnum
                utils.info("changing xdid from '%s' to '%s'" % (r.xdid, newxdid))
                d["xdid"] = newxdid
            else:
                utils.info("no date or number in xdid, not reshelving")

        all_receipts += metadb.xd_receipts_row(**d)


# Path: xdfile/utils.py
# EOL = '\n'
# COLSEP = '\t'
# COLUMN_SEPARATOR = COLSEP
# WEEKDAYS = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ]
#     HEADER = '\033[95m'
#     OKBLUE = '\033[94m'
#     OKGREEN = '\033[92m'
#     WARNING = '\033[93m'
#     FAIL = '\033[91m'
#     ENDC = '\033[0m'
#     BOLD = '\033[1m'
#     UNDERLINE = '\033[4m'
# class bcolors:
# class AttrDict(dict):
# class OutputZipFile(zipfile.ZipFile):
# class OutputFile:
# class OutputDirectory:
# def space_with_nbsp(text):
# def split_xdid(xdid):
# def br_with_n(text):
# def get_log():
# def log(s, minverbose=0, severity='INFO'):
# def info(_s, _m=0):
# def warn(_s, _m=0):
# def error(_s, _m=0):
# def summary(_s, _m=0):
# def debug(s):
# def progress(rest=None, every=1):
# def args_parser(desc=""):
# def get_args(desc="", parser=None):
# def find_files(*paths, **kwargs):
# def to_timet(y, mon=1, d=1, h=0, m=0, s=0):
# def generate_zip_files(data):
# def find_files_with_time(*paths, **kwargs):
# def filetime(fn):
# def iso8601(timet=None):
# def datestr_to_datetime(s):
# def parse_xdid(path):
# def parse_pathname(path):
# def parse_pubid(fn):
# def construct_date(y, m, d):
# def parse_iso8601(s):
# def parse_seqnum(s):
# def parse_date_from_filename(fn):
# def clean_filename(fn):
# def replace_ext(fn, newext):
#     def __init__(self, *args, **kwargs):
# def autoconvert(v):
# def parse_tsv_data(contents, objname=None):
# def parse_tsv(fn, objname=None):
# def parse_tsv_rows(fn, objname=None):
#     def __init__(self, fnzip, toplevel="", log=True):
#     def write_file(self, fn, contents, timet=None):
#     def write(self, data):
#     def __del__(self):
#     def __init__(self, outfp=None):
#     def write_file(self, fn, contents, timet=None):
#     def write(self, data):
#     def write_row(self, fields):
#     def write_html(self, fn, innerhtml, title=""):
# def strip_toplevel(fn):
# def disambiguate_fn(fn, all_filenames):
#     def __init__(self, toplevel_dir):
#     def exists(self, fn):
#     def open_file(self, fn, mode='w'):
#     def close_file(self, fn):
#     def write_file(self, fn, contents, timet=None):
#     def write_html(self, fn, innerhtml, title=""):
#     def write_row(self, fn, headerstr, values):
# def open_output(fnout=None):
# def memoize(obj):
#     def memoizer(*args, **kwargs):
# def __dict_replace(s, d):
# def escape(data, entities={}):
# def consecutive(text):
# 
# Path: xdfile/metadatabase.py
# RECEIPTS_TSV = "gxd/receipts.tsv"
# SIMILAR_TSV = "gxd/similar.tsv"
# PUBLICATIONS_TSV = "gxd/publications.tsv"
# PUZZLE_SOURCES_TSV = "gxd/sources.tsv"
# RECENT_DOWNLOADS_TSV = "gxd/recent-downloads.tsv"
# STATS_TSV = "pub/stats.tsv"
# class Error(Exception):
# def xd_receipts():
# def xd_receipts_rows():
# def xd_publications():
# def xd_puzzle(xdid):
# def xd_puzzles_dict():
# def xd_puzzles(xdid=''):
# def get_author(xdid=''):
# def _puzzles():
# def xd_puzzle_sources():
# def xd_recent_downloads():
# def delete_stats():
# def stats():
# def read_rows(tablename):
# def append_row(tablename, row):
# def get_last_receipt_id():
# def xd_receipts_row(CaptureTime="", ReceivedTime="", ExternalSource="", InternalSource="", SourceFilename="", xdid=""):
# def check_already_received(ExternalSource, SourceFilename):
# def xd_sources_row(SourceFilename, ExternalSource, DownloadTime):
# def xd_recent_download(pubid, dt):
# def update_puzzles_row(xd):
# def xd_similar(xdid=''):
# def xd_similar_all():
# def public_patterns():
# def is_public(xdid):
# 
# Path: xdfile/catalog.py
# PUBREGEX_TSV = 'gxd/pubregex.tsv'
# def get_publication(xd):
# def find_pubid(rowstr):
# def deduce_set_seqnum(xd):
# def deduce_xdid(xd, mdtext):
# def get_shelf_path(xd, pubid, mdtext):


# Path: scripts/19-reshelve.py
import re
from xdfile import utils, metadatabase as metadb, catalog

#


def main():
    args = utils.get_args()

    all_receipts = metadb.xd_receipts_header

    receipts = metadb.xd_receipts_rows()
    rids = set()  # set of ReceiptId

    for r in receipts:
        oldpubid = ""
        oldpubid = utils.parse_pubid(r.xdid or '')

        newpubid = catalog.find_pubid("|".join((str(x) for x in r)))

        d = r._asdict()

        if newpubid and newpubid != oldpubid:
            seqnum = utils.parse_seqnum(r.xdid or r.SourceFilename)
            if seqnum:
                newxdid = newpubid + seqnum
                utils.info("changing xdid from '%s' to '%s'" % (r.xdid, newxdid))
                d["xdid"] = newxdid
            else:
                utils.info("no date or number in xdid, not reshelving")

        all_receipts += metadb.xd_receipts_row(**d)


    open(metadb.RECEIPTS_TSV, 'w').write(all_receipts)