From 31623277febf65c4db32b7965e9a6e10627c9b48 Mon Sep 17 00:00:00 2001 From: Michael Herman Date: Sat, 8 Aug 2015 08:16:31 -0600 Subject: [PATCH 01/25] minor updates --- part1/reverse-string/reverse_ni8mr/reverse.py | 6 ------ part1/reverse-string/reverse_reza/test_reverse.py | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 part1/reverse-string/reverse_ni8mr/reverse.py diff --git a/part1/reverse-string/reverse_ni8mr/reverse.py b/part1/reverse-string/reverse_ni8mr/reverse.py deleted file mode 100644 index db509c9..0000000 --- a/part1/reverse-string/reverse_ni8mr/reverse.py +++ /dev/null @@ -1,6 +0,0 @@ -import re - -my_string = raw_input("Enter your string: ") -a = re.split('; |, |\*|\n', my_string) - -for i in \ No newline at end of file diff --git a/part1/reverse-string/reverse_reza/test_reverse.py b/part1/reverse-string/reverse_reza/test_reverse.py index 6c40ec4..a46403a 100644 --- a/part1/reverse-string/reverse_reza/test_reverse.py +++ b/part1/reverse-string/reverse_reza/test_reverse.py @@ -2,7 +2,6 @@ import unittest - class ReverseTestCase(unittest.TestCase): def test(self): test_string = "Hello, My name is Reza. Github user name:ni8mr" @@ -10,5 +9,5 @@ def test(self): result_string = reverse(test_string) self.assertEqual(altered_string, result_string) -if __name__=='__main__': +if __name__ == '__main__': unittest.main() From e46b5341a683d9888eb1b98b6a6017d9a553b673 Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sat, 5 Sep 2015 19:21:31 -0400 Subject: [PATCH 02/25] Test executed --- part1/reverse-string/reverse_akinkunmi/reverse.py | 13 +++++++++++++ .../reverse_akinkunmi/reverse_test.py | 9 +++++++++ 2 files changed, 22 insertions(+) create mode 100644 part1/reverse-string/reverse_akinkunmi/reverse.py create mode 100644 part1/reverse-string/reverse_akinkunmi/reverse_test.py diff --git a/part1/reverse-string/reverse_akinkunmi/reverse.py b/part1/reverse-string/reverse_akinkunmi/reverse.py new file mode 100644 index 0000000..62f8609 --- /dev/null +++ b/part1/reverse-string/reverse_akinkunmi/reverse.py @@ -0,0 +1,13 @@ + +def reverse(str): + str_reverse_list = str.split() + str_reverse_list.reverse() + str_reverse = ' '.join(str_reverse_list) + return str_reverse + + +if __name__ == '__main__': + input_string = raw_input("Please input a string: ") + str_reversed = reverse(input_string) + print str_reversed + \ No newline at end of file diff --git a/part1/reverse-string/reverse_akinkunmi/reverse_test.py b/part1/reverse-string/reverse_akinkunmi/reverse_test.py new file mode 100644 index 0000000..325406b --- /dev/null +++ b/part1/reverse-string/reverse_akinkunmi/reverse_test.py @@ -0,0 +1,9 @@ +from reverse import reverse +def reverse_test(): + str = raw_input("Please input a string: ") + str_reversed = reverse(str) + print str_reversed + +if __name__ == '__main__': + reverse_test() + \ No newline at end of file From d892b327dba596a9e0948b777118218452b3d5e0 Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 00:31:20 -0400 Subject: [PATCH 03/25] Test for vowel_counter executed --- .../counter_akinkunmi/vowel_counter.py | 25 +++++++++++++++++++ .../counter_akinkunmi/vowel_counter_test.py | 9 +++++++ 2 files changed, 34 insertions(+) create mode 100644 part1/vowel-counter/counter_akinkunmi/vowel_counter.py create mode 100644 part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py diff --git a/part1/vowel-counter/counter_akinkunmi/vowel_counter.py b/part1/vowel-counter/counter_akinkunmi/vowel_counter.py new file mode 100644 index 0000000..2e1bbc4 --- /dev/null +++ b/part1/vowel-counter/counter_akinkunmi/vowel_counter.py @@ -0,0 +1,25 @@ + + +def vowel_counter(str): + + vowel_freqs = {} + vowel_list = ['a', 'e', 'i', 'o', 'u'] + for word in str: + str_list = str.split() + for v in vowel_list: + f = word.find(v) + if f !=-1: + if v in vowel_freqs: + vowel_freqs[v] += 1 + else: + vowel_freqs[v] = 1 + + for key,value in vowel_freqs.items(): + print key, value + + +if __name__ == '__main__': + str = raw_input("Please input a string: ") + vowel_counter(str) + + diff --git a/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py b/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py new file mode 100644 index 0000000..ccb11de --- /dev/null +++ b/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py @@ -0,0 +1,9 @@ +from vowel_counter import vowel_counter + +def vowel_counter_test(): + str = raw_input("Please input a string: ") + vowel_counter(str) + + +if __name__ == '__main__': + vowel_counter_test() \ No newline at end of file From 4a22cd23bc757db307fd3cf030d2cd4c28d71a38 Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 03:30:54 -0400 Subject: [PATCH 04/25] Reverse Flask Commit --- .../reverse_flask_akinkunmi/reverse_flask.py | 68 ++++++++++++++++++ .../static/favicon.ico | Bin 0 -> 1150 bytes .../templates/403.html | 9 +++ .../templates/404.html | 9 +++ .../templates/500.html | 9 +++ .../templates/base.html | 47 ++++++++++++ .../templates/entry_flask.html | 22 ++++++ .../templates/layout.html | 12 ++++ .../templates/reverse.html | 20 ++++++ 9 files changed, 196 insertions(+) create mode 100644 part2/reverse_flask_akinkunmi/reverse_flask.py create mode 100644 part2/reverse_flask_akinkunmi/static/favicon.ico create mode 100644 part2/reverse_flask_akinkunmi/templates/403.html create mode 100644 part2/reverse_flask_akinkunmi/templates/404.html create mode 100644 part2/reverse_flask_akinkunmi/templates/500.html create mode 100644 part2/reverse_flask_akinkunmi/templates/base.html create mode 100644 part2/reverse_flask_akinkunmi/templates/entry_flask.html create mode 100644 part2/reverse_flask_akinkunmi/templates/layout.html create mode 100644 part2/reverse_flask_akinkunmi/templates/reverse.html diff --git a/part2/reverse_flask_akinkunmi/reverse_flask.py b/part2/reverse_flask_akinkunmi/reverse_flask.py new file mode 100644 index 0000000..29cbc25 --- /dev/null +++ b/part2/reverse_flask_akinkunmi/reverse_flask.py @@ -0,0 +1,68 @@ +from flask import Flask, render_template, request, redirect, url_for,flash,session +from flask.ext.session import Session +from flask.ext.bootstrap import Bootstrap +from flask.ext.wtf import Form +from flask_wtf.csrf import CsrfProtect +from wtforms import StringField, SubmitField +from wtforms.validators import Required + + + +app = Flask(__name__) +app.config['SECRET_KEY'] = 'hard to guess string' +bootstrap = Bootstrap(app) +CsrfProtect(app) +reverse_flask_session = Session + + +class Reverse_Flask_Form(Form): + + form_string = StringField('Please input a string', validators=[Required()]) + form_submit = SubmitField('Submit') + +def reverse(str): + str_reverse_list = str.split() + str_reverse_list.reverse() + str_reverse = ' '.join(str_reverse_list) + return str_reverse + + +@app.errorhandler(403) +def page_forbidden(e): + return render_template('403.html'), 403 + +#@app.errorhandler(404) +def page_not_found(e): + return render_template('404.html'), 404 + + +@app.errorhandler(500) +def internal_server_error(e): + return render_template('500.html'), 500 + + +@app.route('/', methods=['GET', 'POST']) +def reverse_string_post(): + form = Reverse_Flask_Form() + if form.validate_on_submit(): + + input_string =form.form_string.data + + + return redirect(url_for('reversed_string', entry = input_string )) + + return render_template('entry_flask.html', form=form) + +@app.route('/reversed_entry/') +def reversed_string(entry): + r_string = reverse(entry) + return render_template('reverse.html', original=entry, transformed = r_string) + + + + + +if __name__ == '__main__': + + app.debug = True + app.run() \ No newline at end of file diff --git a/part2/reverse_flask_akinkunmi/static/favicon.ico b/part2/reverse_flask_akinkunmi/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8f674630aa3f565a08c157d4bf0919f5019269b4 GIT binary patch literal 1150 zcmbVMO{=L<6n@nmxdW%G?m(%_#4#{2QxYkK8GeD0pCB^^WFS%oNXo##KuP&1DT+iW z112O2r5Gp!`FQTT_i4MO;~d@fw%2<1+UwbCJ!|ha#|ilF?TzF0AI|lI<9>4-_s$RA z#d|*dyx};0?bpwbLFc@}Cvv@Bak*S@yWKun{pTWakMf9Fuh$rl$LMrAsMqW0^?KNB zHjgkmXV}?nhFB~Ho6QD^L;|&14XsuSkw^rwSPYd)1)WX@kH>T0htx|X9*@&FLQSL5 zU@#aUlgZFA91h|2dQmQyLF$@Lrxe3@q|<3Al}gBDGU)Ysbh};T^LZ?nOBzSi`FzId zbh^(Owp1!XDwV=&wbHr|hXZQ08n)Xljb%M0mhfbjEbjMvC=?2qOePqOM&xoi^!t6R zR;xRf{yb5^U=Tu~5P?7dl}d$jt5&NoVUNcn3+|_&&e3Re&&|%{Notx;E|()5 z4x`y@(w>t35>72eR2L7K;Un#UkzR zD|n~V3A^2nXf%psGKof`LHnObB(U4<=oVjbm`o-h{K>uX`~CF%3xxvO?e@3aS$(Ng lir#a#+f8xA|5Z+gW46_5AruPTF$Bx*C5w4x**oyR_Ad#kb)o +

Forbidden

+ +{% endblock %} diff --git a/part2/reverse_flask_akinkunmi/templates/404.html b/part2/reverse_flask_akinkunmi/templates/404.html new file mode 100644 index 0000000..68fec16 --- /dev/null +++ b/part2/reverse_flask_akinkunmi/templates/404.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% block title %}Suitor Flask - Page Not Found{% endblock %} + +{% block page_content %} + +{% endblock %} diff --git a/part2/reverse_flask_akinkunmi/templates/500.html b/part2/reverse_flask_akinkunmi/templates/500.html new file mode 100644 index 0000000..ba179a7 --- /dev/null +++ b/part2/reverse_flask_akinkunmi/templates/500.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% block title %}Suitor Flask - Internal Server Error{% endblock %} + +{% block page_content %} + +{% endblock %} diff --git a/part2/reverse_flask_akinkunmi/templates/base.html b/part2/reverse_flask_akinkunmi/templates/base.html new file mode 100644 index 0000000..32d031e --- /dev/null +++ b/part2/reverse_flask_akinkunmi/templates/base.html @@ -0,0 +1,47 @@ +{% extends "bootstrap/base.html" %} + +{% block title %}Reverse Flask{% endblock %} + +{% block head %} +{{ super() }} + + +{% endblock %} + +{% block navbar %} + +{% endblock %} + +{% block content %} +
+ {% for message in get_flashed_messages() %} +
+ + {{ message }} +
+ {% endfor %} + + {% block page_content %}{% endblock %} +
+{% endblock %} + +{% block scripts %} +{{ super() }} +{% endblock %} diff --git a/part2/reverse_flask_akinkunmi/templates/entry_flask.html b/part2/reverse_flask_akinkunmi/templates/entry_flask.html new file mode 100644 index 0000000..c9eb0e8 --- /dev/null +++ b/part2/reverse_flask_akinkunmi/templates/entry_flask.html @@ -0,0 +1,22 @@ + + +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block title %}Reverse Flask{% endblock %} + +{% block page_content %} + +{{ wtf.quick_form(form) }} +{% endblock %} + + + + + + + + + diff --git a/part2/reverse_flask_akinkunmi/templates/layout.html b/part2/reverse_flask_akinkunmi/templates/layout.html new file mode 100644 index 0000000..330840c --- /dev/null +++ b/part2/reverse_flask_akinkunmi/templates/layout.html @@ -0,0 +1,12 @@ + +My Application +{% block body %}{% endblock %} +{% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} +{% endwith %} \ No newline at end of file diff --git a/part2/reverse_flask_akinkunmi/templates/reverse.html b/part2/reverse_flask_akinkunmi/templates/reverse.html new file mode 100644 index 0000000..4422682 --- /dev/null +++ b/part2/reverse_flask_akinkunmi/templates/reverse.html @@ -0,0 +1,20 @@ + +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block title %}Reverse Flask{% endblock %} + +{% block page_content %} + +
+

Entry by User

+
{{ original }}
+
+

Reversed Entry

+
{{ transformed }}
+ +
Return to entry page + +{% endblock %} From 36cbb4e82651225c69256ce15c90ce41ca67166c Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 03:32:59 -0400 Subject: [PATCH 05/25] Updated a decorator --- part2/reverse_flask_akinkunmi/reverse_flask.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/part2/reverse_flask_akinkunmi/reverse_flask.py b/part2/reverse_flask_akinkunmi/reverse_flask.py index 29cbc25..ff6a5d8 100644 --- a/part2/reverse_flask_akinkunmi/reverse_flask.py +++ b/part2/reverse_flask_akinkunmi/reverse_flask.py @@ -31,7 +31,7 @@ def reverse(str): def page_forbidden(e): return render_template('403.html'), 403 -#@app.errorhandler(404) +@app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 From 030cba7cf6735847e2d8bd80b320ba41b7183f2c Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 04:56:14 -0400 Subject: [PATCH 06/25] Updated the requirments document --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index a4908e2..7dbb2ed 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ Flask==0.10.1 Flask-WTF==0.11 +Flask-Session==0.2 +Flask-Bootstrap==3.3.4.1 Jinja2==2.7.3 MarkupSafe==0.23 WTForms==2.0.2 From ad70976aea701989eb52805451dc24c2e4aa22d0 Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 05:02:04 -0400 Subject: [PATCH 07/25] Added a Procfile file --- part2/reverse_flask_akinkunmi/Procfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 part2/reverse_flask_akinkunmi/Procfile diff --git a/part2/reverse_flask_akinkunmi/Procfile b/part2/reverse_flask_akinkunmi/Procfile new file mode 100644 index 0000000..4317a4f --- /dev/null +++ b/part2/reverse_flask_akinkunmi/Procfile @@ -0,0 +1 @@ +web: gunicorn reverse_flask:app From 1b5017bafe2135222cc5430099e4b4572c6c7fb2 Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 05:10:42 -0400 Subject: [PATCH 08/25] Procfile --- part2/reverse_flask_akinkunmi/Procfile.windows | 1 + 1 file changed, 1 insertion(+) create mode 100644 part2/reverse_flask_akinkunmi/Procfile.windows diff --git a/part2/reverse_flask_akinkunmi/Procfile.windows b/part2/reverse_flask_akinkunmi/Procfile.windows new file mode 100644 index 0000000..3451c40 --- /dev/null +++ b/part2/reverse_flask_akinkunmi/Procfile.windows @@ -0,0 +1 @@ +web: python reverse_flask.py runserver 0.0.0.0:5000 From eef98a14929b698f942ef21e8cf96dc5234d0bf8 Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 05:18:01 -0400 Subject: [PATCH 09/25] update to Procfile --- part2/reverse_flask_akinkunmi/Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/part2/reverse_flask_akinkunmi/Procfile b/part2/reverse_flask_akinkunmi/Procfile index 4317a4f..be26778 100644 --- a/part2/reverse_flask_akinkunmi/Procfile +++ b/part2/reverse_flask_akinkunmi/Procfile @@ -1 +1 @@ -web: gunicorn reverse_flask:app +web: python reverse_flask.py From d11695a5150a66a925e78b1f47ff2a792e14d62f Mon Sep 17 00:00:00 2001 From: nubianMONK <[gnosisdynamics@gmail.com]> Date: Sun, 6 Sep 2015 06:32:01 -0400 Subject: [PATCH 10/25] Update to the README file with Heroku link --- part2/README.md | 2 +- part2/reverse_flask_akinkunmi/Procfile | 2 +- requirements.txt | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/part2/README.md b/part2/README.md index b4884b2..0454afc 100644 --- a/part2/README.md +++ b/part2/README.md @@ -7,5 +7,5 @@ | [MPerham](https://github.com/mperham2/python-devtest/tree/master/part2/reverse_flask_perham) | [Heroku](https://shrouded-thicket-5935.herokuapp.com/) | | [Gary Herd](https://github.com/garyherd/python-devtest) | [reverse-string](https://grh-reverse-string.herokuapp.com/) | | [Noor Faziur Reza](https://github.com/ni8mr/python-devtest) | [reverse_string_reza](http://ni8mr2.herokuapp.com/) | -| Add link here | Add link here | +| [AAkinkunmi](https://github.com/nubianMONK/python-devtest/tree/master/part2/reverse_flask_akinkunmi) | [reverse-flask](vast-forest-9436.herokuapp.com/) | | Add link here | Add link here | diff --git a/part2/reverse_flask_akinkunmi/Procfile b/part2/reverse_flask_akinkunmi/Procfile index be26778..4317a4f 100644 --- a/part2/reverse_flask_akinkunmi/Procfile +++ b/part2/reverse_flask_akinkunmi/Procfile @@ -1 +1 @@ -web: python reverse_flask.py +web: gunicorn reverse_flask:app diff --git a/requirements.txt b/requirements.txt index 7dbb2ed..7b9840f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ Flask==0.10.1 Flask-WTF==0.11 Flask-Session==0.2 Flask-Bootstrap==3.3.4.1 +gunicorn==19.3.0 Jinja2==2.7.3 MarkupSafe==0.23 WTForms==2.0.2 From 7373cf13e44fbade058260aa7f2e7fc53b83d331 Mon Sep 17 00:00:00 2001 From: Michael Herman Date: Sun, 6 Sep 2015 08:52:37 -0600 Subject: [PATCH 11/25] updated akinkunmi's solutions --- .../reverse_akinkunmi/reverse.py | 15 +---- .../reverse_akinkunmi/reverse_test.py | 19 ++++--- .../counter_akinkunmi/vowel_counter.py | 35 ++++-------- .../counter_akinkunmi/vowel_counter_test.py | 16 ++++-- .../counter_reza/test_vowel_counter.py | 3 +- .../counter_reza/vowel_counter.py | 3 +- part2/README.md | 2 +- .../reverse_flask_akinkunmi/Procfile.windows | 1 - .../reverse_flask_akinkunmi/reverse_flask.py | 56 ++++++++----------- 9 files changed, 62 insertions(+), 88 deletions(-) delete mode 100644 part2/reverse_flask_akinkunmi/Procfile.windows diff --git a/part1/reverse-string/reverse_akinkunmi/reverse.py b/part1/reverse-string/reverse_akinkunmi/reverse.py index 62f8609..589e533 100644 --- a/part1/reverse-string/reverse_akinkunmi/reverse.py +++ b/part1/reverse-string/reverse_akinkunmi/reverse.py @@ -1,13 +1,2 @@ - -def reverse(str): - str_reverse_list = str.split() - str_reverse_list.reverse() - str_reverse = ' '.join(str_reverse_list) - return str_reverse - - -if __name__ == '__main__': - input_string = raw_input("Please input a string: ") - str_reversed = reverse(input_string) - print str_reversed - \ No newline at end of file +def reverse(str_to_reverse): + return str_to_reverse[::-1] diff --git a/part1/reverse-string/reverse_akinkunmi/reverse_test.py b/part1/reverse-string/reverse_akinkunmi/reverse_test.py index 325406b..34e5875 100644 --- a/part1/reverse-string/reverse_akinkunmi/reverse_test.py +++ b/part1/reverse-string/reverse_akinkunmi/reverse_test.py @@ -1,9 +1,14 @@ from reverse import reverse -def reverse_test(): - str = raw_input("Please input a string: ") - str_reversed = reverse(str) - print str_reversed - +import unittest + + +class TestReverse(unittest.TestCase): + + def test_reverse(self): + self.assertEqual(reverse('hello'), 'olleh') + self.assertEqual(reverse('newyork'), 'kroywen') + self.assertNotEqual(reverse('newyork'), 'newyork') + + if __name__ == '__main__': - reverse_test() - \ No newline at end of file + unittest.main() diff --git a/part1/vowel-counter/counter_akinkunmi/vowel_counter.py b/part1/vowel-counter/counter_akinkunmi/vowel_counter.py index 2e1bbc4..8f18bb4 100644 --- a/part1/vowel-counter/counter_akinkunmi/vowel_counter.py +++ b/part1/vowel-counter/counter_akinkunmi/vowel_counter.py @@ -1,25 +1,12 @@ - - def vowel_counter(str): - - vowel_freqs = {} - vowel_list = ['a', 'e', 'i', 'o', 'u'] - for word in str: - str_list = str.split() - for v in vowel_list: - f = word.find(v) - if f !=-1: - if v in vowel_freqs: - vowel_freqs[v] += 1 - else: - vowel_freqs[v] = 1 - - for key,value in vowel_freqs.items(): - print key, value - - -if __name__ == '__main__': - str = raw_input("Please input a string: ") - vowel_counter(str) - - + vowel_freqs = {} + vowel_list = ['a', 'e', 'i', 'o', 'u'] + lower_case_string = str.lower() + for v in vowel_list: + f = lower_case_string.find(v) + if f != -1: + if v in vowel_freqs: + vowel_freqs[v] += 1 + else: + vowel_freqs[v] = 1 + return vowel_freqs diff --git a/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py b/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py index ccb11de..0a2b48b 100644 --- a/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py +++ b/part1/vowel-counter/counter_akinkunmi/vowel_counter_test.py @@ -1,9 +1,13 @@ from vowel_counter import vowel_counter +import unittest + + +class VowelCounterTestCase(unittest.TestCase): + def test(self): + test_string = "Akinkunmi" + expected_vowel_count = {'a': 1, 'i': 1, 'u': 1} + resulted_vowel_count = vowel_counter(test_string) + self.assertEqual(expected_vowel_count, resulted_vowel_count) -def vowel_counter_test(): - str = raw_input("Please input a string: ") - vowel_counter(str) - - if __name__ == '__main__': - vowel_counter_test() \ No newline at end of file + unittest.main() diff --git a/part1/vowel-counter/counter_reza/test_vowel_counter.py b/part1/vowel-counter/counter_reza/test_vowel_counter.py index 763a47e..1c3ccd9 100644 --- a/part1/vowel-counter/counter_reza/test_vowel_counter.py +++ b/part1/vowel-counter/counter_reza/test_vowel_counter.py @@ -1,6 +1,7 @@ from vowel_counter import vowel_counter import unittest + class VowelCounterTestCase(unittest.TestCase): def test(self): test_string = "Hello, My name is Reza. Github user name:ni8mr" @@ -8,5 +9,5 @@ def test(self): resulted_vowel_count = vowel_counter(test_string) self.assertEqual(expected_vowel_count, resulted_vowel_count) -if __name__=='__main__': +if __name__ == '__main__': unittest.main() diff --git a/part1/vowel-counter/counter_reza/vowel_counter.py b/part1/vowel-counter/counter_reza/vowel_counter.py index 2cd8e7e..c8436cd 100644 --- a/part1/vowel-counter/counter_reza/vowel_counter.py +++ b/part1/vowel-counter/counter_reza/vowel_counter.py @@ -1,7 +1,6 @@ def vowel_counter(string): count = 0 for letter in string: - if letter in ['A','E','I','O','U','a','e','i','o','u']: + if letter in ['A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u']: count = count + 1 return count - diff --git a/part2/README.md b/part2/README.md index 0454afc..d7eb12e 100644 --- a/part2/README.md +++ b/part2/README.md @@ -7,5 +7,5 @@ | [MPerham](https://github.com/mperham2/python-devtest/tree/master/part2/reverse_flask_perham) | [Heroku](https://shrouded-thicket-5935.herokuapp.com/) | | [Gary Herd](https://github.com/garyherd/python-devtest) | [reverse-string](https://grh-reverse-string.herokuapp.com/) | | [Noor Faziur Reza](https://github.com/ni8mr/python-devtest) | [reverse_string_reza](http://ni8mr2.herokuapp.com/) | -| [AAkinkunmi](https://github.com/nubianMONK/python-devtest/tree/master/part2/reverse_flask_akinkunmi) | [reverse-flask](vast-forest-9436.herokuapp.com/) | +| [AAkinkunmi](https://github.com/nubianMONK/python-devtest/tree/master/part2/reverse_flask_akinkunmi) | [reverse-flask](http://vast-forest-9436.herokuapp.com/) | | Add link here | Add link here | diff --git a/part2/reverse_flask_akinkunmi/Procfile.windows b/part2/reverse_flask_akinkunmi/Procfile.windows deleted file mode 100644 index 3451c40..0000000 --- a/part2/reverse_flask_akinkunmi/Procfile.windows +++ /dev/null @@ -1 +0,0 @@ -web: python reverse_flask.py runserver 0.0.0.0:5000 diff --git a/part2/reverse_flask_akinkunmi/reverse_flask.py b/part2/reverse_flask_akinkunmi/reverse_flask.py index ff6a5d8..62bc981 100644 --- a/part2/reverse_flask_akinkunmi/reverse_flask.py +++ b/part2/reverse_flask_akinkunmi/reverse_flask.py @@ -1,4 +1,4 @@ -from flask import Flask, render_template, request, redirect, url_for,flash,session +from flask import Flask, render_template, redirect, url_for from flask.ext.session import Session from flask.ext.bootstrap import Bootstrap from flask.ext.wtf import Form @@ -7,7 +7,6 @@ from wtforms.validators import Required - app = Flask(__name__) app.config['SECRET_KEY'] = 'hard to guess string' bootstrap = Bootstrap(app) @@ -16,53 +15,44 @@ class Reverse_Flask_Form(Form): + form_string = StringField('Please input a string', validators=[Required()]) + form_submit = SubmitField('Submit') + + +def reverse(str_to_reverse): + return str_to_reverse[::-1] - form_string = StringField('Please input a string', validators=[Required()]) - form_submit = SubmitField('Submit') - -def reverse(str): - str_reverse_list = str.split() - str_reverse_list.reverse() - str_reverse = ' '.join(str_reverse_list) - return str_reverse - @app.errorhandler(403) def page_forbidden(e): - return render_template('403.html'), 403 - + return render_template('403.html'), 403 + + @app.errorhandler(404) def page_not_found(e): - return render_template('404.html'), 404 + return render_template('404.html'), 404 @app.errorhandler(500) def internal_server_error(e): - return render_template('500.html'), 500 - - + return render_template('500.html'), 500 + + @app.route('/', methods=['GET', 'POST']) def reverse_string_post(): - form = Reverse_Flask_Form() - if form.validate_on_submit(): - - input_string =form.form_string.data - + form = Reverse_Flask_Form() + if form.validate_on_submit(): + input_string = form.form_string.data + return redirect(url_for('reversed_string', entry=input_string)) + return render_template('entry_flask.html', form=form) - return redirect(url_for('reversed_string', entry = input_string )) - return render_template('entry_flask.html', form=form) - @app.route('/reversed_entry/') def reversed_string(entry): - r_string = reverse(entry) - return render_template('reverse.html', original=entry, transformed = r_string) - - + r_string = reverse(entry) + return render_template('reverse.html', original=entry, transformed=r_string) - if __name__ == '__main__': - - app.debug = True - app.run() \ No newline at end of file + app.debug = True + app.run() From 143011e6083bc5b16f572af07dbf4d59cf360e92 Mon Sep 17 00:00:00 2001 From: "Matthew B. Reisch" Date: Sun, 7 Feb 2016 18:33:31 -0500 Subject: [PATCH 12/25] Completed test --- .gitignore | 3 ++- .../reverse_reisch/reverse_string.py | 3 +++ .../reverse_reisch/test_reverse.py | 14 ++++++++++ .../counter_reisch/test_vowel_counter.py | 12 +++++++++ .../counter_reisch/vowel_counter.py | 9 +++++++ .../features/environment.py | 19 ++++++++++++++ .../features/reverse.feature | 11 ++++++++ .../features/steps/reverse_steps.py | 21 +++++++++++++++ .../reverse_flask_reisch/project/__init__.py | 17 ++++++++++++ part2/reverse_flask_reisch/project/_config.py | 3 +++ part2/reverse_flask_reisch/project/forms.py | 7 +++++ .../project/templates/index.html | 26 +++++++++++++++++++ part2/reverse_flask_reisch/run.py | 5 ++++ requirements.txt | 25 +++++++++++------- 14 files changed, 164 insertions(+), 11 deletions(-) mode change 100644 => 100755 .gitignore create mode 100755 part1/reverse-string/reverse_reisch/reverse_string.py create mode 100755 part1/reverse-string/reverse_reisch/test_reverse.py create mode 100755 part1/vowel-counter/counter_reisch/test_vowel_counter.py create mode 100755 part1/vowel-counter/counter_reisch/vowel_counter.py create mode 100755 part2/reverse_flask_reisch/features/environment.py create mode 100755 part2/reverse_flask_reisch/features/reverse.feature create mode 100755 part2/reverse_flask_reisch/features/steps/reverse_steps.py create mode 100755 part2/reverse_flask_reisch/project/__init__.py create mode 100755 part2/reverse_flask_reisch/project/_config.py create mode 100755 part2/reverse_flask_reisch/project/forms.py create mode 100755 part2/reverse_flask_reisch/project/templates/index.html create mode 100755 part2/reverse_flask_reisch/run.py diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 4c0aab0..625c2da --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ venv .DS_STORE htmlcov .coverage -__pycache__ \ No newline at end of file +__pycache__ +/.idea \ No newline at end of file diff --git a/part1/reverse-string/reverse_reisch/reverse_string.py b/part1/reverse-string/reverse_reisch/reverse_string.py new file mode 100755 index 0000000..5612874 --- /dev/null +++ b/part1/reverse-string/reverse_reisch/reverse_string.py @@ -0,0 +1,3 @@ + +def reverse(some_string: str) -> str: + return some_string[::-1] diff --git a/part1/reverse-string/reverse_reisch/test_reverse.py b/part1/reverse-string/reverse_reisch/test_reverse.py new file mode 100755 index 0000000..e39b8a2 --- /dev/null +++ b/part1/reverse-string/reverse_reisch/test_reverse.py @@ -0,0 +1,14 @@ +import unittest +from reverse_string import reverse + + +class ReverseStringTests(unittest.TestCase): + def test_reverse(self): + my_string = "testing" + my_reversed_string = "gnitset" + + returned_string=reverse(my_string) + assert my_reversed_string == returned_string + +if __name__ == "__main__": + unittest.main() diff --git a/part1/vowel-counter/counter_reisch/test_vowel_counter.py b/part1/vowel-counter/counter_reisch/test_vowel_counter.py new file mode 100755 index 0000000..c3a622c --- /dev/null +++ b/part1/vowel-counter/counter_reisch/test_vowel_counter.py @@ -0,0 +1,12 @@ +import unittest +from vowel_counter import vowel_counter + + +class VowelCounterTests(unittest.TestCase): + def test_vowel_counter(self): + my_string = 'abracadabra' + vowel_count = vowel_counter(my_string) + assert vowel_count == 5 + +if __name__ == '__main__': + unittest.main() diff --git a/part1/vowel-counter/counter_reisch/vowel_counter.py b/part1/vowel-counter/counter_reisch/vowel_counter.py new file mode 100755 index 0000000..aa0cac0 --- /dev/null +++ b/part1/vowel-counter/counter_reisch/vowel_counter.py @@ -0,0 +1,9 @@ +vowels=('a','e','i','o','u') + + +def vowel_counter(some_string: str) -> int: + count=0 + for letter in some_string: + if letter in vowels: + count += 1 + return count diff --git a/part2/reverse_flask_reisch/features/environment.py b/part2/reverse_flask_reisch/features/environment.py new file mode 100755 index 0000000..f9d9030 --- /dev/null +++ b/part2/reverse_flask_reisch/features/environment.py @@ -0,0 +1,19 @@ +import os +import sys + +pwd = os.path.abspath(os.path.dirname(__file__)) +project = os.path.basename(pwd) +base_path = pwd.strip(project) +new_path = os.path.join(base_path, 'project') + +try: + from project import app +except ImportError: + sys.path.append(full_path) + from project import app + + +def before_feature(context, feature): + app.config['TESTING'] = True + app.config['WTF_CSRF_ENABLED'] = False + context.client = app.test_client() diff --git a/part2/reverse_flask_reisch/features/reverse.feature b/part2/reverse_flask_reisch/features/reverse.feature new file mode 100755 index 0000000..6f68bd1 --- /dev/null +++ b/part2/reverse_flask_reisch/features/reverse.feature @@ -0,0 +1,11 @@ +# Created by Matthew B. Reisch at 2/7/2016 +Feature: reverse_flask is operational in that users can submit a string via a form and view the word in reverse + Scenario: successful string reversal + Given reverse_flask is set up + When we submit the form with the string "hello" + Then we should see the output "olleh" + + Scenario: unsuccessful string reversal + Given reverse_flask is set up + When we submit the form with the string " " + Then we should see the alert "This field is required." \ No newline at end of file diff --git a/part2/reverse_flask_reisch/features/steps/reverse_steps.py b/part2/reverse_flask_reisch/features/steps/reverse_steps.py new file mode 100755 index 0000000..a9975e8 --- /dev/null +++ b/part2/reverse_flask_reisch/features/steps/reverse_steps.py @@ -0,0 +1,21 @@ +from behave import * + + +@given(u'reverse_flask is set up') +def flask_is_setup(context): + assert context.client + + +@when(u'we submit the form with the string "{string_input}"') +def submit_form(context, string_input): + context.page = context.client.post('/', data=dict(input=string_input),follow_redirects=True) + + +@then(u'we should see the output "{output}"') +def output(context, output): + assert output in context.page.data.decode() + + +@then(u'we should see the alert "{message}"') +def alert(context, message): + assert message in context.page.data.decode() diff --git a/part2/reverse_flask_reisch/project/__init__.py b/part2/reverse_flask_reisch/project/__init__.py new file mode 100755 index 0000000..491e4e0 --- /dev/null +++ b/part2/reverse_flask_reisch/project/__init__.py @@ -0,0 +1,17 @@ +from flask import Flask,render_template,request +from flask_bootstrap import Bootstrap +from .forms import ReverseForm + +app=Flask(__name__) +app.config.from_pyfile('_config.py') +Bootstrap(app) + +@app.route('/',methods=['POST','GET']) +def index(): + error = None + form = ReverseForm(request.form) + if request.method == 'POST': + if form.validate_on_submit(): + input_string=request.form['input'] + return render_template('index.html',form=form,reversed_string=input_string[::-1]) + return render_template('index.html',form=form,error=error) diff --git a/part2/reverse_flask_reisch/project/_config.py b/part2/reverse_flask_reisch/project/_config.py new file mode 100755 index 0000000..153c4b4 --- /dev/null +++ b/part2/reverse_flask_reisch/project/_config.py @@ -0,0 +1,3 @@ +WTF_CSRF_ENABLED = True +SECRET_KEY = '\x07\xdd\xb7\x1e\xe8\x1d*\xe3`3\xa2\x9e\xf6\x94\xd4i\x14(\xa7\x93\xe5s\n\x8e' +DEBUG = True \ No newline at end of file diff --git a/part2/reverse_flask_reisch/project/forms.py b/part2/reverse_flask_reisch/project/forms.py new file mode 100755 index 0000000..ba2a21f --- /dev/null +++ b/part2/reverse_flask_reisch/project/forms.py @@ -0,0 +1,7 @@ +from flask_wtf import Form +from wtforms import StringField +from wtforms.validators import DataRequired + + +class ReverseForm(Form): + input = StringField('Input', validators=[DataRequired()]) diff --git a/part2/reverse_flask_reisch/project/templates/index.html b/part2/reverse_flask_reisch/project/templates/index.html new file mode 100755 index 0000000..90b5f57 --- /dev/null +++ b/part2/reverse_flask_reisch/project/templates/index.html @@ -0,0 +1,26 @@ +{% extends "bootstrap/base.html" %} +{% block title %}Welcome to Reverse-A-Tron-5000 {% endblock %} +{% block content %} +
+

Please Enter a String to be Reversified

+
+ {{ form.csrf_token }} +

+ {{ form.input(placeholder="input a string here") }} + + {% if form.input.errors %} + {% for error in form.input.errors %} + {{ error }} + {% endfor %} + {% endif %} + +

+

+ +

+
+
+

Result: {{ reversed_string }}

+
+
+{% endblock %} \ No newline at end of file diff --git a/part2/reverse_flask_reisch/run.py b/part2/reverse_flask_reisch/run.py new file mode 100755 index 0000000..1a1d4ed --- /dev/null +++ b/part2/reverse_flask_reisch/run.py @@ -0,0 +1,5 @@ +import os +from project import app + +port=int(os.environ.get('PORT',5000)) +app.run(host='0.0.0.0',port=port) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 7b9840f..7385e3f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,15 @@ -Flask==0.10.1 -Flask-WTF==0.11 -Flask-Session==0.2 -Flask-Bootstrap==3.3.4.1 -gunicorn==19.3.0 -Jinja2==2.7.3 -MarkupSafe==0.23 -WTForms==2.0.2 -Werkzeug==0.10.4 -itsdangerous==0.24 +behave==1.2.5 +Flask==0.10.1 +Flask-Bootstrap==3.3.4.1 +Flask-Session==0.2 +Flask-WTF==0.11 +gunicorn==19.3.0 +itsdangerous==0.24 +Jinja2==2.7.3 +MarkupSafe==0.23 +parse==1.6.6 +parse-type==0.3.4 +six==1.10.0 +Werkzeug==0.10.4 +wheel==0.26.0 +WTForms==2.0.2 From f8fe5cc292e440a7fdd4af4cd096dd273cbc6d05 Mon Sep 17 00:00:00 2001 From: "Matthew B. Reisch" Date: Sun, 7 Feb 2016 18:38:31 -0500 Subject: [PATCH 13/25] Preparing for heroku deployment --- part2/reverse_flask_reisch/Procfile | 1 + 1 file changed, 1 insertion(+) create mode 100755 part2/reverse_flask_reisch/Procfile diff --git a/part2/reverse_flask_reisch/Procfile b/part2/reverse_flask_reisch/Procfile new file mode 100755 index 0000000..ee63fad --- /dev/null +++ b/part2/reverse_flask_reisch/Procfile @@ -0,0 +1 @@ +web: python run.py \ No newline at end of file From ba2529b98e1615984d12b68673e360868a4963a9 Mon Sep 17 00:00:00 2001 From: "Matthew B. Reisch" Date: Sun, 7 Feb 2016 19:00:53 -0500 Subject: [PATCH 14/25] Pushed to heroku and readme updated --- part2/README.md | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 part2/README.md diff --git a/part2/README.md b/part2/README.md old mode 100644 new mode 100755 index d7eb12e..9fa85e5 --- a/part2/README.md +++ b/part2/README.md @@ -8,4 +8,5 @@ | [Gary Herd](https://github.com/garyherd/python-devtest) | [reverse-string](https://grh-reverse-string.herokuapp.com/) | | [Noor Faziur Reza](https://github.com/ni8mr/python-devtest) | [reverse_string_reza](http://ni8mr2.herokuapp.com/) | | [AAkinkunmi](https://github.com/nubianMONK/python-devtest/tree/master/part2/reverse_flask_akinkunmi) | [reverse-flask](http://vast-forest-9436.herokuapp.com/) | +| [Matthew Reisch](https://github.com/mbreisch/python-devtest) | [reverse-flask](https://vast-caverns-90155.herokuapp.com/) | | Add link here | Add link here | From 2c2f48a3cfda9c9f16b074e35479f7746414f607 Mon Sep 17 00:00:00 2001 From: Michael Herman Date: Mon, 8 Feb 2016 03:15:53 -0700 Subject: [PATCH 15/25] minor updates --- .../reverse_reisch/reverse_string.py | 3 +-- .../reverse-string/reverse_reisch/test_reverse.py | 2 +- .../vowel-counter/counter_reisch/vowel_counter.py | 6 +++--- part2/reverse_flask_reisch/project/__init__.py | 14 ++++++++------ part2/reverse_flask_reisch/project/_config.py | 2 +- part2/reverse_flask_reisch/run.py | 4 ++-- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/part1/reverse-string/reverse_reisch/reverse_string.py b/part1/reverse-string/reverse_reisch/reverse_string.py index 5612874..9378885 100755 --- a/part1/reverse-string/reverse_reisch/reverse_string.py +++ b/part1/reverse-string/reverse_reisch/reverse_string.py @@ -1,3 +1,2 @@ - -def reverse(some_string: str) -> str: +def reverse(some_string): return some_string[::-1] diff --git a/part1/reverse-string/reverse_reisch/test_reverse.py b/part1/reverse-string/reverse_reisch/test_reverse.py index e39b8a2..4303ab2 100755 --- a/part1/reverse-string/reverse_reisch/test_reverse.py +++ b/part1/reverse-string/reverse_reisch/test_reverse.py @@ -7,7 +7,7 @@ def test_reverse(self): my_string = "testing" my_reversed_string = "gnitset" - returned_string=reverse(my_string) + returned_string = reverse(my_string) assert my_reversed_string == returned_string if __name__ == "__main__": diff --git a/part1/vowel-counter/counter_reisch/vowel_counter.py b/part1/vowel-counter/counter_reisch/vowel_counter.py index aa0cac0..b2b5f4e 100755 --- a/part1/vowel-counter/counter_reisch/vowel_counter.py +++ b/part1/vowel-counter/counter_reisch/vowel_counter.py @@ -1,8 +1,8 @@ -vowels=('a','e','i','o','u') +vowels = ('a', 'e', 'i', 'o', 'u') -def vowel_counter(some_string: str) -> int: - count=0 +def vowel_counter(some_string): + count = 0 for letter in some_string: if letter in vowels: count += 1 diff --git a/part2/reverse_flask_reisch/project/__init__.py b/part2/reverse_flask_reisch/project/__init__.py index 491e4e0..f0a3173 100755 --- a/part2/reverse_flask_reisch/project/__init__.py +++ b/part2/reverse_flask_reisch/project/__init__.py @@ -1,17 +1,19 @@ -from flask import Flask,render_template,request +from flask import Flask, render_template, request from flask_bootstrap import Bootstrap from .forms import ReverseForm -app=Flask(__name__) +app = Flask(__name__) app.config.from_pyfile('_config.py') Bootstrap(app) -@app.route('/',methods=['POST','GET']) + +@app.route('/', methods=['POST', 'GET']) def index(): error = None form = ReverseForm(request.form) if request.method == 'POST': if form.validate_on_submit(): - input_string=request.form['input'] - return render_template('index.html',form=form,reversed_string=input_string[::-1]) - return render_template('index.html',form=form,error=error) + input_string = request.form['input'] + return render_template( + 'index.html', form=form, reversed_string=input_string[::-1]) + return render_template('index.html', form=form, error=error) diff --git a/part2/reverse_flask_reisch/project/_config.py b/part2/reverse_flask_reisch/project/_config.py index 153c4b4..6aac142 100755 --- a/part2/reverse_flask_reisch/project/_config.py +++ b/part2/reverse_flask_reisch/project/_config.py @@ -1,3 +1,3 @@ WTF_CSRF_ENABLED = True SECRET_KEY = '\x07\xdd\xb7\x1e\xe8\x1d*\xe3`3\xa2\x9e\xf6\x94\xd4i\x14(\xa7\x93\xe5s\n\x8e' -DEBUG = True \ No newline at end of file +DEBUG = True diff --git a/part2/reverse_flask_reisch/run.py b/part2/reverse_flask_reisch/run.py index 1a1d4ed..ac4bc2b 100755 --- a/part2/reverse_flask_reisch/run.py +++ b/part2/reverse_flask_reisch/run.py @@ -1,5 +1,5 @@ import os from project import app -port=int(os.environ.get('PORT',5000)) -app.run(host='0.0.0.0',port=port) \ No newline at end of file +port = int(os.environ.get('PORT', 5000)) +app.run(host='0.0.0.0', port=port) \ No newline at end of file From 36da83c6f18bde3e1a68f1a275cff0c726364fab Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sat, 10 Nov 2018 17:06:37 -0800 Subject: [PATCH 16/25] afr solution --- part1/reverse-string/reverse_afr/reverse.py | 3 ++ .../reverse_afr/test_reverse.py | 22 +++++++++++++ .../counter_afr/test_vowel_counter.py | 27 +++++++++++++++ .../counter_afr/vowel_counter.py | 15 +++++++++ part2/reverse_flask_afr/app.py | 33 +++++++++++++++++++ part2/reverse_flask_afr/templates/base.html | 20 +++++++++++ part2/reverse_flask_afr/templates/index.html | 16 +++++++++ .../templates/reverse_entry.html | 7 ++++ 8 files changed, 143 insertions(+) create mode 100644 part1/reverse-string/reverse_afr/reverse.py create mode 100644 part1/reverse-string/reverse_afr/test_reverse.py create mode 100644 part1/vowel-counter/counter_afr/test_vowel_counter.py create mode 100644 part1/vowel-counter/counter_afr/vowel_counter.py create mode 100644 part2/reverse_flask_afr/app.py create mode 100644 part2/reverse_flask_afr/templates/base.html create mode 100644 part2/reverse_flask_afr/templates/index.html create mode 100644 part2/reverse_flask_afr/templates/reverse_entry.html diff --git a/part1/reverse-string/reverse_afr/reverse.py b/part1/reverse-string/reverse_afr/reverse.py new file mode 100644 index 0000000..b9f4e44 --- /dev/null +++ b/part1/reverse-string/reverse_afr/reverse.py @@ -0,0 +1,3 @@ +def reverse(s): + # return s[-1:-len(s)-1:-1] -- my first attempt which seems complicated + return s[::-1] # After researching on it. diff --git a/part1/reverse-string/reverse_afr/test_reverse.py b/part1/reverse-string/reverse_afr/test_reverse.py new file mode 100644 index 0000000..8176b2e --- /dev/null +++ b/part1/reverse-string/reverse_afr/test_reverse.py @@ -0,0 +1,22 @@ +from reverse import reverse + +# Test reversal in positive case +def test_reverse_1(): + strings = [("", ""), + ("hello", "olleh"), + ] + for s in strings: + (string, reverse_string) = s + assert reverse_string == reverse(string) + +# Test reversal in negative case +def test_reverse_2(): + strings = [("", "olleh"), + ("hello", "") + ] + for s in strings: + (string, reverse_string) = s + assert reverse_string != reverse(string) + +test_reverse_1() +test_reverse_2() diff --git a/part1/vowel-counter/counter_afr/test_vowel_counter.py b/part1/vowel-counter/counter_afr/test_vowel_counter.py new file mode 100644 index 0000000..9a6efa8 --- /dev/null +++ b/part1/vowel-counter/counter_afr/test_vowel_counter.py @@ -0,0 +1,27 @@ +from vowel_counter import vowel_counter + +def test_vowel_counter_1(): + string = "" + vowels = vowel_counter(string) + expected_vowels={ + "a":0, + "e":0, + "i":0, + "o":0, + "u":0 + } + assert vowels == expected_vowels + + string = "abcaaadefoogooo" + vowels = vowel_counter(string) + expected_vowels={ + "a":4, + "e":1, + "i":0, + "o":5, + "u":0 + } + assert vowels == expected_vowels + + +test_vowel_counter_1() diff --git a/part1/vowel-counter/counter_afr/vowel_counter.py b/part1/vowel-counter/counter_afr/vowel_counter.py new file mode 100644 index 0000000..8f3bfa7 --- /dev/null +++ b/part1/vowel-counter/counter_afr/vowel_counter.py @@ -0,0 +1,15 @@ +# return a dictionary +def vowel_counter(string): + vowels={ + "a":0, + "e":0, + "i":0, + "o":0, + "u":0 + } + + for c in string: + if c in vowels.keys(): + vowels[c] = vowels[c]+1 + return vowels + diff --git a/part2/reverse_flask_afr/app.py b/part2/reverse_flask_afr/app.py new file mode 100644 index 0000000..28d1b6c --- /dev/null +++ b/part2/reverse_flask_afr/app.py @@ -0,0 +1,33 @@ +# Reverse a string +# Note - this doesn't persist anything in a db + +import os + +# import specific reverse function +import sys +sys.path.insert(0, '../../part1/reverse-string/reverse_afr/') +from reverse import reverse + +from flask import Flask, flash, redirect, render_template, request, url_for + +SECRET_KEY = "jiosf0m()(HJI890w23r9j*&*^&GY" +WTF_CSRF_ENABLED = True # cross-site request forgery protection + +app = Flask(__name__) +app.config.from_object(__name__) + +# Main index route +@app.route("/") +def index(): + return render_template("index.html") + +# Route to reversed entry +@app.route("/reverse_entry", methods = ["POST"]) +def reverse_entry(): + re = reverse(request.form["string_to_reverse"]) + return render_template("reverse_entry.html", re = re) + +# Main - port added to work with heroku +if __name__ == "__main__": + port = int(os.environ.get("PORT", 5000)) + app.run(host="0.0.0.0", port = port) diff --git a/part2/reverse_flask_afr/templates/base.html b/part2/reverse_flask_afr/templates/base.html new file mode 100644 index 0000000..93aa1b0 --- /dev/null +++ b/part2/reverse_flask_afr/templates/base.html @@ -0,0 +1,20 @@ + + + + Flask - Reverse Strings + + + + + + +
+ + {% block content %} + {% endblock %} + +
+ + diff --git a/part2/reverse_flask_afr/templates/index.html b/part2/reverse_flask_afr/templates/index.html new file mode 100644 index 0000000..9e87680 --- /dev/null +++ b/part2/reverse_flask_afr/templates/index.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block content %} +
+

Please enter a string to be reversed

+

+
+
+
+
+
+
+
+
+
+{% endblock %} diff --git a/part2/reverse_flask_afr/templates/reverse_entry.html b/part2/reverse_flask_afr/templates/reverse_entry.html new file mode 100644 index 0000000..4d3dfd0 --- /dev/null +++ b/part2/reverse_flask_afr/templates/reverse_entry.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} + +{% block content %} +
+ {{ re|safe }} +
+{% endblock %} From 2d764569d957e476d1236f7fdc95027de95c6399 Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sat, 10 Nov 2018 17:10:15 -0800 Subject: [PATCH 17/25] Add Procfile for heroku --- Procfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 Procfile diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..ffa0ac8 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: python app.py --host 0.0.0.0 --port ${PORT} From 2fd64f49b7bf5d720e98de5c915e3680b0ae5422 Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sat, 10 Nov 2018 17:12:50 -0800 Subject: [PATCH 18/25] Add Procfile for heroku --- part2/reverse_flask_afr/Procfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 part2/reverse_flask_afr/Procfile diff --git a/part2/reverse_flask_afr/Procfile b/part2/reverse_flask_afr/Procfile new file mode 100644 index 0000000..ffa0ac8 --- /dev/null +++ b/part2/reverse_flask_afr/Procfile @@ -0,0 +1 @@ +web: python app.py --host 0.0.0.0 --port ${PORT} From 5538b7f90d6dff3d052a32ae26c557e8fda92853 Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sat, 10 Nov 2018 17:20:33 -0800 Subject: [PATCH 19/25] Add Procfile for heroku --- part2/reverse_flask_afr/Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/part2/reverse_flask_afr/Procfile b/part2/reverse_flask_afr/Procfile index ffa0ac8..52ec8bd 100644 --- a/part2/reverse_flask_afr/Procfile +++ b/part2/reverse_flask_afr/Procfile @@ -1 +1 @@ -web: python app.py --host 0.0.0.0 --port ${PORT} +web: python app.py From fb08052b66a8c2d81c4bee4a34369f7cfb3957ba Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sat, 10 Nov 2018 17:27:47 -0800 Subject: [PATCH 20/25] Add Procfile for heroku --- part2/reverse_flask_afr/Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/part2/reverse_flask_afr/Procfile b/part2/reverse_flask_afr/Procfile index 52ec8bd..0d9c468 100644 --- a/part2/reverse_flask_afr/Procfile +++ b/part2/reverse_flask_afr/Procfile @@ -1 +1 @@ -web: python app.py +web: python app.py From 56425518076280a203051bedfab78ea62d841b77 Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sun, 11 Nov 2018 15:34:56 -0800 Subject: [PATCH 21/25] Still trying to get heroku to work --- Procfile | 1 - part2/reverse_flask_afr/Procfile | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 Procfile diff --git a/Procfile b/Procfile deleted file mode 100644 index ffa0ac8..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: python app.py --host 0.0.0.0 --port ${PORT} diff --git a/part2/reverse_flask_afr/Procfile b/part2/reverse_flask_afr/Procfile index 0d9c468..52ec8bd 100644 --- a/part2/reverse_flask_afr/Procfile +++ b/part2/reverse_flask_afr/Procfile @@ -1 +1 @@ -web: python app.py +web: python app.py From 4e4834b2662e3c4c53f9bac41964274e0b594f92 Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sun, 11 Nov 2018 15:55:43 -0800 Subject: [PATCH 22/25] made sure to have reverse.py in this subdirectory for heroku --- part2/reverse_flask_afr/app.py | 2 -- part2/reverse_flask_afr/reverse.py | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 part2/reverse_flask_afr/reverse.py diff --git a/part2/reverse_flask_afr/app.py b/part2/reverse_flask_afr/app.py index 28d1b6c..1630263 100644 --- a/part2/reverse_flask_afr/app.py +++ b/part2/reverse_flask_afr/app.py @@ -4,8 +4,6 @@ import os # import specific reverse function -import sys -sys.path.insert(0, '../../part1/reverse-string/reverse_afr/') from reverse import reverse from flask import Flask, flash, redirect, render_template, request, url_for diff --git a/part2/reverse_flask_afr/reverse.py b/part2/reverse_flask_afr/reverse.py new file mode 100644 index 0000000..b9f4e44 --- /dev/null +++ b/part2/reverse_flask_afr/reverse.py @@ -0,0 +1,3 @@ +def reverse(s): + # return s[-1:-len(s)-1:-1] -- my first attempt which seems complicated + return s[::-1] # After researching on it. From bf31642b804ed1feac30777128997aec2ee6453a Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sun, 11 Nov 2018 16:12:40 -0800 Subject: [PATCH 23/25] getting heroku to work from subdirectory --- part2/reverse_flask_afr/Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/part2/reverse_flask_afr/Procfile b/part2/reverse_flask_afr/Procfile index 52ec8bd..0d9c468 100644 --- a/part2/reverse_flask_afr/Procfile +++ b/part2/reverse_flask_afr/Procfile @@ -1 +1 @@ -web: python app.py +web: python app.py From dd1e9522e4a97ce1b3a96fdf7bc9f684b9aeb30b Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sun, 11 Nov 2018 16:26:27 -0800 Subject: [PATCH 24/25] trying to get heroku to work in subdirectory --- part2/reverse_flask_afr/requirements.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 part2/reverse_flask_afr/requirements.txt diff --git a/part2/reverse_flask_afr/requirements.txt b/part2/reverse_flask_afr/requirements.txt new file mode 100644 index 0000000..7385e3f --- /dev/null +++ b/part2/reverse_flask_afr/requirements.txt @@ -0,0 +1,15 @@ +behave==1.2.5 +Flask==0.10.1 +Flask-Bootstrap==3.3.4.1 +Flask-Session==0.2 +Flask-WTF==0.11 +gunicorn==19.3.0 +itsdangerous==0.24 +Jinja2==2.7.3 +MarkupSafe==0.23 +parse==1.6.6 +parse-type==0.3.4 +six==1.10.0 +Werkzeug==0.10.4 +wheel==0.26.0 +WTForms==2.0.2 From 6a7d2d810578059dac92af0ff13944a6f987a757 Mon Sep 17 00:00:00 2001 From: available-for-recruit <44419348+available-for-recruit@users.noreply.github.com> Date: Sun, 11 Nov 2018 16:30:36 -0800 Subject: [PATCH 25/25] Updated README.md with github/heroku links --- part2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/part2/README.md b/part2/README.md index 9fa85e5..a8972fd 100755 --- a/part2/README.md +++ b/part2/README.md @@ -9,4 +9,5 @@ | [Noor Faziur Reza](https://github.com/ni8mr/python-devtest) | [reverse_string_reza](http://ni8mr2.herokuapp.com/) | | [AAkinkunmi](https://github.com/nubianMONK/python-devtest/tree/master/part2/reverse_flask_akinkunmi) | [reverse-flask](http://vast-forest-9436.herokuapp.com/) | | [Matthew Reisch](https://github.com/mbreisch/python-devtest) | [reverse-flask](https://vast-caverns-90155.herokuapp.com/) | +| [Available For Recruit](https://github.com/available-for-recruit/python-devtest) | [reverse-flask](https://limitless-beach-97367.herokuapp.com/) | | Add link here | Add link here |