Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions part1/reverse-string/reverse_ni8mr/reverse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import re

my_string = raw_input("Enter your string: ")
a = re.split('; |, |\*|\n', my_string)

for i in
2 changes: 2 additions & 0 deletions part1/reverse-string/reverse_reza/reverse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
def reverse(string):
return string[::-1]
14 changes: 14 additions & 0 deletions part1/reverse-string/reverse_reza/test_reverse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from reverse import reverse
import unittest



class ReverseTestCase(unittest.TestCase):
def test(self):
test_string = "Hello, My name is Reza. Github user name:ni8mr"
altered_string = "rm8in:eman resu buhtiG .azeR si eman yM ,olleH"
result_string = reverse(test_string)
self.assertEqual(altered_string, result_string)

if __name__=='__main__':
unittest.main()
12 changes: 12 additions & 0 deletions part1/vowel-counter/counter_reza/test_vowel_counter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
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"
expected_vowel_count = 14
resulted_vowel_count = vowel_counter(test_string)
self.assertEqual(expected_vowel_count, resulted_vowel_count)

if __name__=='__main__':
unittest.main()
7 changes: 7 additions & 0 deletions part1/vowel-counter/counter_reza/vowel_counter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
def vowel_counter(string):
count = 0
for letter in string:
if letter in ['A','E','I','O','U','a','e','i','o','u']:
count = count + 1
return count

2 changes: 1 addition & 1 deletion part2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
| [Michael Herman](https://github.com/mjhea0/python-devtest/tree/master/part2/reverse_flask_herman) | N/A |
| [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/) |
| Add link here | Add link here |
| [Noor Faziur Reza](https://github.com/ni8mr/python-devtest) | [reverse_string_reza](http://ni8mr2.herokuapp.com/) |
| Add link here | Add link here |
| Add link here | Add link here |
1 change: 1 addition & 0 deletions part2/reverse_flask_reza/Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: python run.py
37 changes: 37 additions & 0 deletions part2/reverse_flask_reza/project/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from flask import Flask, render_template, request, redirect, url_for
from project.forms import FormToReverse

app = Flask(__name__)
app.config.from_object('project.config')


def reverse(string):
return string[::-1]


@app.route('/', methods=['GET', 'POST'])
def index():
form = FormToReverse(request.form)
if form.validate_on_submit():
return redirect(url_for('rev_str', user_input=form.reverse.data))
return render_template('index.html', form=form)


@app.route('/reversed_input/<user_input>')
def rev_str(user_input):
reversed_string = reverse(user_input)
return render_template(
'reversed.html',
user_input=user_input,
rev_input=reversed_string
)


@app.errorhandler(404)
def page_not_found(error):
return render_template("404.html"), 404


@app.errorhandler(500)
def server_error_page(error):
return render_template("500.html"), 500
4 changes: 4 additions & 0 deletions part2/reverse_flask_reza/project/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# config.py

WTF_CSRF_ENABLED = True
SECRET_KEY = "secret"
7 changes: 7 additions & 0 deletions part2/reverse_flask_reza/project/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from flask_wtf import Form
from wtforms import StringField
from wtforms.validators import DataRequired, Length


class FormToReverse(Form):
reverse = StringField('Reverse', validators=[DataRequired(), Length(min=2)])
7 changes: 7 additions & 0 deletions part2/reverse_flask_reza/project/static/bootstrap.min.css

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions part2/reverse_flask_reza/project/static/css/bootstrap.min.css

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions part2/reverse_flask_reza/project/static/css/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
body {
padding-top: 60px;
padding-bottom: 40px;
background-color: #eee;
}

.container {
width: auto;
max-width: 680px;
padding: 0 15px;
}

.center {
padding: 40px 15px;
text-align: center;
}
40 changes: 40 additions & 0 deletions part2/reverse_flask_reza/project/static/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
body {
padding-top: 60px;
padding-bottom: 40px;
background-color: #eee;
}

.container {
width: auto;
max-width: 680px;
padding: 0 15px;
}

.center {
padding: 40px 15px;
text-align: center;
}




/* Sticky footer styles
-------------------------------------------------- */
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}

/* ************************************************ */
7 changes: 7 additions & 0 deletions part2/reverse_flask_reza/project/templates/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{% extends "base_template.html" %}
{% block content %}
<div class="center">
<h1>Error 404</h1>
<p><em>Try <a href="{{url_for('index')}}">again</a>?</em></p>
</div>
{% endblock %}
8 changes: 8 additions & 0 deletions part2/reverse_flask_reza/project/templates/500.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{% extends "base_template.html" %}
{% block content %}
<div class="center">

<h1>Error 500</h1>
<p><em>Try <a href="{{url_for('home')}}">again</a>?</em></p>
</div>
{% endblock %}
35 changes: 35 additions & 0 deletions part2/reverse_flask_reza/project/templates/base_template.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">

<title>Reverse your string!</title>

<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ url_for('static', filename='css/main.css') }}" rel="stylesheet">

</head>

<body>

<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-header">
<a class="navbar-brand" href="#">Just a simple string reverser! </a>
</div>
</div>


{% block content %}


{% endblock %}


</body>
</html>
20 changes: 20 additions & 0 deletions part2/reverse_flask_reza/project/templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{% extends('base_template.html') %}

{% block content %}
<div class="container">
<div class="center">
<form class="" method="POST" action="">
{{ form.csrf_token }}
<div class="form-group">
{{form.reverse(class="form-control input-lg", placeholder="Reverse this text")}}
{% if form.reverse.errors %}
{% for error in form.reverse.errors %}
{{ error }}
{% endfor %}
{% endif %}
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Submit</button>
</form>
</div>
</div> <!-- /container -->
{% endblock %}
15 changes: 15 additions & 0 deletions part2/reverse_flask_reza/project/templates/reversed.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{% extends('base_template.html') %}

{% block content %}
<div class="container">
<div class="center">
<h2>Original String</h2>
<div class="well">{{ user_input }}</div>
<h2>Reversed String</h2>
<div class="well">{{ rev_input }}</div>
<form action="{{ url_for('index') }}" method="post">
<button class="btn btn-lg btn-primary btn-block" type="submit">Back!</button>
</form>
</div>
</div>
{% endblock %}
6 changes: 6 additions & 0 deletions part2/reverse_flask_reza/run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import os
from project import app

port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)

46 changes: 46 additions & 0 deletions part2/reverse_flask_reza/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# tests

from project import app
import unittest


class ReverseCase(unittest.TestCase):

def setUp(self):
app.config['WTF_CSRF_ENABLED'] = False
self.app = app.test_client()

def tearDown(self):
app.config['WTF_CSRF_ENABLED'] = True

def test_homepage_exists(self):
response = self.app.get('/')
self.assertEqual(response.status_code, 200)
self.assertIn(b'Reverse this text', response.data)

def test_text_is_reversed(self):
response = self.app.get('/reversed_input/HelloWorld')
self.assertIn(b'dlroWolleH', response.data)

def test_users_must_enter_string(self):
response = self.app.post(
'/',
data=dict(reverse='', follow_redirects=True)
)
self.assertIn(b'This field is required', response.data)

def test_users_must_enter_atleast_two_charactered_string(self):
response = self.app.post(
'/',
data=dict(reverse='h', follow_redirects=True)
)
self.assertIn(b'Field must be at least 2 characters long.', response.data)

def test_redirects_to_output(self):
response = self.app.post(
'/',
data=dict(reverse="Hello",), follow_redirects=True)
self.assertIn(b'olleH', response.data)

if __name__ == '__main__':
unittest.main()