From e3ac5087e982e00c9fa6c32c51f477f98a51a485 Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 18:19:08 -0700 Subject: [PATCH 01/62] index page --- templates/index.html | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 templates/index.html diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..324e089 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,33 @@ + + + + + + + + + + + Triple Tail + + +
+ +
+ + + + + + + From c0366a3132658dd13353c28bd26d2ef817ed7cb6 Mon Sep 17 00:00:00 2001 From: jozsa Date: Fri, 24 May 2019 01:36:36 +0000 Subject: [PATCH 02/62] Barebones flask app for everyone to work with --- backend/__init__.py | 0 backend/app.py | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 backend/__init__.py create mode 100644 backend/app.py diff --git a/backend/__init__.py b/backend/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..ff4a96e --- /dev/null +++ b/backend/app.py @@ -0,0 +1,27 @@ +#!/usr/bin/python3 +"""Start Flask web app for our TripleTail +website""" + +from flask import Flask, jsonify + +# Flask setup +app = Flask(__name__) +app.url_map.strict_slashes = False +host = '35.245.121.190' + +def page_not_found(e): + """404 error page for nonexistent routes""" + return jsonify({'error': "Not found"}), 404 + +@app.route('/') +def homepage(): + """ + Landing page + """ + # TODO - insert html file name and necessary variables + return render_template(info) + +if __name__ == "__main__": + app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True + app.register_error_handler(404, page_not_found) + app.run(host=host) From d24e624504a3b4a7661d6fbb48bb4d71056bc05c Mon Sep 17 00:00:00 2001 From: jozsa Date: Fri, 24 May 2019 01:56:42 +0000 Subject: [PATCH 03/62] Added user tier path and setup for User class to be passed into tier --- backend/app.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/app.py b/backend/app.py index ff4a96e..a03f076 100644 --- a/backend/app.py +++ b/backend/app.py @@ -18,8 +18,17 @@ def homepage(): """ Landing page """ - # TODO - insert html file name and necessary variables - return render_template(info) + return render_template('index.html') + +@app.route('//tier/') +def tier_page(username): + """ + Returns a page containing the Tier of the + Github user + """ + userinfo = User(userinfo) + return render_template('ranking.html', + userinfo=userinfo) if __name__ == "__main__": app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True From 016b81e4d76e10f8e8ea34348600a042b1ee122d Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 19:16:08 -0700 Subject: [PATCH 04/62] Frontend basic --- backend/app.py | 3 ++- backend/templates/base.html | 25 +++++++++++++++++++++++++ backend/templates/index.html | 17 +++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 backend/templates/base.html create mode 100644 backend/templates/index.html diff --git a/backend/app.py b/backend/app.py index a03f076..73ba7fb 100644 --- a/backend/app.py +++ b/backend/app.py @@ -2,12 +2,13 @@ """Start Flask web app for our TripleTail website""" -from flask import Flask, jsonify +from flask import Flask, jsonify, render_template # Flask setup app = Flask(__name__) app.url_map.strict_slashes = False host = '35.245.121.190' +host = '127.0.0.1' def page_not_found(e): """404 error page for nonexistent routes""" diff --git a/backend/templates/base.html b/backend/templates/base.html new file mode 100644 index 0000000..b5d1486 --- /dev/null +++ b/backend/templates/base.html @@ -0,0 +1,25 @@ + + + + + + + + + + {% block title %}{% endblock %} - Triple Tail + + + +
+ + {% block content %}{% endblock %} + +
+ + + + + + + diff --git a/backend/templates/index.html b/backend/templates/index.html new file mode 100644 index 0000000..d135af8 --- /dev/null +++ b/backend/templates/index.html @@ -0,0 +1,17 @@ +{% extends 'base.html' %} + +{% block title %}Log In{% endblock %} + +{% block content %} + +{% endblock %} From 1f2d4b37882ff6cdb7d381b57d4a85b7d75d02ff Mon Sep 17 00:00:00 2001 From: Athena Deng <539@holbertonschool.com> Date: Fri, 24 May 2019 02:19:43 +0000 Subject: [PATCH 05/62] first commit --- backend/user.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 backend/user.py diff --git a/backend/user.py b/backend/user.py new file mode 100755 index 0000000..d195aa9 --- /dev/null +++ b/backend/user.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +""" +this module contains a User class +""" + + +import datetime +import requests + +class User: + """a User class""" + def __init__(self, *args, **kwargs): + """instantiation of User class object""" + if kwargs: + self.__set_attributes(kwargs) + self.user_dict = {} + + def __set_attributes(self, attr_dict): + """sets attributes for a User object""" + for attr, val in attr_dict.items(): + setattr(self, attr, val) + + def user_dict(self): + """creates dictionary of user's info""" + usern = self.username + passw = self.password + r = requests.get('https://api.github.com/user', auth=(usern, passw)) + self.user_dict = r.json() + + def public_repos(self): + """returns number of public repos of a user""" + return self.user_dict['public_repos'] + + def followers(self): + """returns number of followers of a user""" + return self.user_dict['followers'] + + def From 769a8496cdb82c6cd2586d484506681bc42f8924 Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 19:20:52 -0700 Subject: [PATCH 06/62] Removed jinja for block content --- backend/templates/index.html | 42 +++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/backend/templates/index.html b/backend/templates/index.html index d135af8..b679662 100644 --- a/backend/templates/index.html +++ b/backend/templates/index.html @@ -1,17 +1,33 @@ -{% extends 'base.html' %} + + + + + + -{% block title %}Log In{% endblock %} + + + Triple Tail + -{% block content %} - + + + + + + + From 22a113f01ba1153b87a847a92db60181084c40e2 Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 20:13:29 -0700 Subject: [PATCH 07/62] Settign up file structure for flask --- backend/app.py | 4 ++++ backend/static/images/image.png | Bin 0 -> 22174 bytes backend/static/scripts/auth.js | 0 backend/templates/ranking.html | 30 ++++++++++++++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 backend/static/images/image.png create mode 100644 backend/static/scripts/auth.js create mode 100644 backend/templates/ranking.html diff --git a/backend/app.py b/backend/app.py index 73ba7fb..2888f7b 100644 --- a/backend/app.py +++ b/backend/app.py @@ -31,6 +31,10 @@ def tier_page(username): return render_template('ranking.html', userinfo=userinfo) +@app.route('/testing') +def test(): + return render_template('ranking.html') + if __name__ == "__main__": app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True app.register_error_handler(404, page_not_found) diff --git a/backend/static/images/image.png b/backend/static/images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..40e22cfe2e011c2a59e10a0b9777a70e28333efa GIT binary patch literal 22174 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

2&C5MzkD<7{)X#&Bj7&eXkHyClFPw(b!Pp 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 literal 0 HcmV?d00001 diff --git a/backend/static/scripts/auth.js b/backend/static/scripts/auth.js new file mode 100644 index 0000000..e69de29 diff --git a/backend/templates/ranking.html b/backend/templates/ranking.html new file mode 100644 index 0000000..2304ef1 --- /dev/null +++ b/backend/templates/ranking.html @@ -0,0 +1,30 @@ + + + + + + + + + + Triple Tail + + + +

+ +
+ Card image +
+

Insert Name Here

+

Something

+
+ +
+ + + + + + + From 75b2a6ab7ce4b13f5413e1b0c34dc0a398e81b72 Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 20:29:58 -0700 Subject: [PATCH 08/62] Preparations for OAuth: --- backend/app.py | 2 +- backend/static/scripts/auth.js | 1 + backend/templates/index.html | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/app.py b/backend/app.py index 2888f7b..a60b91e 100644 --- a/backend/app.py +++ b/backend/app.py @@ -14,7 +14,7 @@ def page_not_found(e): """404 error page for nonexistent routes""" return jsonify({'error': "Not found"}), 404 -@app.route('/') +@app.route('/', methods=['GET', 'POST']) def homepage(): """ Landing page diff --git a/backend/static/scripts/auth.js b/backend/static/scripts/auth.js index e69de29..7a2ceed 100644 --- a/backend/static/scripts/auth.js +++ b/backend/static/scripts/auth.js @@ -0,0 +1 @@ +$('.github-signin').on('click', () => console.log('HIII')); diff --git a/backend/templates/index.html b/backend/templates/index.html index b679662..4d6948f 100644 --- a/backend/templates/index.html +++ b/backend/templates/index.html @@ -20,7 +20,7 @@ - +
@@ -29,5 +29,6 @@ + From ee85c275b736406262ddbf9f5a4f1f6a89390200 Mon Sep 17 00:00:00 2001 From: jozsa Date: Fri, 24 May 2019 03:40:59 +0000 Subject: [PATCH 09/62] Feature: get the percentage of repos that have a README --- backend/user.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/backend/user.py b/backend/user.py index d195aa9..af11a5d 100755 --- a/backend/user.py +++ b/backend/user.py @@ -9,17 +9,21 @@ class User: """a User class""" + url = 'https://api.github.com' + def __init__(self, *args, **kwargs): """instantiation of User class object""" if kwargs: self.__set_attributes(kwargs) self.user_dict = {} + @property def __set_attributes(self, attr_dict): """sets attributes for a User object""" for attr, val in attr_dict.items(): setattr(self, attr, val) + @property def user_dict(self): """creates dictionary of user's info""" usern = self.username @@ -35,4 +39,15 @@ def followers(self): """returns number of followers of a user""" return self.user_dict['followers'] - def + @property + def readme_pct(self): + """Returns the percentage of repos that have a README""" + repo_list = requests.get('{}/users/{}/repos'.format(url, self.username), auth=(self.username, self.password)) + readme_count = 0 + for repo in repo_list: + response = requests.get('{}/repos/{}/{}/readme'.format(url, self.username, repo.get('name')), auth=(self.username, self.password)) + if response.status_code == 404: + pass + else: + readme_count += 1 + return '{:.1%}'.format(readme_count/self.user_dict.get('public_repos')) From b22e1fe4b9330a48cc724e98fe523c051e51385e Mon Sep 17 00:00:00 2001 From: Athena Deng <539@holbertonschool.com> Date: Fri, 24 May 2019 03:44:56 +0000 Subject: [PATCH 10/62] added account_age method --- backend/user.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/user.py b/backend/user.py index d195aa9..6dcbda4 100755 --- a/backend/user.py +++ b/backend/user.py @@ -4,7 +4,8 @@ """ -import datetime +from datetime import datetime, timedelta +import re import requests class User: @@ -35,4 +36,12 @@ def followers(self): """returns number of followers of a user""" return self.user_dict['followers'] - def + def account_age(self): + """calculates and returns age of the account""" + self.now = datetime.now() + self.created_at = datetime.strptime(self.user_dict['created_at'], "%Y-%m-%dT%H:%M:%SZ") + age = self.now - self.created_at + age_str = str(age) + age_str_split = re.split('[, :\.]+', age_str) + age_dhms = age_str_split[0] + ' ' + age_str_split[1] + ' ' + age_str_split[2] + ' hours ' + age_str_split[3] + ' minutes ' + age_str_split[4] + ' seconds' + return age_dhms From df382b77a115a87cae213bfb567f3fd835fddba1 Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 20:45:07 -0700 Subject: [PATCH 11/62] Reorganized template structure --- backend/templates/base.html | 11 +++++--- backend/templates/index.html | 49 +++++++++++++--------------------- backend/templates/ranking.html | 41 +++++++++------------------- 3 files changed, 39 insertions(+), 62 deletions(-) diff --git a/backend/templates/base.html b/backend/templates/base.html index b5d1486..298a9e0 100644 --- a/backend/templates/base.html +++ b/backend/templates/base.html @@ -11,15 +11,20 @@ -
- {% block content %}{% endblock %} + + +
+
+ {% block header %}{% endblock %} +
-
+ {% block content %}{% endblock %} + {% block script %}{% endblock %} diff --git a/backend/templates/index.html b/backend/templates/index.html index 4d6948f..a23a059 100644 --- a/backend/templates/index.html +++ b/backend/templates/index.html @@ -1,34 +1,23 @@ - - - - - - +{% extends 'base.html' %} - - - Triple Tail - +{% block content %} +
+ +{% endblock %} + + +{% block script %} + + +{% endblock %} diff --git a/backend/templates/ranking.html b/backend/templates/ranking.html index 2304ef1..69e0676 100644 --- a/backend/templates/ranking.html +++ b/backend/templates/ranking.html @@ -1,30 +1,13 @@ - - - - - - +{% extends 'base.html' %} - - - Triple Tail - - - -
- -
- Card image -
-

Insert Name Here

-

Something

-
- -
- - - - - - - +{% block content %} +
+ +
+ Card image +
+

Insert Name Here

+

Something

+
+
+{% endblock %} From 88fc8f448bef7ba6696fca6c9cb889fdef176843 Mon Sep 17 00:00:00 2001 From: jozsa Date: Fri, 24 May 2019 03:56:51 +0000 Subject: [PATCH 12/62] Change 'userinfo' to 'username' for User object instantiation --- backend/app.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/app.py b/backend/app.py index a03f076..96e39e0 100644 --- a/backend/app.py +++ b/backend/app.py @@ -3,6 +3,7 @@ website""" from flask import Flask, jsonify +from user import User # Flask setup app = Flask(__name__) @@ -26,7 +27,7 @@ def tier_page(username): Returns a page containing the Tier of the Github user """ - userinfo = User(userinfo) + userinfo = User(username) return render_template('ranking.html', userinfo=userinfo) From 81b744971a72519d48a813c74ae280603c016aae Mon Sep 17 00:00:00 2001 From: stefansilverio Date: Fri, 24 May 2019 04:07:07 +0000 Subject: [PATCH 13/62] resolved conflicts --- backend/app.py | 4 ++++ backend/user.py | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/backend/app.py b/backend/app.py index 96e39e0..11ab94e 100644 --- a/backend/app.py +++ b/backend/app.py @@ -31,6 +31,10 @@ def tier_page(username): return render_template('ranking.html', userinfo=userinfo) +@app.route('//stats') +def followers + + if __name__ == "__main__": app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True app.register_error_handler(404, page_not_found) diff --git a/backend/user.py b/backend/user.py index 939375a..0052109 100755 --- a/backend/user.py +++ b/backend/user.py @@ -62,3 +62,8 @@ def readme_pct(self): else: readme_count += 1 return '{:.1%}'.format(readme_count/self.user_dict.get('public_repos')) + + def following(self): + """returns number of users the user is following""" + return self.user_dict['following'] + From 1e0931cdaf7be43ec2777f12bda21f923384fc23 Mon Sep 17 00:00:00 2001 From: stefansilverio Date: Fri, 24 May 2019 04:12:59 +0000 Subject: [PATCH 14/62] added more basic methods to get data about user --- backend/user.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/backend/user.py b/backend/user.py index 0052109..b8417aa 100755 --- a/backend/user.py +++ b/backend/user.py @@ -67,3 +67,18 @@ def following(self): """returns number of users the user is following""" return self.user_dict['following'] + def bio(self): + """get users bio""" + return self.user_dict['bio'] + + def hireable(self): + """status on whether user is hireable""" + return self.user_dict['hireable'] + + def name(self): + """users name on github""" + return self.user_dict['name'] + + def email(self): + """get users email""" + return self.user_dict['email'] From 322cd3ce0850a2a9289e51ac3606aa1998447909 Mon Sep 17 00:00:00 2001 From: Susan Su Date: Thu, 23 May 2019 21:26:14 -0700 Subject: [PATCH 15/62] more setup for frontend --- backend/static/scripts/design.js | 13 +++++++++++++ backend/static/styles/layout.css | 12 ++++++++++++ backend/templates/base.html | 5 ++++- backend/templates/index.html | 4 ++-- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 backend/static/scripts/design.js create mode 100644 backend/static/styles/layout.css diff --git a/backend/static/scripts/design.js b/backend/static/scripts/design.js new file mode 100644 index 0000000..024e56d --- /dev/null +++ b/backend/static/scripts/design.js @@ -0,0 +1,13 @@ +$('.btn-clear').on('click', () => { + if ($('body').hasClass('black')) + { + $('body').removeClass('black'); + $('body').addClass('blue'); + } + else + { + $('body').removeClass('blue'); + $('body').addClass('black'); + } +}); + diff --git a/backend/static/styles/layout.css b/backend/static/styles/layout.css new file mode 100644 index 0000000..63e2251 --- /dev/null +++ b/backend/static/styles/layout.css @@ -0,0 +1,12 @@ +body.black { + background-color: #0b0c10; +} + +body.blue { + background-color: #45a29e; +} + +.btn-clear { + border: none; + background: transparent; +} diff --git a/backend/templates/base.html b/backend/templates/base.html index 298a9e0..5765320 100644 --- a/backend/templates/base.html +++ b/backend/templates/base.html @@ -7,10 +7,12 @@ + {% block title %}{% endblock %} - Triple Tail - + + @@ -25,6 +27,7 @@ + {% block script %}{% endblock %} diff --git a/backend/templates/index.html b/backend/templates/index.html index a23a059..a8d4ea1 100644 --- a/backend/templates/index.html +++ b/backend/templates/index.html @@ -5,10 +5,10 @@