예제 #1
0
class Uploader:
    def __init__(self):
        self.config = util.load_config()
        util.register_gcp_credential(self.config)
        self.dbhandler = DBHandler(self.config)
        self.gcphandler = GCPHandler(self.config)
        target_ids = util.load_target_ids('target.txt')
        self.user_sids = self.dbhandler.select_user_sids(target_ids)

    def upload_per_user(self):
        tmpdir = os.path.abspath('./tmp')
        for user_sid in self.user_sids:
            user_dir = os.path.join(tmpdir, str(user_sid))
            if not os.path.exists(user_dir):
                continue
            track_ids = [
                x for x in os.listdir(user_dir) if '.DS_Store' not in x
            ]
            for track_id in track_ids:
                self.upload_hls(user_sid, track_id)
            shutil.rmtree(f'./tmp/{user_sid}')

    def upload_nohls(self):
        tmpdir = os.path.abspath('./tmp')
        user_sids = [
            x for x in os.listdir(tmpdir)
            if '.DS_Store' not in x and 'readme' not in x
        ]
        for user_sid in user_sids:
            user_dir = os.path.join(tmpdir, str(user_sid))
            track_ids = [
                x for x in os.listdir(user_dir) if '.DS_Store' not in x
            ]
            for track_id in track_ids:
                self.upload_hls(user_sid, track_id)
            shutil.rmtree(f'./tmp/{user_sid}')

    def upload_hls(self, user_sid, track_id):
        upload_url = self.config['UPLOADURL']
        hashstr = str(user_sid) + track_id
        hashkey = hashlib.sha1()
        hashkey.update(hashstr.encode('utf-8'))
        hlshash = hashkey.hexdigest()
        filedir = f'./tmp/{user_sid}/{track_id}'
        files = os.listdir(filedir)
        for file in files:
            if '.mp3' in file:
                continue
            response = requests.post(
                url=upload_url,
                files={'file': open(os.path.join(filedir, file), 'rb')},
                data={'dir': f'/hls/{hlshash}'})
            print(response.status_code, response.text)
        self.dbhandler.update_track_hls(track_id, hlshash)