\n <\/td>\n | import<\/span> httplib2<\/span><\/td>\n <\/tr>\n \n <\/td>\n | import<\/span> os<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | from<\/span> apiclient<\/span> import<\/span> discovery<\/span><\/td>\n <\/tr>\n \n <\/td>\n | from<\/span> oauth2client<\/span> import<\/span> client<\/span><\/td>\n <\/tr>\n \n <\/td>\n | from<\/span> oauth2client<\/span> import<\/span> tools<\/span><\/td>\n <\/tr>\n \n <\/td>\n | from<\/span> oauth2client<\/span>.file<\/span> import<\/span> Storage<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | SCOPES<\/span> =<\/span> 'https://www.googleapis.com/auth/spreadsheets'<\/span><\/td>\n <\/tr>\n \n <\/td>\n | CLIENT_SECRET_FILE<\/span> =<\/span> ''<\/span><\/td>\n <\/tr>\n \n <\/td>\n | APPLICATION_NAME<\/span> =<\/span> ''<\/span><\/td>\n <\/tr>\n \n <\/td>\n | SPREADSHEET_ID<\/span> =<\/span> '<\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | class<\/span> Gspread<\/span>:<\/td>\n <\/tr>\n \n <\/td>\n | # If modifying these scopes, delete your previously saved credentials<\/span><\/td>\n <\/tr>\n \n <\/td>\n | # at ~/.credentials/sheets.googleapis.com-python-quickstart.json<\/span><\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | def<\/span> __init__<\/span>(self<\/span>, flags<\/span>):<\/td>\n <\/tr>\n \n <\/td>\n | self<\/span>.flags<\/span> =<\/span> flags<\/span><\/td>\n <\/tr>\n \n <\/td>\n | self<\/span>.spreadsheet_id<\/span> =<\/span> SPREADSHEET_ID<\/span><\/td>\n <\/tr>\n \n <\/td>\n | self<\/span>.credential_name<\/span> =<\/span> flags<\/span>.credential<\/span><\/td>\n <\/tr>\n \n <\/td>\n | print<\/span>("Authentication Start"<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | self<\/span>.service<\/span> =<\/span> self<\/span>.__auth<\/span>()<\/td>\n <\/tr>\n \n <\/td>\n | print<\/span>("Authentication End"<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | \n<\/td>\n <\/tr>\n | \n <\/td>\n | def<\/span> __get_credentials<\/span>(self<\/span>):<\/td>\n <\/tr>\n \n <\/td>\n | """Gets valid user credentials from storage.<\/span><\/td>\n <\/tr>\n \n <\/td>\n | <\/span><\/td>\n <\/tr>\n \n <\/td>\n | If nothing has been stored, or if the stored credentials are invalid,<\/span><\/td>\n <\/tr>\n \n <\/td>\n | the OAuth2 flow is completed to obtain the new credentials.<\/span><\/td>\n <\/tr>\n \n <\/td>\n | <\/span><\/td>\n <\/tr>\n \n <\/td>\n | Returns:<\/span><\/td>\n <\/tr>\n \n <\/td>\n | Credentials, the obtained credential.<\/span><\/td>\n <\/tr>\n \n <\/td>\n | """<\/span><\/td>\n <\/tr>\n \n <\/td>\n | home_dir<\/span> =<\/span> os<\/span>.path<\/span>.expanduser<\/span>('~'<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | credential_dir<\/span> =<\/span> os<\/span>.path<\/span>.join<\/span>(home_dir<\/span>, '.credentials'<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> not<\/span> os<\/span>.path<\/span>.exists<\/span>(credential_dir<\/span>):<\/td>\n <\/tr>\n \n <\/td>\n | os<\/span>.makedirs<\/span>(credential_dir<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | credential_path<\/span> =<\/span> os<\/span>.path<\/span>.join<\/span>(credential_dir<\/span>,<\/td>\n <\/tr>\n \n <\/td>\n | self<\/span>.credential_name<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | store<\/span> =<\/span> Storage<\/span>(credential_path<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | credentials<\/span> =<\/span> store<\/span>.get<\/span>()<\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> not<\/span> credentials<\/span> or<\/span> credentials<\/span>.invalid<\/span>:<\/td>\n <\/tr>\n \n <\/td>\n | flow<\/span> =<\/span> client<\/span>.flow_from_clientsecrets<\/span>(CLIENT_SECRET_FILE<\/span>, SCOPES<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | flow<\/span>.user_agent<\/span> =<\/span> APPLICATION_NAME<\/span><\/td>\n <\/tr>\n \n <\/td>\n | if<\/span> self<\/span>.flags<\/span>:<\/td>\n <\/tr>\n \n <\/td>\n | credentials<\/span> =<\/span> tools<\/span>.run_flow<\/span>(flow<\/span>, store<\/span>, self<\/span>.flags<\/span>)<\/td>\n <\/tr>\n \n <\/td>\n | else<\/span>: # Needed only for compatibility with Python 2.6<\/span><\/td>\n <\/tr>\n \n <\/td>\n | credentials<\/span> =<\/span> tools<\/span>.run<\/span>(flow<\/span>, store<\/span>)<\/td>\n <\/tr>\n \n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |