Skip to content

Commit f8d74b8

Browse files
committed
Merge pull request mjhea0#8 from ni8mr/master
Finished my pydev-test
2 parents 918fe09 + 74e5cee commit f8d74b8

File tree

21 files changed

+298
-1
lines changed

21 files changed

+298
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import re
2+
3+
my_string = raw_input("Enter your string: ")
4+
a = re.split('; |, |\*|\n', my_string)
5+
6+
for i in
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
def reverse(string):
2+
return string[::-1]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from reverse import reverse
2+
import unittest
3+
4+
5+
6+
class ReverseTestCase(unittest.TestCase):
7+
def test(self):
8+
test_string = "Hello, My name is Reza. Github user name:ni8mr"
9+
altered_string = "rm8in:eman resu buhtiG .azeR si eman yM ,olleH"
10+
result_string = reverse(test_string)
11+
self.assertEqual(altered_string, result_string)
12+
13+
if __name__=='__main__':
14+
unittest.main()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from vowel_counter import vowel_counter
2+
import unittest
3+
4+
class VowelCounterTestCase(unittest.TestCase):
5+
def test(self):
6+
test_string = "Hello, My name is Reza. Github user name:ni8mr"
7+
expected_vowel_count = 14
8+
resulted_vowel_count = vowel_counter(test_string)
9+
self.assertEqual(expected_vowel_count, resulted_vowel_count)
10+
11+
if __name__=='__main__':
12+
unittest.main()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def vowel_counter(string):
2+
count = 0
3+
for letter in string:
4+
if letter in ['A','E','I','O','U','a','e','i','o','u']:
5+
count = count + 1
6+
return count
7+

part2/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
| [Michael Herman](https://github.com/mjhea0/python-devtest/tree/master/part2/reverse_flask_herman) | N/A |
77
| [MPerham](https://github.com/mperham2/python-devtest/tree/master/part2/reverse_flask_perham) | [Heroku](https://shrouded-thicket-5935.herokuapp.com/) |
88
| [Gary Herd](https://github.com/garyherd/python-devtest) | [reverse-string](https://grh-reverse-string.herokuapp.com/) |
9-
| Add link here | Add link here |
9+
| [Noor Faziur Reza](https://github.com/ni8mr/python-devtest) | [reverse_string_reza](http://ni8mr2.herokuapp.com/) |
1010
| Add link here | Add link here |
1111
| Add link here | Add link here |

part2/reverse_flask_reza/Procfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
web: python run.py
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from flask import Flask, render_template, request, redirect, url_for
2+
from project.forms import FormToReverse
3+
4+
app = Flask(__name__)
5+
app.config.from_object('project.config')
6+
7+
8+
def reverse(string):
9+
return string[::-1]
10+
11+
12+
@app.route('/', methods=['GET', 'POST'])
13+
def index():
14+
form = FormToReverse(request.form)
15+
if form.validate_on_submit():
16+
return redirect(url_for('rev_str', user_input=form.reverse.data))
17+
return render_template('index.html', form=form)
18+
19+
20+
@app.route('/reversed_input/<user_input>')
21+
def rev_str(user_input):
22+
reversed_string = reverse(user_input)
23+
return render_template(
24+
'reversed.html',
25+
user_input=user_input,
26+
rev_input=reversed_string
27+
)
28+
29+
30+
@app.errorhandler(404)
31+
def page_not_found(error):
32+
return render_template("404.html"), 404
33+
34+
35+
@app.errorhandler(500)
36+
def server_error_page(error):
37+
return render_template("500.html"), 500
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# config.py
2+
3+
WTF_CSRF_ENABLED = True
4+
SECRET_KEY = "secret"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from flask_wtf import Form
2+
from wtforms import StringField
3+
from wtforms.validators import DataRequired, Length
4+
5+
6+
class FormToReverse(Form):
7+
reverse = StringField('Reverse', validators=[DataRequired(), Length(min=2)])

part2/reverse_flask_reza/project/static/bootstrap.min.css

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

part2/reverse_flask_reza/project/static/css/bootstrap.min.css

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
body {
2+
padding-top: 60px;
3+
padding-bottom: 40px;
4+
background-color: #eee;
5+
}
6+
7+
.container {
8+
width: auto;
9+
max-width: 680px;
10+
padding: 0 15px;
11+
}
12+
13+
.center {
14+
padding: 40px 15px;
15+
text-align: center;
16+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
body {
2+
padding-top: 60px;
3+
padding-bottom: 40px;
4+
background-color: #eee;
5+
}
6+
7+
.container {
8+
width: auto;
9+
max-width: 680px;
10+
padding: 0 15px;
11+
}
12+
13+
.center {
14+
padding: 40px 15px;
15+
text-align: center;
16+
}
17+
18+
19+
20+
21+
/* Sticky footer styles
22+
-------------------------------------------------- */
23+
html {
24+
position: relative;
25+
min-height: 100%;
26+
}
27+
body {
28+
/* Margin bottom by footer height */
29+
margin-bottom: 60px;
30+
}
31+
.footer {
32+
position: absolute;
33+
bottom: 0;
34+
width: 100%;
35+
/* Set the fixed height of the footer here */
36+
height: 60px;
37+
background-color: #f5f5f5;
38+
}
39+
40+
/* ************************************************ */
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% extends "base_template.html" %}
2+
{% block content %}
3+
<div class="center">
4+
<h1>Error 404</h1>
5+
<p><em>Try <a href="{{url_for('index')}}">again</a>?</em></p>
6+
</div>
7+
{% endblock %}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{% extends "base_template.html" %}
2+
{% block content %}
3+
<div class="center">
4+
5+
<h1>Error 500</h1>
6+
<p><em>Try <a href="{{url_for('home')}}">again</a>?</em></p>
7+
</div>
8+
{% endblock %}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
2+
<!DOCTYPE html>
3+
<html lang="en">
4+
<head>
5+
<meta charset="utf-8">
6+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
7+
<meta name="viewport" content="width=device-width, initial-scale=1">
8+
<meta name="description" content="">
9+
<meta name="author" content="">
10+
<link rel="icon" href="../../favicon.ico">
11+
12+
<title>Reverse your string!</title>
13+
14+
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
15+
<link href="{{ url_for('static', filename='css/main.css') }}" rel="stylesheet">
16+
17+
</head>
18+
19+
<body>
20+
21+
<div class="navbar navbar-inverse navbar-fixed-top">
22+
<div class="navbar-header">
23+
<a class="navbar-brand" href="#">Just a simple string reverser! </a>
24+
</div>
25+
</div>
26+
27+
28+
{% block content %}
29+
30+
31+
{% endblock %}
32+
33+
34+
</body>
35+
</html>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{% extends('base_template.html') %}
2+
3+
{% block content %}
4+
<div class="container">
5+
<div class="center">
6+
<form class="" method="POST" action="">
7+
{{ form.csrf_token }}
8+
<div class="form-group">
9+
{{form.reverse(class="form-control input-lg", placeholder="Reverse this text")}}
10+
{% if form.reverse.errors %}
11+
{% for error in form.reverse.errors %}
12+
{{ error }}
13+
{% endfor %}
14+
{% endif %}
15+
</div>
16+
<button class="btn btn-lg btn-primary btn-block" type="submit">Submit</button>
17+
</form>
18+
</div>
19+
</div> <!-- /container -->
20+
{% endblock %}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{% extends('base_template.html') %}
2+
3+
{% block content %}
4+
<div class="container">
5+
<div class="center">
6+
<h2>Original String</h2>
7+
<div class="well">{{ user_input }}</div>
8+
<h2>Reversed String</h2>
9+
<div class="well">{{ rev_input }}</div>
10+
<form action="{{ url_for('index') }}" method="post">
11+
<button class="btn btn-lg btn-primary btn-block" type="submit">Back!</button>
12+
</form>
13+
</div>
14+
</div>
15+
{% endblock %}

part2/reverse_flask_reza/run.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import os
2+
from project import app
3+
4+
port = int(os.environ.get('PORT', 5000))
5+
app.run(host='0.0.0.0', port=port)
6+

part2/reverse_flask_reza/test.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# tests
2+
3+
from project import app
4+
import unittest
5+
6+
7+
class ReverseCase(unittest.TestCase):
8+
9+
def setUp(self):
10+
app.config['WTF_CSRF_ENABLED'] = False
11+
self.app = app.test_client()
12+
13+
def tearDown(self):
14+
app.config['WTF_CSRF_ENABLED'] = True
15+
16+
def test_homepage_exists(self):
17+
response = self.app.get('/')
18+
self.assertEqual(response.status_code, 200)
19+
self.assertIn(b'Reverse this text', response.data)
20+
21+
def test_text_is_reversed(self):
22+
response = self.app.get('/reversed_input/HelloWorld')
23+
self.assertIn(b'dlroWolleH', response.data)
24+
25+
def test_users_must_enter_string(self):
26+
response = self.app.post(
27+
'/',
28+
data=dict(reverse='', follow_redirects=True)
29+
)
30+
self.assertIn(b'This field is required', response.data)
31+
32+
def test_users_must_enter_atleast_two_charactered_string(self):
33+
response = self.app.post(
34+
'/',
35+
data=dict(reverse='h', follow_redirects=True)
36+
)
37+
self.assertIn(b'Field must be at least 2 characters long.', response.data)
38+
39+
def test_redirects_to_output(self):
40+
response = self.app.post(
41+
'/',
42+
data=dict(reverse="Hello",), follow_redirects=True)
43+
self.assertIn(b'olleH', response.data)
44+
45+
if __name__ == '__main__':
46+
unittest.main()

0 commit comments

Comments
 (0)