Skip to content

Instantly share code, notes, and snippets.

@mmurdoch
Last active April 29, 2023 19:45
  • Star 14 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save mmurdoch/4026453 to your computer and use it in GitHub Desktop.
Download github library for Pythonista.
# Note that this script attempts to delete directories (Folders) called 'temp' and 'dateutil'
# within Pythonista as part of installation. It will also overwrite files in directories
# named 'github' and 'githubista'. If you are using Pythonista 1.3 or above please check
# that you have not created any Folders with these names before running this script as
# any files inside them will be irretrievably lost.
import os
import urllib2
import tarfile
import shutil
import traceback
# Downloads and installs the dateutil library into a directory called 'dateutil'
# alongside your saved Pythonista scripts.
# It also creates a directory called 'temp' during the installation process which
# is deleted after installation.
def getDateutil():
workingPath = os.getcwd()
tempPath = os.path.join(workingPath, 'temp')
dateutilArchiveDir = 'python-dateutil-1.5'
dateutilArchive = dateutilArchiveDir + '.tar.gz'
dateutilArchivePath = os.path.join(tempPath, dateutilArchive)
try:
os.mkdir(tempPath)
except OSError:
pass
print 'Downloading dateutil archive'
dateutilArchiveUrl = urllib2.urlopen('http://labix.org/download/python-dateutil/' + dateutilArchive)
localArchive = open(dateutilArchivePath, 'w')
localArchive.write(dateutilArchiveUrl.read())
localArchive.close()
dateutilArchiveUrl.close()
archive = tarfile.open(dateutilArchivePath, 'r:gz')
print 'Extracting dateutil library from archive'
try:
os.chdir(tempPath)
archive.extractall()
finally:
archive.close()
os.chdir(workingPath)
dateutilDir = 'dateutil'
tempDateutilPath = os.path.join(os.path.join(tempPath, dateutilArchiveDir), dateutilDir)
dateutilPath = os.path.join(workingPath, dateutilDir)
print 'Installing dateutil'
shutil.rmtree(dateutilPath, True)
shutil.copytree(tempDateutilPath, dateutilPath)
shutil.rmtree(tempPath)
print 'dateutil installed'
# Downloads and installs the PyGithub library into a directory called 'github'
# alongside your saved Pythonista scripts.
# This directory is not visible in Pythonista (as of version 1.2) and should not
# conflict with a script of the same name
# as Pythonista automatically appends '.py' to all scripts before saving them.
def getPyGithub():
# Use this to install a version of PyGithub which uses dateutil
# rather than strptime
githubUser = 'mmurdoch'
# Use this to install the original version of PyGithub.
# This uses strptime rather than dateutil but strptime throws an error the
# second time it's called...
#githubUser = 'jacquev6' # Original PyGithub author
pythonistaDir = os.getcwd()
githubDir = os.path.join(pythonistaDir, 'github')
try:
os.mkdir(githubDir)
except OSError:
pass
# All the files. It would be better to fetch this list from github to ensure
# that any changes to this list in future are automatically picked up.
pyGithubFiles = ['AuthenticatedUser.py', 'Authorization.py', 'AuthorizationApplication.py',
'Branch.py', 'Commit.py', 'CommitComment.py', 'CommitStats.py',
'CommitStatus.py', 'Comparison.py', 'ContentFile.py', 'Download.py',
'Event.py', 'File.py', 'Gist.py', 'GistComment.py', 'GistFile.py',
'GistHistoryState.py', 'GitAuthor.py', 'GitBlob.py', 'GitCommit.py',
'GitObject.py', 'GitRef.py', 'GitTag.py', 'GitTree.py', 'GitTreeElement.py',
'GithubException.py', 'GithubObject.py', 'GitignoreTemplate.py', 'Hook.py',
'HookDescription.py', 'HookResponse.py', 'InputFileContent.py', 'InputGitAuthor.py',
'InputGitTreeElement.py', 'Issue.py', 'IssueComment.py', 'IssueEvent.py',
'IssuePullRequest.py', 'Label.py', 'Legacy.py', 'MainClass.py', 'Milestone.py',
'NamedUser.py', 'Notification.py', 'NotificationSubject.py', 'Organization.py',
'PaginatedList.py', 'Permissions.py', 'Plan.py', 'PullRequest.py',
'PullRequestComment.py', 'PullRequestMergeStatus.py', 'PullRequestPart.py',
'Repository.py', 'RepositoryKey.py', 'Requester.py', 'Tag.py',
'Team.py', 'UserKey.py', '__init__.py']
print 'Downloading and installing PyGithub'
for file in pyGithubFiles:
print 'Downloading', file
localFile = open(os.path.join(githubDir, file), 'w')
resource = urllib2.urlopen('https://raw.github.com/' + githubUser + '/PyGithub/master/github/' + file)
localFile.write(resource.read())
localFile.close()
resource.close()
print 'PyGithub downloaded and installed'
# Downloads and installs the githubista library into a directory called 'githubista'
# alongside your saved Pythonista scripts.
# This directory is not visible in Pythonista (as of version 1.2) and should not
# conflict with a script of the same name as Pythonista automatically appends '.py'
# to all scripts before saving them.
def getGithubista():
githubUser = 'mmurdoch'
pythonistaDir = os.getcwd()
githubDir = os.path.join(pythonistaDir, 'githubista')
try:
os.mkdir(githubDir)
except OSError:
pass
# All the files. It would be better to fetch this list from github to ensure that any changes
# to this list in future are automatically picked up.
files = ['githubista.py', 'github_clone.py', 'github_commit.py', '__init__.py']
print 'Downloading and installing githubista'
for file in files:
print 'Downloading', file
localFile = open(os.path.join(githubDir, file), 'w')
resource = urllib2.urlopen('https://raw.github.com/' + githubUser + '/githubista/master/' + file)
localFile.write(resource.read())
localFile.close()
resource.close()
print 'githubista downloaded and installed'
try:
getDateutil()
getPyGithub()
getGithubista()
except:
traceback.print_exc()
@mmurdoch
Copy link
Author

mmurdoch commented Nov 6, 2012

Fetches PyGithub library into Pythonista (library patched to overcome strptime errors - _strptime missing from Pythonista version 1.1 and TypeError from strptime on second use - see http://forum.xbmc.org/showthread.php?tid=112916)

@mmurdoch
Copy link
Author

mmurdoch commented Nov 6, 2012

This version of PyGithub depends on dateutil which can be imported into Pythonista using this script.

@mmurdoch
Copy link
Author

mmurdoch commented Jan 3, 2013

Updated to work with latest version of PyGithub.

@robertirish
Copy link

Hi, how do you suggest we edit non-Python files once the repo has been cloned? I'd like to use this to update my Jekyll site whilst away from my computer. It's a great script and potentially the best way to push/pull GitHub repos on the iPhone.

Currently I'm able to use shellista to rename .md files to .py, edit them, and rename them again, but I have no way of committing the changes. Could you let me know how I might go about that?

Cheers,

Robert

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment