Skip to content

Commit

Permalink
Made the code from script to module by adding classes, making it more…
Browse files Browse the repository at this point in the history
… reusable
  • Loading branch information
apmechev committed Feb 18, 2018
1 parent e2ad73e commit a389087
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 61 deletions.
156 changes: 95 additions & 61 deletions get_github_clones.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,77 +5,111 @@
import sys
import os
from urllib import FancyURLopener
import crontab

def initialize_repo(repo):
if os.path.exists(repo+'_clones.pkl'):
os.remove(repo+'_clones.pkl')
g={}
pickle.dump(g,open(repo+'_clones.pkl','w'))

user='apmechev'
#repo="GRID_picastools"
class git_creds(object):
def __init__(self,username=None, password=None, gitfile='git_creds'):
self.username=username
self.password=password
if not username or not password:
self.get_creds(gitfile)

print(sys.argv)
if len(sys.argv)>1:
repo=sys.argv[1]
else:
repo="GRID_picastools"
def get_creds(self, creds_file='git_creds'):
creds=[]
with open(creds_file,'r') as auth_file:
for l in auth_file:
creds.append(l.strip())
self.username=creds[0]
self.password=creds[1]

def get_creds(creds_file='git_creds'):
creds=[]
with open(creds_file,'r') as auth_file:
for l in auth_file:
creds.append(l.strip())
return creds

if not os.path.exists(repo+'_clones.pkl'):
initialize_repo(repo)
class git_clones_counter(object):
def __init__(self, reponame, username=None, password=None):
self.count=0
self.color='gray'
if not username:
self.username=git_creds( gitfile='git_creds').username
if not password:
self.password=git_creds( gitfile='git_creds').password
self.repo=reponame
if not os.path.exists('data/'+self.repo+'_clones.pkl'):
self.initialize_repo()
self.clones={}
self.get_previous_clones()

def get_git_clones(user='apmechev',repo=''):
creds=get_creds()
url="https://api.github.com/repos/"+user+"/"+repo+"/traffic/clones"
output=requests.get(url,auth=HTTPBasicAuth(creds[0],creds[1]))
if output.__getstate__()['status_code'] != 200:
if output.__getstate__()['status_code'] == 401:
print("Invalid Username/Password!")
elif output.__getstate__()['status_code'] == 403:
print("Empty Password!")
output.raise_for_status()
return output
def initialize_repo(self):
if os.path.exists('data/'+self.repo+'_clones.pkl'):
os.remove('data/'+self.repo+'_clones.pkl')
pickle.dump({},open('data/'+self.repo+'_clones.pkl','w'))

glrtc=pickle.load(open(repo+'_clones.pkl','r'))
o=get_git_clones(user,repo)
for i in o.json()['clones']:
glrtc[i['timestamp']]=i['count']
def get_previous_clones(self):
self.clones=pickle.load(open('data/'+self.repo+'_clones.pkl','rb'))

def count_clones(clonedict):
s=0
for i in clonedict.keys():
s+=clonedict[i]
if s==0:
return(str(0),"red")
if s<10:
return(str(s),"orange")
if s<100:
return(str(s),"yellow")
if s<1000:
return(str(s),"yellowgreen")
elif s<1000000:
return(str(s/1000)+"K+","green")
elif s<1000000000:
return(str(s/1000)+"M+","brightgreen")

def get_git_clones_json(self,username=None):
if not username:
username=self.username
url="https://api.github.com/repos/"+username+"/"+self.repo+"/traffic/clones"
output=requests.get(url,auth=HTTPBasicAuth(self.username,self.password))
if output.__getstate__()['status_code'] != 200:
if output.__getstate__()['status_code'] == 401:
print("Invalid Username/Password!")
elif output.__getstate__()['status_code'] == 403:
print("Empty Password!")
output.raise_for_status()
return output

def parse_clones_json(self,json_output):
if not 'clones'in json_output.json().keys():
print("No clones returned by GitHub")
return
for item in json_output.json()['clones']:
self.clones[item['timestamp']]=item['count']
if len(self.clones.keys()) >= len(pickle.load(open('data/'+self.repo+'_clones.pkl','rb'))):
pickle.dump(self.clones,open('data/'+self.repo+'_clones.pkl','wb'))

def count_clones(self):
s=0
for i in self.clones.keys():
s+=self.clones[i]
self.count=str(s)
if s==0:
self.color='red'
if s<10:
self.color="orange"
if s<100:
self.color="yellow"
if s<1000:
self.color="yellowgreen"
elif s<1000000:
self.count=str(s/1000)+"K+"
self.color="green"
elif s<1000000000:
self.count=str(s/1000)+"M+"
self.color="brightgreen"

import pdb
class badge_creator(object):
def __init__(self,repo,username=None,password=None):
self.clones=git_clones_counter(repo,username,password)
new_clones=self.clones.get_git_clones_json()
print(str(len(new_clones.json().keys()))+ " Number of new entries")
self.clones.parse_clones_json(new_clones)
self.clones.count_clones()
self.count=self.clones.count
self.color=self.clones.color

class MyOpener(FancyURLopener):
version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
def download_badge(self,dest_path="/var/www/html/apmechev.com/public_html/img/git_repos/"):
mopen = MyOpener()
mopen.retrieve("https://img.shields.io/badge/clones-"+self.count+"-"+self.color+".svg",dest_path+self.clones.repo+"_clones.svg")

def download_badge(repo,numclones,color='green'):
mopen = MyOpener()
mopen.retrieve("https://img.shields.io/badge/clones-"+str(numclones)+"-"+color+".svg","/var/www/html/apmechev.com/public_html/img/git_repos/"+repo+"_clones.svg")

c,col=count_clones(glrtc)
download_badge(repo,c,col)
user='apmechev'

if len(sys.argv)>1:
repo=sys.argv[1]
else:
repo="GRID_picastools"

class MyOpener(FancyURLopener):
version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'

pickle.dump(glrtc,open(repo+'_clones.pkl','w'))
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
requests == 2.18.4
python-crontab

0 comments on commit a389087

Please sign in to comment.