# Path: pump/vivopump.py
# class DefNotFoundException(Exception):
# class InvalidDefException(Exception):
# class InvalidSourceException(Exception):
# class PathLengthException(Exception):
# class UnicodeCsvReader(object):
# class UnicodeDictReader(csv.DictReader):
#     class RowError(Exception):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, f, encoding="utf-8", **kwargs):
#     def __iter__(self):
#     def next(self):
#     def line_num(self):
#     def __init__(self, f, encoding="utf-8", fieldnames=None, **kwds):
# def read_csv(filename, skip=True, delimiter='|'):
# def read_csv_fp(fp, skip=True, delimiter="|"):
# def write_csv_fp(fp, data, delimiter='|'):
# def write_csv(filename, data, delimiter='|'):
# def replace_initials(s):
#     def repl_function(m):
# def key_string(s):
# def get_vivo_types(selector, parms, separator=';'):
# def get_vivo_ufid(parms):
# def get_vivo_publishers(parms):
# def get_vivo_journals(parms):
# def get_vivo_ccn(parms):
# def get_vivo_sponsorid(parms):
# def get_vivo_authors(parms):
# def get_vivo_positions(parms):
# def read_update_def(filename, prefix):
#     def make_prefix_dict(prefix_text):
#     def cast_to_rdflib(t):
#     def fixit(current_object, prefix_dictionary):
#     def add_order(a, b):
#     def validate_update_def(a):
#     def add_object_names_and_step_attributes(a):
# def add_qualifiers(input_path):
# def gather_types(input_step, varname):
# def make_update_query(entity_sparql, path):
# def make_rdf_term(row_term):
# def get_graph(update_def, query_parms):
# def new_uri(parms):
# def vivo_query(query, parms):
# def write_update_def(update_def, filename):
# def parse_pages(pages):
# def parse_date_parts(month, year):
# def get_args():
# def get_parms():
# def add_type_restriction(step):
# def make_get_query(update_def):
# def unique_path(path):
# def make_get_data(update_def, result_set):
# def make_rdf_term_from_source(value, step):
# def prepare_column_values(update_string, intra, step_def, enum, row, column_name):
# def load_enum(update_def):
# def create_enum(filename, query, parms, trim=0, skip=0):


import shelve
import sys
from pump.vivopump import read_csv_fp, write_csv_fp, improve_phone_number, improve_display_name, \
    improve_jobcode_description

"""
    contact_filter.py -- add contact data to the people to be updated
"""

__author__ = "Michael Conlon"
__copyright__ = "Copyright 2016 (c) Michael Conlon"
__license__ = "New BSD License"
__version__ = "0.01"



contact_shelve = shelve.open('contact.db')
contact_ufids = set(contact_shelve.keys())  # a set of ufids that will not be in the output
contact_names = set(contact_shelve[contact_ufids.pop()].keys())
data_in = read_csv_fp(sys.stdin)
print >>sys.stderr, len(data_in)
found = 0
not_found = 0
data_out = {}
for row, data in data_in.items():
    new_data = dict(data)
    if data['UFID'] in contact_ufids:
        found += 1
        contact_data = contact_shelve[data['UFID']]
        for name, value in contact_data.items():
            new_data[name] = value
        new_data['UF_BUSINESS_FAX'] = improve_phone_number(new_data['UF_BUSINESS_FAX'])
        new_data['UF_BUSINESS_PHONE'] = improve_phone_number(new_data['UF_BUSINESS_PHONE'])
        new_data['DISPLAY_NAME'] = improve_display_name(new_data['DISPLAY_NAME'])

# Path: pump/vivopump.py
# class DefNotFoundException(Exception):
# class InvalidDefException(Exception):
# class InvalidSourceException(Exception):
# class PathLengthException(Exception):
# class UnicodeCsvReader(object):
# class UnicodeDictReader(csv.DictReader):
#     class RowError(Exception):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, value):
#     def __str__(self):
#     def __init__(self, f, encoding="utf-8", **kwargs):
#     def __iter__(self):
#     def next(self):
#     def line_num(self):
#     def __init__(self, f, encoding="utf-8", fieldnames=None, **kwds):
# def read_csv(filename, skip=True, delimiter='|'):
# def read_csv_fp(fp, skip=True, delimiter="|"):
# def write_csv_fp(fp, data, delimiter='|'):
# def write_csv(filename, data, delimiter='|'):
# def replace_initials(s):
#     def repl_function(m):
# def key_string(s):
# def get_vivo_types(selector, parms, separator=';'):
# def get_vivo_ufid(parms):
# def get_vivo_publishers(parms):
# def get_vivo_journals(parms):
# def get_vivo_ccn(parms):
# def get_vivo_sponsorid(parms):
# def get_vivo_authors(parms):
# def get_vivo_positions(parms):
# def read_update_def(filename, prefix):
#     def make_prefix_dict(prefix_text):
#     def cast_to_rdflib(t):
#     def fixit(current_object, prefix_dictionary):
#     def add_order(a, b):
#     def validate_update_def(a):
#     def add_object_names_and_step_attributes(a):
# def add_qualifiers(input_path):
# def gather_types(input_step, varname):
# def make_update_query(entity_sparql, path):
# def make_rdf_term(row_term):
# def get_graph(update_def, query_parms):
# def new_uri(parms):
# def vivo_query(query, parms):
# def write_update_def(update_def, filename):
# def parse_pages(pages):
# def parse_date_parts(month, year):
# def get_args():
# def get_parms():
# def add_type_restriction(step):
# def make_get_query(update_def):
# def unique_path(path):
# def make_get_data(update_def, result_set):
# def make_rdf_term_from_source(value, step):
# def prepare_column_values(update_string, intra, step_def, enum, row, column_name):
# def load_enum(update_def):
# def create_enum(filename, query, parms, trim=0, skip=0):


# Path: uf_examples/people/contact_filter.py
import shelve
import sys
from pump.vivopump import read_csv_fp, write_csv_fp, improve_phone_number, improve_display_name, \
    improve_jobcode_description


"""
    contact_filter.py -- add contact data to the people to be updated
"""

__author__ = "Michael Conlon"
__copyright__ = "Copyright 2016 (c) Michael Conlon"
__license__ = "New BSD License"
__version__ = "0.01"



contact_shelve = shelve.open('contact.db')
contact_ufids = set(contact_shelve.keys())  # a set of ufids that will not be in the output
contact_names = set(contact_shelve[contact_ufids.pop()].keys())
data_in = read_csv_fp(sys.stdin)
print >>sys.stderr, len(data_in)
found = 0
not_found = 0
data_out = {}
for row, data in data_in.items():
    new_data = dict(data)
    if data['UFID'] in contact_ufids:
        found += 1
        contact_data = contact_shelve[data['UFID']]
        for name, value in contact_data.items():
            new_data[name] = value
        new_data['UF_BUSINESS_FAX'] = improve_phone_number(new_data['UF_BUSINESS_FAX'])
        new_data['UF_BUSINESS_PHONE'] = improve_phone_number(new_data['UF_BUSINESS_PHONE'])
        new_data['DISPLAY_NAME'] = improve_display_name(new_data['DISPLAY_NAME'])

        new_data['WORKINGTITLE'] = improve_jobcode_description(new_data['WORKINGTITLE'])