diff --git a/.gitignore b/.gitignore index e003301..049ec39 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ nosetests.xml .pydevproject secrets.py *.swp +venv diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..2e35818 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: python app.py diff --git a/app.py b/app.py new file mode 100644 index 0000000..66620af --- /dev/null +++ b/app.py @@ -0,0 +1,64 @@ +import os +from flask import Flask +import os +from urlparse import urlsplit +from pymongo import Connection +import library +import json +from datetime import datetime + +url = os.getenv('MONGOLAB_URI', 'mongodb://heroku_app12633543:e4kprjp4r1kj0bbv9f4gih4km@dbh44.mongolab.com:27447/heroku_app12633543') +parsed = urlsplit(url) +db_name = parsed.path[1:] + + +store=library.Store() + +# Get your DB +db = Connection(url)[db_name] + +# Authenticate +if '@' in url: + user_pass = parsed.netloc.split('@')[0].split(':') + db.authenticate(user_pass[0], user_pass[1]) + +app = Flask(__name__) + +@app.route('/') +def hello(): + return 'Hello World!' + +def update_db(): + store.load_all('prueba.json') + stats=store.get_stats() + db.logs.insert({'time':str(datetime.now())}) + db.stats.insert(stats) + orgs = db.orgs + db.orgs.ensure_index('name',30) + for org in store.orgs: + orgdb=orgs.update({'name':org}, + {'name': org, 'data':store.orgs[org]}, + upsert=True, + w=0) + users = db.users + for user in store.users: + print "User:%s"%user + print ">%s"%store.users[user] + userdb=users.update({'name':user}, + {'name': user, 'data':store.users[user]}, + upsert=True, + w=0) + repos = db.repos + for repo in store.repos: + reposdb=repos.update({'url':repo}, + {'url': url, 'data': store.repos[repo]}, + upsert=True, + w=0) + + +if __name__ == '__main__': + # Bind to PORT if defined, otherwise default to 5000. + update_db() + port = int(os.environ.get('PORT', 5000)) + app.run(host='0.0.0.0', port=port) +# Connect to memcache with config from environment variables. diff --git a/library.py b/library.py index fe1c127..ad96ed0 100644 --- a/library.py +++ b/library.py @@ -67,27 +67,27 @@ class Store(dict): print "USER: %s" %user user.reload_repos() - def get_stats(self): - statistics={} + def get_langs_in_orgs(self,orgs): usedlanguages={} linesperlanguage={} - for repo in self.repos.values(): - language=repo[u'language'] - url=repo[u'url'] - if language in usedlanguages: - usedlanguages[language].append([url]) - else: - usedlanguages[language]=list([url]) - languages=repo[u'languages'] - for language,lines in languages.iteritems(): - if language in linesperlanguage: - linesperlanguage[language]+=lines - else: - linesperlanguage[language]=lines + for org in orgs: + for repo in org.repos: + languages=repo[u'languages'] + for language,lines in languages.iteritems(): + linesperlanguage[language]=linesperlanguage[language]+lines if language in linesperlanguage else lines + usedlanguages[language]=usedlanguages[language]+[repo[u'name'],] if language in usedlanguages else [repo[u'url']] + return usedlanguages,linesperlanguage + + def get_stats(self): + statistics={} + usedlanguagesint,linesperlanguageint=self.get_langs_in_orgs(self.orgs.values()) + usedlanguagesext,linesperlanguageext=self.get_langs_in_orgs(self.users.values()) + statistics[u'usedlanguagesint']=usedlanguagesint + statistics[u'linesperlanguageint']=linesperlanguageint + statistics[u'usedlanguagesext']=usedlanguagesext + statistics[u'linesperlanguageext']=linesperlanguageext lcrepos=0 - statistics[u'usedlanguages']=usedlanguages - statistics[u'linesperlanguage']=linesperlanguage - for lc in self[u'lcs']: + for lc in self.orgs: lcrepos+=len(self.orgs[lc][u'repos']) statistics["lc-repos"]=lcrepos statistics["total-repos"]=len(self.repos) @@ -110,9 +110,7 @@ class Store(dict): statistics['total-starred']=totalstarred statistics['total-watching']=totalwatching statistics['total-forks']=totalforks - self[u'statistics']=statistics - print self[u'orgs'] - print self[u'statistics'][u'linesperlanguage'] + return statistics class BasicItem(dict): def __init__(self,name,dic=None,method=get_url,name_key=u'url',store=None): @@ -148,7 +146,7 @@ class BasicLogin(BasicItem): if not u'repos' in self: self.reload_repos() if self.store is not None: - return [store['repos'][name] for name in self[u'repos']] + return [self.store['repos'][name] for name in self[u'repos']] return self[u'repos'] @repos.setter @@ -158,7 +156,7 @@ class BasicLogin(BasicItem): self[u'repos']=[] for repo in repos: url=repo[u'url'] - store.add_repo(repo) + self.store.add_repo(repo) self[u'repos'].append(url) else: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..02b0b22 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +Flask==0.9 +Jinja2==2.6 +PyGithub==1.12.1 +Werkzeug==0.8.3 +argparse==1.2.1 +distribute==0.6.24 +pymongo==2.4.2 +requests==1.1.0 +wsgiref==0.1.2