示例#1
0
def getcustomfields():
    """
    Grab the discogs custom fields and insert/update the db
    """
    for idx in range(len(user.collection_fields)):
        query = None

        #  Check field table for field
        db_instance = dbq.exec_db_query_dict(dbq.get_field,
                                             user.collection_fields[idx].id)

        if db_instance == None:
            query = dbq.custom_field_insert
            query_data = {
                'field_id': user.collection_fields[idx].id,
                'field_name': user.collection_fields[idx].name,
                'insert_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            }

        elif db_instance['field_name'] != user.collection_fields[idx].name:
            query = dbq.custom_field_update
            query_data = {
                'field_id': user.collection_fields[idx].id,
                'field_name': user.collection_fields[idx].name,
                'update_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            }

        if query != None:
            dbq.exec_db_query(query, query_data, query_type='insert')
示例#2
0
def saleschannels(type, stores):
    """
    Type is either new or update
    """
    if type == "new":
        query = dbq.insert_sales_channels
        get_query = dbq.get_new_instance_notes
        date_field = "insert_date"
    elif type == "update":
        query = dbq.update_sales_channels
        get_query = dbq.get_updated_instance_notes
        date_field = "update_date"

    db_instance_notes = dbq.exec_db_query_dict(get_query, qty="all")
    for inst_idx in range(len(db_instance_notes)):
        channels = {}
        notes = list(eval(db_instance_notes[inst_idx]['notes']))
        for notes_idx in range(len(notes)):
            store = dict_switcher(notes[notes_idx]['field_id'], stores)
            if store != None:
                notes[notes_idx]['value']
                channels[store] = notes[notes_idx]['value']

        query_data = {
            'instance_id': db_instance_notes[inst_idx]['instance_id'],
            'sales_channels': str(channels),
            date_field: datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        }
        dbq.exec_db_query(query, query_data, query_type='insert')
示例#3
0
def discogs_update_releases():
    # FIXME: This is a copy on the new function, should probably combine them
    """
    Get/Update release table
    """
    import_new_releases = dbq.exec_db_query(dbq.get_new_release_list,
                                            qty='all')
    import_new_releases = [i[0] for i in import_new_releases]

    for index in range(len(import_new_releases)):
        release = discogs.release(import_new_releases[index])
        release_data = {
            'release_id': release.id,
            'title': release.title,
            'artists': str(release.artists),
            'labels': str(release.labels),
            'styles': str(release.styles),
            'genres': str(release.genres),
            'url': str(release.url),
            'discogs_date_added': release.date_added,
            'discogs_date_changed': release.date_changed,
            'insert_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        }

        dbq.exec_db_query(dbq.import_update_release,
                          release_data,
                          query_type='insert')
示例#4
0
def startup(process):
    run_id = str(uuid.uuid4())
    query = dbq.start_run
    query_data = {'process': process,
                             'run_id': run_id,
                              'start_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
    dbq.exec_db_query(query, query_data, query_type='insert')
    return run_id
示例#5
0
def update_attrib_term_list(attrib_name,  attrib_id):
    """
    Passed the Woo attribute type and woo id, query attribute table for new terms and populate Woo
    """
    query_data = attrib_name
    query = dbq.woo_get_new_attribs
    new_terms = dbq.exec_db_query_dict(query, query_data, qty="all")
    for idx in range(len(new_terms)):
        data = {"name": new_terms[idx]['attrib_term']}
        created = wcapi.post("products/attributes/" + str(attrib_id) + "/terms", data).json()
        query_data = {'woo_attrib_id': created["id"], 
                                'update_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                                'id':  new_terms[idx]['id'] }
        query = dbq.update_attribs_woo_id
        dbq.exec_db_query(query, query_data, query_type='insert')
示例#6
0
def process_products(type,  db_products):
    """
    Take list of new instance id's, create product page and update instance table with Woo ID
    """
    if type == "new":
        query = dbq.insert_woo_instance_product
        date_field = "insert_date"
    elif type == "update":
        query = dbq.update_woo_instance_product
        date_field = "update_date"
    
    for idx in range(len(db_products)):
        # Get instance data from db
        instance_data = dbq.exec_db_query_dict(dbq.get_instance_info,  db_products[idx]['instance_id'])
        dov_sales_status = eval(dbq.exec_db_query_dict(dbq.get_sales_channels,  db_products[idx]['instance_id'])['sales_channels'])['Sell on DoV']
       

        # Get release data from Discogs
        # release_data = dbq.exec_db_query_dict(dbq.get_release_info, instance_data['release_id'])
        release_data = discogs.release(db_products[idx]['release_id'])

        # Send data to formater
        product_data = formatproduct(instance_data, release_data, dov_sales_status,  type)

        # Create Woo Product
        if type == "new":
            product_endpoint = "products"
        elif type == "update":
            product_endpoint = ("products/" + str(db_products[idx]['woo_id']))
        
        try:
            woo_product = wcapi.post(product_endpoint, product_data).json()
        except:
            print("Instance ID: " + str(db_products[idx]['instance_id']) + " threw an error during a " + type + " product operation talking to Woo. ")
            continue
        
        # Update DB with Woo Product ID
        query_data = {"woo_id":  woo_product['id'], 
                            "instance_id": db_products[idx]['instance_id'], 
                            date_field: datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

        dbq.exec_db_query(query, query_data, query_type='insert')
示例#7
0
def getattribs(attrib_name):
    query_data = []
    query = dbq.get_discogs_attribs.format(attrib_name)
    dbattribs = dbq.exec_db_query(query, qty='all')

    for idx1 in range(len(dbattribs)):
        row = eval(dbattribs[idx1][0])
        if row != None:
            for idx2 in range(len(row)):
                query_data.append(row[idx2])

    query_data = list(zip(set(query_data)))
    insert_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    query_data = [(attrib_name, ) + xs + (insert_date, ) for xs in query_data]
    query = dbq.insert_attribs_tmp
    dbq.exec_db_query(query, query_data, query_type="insert", query_many="yes")

    # insert new genres
    dbq.exec_db_query(dbq.update_attribs)

    # Truncate temp table
    dbq.exec_db_query(dbq.truncate_attribs_tmp)
示例#8
0
def discogsImport(discogs_folder):
    """
    Imports discogs collections to table
    """

    # Set collection
    collection = user.collection_folders

    # Populate import table
    for album in collection[discogs_folder].releases:
        query = None

        # Concatenate notes
        hashing_note = None
        if album.notes != None:
            for idx in range(len(album.notes)):
                hashing_note = str(hashing_note) + str(
                    album.notes[idx]['field_id']) + str(
                        album.notes[idx]['value'])

        # Hash the notes
        notes_chksum = hashNotes(hashing_note)

        #  Query instance table for instance
        db_instance = dbq.exec_db_query_dict(dbq.get_instance_info,
                                             album.instance_id)

        # New items
        if db_instance == None:

            # Build insert data
            query_data = {
                'instance_id': album.instance_id,
                'rating': album.rating,
                'title': album.release.title,
                'folder_id': album.folder_id,
                'discogs_date_added': album.date_added,
                'notes': str(album.notes),
                'notes_chksum': notes_chksum.hexdigest(),
                'release_id': album.id,
                'insert_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            }
            query = dbq.add_instance
            dbq.exec_db_query(query, query_data, query_type='insert')

        # Test for existing and changed
        elif db_instance['instance_id'] == album.instance_id and \
              (db_instance['notes_chksum'] != notes_chksum.hexdigest() or
              db_instance['folder_id'] != album.folder_id or
              db_instance['release_id'] != album.id ):

            # Update notes if hash is different
            if db_instance['notes_chksum'] != notes_chksum.hexdigest():
                query_data = {
                    'notes': str(album.notes),
                    'notes_chksum': notes_chksum.hexdigest(),
                    'update_date':
                    datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                    'instance_id': album.instance_id,
                    'release_id': album.id
                }
                query = dbq.update_instance_notes_chksum
                dbq.exec_db_query(query, query_data, query_type='insert')

            # Update folder id
            if db_instance['folder_id'] != album.folder_id:
                query_data = {
                    'folder_id': album.folder_id,
                    'update_date':
                    datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                    'instance_id': album.instance_id
                }
                query = dbq.update_instance_folder_id
                dbq.exec_db_query(query, query_data, query_type='insert')

            if db_instance['release_id'] != album.id:
                query_data = {
                    'release_id': album.id,
                    'instance_id': album.instance_id
                }
                query = dbq.update_instance_release_id
                dbq.exec_db_query(query, query_data, query_type='insert')
示例#9
0
def finished(run_id):
    query = dbq.finish_run
    query_data = {'finish_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                              'complete': True, 
                             'run_id': run_id}
    dbq.exec_db_query(query, query_data, query_type='insert')