# 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/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):


from xdfile import metadatabase as metadb
from xdfile import utils
#!/usr/bin/python3

# Usage: $0 -o xd-public.zip gxd/

# makes .zip of all public .xd files



def main():
    args = utils.get_args()
    outf = utils.open_output()  # should be .zip

    outf.log = False
    outf.toplevel = 'xd'
    outf.write_file('README', open('doc/zip-README').read())

    for fn, contents in sorted(utils.find_files(*args.inputs, ext='.xd')):
        xdid = utils.parse_xdid(fn)
        if metadb.is_public(xdid):

# 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/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: scripts/28-mkzip-public.py
from xdfile import metadatabase as metadb
from xdfile import utils

#!/usr/bin/python3

# Usage: $0 -o xd-public.zip gxd/

# makes .zip of all public .xd files



def main():
    args = utils.get_args()
    outf = utils.open_output()  # should be .zip

    outf.log = False
    outf.toplevel = 'xd'
    outf.write_file('README', open('doc/zip-README').read())

    for fn, contents in sorted(utils.find_files(*args.inputs, ext='.xd')):
        xdid = utils.parse_xdid(fn)
        if metadb.is_public(xdid):

            outf.write_file(utils.strip_toplevel(fn), contents)