This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

a Python tool to Access to the Google Drive ( OAuth2, Calendar, Gmail, geocoding, spreadsheet, etc )

Package Documentation https://github.com/HatsuneMiku/googleDriveAccess/wiki/module_googleDriveAccess

Sample

import os
import googleDriveAccess as gda

# create instance
da = gda.DAClient(os.path.abspath('.'))

# create parent folders at the same time
folderId, folderPath = da.makeDirs('/remote_drive/subfolder_test/subsubfolder')
print folderId, folderPath

# recursive backup to remote folder
da.recursiveUpload('a_local_directory_you_want_to_backup_recursively')

# search
da.execQuery("explicitlyTrashed=True")
da.execQuery("'root' in parents", **{'maxResults': 5})
da.execQuery("'root' in parents and explicitlyTrashed=True", repeattoken=True, **{'maxResults': 500})

# download (change fileId and correct mimeType 'application/octet-stream' etc.)
da.downloadFile('/tmp', 'test_document.txt', parentId='root')

# OAuth2
oa2 = gda.OAuth2Client(abc=da)
ui = oa2.userInfo()
act = ui['email']
print act

# gmail
gm = gda.GmailClient(abc=oa2)
mo = gm.sendMsg(act, act, 'message title', 'message text')
if mo:
  mo = gm.modifyLabels(mo['id'], addLabels=['INBOX', 'UNREAD', 'STARRED'])
mo = gm.sendMsg(act, act, 'title attach', 'text attach', 'test_document.txt')
if mo:
  mo = gm.modifyLabels(mo['id'], addLabels=['INBOX', 'UNREAD', 'STARRED'])
msgs = gm.getMsgEntries(maxResults=3)
for msg in msgs['messages']:
  mo = gm.getMsg(msg['id'])
  hdrs = gm.getHdrsDict(mo)
  for k in ('date', 'to', 'from', 'subject'):
    if k in hdrs: print u'%s: %s' % hdrs[k] # unicode
  # popup message from calendar may contain u'\xbb'
  #print u'snippet: %s' % gm.trimWidth(mo['snippet'].replace(u'\xbb', u'>'), 70)
  print u'snippet: %s' % gm.trimWidth(mo['snippet'], 70) # unicode

# calendar
import time
ca = gda.CalendarClient('Asia/Tokyo', abc=oa2)
cals = ca.idList()
for cal in cals['items']:
  print u'%s : %s' % (cal['id'], cal['summary']) # unicode
id = cals['items'][0]['id']
print id
TEST_TITLE = u'rendez-vous 今日の待ち合わせ' # unicode
t = time.time()
eo = ca.insertEvent(id,
  start=ca.isoDate(t), end=ca.isoDate(t + 24 * 3600), # date only
  location=u'皇居', summary=TEST_TITLE) # unicode
eo = ca.insertEvent(id,
  start=ca.isoTime(t + 1800), end=ca.isoTime(t + 3600), # date and time
  location=u'京都御所', summary=TEST_TITLE) # unicode

# geocoding
geo = gda.GeocodingClient('ja', u'日本')
print geo.getLatLng(u'福井県敦賀市明神町')
print geo.getLocation(35.75, 136.02)
geo.ignoreCountryHead = False
print geo.getLocation(*geo.getLatLng(u'福井県敦賀市明神町'))
print geo.getLatLng(geo.getLocation(35.75, 136.02))

# spreadsheet
SHEET_NAME = 'test_spreadsheet_factory'
ss = gda.SpreadsheetFactory(abc=oa2)(sheetName=SHEET_NAME)
if ss.sheetId is None:
  ss.createSpreadsheet(SHEET_NAME, csv='c1,c2,c3\n8,32,256\n64,1024,65536\n')
print ss.oa2act
print ss.sheet()['title']
print ss.sheetId
print ss.worksheetId
for ws in ss.worksheets():
  print u'%s : %s' % (ws.get_worksheet_id(), ws.title.text)
for cell in ss.cells():
  print u'%s : %s' % (cell.title.text, cell.content.text)

# change True when you get a version (2013-07-12) after gdata-2.0.18
# https://code.google.com/p/gdata-python-client/source/list
if False:
  ss.updateCell(1, 1, u'日本語表示')
  ss.updateCell(3, 3, u'漢字')

How to use it

Install

pip install 'google-api-python-client'
pip install googleDriveAccess
  (or easy_install googleDriveAccess)
cd /opt/googleDriveAccess

First, create your Client_ID and secret on the Google Drive.

Register your App on https://console.developers.google.com/project and ‘download JSON’ of your Client ID and Client secret.

Rename this JSON file to ‘./client_secret_[Client ID].json’ .

mv client_secrets.json /opt/googleDriveAccess/client_secret_YOURCLIENTID.json

Second, create cache file for Client ID .

Create ‘./cicache.txt’ file and write your Client ID to the first line.

echo YOURCLIENTID > ./cicache.txt

Third, encrypt secret file.

Execute ./encrypt_client_secret.py to encrypt downloaded JSON file.

./encrypt_client_secret.py

Check that encrypted file exists ‘./client_secret[Client ID].json.enc’ and plain text JSON file ‘./client_secret[Client ID].json’ will be deleted.

Execute ./test_upload_first.py to test OAuth2 flow and store credentials.

./test_upload_first.py

Execute ./test_upload_second.py to test OAuth2 using stored credentials.

./test_upload_second.py

Execute ./test_download_third.py to test OAuth2 using stored credentials.

./test_download_third.py

Execute ./test_folder_create.py to test OAuth2 and create folders. Execute ./test_folder_hierarchy.py to test OAuth2 and scan folders. Execute ./recursive_upload.py to test OAuth2 and upload files.

./test_folder_create.py
./test_folder_hierarchy.py
./recursive_upload.py

Execute ./test_calendar_v3.py to test OAuth2 and add calendar event. Execute ./test_gmail_v1.py to test OAuth2 and send mail and modify labels. Execute ./test_geocoding.py to test geocoding. Execute ./test_spreadsheet_factory.py to test OAuth2 and spreadsheet.

./test_calendar_v3.py
./test_gmail_v1.py
./test_geocoding.py
./test_spreadsheet_factory.py

Execute ./test_script_prefetch.py to test Drive API search with query.

./test_script_prefetch.py

Edit test_script_import_export.py (set ‘mode = 0’) to test create new Google Apps Script ‘test_GoogleAppsScript_createCalendarEvent’ for tests below.

Execute ./test_script_import_export.py to test create and ‘get SCRIPT_ID’ .

./test_script_import_export.py

Edit test_script_import_export.py (set ‘mode = 2’ and ‘set SCRIPT_ID’) to test download.

Execute ./test_script_import_export.py to test download.

./test_script_import_export.py

Edit downloaded script ‘./script_import_export/test_GoogleAppsScript_createCalendarEvent/Code.gs’ .

Edit test_script_import_export.py (set ‘mode = 1’) to test upload.

Execute ./test_script_import_export.py to test upload.

./test_script_import_export.py

Known BUGs

Fails to create and update Google Apps Script.

mimeType was changed about specification of uploading Google Apps Script ?

I will make refresh_cache.py :

This program will cache each folder (or file) ids assigned by the Google Drive.
(Into the cache file cache_folderIds_[Client ID]_[OAuth2Act].sl3 .)
Please search and erase a row that has same id from the cache file
when you delete your folder or file using another Google Drive client tool.

It may be fixed:

When uploading a file that would not be automaticaly handled Google Drive,
"Media type 'None' is not supported. Valid media types: [*/*]"
error occurred.
Because of default mimeType is set to None on uploadFile.
So it may correct to catch the exception and retry with 'binary/octet-stream'.

License

BSD License

Release History

Release History

0.1.6

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.5

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.0.10

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
googleDriveAccess-0.1.6.tar.gz (23.4 kB) Copy SHA256 Checksum SHA256 Source Aug 7, 2014

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting