Exemple #1
0
def delete():
    if "id" not in request.values:
        return "invalid id"

    tab_id = request.values["id"]
    tab = Tab.query.get(tab_id)
    db.session.delete(tab)
    db.session.commit()

    try:
        tabfiles_folder_path = os.path.join(oshelper.get_tabfile_upload_abspath(), tab_id)
        if os.path.isdir(tabfiles_folder_path):
            shutil.rmtree(tabfiles_folder_path)
    except Exception as e:
        return "%s: %s" % ("error:", e.message)
    return "success"
Exemple #2
0
def delete():
    if 'id' not in request.values:
        return 'invalid id'

    tab_id = request.values['id']
    tab = Tab.query.get(tab_id)
    db.session.delete(tab)
    db.session.commit()

    try:
        tabfiles_folder_path = os.path.join(
            oshelper.get_tabfile_upload_abspath(), tab_id)
        if os.path.isdir(tabfiles_folder_path):
            shutil.rmtree(tabfiles_folder_path)
    except Exception as e:
        return '%s: %s' % ('error:', e.message)
    return 'success'
Exemple #3
0
def data_import():
    if request.method == 'GET':
        return render_template('data_import.html')
    elif request.method == 'POST':
        root_path = request.form['path'] if 'path' in request.form else ''
        result_info = {
            'artists': 0,
            'tabs': 0,
            'errors': []
        }

        # check path
        if root_path == '' or not os.path.isdir(root_path):
            return jsonify(result='failed', msg='invalid path')

        # valid folder names are '0-9', 'other', 'a', 'b', 'c'...'z'
        valid_letter = map(chr, range(97, 123)) + ['0-9', 'other']


        ### Traverse first level folders - letters
        for letter_dir_name in os.listdir(root_path):
            letter_dir_path = os.path.join(root_path, letter_dir_name)
            if not os.path.isdir(letter_dir_path) or not letter_dir_name.lower() in valid_letter:
                continue


            ### Traverse second level folders - artists
            for artist_dir_name in os.listdir(letter_dir_path):
                artist_dir_path = os.path.join(letter_dir_path, artist_dir_name)
                if not os.path.isdir(artist_dir_path):
                    continue

                # create artist if not exist or just fetch it
                artist = Artist.query.filter_by(name=artist_dir_name).first()
                if artist is None:
                    artist = Artist(str(uuid4()), artist_dir_name, letter_dir_name, '', 1, 1)
                    db.session.add(artist)
                    result_info['artists'] += 1


                ## Traverse third level folders - tabs
                for tab_dir_name in os.listdir(artist_dir_path):
                    tab_dir_path = os.path.join(artist_dir_path, tab_dir_name)
                    if not os.path.isdir(tab_dir_path):
                        continue

                    # import tab if not exists
                    if not db.session.query(exists().where(Tab.title == tab_dir_name and Tab.artist_id == artist.id)).scalar():
                        tab = Tab(str(uuid4()), tab_dir_name, 1, artist.id, 1, 1, '', None)
                        db.session.add(tab)
                        result_info['tabs'] += 1


                        ### Traverse imgs files under tab folder
                        for file_name in os.listdir(tab_dir_path):
                            file_path = os.path.join(tab_dir_path, file_name)
                            if not os.path.isfile(file_path):
                                continue

                            if not oshelper.get_extension(file_name) in current_app.config['TAB_FILE_ALLOWED_EXTENSIONS']:
                                continue

                            try:
                                dest_path = os.path.join(oshelper.get_tabfile_upload_abspath(), tab.id)
                                if not os.path.isdir(dest_path):
                                    os.mkdir(dest_path)
                                shutil.copy(file_path, dest_path)

                                tabfile = TabFile(str(uuid4()), tab.id, os.path.join(tab.id, file_name))
                                db.session.add(tabfile)

                            except:
                                e = sys.exc_info()[0]
                                result_info['errors'].append({
                                    'artist': artist_dir_name,
                                    'tab': tab_dir_name,
                                    'file': file_name,
                                    'error': e
                                })
                                continue

                db.session.commit()

    return jsonify(result='success', msg=result_info)