From df02ee328b891d4bbc606d76571af60dff05c275 Mon Sep 17 00:00:00 2001 From: Miccowhy Date: Fri, 28 Dec 2018 14:36:42 +0100 Subject: [PATCH] remove non-documentation files --- Procfile | 3 -- __pycache__/cat_or_not.cpython-36.pyc | Bin 159 -> 0 bytes __pycache__/cat_recognition.cpython-36.pyc | Bin 645 -> 0 bytes __pycache__/config.cpython-36.pyc | Bin 363 -> 0 bytes __pycache__/forms.cpython-36.pyc | Bin 567 -> 0 bytes __pycache__/hello.cpython-36.pyc | Bin 414 -> 0 bytes app/__init__.py | 7 ----- app/__pycache__/__init__.cpython-36.pyc | Bin 275 -> 0 bytes .../cat_recognition.cpython-36.pyc | Bin 649 -> 0 bytes app/__pycache__/forms.cpython-36.pyc | Bin 571 -> 0 bytes .../picture_downloader.cpython-36.pyc | Bin 405 -> 0 bytes app/__pycache__/routes.cpython-36.pyc | Bin 690 -> 0 bytes app/cat_recognition.py | 20 -------------- app/forms.py | 7 ----- app/picture_downloader.py | 10 ------- app/routes.py | 18 ------------ app/templates/base.html | 23 ---------------- app/templates/index.html | 13 --------- authentication.json | 12 -------- cat_or_not.py | 1 - config.py | 4 --- pic.jpg | Bin 5714 -> 0 bytes requirements.txt | 26 ------------------ 23 files changed, 144 deletions(-) delete mode 100644 Procfile delete mode 100644 __pycache__/cat_or_not.cpython-36.pyc delete mode 100644 __pycache__/cat_recognition.cpython-36.pyc delete mode 100644 __pycache__/config.cpython-36.pyc delete mode 100644 __pycache__/forms.cpython-36.pyc delete mode 100644 __pycache__/hello.cpython-36.pyc delete mode 100644 app/__init__.py delete mode 100644 app/__pycache__/__init__.cpython-36.pyc delete mode 100644 app/__pycache__/cat_recognition.cpython-36.pyc delete mode 100644 app/__pycache__/forms.cpython-36.pyc delete mode 100644 app/__pycache__/picture_downloader.cpython-36.pyc delete mode 100644 app/__pycache__/routes.cpython-36.pyc delete mode 100644 app/cat_recognition.py delete mode 100644 app/forms.py delete mode 100644 app/picture_downloader.py delete mode 100644 app/routes.py delete mode 100644 app/templates/base.html delete mode 100644 app/templates/index.html delete mode 100644 authentication.json delete mode 100644 cat_or_not.py delete mode 100644 config.py delete mode 100644 pic.jpg delete mode 100644 requirements.txt diff --git a/Procfile b/Procfile deleted file mode 100644 index 9df3bff..0000000 --- a/Procfile +++ /dev/null @@ -1,3 +0,0 @@ -web: gunicorn cat_or_not -heroku ps:scale web=1 -export GOOGLE_APPLICATION_CREDENTIALS="authentication.json" diff --git a/__pycache__/cat_or_not.cpython-36.pyc b/__pycache__/cat_or_not.cpython-36.pyc deleted file mode 100644 index 63f3e4d07d947954f0bf49903cdcefc06d24e2eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmXr!<>flQfImi=fq~&M5W@izkmUfx#R5Pgg&~D8has0Cijk2ag(;Xplldi3ltGj6 z7IR`jfuAN*5lHzhZXhQoGdZy&Ge2)7LlFy53{3n|)z8S!P1R2}Fvv+Q(g!Mt&o7G4 c%P&D<>J?Pp;;_lhPbtkwwPOV8ECyl*0H}~9O8@`> diff --git a/__pycache__/cat_recognition.cpython-36.pyc b/__pycache__/cat_recognition.cpython-36.pyc deleted file mode 100644 index 5f0382d7779cb6880d8012cb95c38b32cce3104c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmYjO!HN_y5KSfBJ?+@LB6`uI2cbn~7QBim3xbz9xSoR0v`L)pG2I!G?7~9NY4^Gx z;t%*Sef8uoc(N)DGJ&dosmiOWSN-PXWI6ph{rZ_R_M06YytDUc;WawVG+5Sy1R%^U z?}ZeIh0gAn%yg~`{N{Rb!Rqo4GFS~$aovT^4T$o1vo}EjCGb#fvU9ZX0$pSyyM+Uc zpy3(Yf#yHBf3C#^(-|7Ws`S}xh8KaBl)OX`ar#?!fXH`Z#I4=Kfse4uMy@$xF^XM|YQ&}nU*LOMPS>|v zQx~3ABAYFQ*aHauV~X2d&;y Wqp5t`JAGx%J5m}*egzdT7ykgbuaJ@e diff --git a/__pycache__/config.cpython-36.pyc b/__pycache__/config.cpython-36.pyc deleted file mode 100644 index 442ed48a0410cbcaa4af20afd642d1b704688d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmYLE!Ait16nsf)TdFGv;>nB09%>i7iYzR}gRlqJi$w^viM1td*0f#Oy{6+RmJkSNb|+LezL&%5F7 Sf9qE5+X4S_o9zniHsBvAj#JzK diff --git a/__pycache__/forms.cpython-36.pyc b/__pycache__/forms.cpython-36.pyc deleted file mode 100644 index 18070b22f818b9f7b2ebd625fe955411751992a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmYjPyKWRQ6!o3=&dvrz1LYPp(_|yjB0wQpnkYi7ps*8@*#Xq z+G(ls3#quC0fHr8o%=q=^0URF{BU#d@i8#=i~V;J!msH16EesUG&8^f0*-WKVji1> zCnn{o$#^!#W1X9V7r@>yOfdb}uKLC)+=kJA&p+x(@A?}@aSwNW|Mf_y$AY_BNTdqD^qgLCa zBdy$OD?4GGphc@4vGIqOUtK|EDP13=74Q(o$XQ+T*)F`LxbAi?q8!f&g|2CND0iW8 mT+Sc;Ngmz{8~KgX?g>rk0ksXq^GVwa`X0;&1rf{m%*()glR2GC#^Uqv_6q>M34f6hyCC$JR1_#QV6j0=oDpXY8+c|in>RUv zM$LEF6uP)CRlY;TRq+Ni5vsg~O8k%yR2cc(wEY8-Bd<3~dl|ItOdB+f#y6dDt(rS; z_gF8JA_Wq1!WE%ErV?NWuMkk-3;pJuk$<*$9^aAQ<8&RYA+LNzE*0}h=+iY7`hwaA z_>$WGq+UC#>*Z`_w6B+Kkj~4E3-wwX&Br7Jw6=V0FO uw5}hvMIq&;wOY!UwOtpvciW%`>9G1=5u}ge%sRC-`aIp)r_lkX6zmtSEn0H` diff --git a/app/__init__.py b/app/__init__.py deleted file mode 100644 index f5b34f4..0000000 --- a/app/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from flask import Flask -from config import Config - -app = Flask(__name__) -app.config.from_object(Config) - -from app import routes diff --git a/app/__pycache__/__init__.cpython-36.pyc b/app/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 10c727a7ea85a39c47598816c7326638c2c9b734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmX|4u};G<5VhktwMxrxpe(pj*9svaF|x2lNT)QpKvFx79Cu(t>Id*0{1AgzCVqj5 zbCEddy?dv7?{2$ZFW)~epWYZ_Uxfe4NZk_V9Z}0#ZkXj2=SgQKv!W85A;2EBWv%!lr zD1foH2oOa*P4S}h&Vt(y*aV-G;e+`lwKM%(=@(~FH=B(?ubVo6^Dw%gDXIbbu@3;( W(`!^a>)NBi8&26-5v}+tQ-oh=O+%Xi diff --git a/app/__pycache__/cat_recognition.cpython-36.pyc b/app/__pycache__/cat_recognition.cpython-36.pyc deleted file mode 100644 index 9289b2a203625a5dccccebc698bfc7b58d408088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmYjO&1&2*5Y|Yx*WEZNrM;xb9twuC8|bx^lt3Vty`(1-Fs`I-yp=5@D}{jflwSKF zc_m$Q>I>x1Q)gr-D>LKy(Kj>S=;QJ6^6B~HrsIq~v4ev?J4YEmpi)eMVI5QeWOKti zQ3t-0D>$J4nzNIp&;XY*TSmUjf#>`PM z$l(MM?vBv@&n7`fphPzB(eTLNf$hQbotSWQzhTcO*d-HJ9Bna)U5bpvrUbXZ`?R38 zYqq+~9Id5#b4A{l9!G1ubr+^ZGLCvwX-riwBe7a(uO&@ey_y5fjKRoQCb4+PShFiaI3V!ps^!|MD8ZDKWyi?x>idTpJllX1D}UE5u) zTcvSay_VkJT8DF5om;Dw?B;B_8Qz<=pAyD6mG-nzxI#%2~`y1fQ&~f zMo`ItT>(a4Bc7@Z;{)&<6QY)m<=efs5(6ooylT7a8hH6p>K0{ho&UUiA^T(Njyu~w zyR3_`5TcVt2{D#J7>k1rxDw)Kkb3U8n67s@g)ttSc3D7~pG16P?kIFa_;u2Jutqi8 zvooz+vz5KDPS8b--0zzmG4iMTPp+V&DY*~w3b+qb<+3jMVi(?1-1a*cQIF?@!qiM4 q9Cu-GBETQ~X`bGRn>bF}?nuq(9*vE~lUd(W`XbB+6%{;!D*6pIwT!O- diff --git a/app/__pycache__/picture_downloader.cpython-36.pyc b/app/__pycache__/picture_downloader.cpython-36.pyc deleted file mode 100644 index 1fd1e52a9214426a7c447f0725d39de2b8c01326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmYjNu};H447D$56IE(K6+e-sDPlzk!QO?fLWOS6yJ+rVh#WR diff --git a/app/__pycache__/routes.cpython-36.pyc b/app/__pycache__/routes.cpython-36.pyc deleted file mode 100644 index 32d58837e2fec07c2d694890d16b4ffa35974bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmYjOyN=W_6tx{Y$z*2&8u$SUicm~eqC*I+v|{N7q*)pZDGIS?Cc%y)$KkQstwOsW z!bk8UX{l%_x8gbltRo*E-|PE0H_unA2Iio zGCZ*hRra5NJg~AA(iTqYPL)oADS6*1Q;G{?HQa)->-@W_bcL0bIkdH_O$(-VS66PZ zvJmD=>m#JS!}%1vd3`z2cW-x>@FvpI9gXNKU)L{~0`khwVfQZp92(ILx<(Bik=;1b z1i)#-Mtp-^*hJTO#P*rMJDAE2xmbW-&|Bac+g{Q0(mlDNTLYNXpycc3=(K{$bnp9L zSYM2jfYlg|BtMn*j$t^Aj`(f>StA!c~9u!p@+!B3SeS$sX5Wy*FAXT V{qaj}#GvFW47c7ZS>k^m`3qlQs>}cY diff --git a/app/cat_recognition.py b/app/cat_recognition.py deleted file mode 100644 index b65d418..0000000 --- a/app/cat_recognition.py +++ /dev/null @@ -1,20 +0,0 @@ -# Imports the Google Cloud client library -from google.cloud import vision -from google.cloud.vision import types - -def is_cat(content): - labels = fetch_data(content) - if labels[0].description == "cat": - return True - else: - return False - -def fetch_data(content): - # Instantiates a client - client = vision.ImageAnnotatorClient() - # Tell Google Vision that our content is of type Image - image = types.Image(content=content) - # Performs label detection on the image file - response = client.label_detection(image=image) - # Return array of labels - return response.label_annotations diff --git a/app/forms.py b/app/forms.py deleted file mode 100644 index ab65d4c..0000000 --- a/app/forms.py +++ /dev/null @@ -1,7 +0,0 @@ -from flask_wtf import FlaskForm -from wtforms import StringField, PasswordField, BooleanField, SubmitField -from wtforms.validators import DataRequired - -class UploadForm(FlaskForm): - url = StringField('Link', validators=[DataRequired()]) - submit = SubmitField('Cat or not?') diff --git a/app/picture_downloader.py b/app/picture_downloader.py deleted file mode 100644 index 3304f35..0000000 --- a/app/picture_downloader.py +++ /dev/null @@ -1,10 +0,0 @@ -import requests - -def get_image_from_url(url): - f = open('pic.jpg','wb') - f.write(requests.get(url).content) - f.close() - f = open('pic.jpg','rb') - file = f.read() - f.close() - return file diff --git a/app/routes.py b/app/routes.py deleted file mode 100644 index feedcbd..0000000 --- a/app/routes.py +++ /dev/null @@ -1,18 +0,0 @@ -from flask import Flask -from flask import render_template -from app.forms import UploadForm -from app import app -from app import cat_recognition as cat -from app import picture_downloader as downloader - -@app.route('/', methods=['GET', 'POST']) -def index(): - form = UploadForm() - if form.validate_on_submit(): - content = downloader.get_image_from_url(form.url.data) - if cat.is_cat(content): - return "Cat!" - else: - return "Not!" - - return render_template('index.html', form=form) diff --git a/app/templates/base.html b/app/templates/base.html deleted file mode 100644 index 519c49c..0000000 --- a/app/templates/base.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - {% if title %} - {{ title }} | Cat or Not - {% else %} - Cat or Not - {% endif %} - - - - {% with messages = get_flashed_messages() %} - {% if messages %} -
    - {% for message in messages %} -
  • {{ message }}
  • - {% endfor %} -
- {% endif %} - {% endwith %} - {% block content %}{% endblock %} - - diff --git a/app/templates/index.html b/app/templates/index.html deleted file mode 100644 index 18c65da..0000000 --- a/app/templates/index.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -

Check if the picture is cat or not!

-
- {{ form.hidden_tag() }} -

- {{ form.url.label }}
- {{ form.url }} -

-

{{ form.submit() }}

-
-{% endblock %} diff --git a/authentication.json b/authentication.json deleted file mode 100644 index c2beba1..0000000 --- a/authentication.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "quiet-odyssey-225116", - "private_key_id": "f2553a958e511debcf46d10957e3c7fbdb906aa1", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDfmChqO8VSfmEi\nSNeGhgq3jCe5iCk67yoaatQ9kYd10pmVST6OjJ3nmxd1iYAAYCB59wV4V19C67oj\n5x0bxhhKITilS94bNhZJFB4FjwMIGrDXe9SGcZwSwrB+ggFhvZGNQjYWDe7rrJ/V\nXemA8kO/wfVYUgHsjWXm3VKEeP4G0j8mndA+PP2T/aJNIWok5IA/emqr305YNMvd\n+C8TB6htf4Pqe1ZDHNyrGzYKUy1KbMAdtBXgmpVCKeo4XdlV1s0y7tVnCN+4MUM5\nVAP1fD9985fh84Zw+nMt6//pxGORwnvTNDjPjPwqEwQbV02YcfYMKPjXWSDFxv+v\nOqDUwAsjAgMBAAECggEAaQNRl/NSjZgFjtCfSPMTfXk5/w1QL/m70IR0AiajdFbh\nAxhPZSvtzaUts2pMz+BV4HKAAzEl8Iw99DbLmQvExKwtqpSjUCxq8w+bugic5+WB\nQPNLsYkSQE1oD0KH25vpDGsYc+s/VzjQKKnezUz7PMifrkd119/hCDjSVJ1u0Ux0\nit7ZsoLFzWWorC1CVUPHMqUtlgF8L85w4Yfma7X64yoPNvomI4MFV8E9UfUoZBY0\n02x8mBNX9fjIHzNXkyF6OD8O1IMkrADaJbdmcfgMwBWtarIEsNIiUQsFnFeaN69b\nf26NTQQux9jgMJnMu9V1TNdG6K6TshIw8a/uB4lmYQKBgQD8AUg0Qu9tS8Y4AQfq\nd/0frLIitmnzVs0Lt3TFIw1OjUrfki5gStAEVGhIN2SXLF6lWjqrtk43xQFjzuKr\nL9kuN76MbYDnITuew+9VJPnmA2EiTspcVPNph44FqPSNOar9GCCY7QB6ue+fm5bq\nFyPaHfoKuRmwbvHqVgI2L2HJbQKBgQDjI5OEWYxfJLC6StpEmmOY8W19ZQPTXBKt\nfLSEsDuAjrC2kT6ladXezYuYy/VSAbjdCYbJ1yDABNILDZky0ZSD2midtnqe3z0v\nTKBudkxEDYgRKvgQxMY89N6JpSOedY3v63cOvRwPbVi4sF+REbRu4e+OVsIlpXaK\n/IcINZdczwKBgQCNl87RBnbuqy+xkeq3tDl2DZt9Y47+WdwV5Dto9LvqUfsqyUDj\ne8WLWT3Krc0IH7cCI0Np7aHfNgME6F51nwnhLRMUZgaSVxrfpumXppH+yhFOrISJ\nAnZN6gtDZN4bZ7aKRH80TZ4CVuyrekl+OAg96q/uTHiBqKSmbTMK7O59tQKBgCMD\n3f7eKySTrGbbmTBQOKBgP4fAJcnUfNCf09hMrq+Pz7AlTeoEGcNCHo4MiyH8P/pb\nOJsu/c58L8EidIaABowZBF2jvt10/qKnBmhg9jrbdylmXV2AaCsHeLLxcT9BUgM1\nYmI0Rvod2jqGfgUIHK+nRt3DhCR3kIG2kj5yvIXDAoGAVNd8sw08+U4JMg0TPK71\nhWNeXyNc9aLpehqdIVQPs6KdhlVcoFHKLCDASzMUxNtU27b3Nqgh5dBS4YbNKXoa\n5UZUvxa2Khw1/rT9wTcaIap0kfh1SOZseSfpNUy5mrSKnnVkIn1NKmI0a+mN0gcT\nD706pAo2V7oFEQFocuua1yY=\n-----END PRIVATE KEY-----\n", - "client_email": "c00lerxo@quiet-odyssey-225116.iam.gserviceaccount.com", - "client_id": "106421721962581253770", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/c00lerxo%40quiet-odyssey-225116.iam.gserviceaccount.com" -} diff --git a/cat_or_not.py b/cat_or_not.py deleted file mode 100644 index e13c02e..0000000 --- a/cat_or_not.py +++ /dev/null @@ -1 +0,0 @@ -from app import app as application diff --git a/config.py b/config.py deleted file mode 100644 index 5bf854f..0000000 --- a/config.py +++ /dev/null @@ -1,4 +0,0 @@ -import os - -class Config(object): - SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' diff --git a/pic.jpg b/pic.jpg deleted file mode 100644 index 773ae835014a8415a594c53b1fb93f88193f5d2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5714 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 YrFabxML>$qe8(