Source code for audio_curation.episode_data.google_sheets_data
import logging
import pprint
import pandas
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from indic_transliteration import xsanscript
# Remove all handlers associated with the root logger object.
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
logging.basicConfig(
level=logging.DEBUG,
format="%(levelname)s:%(asctime)s:%(module)s:%(lineno)d %(message)s"
)
logging.getLogger('gspread').setLevel(logging.INFO)
logging.getLogger('oauth2client').setLevel(logging.INFO)
[docs]def get_sheet(spreadhsheet_id, worksheet_name, google_key):
"""
:param spreadhsheet_id:
:param worksheet_name:
:param google_key:
:return:
"""
scopes = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name(google_key, scopes)
client = gspread.authorize(creds)
logging.debug(pprint.pformat(client.list_spreadsheet_files()))
sheet_book = client.open_by_key(spreadhsheet_id)
logging.debug(sheet_book.worksheets())
return sheet_book.worksheet(worksheet_name)
[docs]class EpisodeData(object):
"""
Represents episode data stored in a Google spreadsheet.
"""
def __init__(self, spreadhsheet_id, worksheet_name, google_key,
episode_id_column, recorder_column, script=xsanscript.DEVANAGARI):
"""
:return:
"""
# noinspection PyPep8Naming
self.data_sheet = get_sheet(spreadhsheet_id=spreadhsheet_id, worksheet_name=worksheet_name, google_key=google_key)
self.episode_id_column = episode_id_column
self.recorder_column = recorder_column
self.script = script
self.episode_df = None
self._set_episode_df()
def _set_episode_df(self):
"""
:return:
"""
episode_sheet_values = self.data_sheet.get_all_values()
episode_df = pandas.DataFrame(episode_sheet_values[1:], columns=episode_sheet_values.pop(0))
episode_df = episode_df.set_index(self.episode_id_column)
self.episode_df = episode_df
[docs] def get_recorder(self, episode_id):
"""
Read the name of the person who recorded this episode.
:param episode_id:
:return:
"""
if self.script == xsanscript.DEVANAGARI:
artist_devanaagarii = self.episode_df.loc[episode_id, self.recorder_column]
return "%s %s" % (
xsanscript.transliterate(artist_devanaagarii, xsanscript.DEVANAGARI, xsanscript.OPTITRANS), artist_devanaagarii)
else:
return self.episode_df.loc[episode_id, self.recorder_column]