diff --git a/.gitignore b/.gitignore index 894a44c..0944f00 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ __pycache__/ .Python build/ develop-eggs/ -dist/ +#dist/ Need for the final's second iteration task downloads/ eggs/ .eggs/ @@ -35,7 +35,7 @@ MANIFEST pip-log.txt pip-delete-this-directory.txt -# Unit test / coverage reports +# Unit tests / coverage reports htmlcov/ .tox/ .coverage @@ -102,3 +102,32 @@ venv.bak/ # mypy .mypy_cache/ + +# MAC filesystem's files +.DS_Store + +# pycharm files +.idea/ + +# tests data files +cover/ +tests/data/test.html +tests/data/help.txt +tests/data/yahoo.txt + +# news storage +rss_reader/storage +*sqlite3.db + +# pdf & html files +*.pdf +rss_reader/my_html.html +my_html.html +static/*.pdf +static/*.html +server/templates/here.html + +# Unused files +static/dejavu_font/DejaVuSansCondensed.cw127.pkl +static/dejavu_font/DejaVuSansCondensed.pkl +rss_reader/utils/no_imagepng.png diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..3bd38b2 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "env": {"DEBUG": "True"}, + + } + ] +} \ No newline at end of file diff --git a/2.py b/2.py new file mode 100755 index 0000000..16dc89d --- /dev/null +++ b/2.py @@ -0,0 +1,303 @@ +#!/usr/local/opt/python/bin/python3.7 +from functools import reduce +import functools +import operator +import os + + + +def quotes_changer(in_str): + """ Receives a string and replaces all " symbols with ' and vise versa + + >>> quotes_changer('String with double quotes: " " " "') + "String with double quotes: \' \' \' \'" + + >>> quotes_changer("String with single quotes: ' ' ' '") + 'String with single quotes: " " " "' + """ + + ch1 = '"' + ch2 = "'" + translation_map = {ord(ch1): ch2, ord(ch2): ch1} + out_str = in_str.translate(translation_map) + # out_str = in_str.replace(ch1, temp_char).replace(ch2, ch1).replace(temp_char, ch2) + + return out_str + + +def if_str_is_palindrome(in_str): + """ Check whether a string is a palindrome or not. + + Usage of any reversing functions is prohibited + + >>> if_str_is_palindrome("Able was I ere I saw Elba") + True + >>> if_str_is_palindrome("A man, a plan, a canal – Panama") + True + + >>> if_str_is_palindrome("A man, a plan, a canal – Panam") + False + """ + alph_str = list(filter(str.isalnum, in_str.lower())) + return alph_str[::-1] == alph_str + + +def split(inp: str) -> list: + """ + Custom split function - works only for spaces + + >>> split('Mama washed the window frame') + ['Mama', 'washed', 'the', 'window', 'frame'] + """ + out = [] + j = 0 + for i, ch in enumerate(inp): + if ch == ' ': + out.append(inp[j:i]) + j = i + 1 + else: + out.append(inp[j:]) + return list(filter(None, out)) + + +def split_by_index(s: str, indexes: list) -> list: + """ + + >>> split_by_index("pythoniscool,isn'tit?", [6, 8, 12, 13, 18]) + ['python', 'is', 'cool', ',', "isn't", 'it?'] + + >>> split_by_index("no luck", [42]) + ['no luck'] + """ + out = [] + j = 0 + for idx in (indexes): + out.append(s[j:idx]) + j = idx + else: + out.append(s[j:]) + return list(filter(None, out)) + + +def get_digits(di: int) -> tuple: + """ + >>> get_digits(87178291199) + (8, 7, 1, 7, 8, 2, 9, 1, 1, 9, 9) + """ + + return tuple(int(i) for i in str(di)) + + +def get_longest_word(s: str) -> str: + """ + >>> get_longest_word('Python is simple and effective!') + 'effective!' + >>> get_longest_word('Any pythonista like namespaces a lot.') + 'pythonista' + """ + return max(s.split(' '), key=len) + + +def foo(integers: list): + """ + >>> foo([1, 2, 3, 4, 5]) + [120, 60, 40, 30, 24] + """ + result = [] + for i, num in enumerate(integers): + t = integers[:] # making a copy + t.pop(i) + result.append(functools.reduce(operator.mul, t, 1)) + return result + + +def get_pairs(inp): + """ + >>> get_pairs([1, 2, 3, 8, 9]) + [(1, 2), (2, 3), (3, 8), (8, 9)] + >>> get_pairs(['need', 'to', 'sleep', 'more']) + [('need', 'to'), ('to', 'sleep'), ('sleep', 'more')] + >>> get_pairs([1]) + + """ + return list(zip(inp[0::1], inp[1::1])) or None + + +def get_sums(inp: list): + """ + >>> get_sums([1, 2, 3, 4]) + [1, 3, 6, 10] + """ + # result = [] + # for idx, d in enumerate(inp): + # result.append(sum(inp[0:idx + 1])) + return [sum(inp[0:idx + 1]) for idx in range(len(inp))] + + +def get_target_array(inp: list, target_value: int): + """ + >>> get_target_array([1, 3, 7, 10], 11) + [0, 3] + """ + + for i in inp: + if i < target_value: + pair = target_value - i + if pair in inp: + # print(f"the first number= {i} the second number {pair}") + return[inp.index(i), inp.index(pair)] + break + + +def get_target_array_dict(list_, target_value): + hash_table = {} + len_list = len(list_) + result = [] + for item in range(len_list): + if list_[item] in hash_table: + result.extend([hash_table[list_[item]], item]) + else: + hash_table[target_value - list_[item]] = item + return result + + +def F(n: int): + '''returns value of the n-th element of Fibonacci sequence''' + if n == 0: return 0 + elif n == 1: return 1 + else: return F(n-1)+F(n-2) + + +def fibonacci(n: int): + ''' Returns the Fibonacci sequence of the length ''' + r = [] + for i in range(10): + r.append(F(i)) + print(r) + + + + + +# Python3 Program to print BFS traversal +# from a given source vertex. BFS(int s) +# traverses vertices reachable from s. +from collections import defaultdict + +# This class represents a directed graph +# using adjacency list representation +class Graph: + + # Constructor + def __init__(self): + + # default dictionary to store graph + self.graph = defaultdict(list) + + # function to add an edge to graph + def addEdge(self,u,v): + self.graph[u].append(v) + + # Function to print a BFS of graph + def BFS(self, s): + + # Mark all the vertices as not visited + visited = [False] * (max(self.graph) + 1) + + # Create a queue for BFS + queue = [] + + # Mark the source node as + # visited and enqueue it + queue.append(s) + visited[s] = True + + while queue: + + # Dequeue a vertex from + # queue and print it + s = queue.pop(0) + print (s, end = " ") + + # Get all adjacent vertices of the + # dequeued vertex s. If a adjacent + # has not been visited, then mark it + # visited and enqueue it + for i in self.graph[s]: + if visited[i] == False: + queue.append(i) + visited[i] = True + + +def graph_driver_program(): + # Create a graph given in + # the above diagram + g = Graph() + g.addEdge(0, 1) + g.addEdge(0, 2) + g.addEdge(1, 2) + g.addEdge(2, 0) + g.addEdge(2, 3) + g.addEdge(3, 3) + print ("Following is Breadth First Traversal starting from vertex 2)") + + g.BFS(2) + +import csv + +def test_func(): + with open('orders.csv', 'r') as f: + data = f.read() + if not data: + raise ValueError('No data') + + rows = data.split('\n') + + json_data_list = list(csv.DictReader(rows, delimiter=',')) + json_data_list + output = [] + + hash_keys = defaultdict(list) + + for item in json_data_list: + quantity = int(item.get('quantity', 0)) + to_append = { + 'product_id': item.get('product_id'), + 'product_price': item.get('price'), + 'product_title': item.get('name') + } + for _ in range(quantity): + hash_keys[(item.get('order_id'), item.get('cust_name'))].append(to_append) + + output = [] + for key, value in hash_keys.items(): + order_id, cust_name = key + items = value + output.append({ + 'oder_id': order_id, + 'items': items, + 'cust_name': cust_name, + }) + + import requests + + requests.post(url='https://my.awesome-api.com/orders', data=output, headers={ + 'Content-Type': 'application/json' + }) + + return data + +if __name__ == "__main__": + debug = os.environ.get('DEBUG') + if not debug: + import doctest + + doctest.testmod() + else: + # split('Mama washed the window frame') + # get_sums([1, 2, 3, 4]) + # fibonacci(10) + # get_target_array([1, 3, 7, 10], 11) + # bubbleSort([]) + # graph_driver_program() + test_func() diff --git a/3.py b/3.py new file mode 100755 index 0000000..059bce1 --- /dev/null +++ b/3.py @@ -0,0 +1,92 @@ +""" +Docstrings may compare list's instead of sets because of sets are unsortable and +can't be equal to the docstring literals +""" +from functools import reduce +import itertools +import string + +from collections import Counter + +test_strings = ["hello", "world", "python", ] + + +def test_1_1(*strings): + """ + characters that appear in all strings + + >>> test_1_1("hello", "world", "python") + {'o'} + """ + return set(strings[0]).intersection(*strings) + + +def test_1_2(*strings): + """ + characters that appear in at least one string + + >>> test_1_2("hello", "world", "python") + ['d', 'e', 'h', 'l', 'n', 'o', 'p', 'r', 't', 'w', 'y'] + """ + + return sorted(set("").union(*strings)) + + +def test_1_3(*strings): + """ + characters that appear at least in two strings + + >>> test_1_3("hello", "world", "python") + ['h', 'l', 'o'] + """ + combines_by_two = list(itertools.product(strings, repeat=2)) + result = set.union(*(set(pair[0]) & set(pair[1]) for pair in combines_by_two if pair[0] != pair[1])) + return sorted(result) + + +def test_1_4(*strings): + """ + characters of alphabet, that were not used in any string + + >>> test_1_4("hello", "world", "python") + ['a', 'b', 'c', 'f', 'g', 'i', 'j', 'k', 'm', 'q', 's', 'u', 'v', 'x', 'z'] + """ + return sorted(set(string.ascii_lowercase) - set("").union(*strings)) + + +def generate_squares(num): + """ + takes a number as an argument and returns a dictionary, where the key is a number and + the value is the square of that number + >>> generate_squares(5) + {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} + """ + return dict([(v, v**2) for v in (range(1, num + 1))]) + + +def count_letters(s): + """ + takes string as an argument and returns a dictionary, that contains letters of given + string as keys and a number of their occurrence as values + + >>> count_letters('stringsample') + {'s': 2, 't': 1, 'r': 1, 'i': 1, 'n': 1, 'g': 1, 'a': 1, 'm': 1, 'p': 1, 'l': 1, 'e': 1} + """ + return dict(Counter(s)) + + +def combine_dicts(*args): + """ + Receives changeable number of dictionaries (keys - letters, values - numbers) and combines them into one dictionary. + Dict values should be summarized in case of identical keys + + >>> combine_dicts({'a': 100, 'b': 200}, {'a': 200, 'c': 300}, {'a': 300, 'd': 100}) + {'a': 600, 'b': 200, 'c': 300, 'd': 100} + + """ + return dict(sum((Counter(dict(x)) for x in args), Counter())) + + +if __name__ == "__main__": + import doctest + doctest.testmod() diff --git a/4.py b/4.py new file mode 100755 index 0000000..4c494bd --- /dev/null +++ b/4.py @@ -0,0 +1,227 @@ +import csv +import os +import string + +from collections import Counter, namedtuple +from functools import wraps + + +# 4.1 +def sort_unsorted_names(): + """Sorts usorted names in the data/unsorted_names.txt file + and stores sorted names into the data/sorted_names.txt + """ + with open(os.path.join('data', 'unsorted_names.txt'), 'r') as f: + names = f.read() + + with open(os.path.join('data', 'sorted_names.txt'), 'w') as f: + f.write('\n'.join(sorted(names.split()))) + + +# 4.2 +def most_common_words(filepath='lorem_ipsum.txt', number_of_words=3): + """search for most common words in the file + + >>> most_common_words('lorem_ipsum.txt') + ['donec', 'etiam', 'aliquam'] + + >>> most_common_words('lorem_ipsum.txt', 5) + ['donec', 'etiam', 'aliquam', 'aenean', 'maecenas'] + """ + with open(os.path.join('data', filepath), 'r') as f: + words = f.read() + + # remove punctuation + words = words.translate(words.maketrans('', '', string.punctuation)) + + # lowercase: + words = words.lower() + + return [item[0] for item in Counter(words.split()).most_common(number_of_words)] + + +# 4.3.1 +Student = namedtuple("Student", ["name", "age", "average_mark"]) + + +def get_top_performers(file_path, number_of_top_students=5): + """ + returns names of top performer students + + >>> get_top_performers("students.csv") + ['Josephina Medina', 'Teresa Jones', 'Richard Snider', 'Jessica Dubose', 'Heather Garcia'] + + """ + with open(os.path.join('data', file_path), 'r') as infile: + next(infile) # skip header line + reader = csv.reader(infile) + + students = [Student(row[0], row[1], row[2]) for row in reader] + sorted_students_by_marks = sorted(students, key=lambda x: -float(x.average_mark)) + + return [student.name for student in sorted_students_by_marks][:number_of_top_students] + + +# 4.3.2 +def sort_students_by_age(file_path): + """writes CSV student information to the new file in descending order of age.""" + with open(os.path.join('data', file_path), 'r') as infile: + header = next(infile) + reader = csv.reader(infile) + + students = [Student(row[0], row[1], row[2]) for row in reader] + + sorted_by_age = sorted(students, key=lambda x: -int(x.age)) + + with open(os.path.join('data', 'students_sorted_by_age.csv'), 'w') as outfile: + writer = csv.writer(outfile) + writer.writerow(tuple(header.strip().split(','))) + writer.writerows([(st.name, st.age, st.average_mark) for st in sorted_by_age]) + + +# 4.4.1 +def calling_inner_function(): + """Calling inner function without moving it from inside of enclosed_function + + We need to add return inner function. Then we can call it: + + >>> calling_inner_function() + I am local variable! + """ + + def enclosing_funcion(): + a = "I am variable from enclosed function!" + + def inner_function(): + + a = "I am local variable!" + print(a) + return inner_function + + enclosing_funcion()() + + +# 4.4.2 +a = "I am global variable!" + + +def calling_global_variable(): + """ + To call global 'a' we use global + + >>> calling_global_variable() + I am global variable! + """ + + def enclosing_funcion(): + a = "I am variable from enclosed function!" + + def inner_function(): + + global a # modified string + print(a) + return inner_function + + enclosing_funcion()() + + +# 4.4.3 +a = "I am global variable!" + + +def calling_enclosed_variable(): + """ + To call enclosed 'a' we use nonlocal + + >>> calling_enclosed_variable() + I am variable from enclosed function! + """ + + def enclosing_funcion(): + a = "I am variable from enclosed function!" + + def inner_function(): + + nonlocal a # modified string + print(a) + return inner_function + + enclosing_funcion()() + + +# 4.5 +def remember_result(func): + @wraps(func) + def inner(*args, **kwargs): + print(f"Last Result = {inner.result}") + inner.result = func(*args, **kwargs) + inner.result = None + return inner + + +@remember_result +def sum_list(*args): + """ + Implement a decorator remember_result which remembers last result of function it decorates + and prints it before next call. + + >>> sum_list("a", "b") + Last Result = None + Current result = 'ab' + + >>> sum_list("abc", "cde") + Last Result = ab + Current result = 'abccde' + + >>> sum_list(3, 4, 5) + Last Result = abccde + Current result = '12' + """ + result = "" if type(args[0]) == str else 0 + for item in args: + result += item + print(f"Current result = '{result}'") + return result + + +# 4.6 +def call_once(func): + """ + Decorator which runs a function or method once + """ + @wraps(func) + def inner(*args, **kwargs): + if not inner.called: + result = func(*args, **kwargs) + inner.called = True + return result + inner.called = False + return inner + + +@call_once +def sum_of_numbers(a, b): + """ + + >>> sum_of_numbers(1, 4) + 5 + >>> sum_of_numbers(11, 4) + + >>> sum_of_numbers(11, 4) + + """ + return a + b + + +# 4.7 +""" +Module a imports module c that defines variable x = 5. +Then module a imports module b that imports module c and redefines it's +global variable x to 42. +After that module a call module's c global variable x that equal to 42 and +prints it. +""" + +if __name__ == '__main__': + import doctest + doctest.testmod() diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1bd0422 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.7-slim +# Set the working directory to /app +WORKDIR /app +# Copy the current directory contents into the container at /app +COPY . /app +# Install any needed packages specified in requirements.txt +RUN pip install --trusted-host pypi.python.org -r requirements.txt +# Make port 80 available to the world outside this container +EXPOSE 80 +# Define environment variable +ENV NAME World +# Run app.py when the container launches +CMD ["python", "-m", "server"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f0424f --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +# Small hometasks for EpamTrainee +ALmost every task function covered with docstring + +# Launching: +pip install -r requiremets.txt +python 2.py +python 3.py +python 4.py + +Version 6 +```shell +usage: __main__.py [-h] [--verbose] [--limit LIMIT] [--json] [-v] + [--width WIDTH] [--date DATE] [--to_pdf TO_PDF] + [--to_html TO_HTML] [--colorize] + url + +Rss reader. Just enter rss url from your favorite site and app will print +latest news. + +positional arguments: + url url of rss + +optional arguments: + -h, --help show this help message and exit + --verbose Outputs verbose status messages + --limit LIMIT Limit news topics if this parameter provided + --json Print result as JSON in stdout + -v, --version Print version info + --width WIDTH Define a screen width to display news + --date DATE Date of stored news you want to see. Format: %Y%m%d + --to_pdf TO_PDF Convert and store news you are looking for to pdf + --to_html TO_HTML Convert and store news you are looking for to html + --colorize Colorize text + +``` + +## Code description +* Code uses `argparse` module. +* Codebase covered with unit tests with at 90% coverage. +* Any mistakes are printed in human-readable error explanation. +Exception tracebacks in stdout are prohibited. +* Docstrings are mandatory for all methods, classes, functions and modules. +* Code corresponds to `pep8` (used `pycodestyle` utility for self-check). +* Feedparser module is used for rss parsing; +* There are several bots for parsing news: default bor for unimplemented RSS urls and + custom bots (yahoo, tut) with detailed approach to parsing. + +## Code self-checking +Use ./pycodestyle.sh to check the code corresponding to `pep8` +(pycodestyle package must be installed) + +## Testing +Tests are available at `https://github.com/Nenu1985/PythonHomework` +Launching: +``` +Starting static code analys +2.py PASSED +3.py PASSED +4.py PASSED +``` +## Iteration 5 +Defined class Colors with stored attributes for text color. +Without console arg --colorize class initialises with no colors, +but with --colorize class initialises with colors. News classe +use Colors's attributes to print their text + +## Iteration 6 +Web app is a simple flask app that do the only think - launch +rss_reader's modules. That's why there is no rest api and 'big' DB. + +To run server you may create a docker image: +`docker build . -t flask:v1` + +And run it in a docker container: +`docker run -p 5000:5000 flask:v1` + +App will be accessible on the 0.0.0.0:5000 socket. +BTW those commands will install rss_reader utility. + +## Installing +Use the script `./install_util.sh`. +- it will install all dependencies and launch the server in a +docker container. +- to use rss_reader utility enter: +`python -m rss_reader` + +If you don't have docker server will not be launched. But you can do it +manually by entering (in the root folder 'PythonHomework'): +`python -m server` + diff --git a/aiohttp_study/aiohttp_example1.py b/aiohttp_study/aiohttp_example1.py new file mode 100644 index 0000000..38c8abb --- /dev/null +++ b/aiohttp_study/aiohttp_example1.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# areq.py +# https://realpython.com/async-io-python/ + +"""Asynchronously get links embedded in multiple pages' HMTL.""" + +import asyncio +import logging +import re +import sys +from typing import IO +import urllib.error +import urllib.parse + +import aiofiles +import aiohttp +from aiohttp import ClientSession + +logging.basicConfig( + format="%(asctime)s %(levelname)s:%(name)s: %(message)s", + level=logging.DEBUG, + datefmt="%H:%M:%S", + stream=sys.stderr, +) +logger = logging.getLogger("areq") +logging.getLogger("chardet.charsetprober").disabled = True + +HREF_RE = re.compile(r'href="(.*?)"') + +async def fetch_html(url: str, session: ClientSession, **kwargs) -> str: + """GET request wrapper to fetch page HTML. + + kwargs are passed to `session.request()`. + """ + + resp = await session.request(method="GET", url=url, **kwargs) + resp.raise_for_status() + logger.info("Got response [%s] for URL: %s", resp.status, url) + html = await resp.text() + return html + +async def parse(url: str, session: ClientSession, **kwargs) -> set: + """Find HREFs in the HTML of `url`.""" + found = set() + try: + html = await fetch_html(url=url, session=session, **kwargs) + except ( + aiohttp.ClientError, + aiohttp.http_exceptions.HttpProcessingError, + ) as e: + logger.error( + "aiohttp exception for %s [%s]: %s", + url, + getattr(e, "status", None), + getattr(e, "message", None), + ) + return found + except Exception as e: + logger.exception( + "Non-aiohttp exception occured: %s", getattr(e, "__dict__", {}) + ) + return found + else: + for link in HREF_RE.findall(html): + try: + abslink = urllib.parse.urljoin(url, link) + except (urllib.error.URLError, ValueError): + logger.exception("Error parsing URL: %s", link) + pass + else: + found.add(abslink) + logger.info("Found %d links for %s", len(found), url) + return found + +async def write_one(file: IO, url: str, **kwargs) -> None: + """Write the found HREFs from `url` to `file`.""" + res = await parse(url=url, **kwargs) + if not res: + return None + async with aiofiles.open(file, "a") as f: + for p in res: + await f.write(f"{url}\t{p}\n") + logger.info("Wrote results for source URL: %s", url) + +async def bulk_crawl_and_write(file: IO, urls: set, **kwargs) -> None: + """Crawl & write concurrently to `file` for multiple `urls`.""" + async with ClientSession() as session: + tasks = [] + for url in urls: + tasks.append( + write_one(file=file, url=url, session=session, **kwargs) + ) + await asyncio.gather(*tasks) + +if __name__ == "__main__": + import pathlib + import sys + + assert sys.version_info >= (3, 7), "Script requires Python 3.7+." + here = pathlib.Path(__file__).parent + + with open(here.joinpath("urls.txt")) as infile: + urls = set(map(str.strip, infile)) + + outpath = here.joinpath("foundurls.txt") + with open(outpath, "w") as outfile: + outfile.write("source_url\tparsed_url\n") + + asyncio.run(bulk_crawl_and_write(file=outpath, urls=urls)) \ No newline at end of file diff --git a/aiohttp_study/client.py b/aiohttp_study/client.py new file mode 100644 index 0000000..dbf74c6 --- /dev/null +++ b/aiohttp_study/client.py @@ -0,0 +1,16 @@ +import aiohttp +import asyncio + +async def main(): + + async with aiohttp.ClientSession() as session: + async with session.get('http://python.org') as response: + + print("Status:", response.status) + print("Content-type:", response.headers['content-type']) + + html = await response.text() + print("Body:", html[:15], "...") + +loop = asyncio.get_event_loop() +loop.run_until_complete(main()) \ No newline at end of file diff --git a/aiohttp_study/data/lorem_ipsum.txt b/aiohttp_study/data/lorem_ipsum.txt new file mode 100755 index 0000000..3c572fa --- /dev/null +++ b/aiohttp_study/data/lorem_ipsum.txt @@ -0,0 +1,19 @@ +Lorem ipsum suspendisse nostra ullamcorper diam donec etiam nulla sagittis est aliquam, dictum aliquet luctus risus est habitant suspendisse luctus id inceptos lectus, aenean donec maecenas donec aenean fringilla vitae fermentum venenatis enim ultrices per etiam ut aenean odio. + +Habitasse ad sollicitudin arcu senectus enim etiam platea quisque purus odio sociosqu maecenas habitant, quisque laoreet himenaeos elementum consequat auctor ad dictum viverra donec faucibus enim scelerisque eu sodales vel lobortis euismod cubilia, dictum ut consectetur nisi litora ut, blandit vehicula sapien et fames tempor congue tristique urna inceptos neque suspendisse felis venenatis cras metus risus tellus nulla imperdiet maecenas potenti vestibulum id aliquam himenaeos a primis tortor, facilisis ullamcorper donec augue integer euismod habitasse orci vestibulum convallis. + +Augue eget primis sit iaculis placerat viverra conubia class consectetur porttitor luctus aenean, dui hac quis eros vivamus praesent taciti arcu nullam semper ullamcorper, maecenas turpis quis metus fringilla aptent et etiam rutrum viverra integer orci fermentum lacinia risus purus rhoncus torquent aenean augue felis ultricies, donec luctus dui eros pulvinar primis bibendum accumsan purus donec pharetra, eleifend varius lorem fames at viverra praesent justo lectus. + +Ligula tincidunt ultrices et lobortis ultrices mollis quisque egestas bibendum, etiam maecenas consectetur quam non ornare dictum donec nullam, platea aliquet duis aenean cras placerat aliquam integer venenatis interdum gravida est massa faucibus porta arcu, velit urna cursus laoreet vulputate dictumst hendrerit ornare, torquent ultricies metus sed turpis scelerisque suspendisse vulputate cubilia gravida suspendisse neque consequat laoreet, odio faucibus vestibulum cras cursus urna tincidunt, euismod nulla auctor eu diam habitant. + +Faucibus maecenas dapibus hendrerit conubia maecenas eros tempus molestie tincidunt dolor, lacinia himenaeos etiam duis nec felis hac interdum malesuada pharetra praesent, nostra ut donec non id tempus at ultricies sodales dapibus id per magna erat justo phasellus, lorem tellus neque enim quam vivamus, congue ad leo iaculis libero blandit eros interdum nullam rhoncus porta aliquam tristique fringilla, faucibus augue elit quis auctor volutpat imperdiet curabitur, tortor pellentesque vehicula fames venenatis aliquam cursus. + +At volutpat himenaeos eleifend mollis nunc per leo diam per leo mollis, sagittis etiam tortor arcu suscipit egestas et ullamcorper mollis commodo at ornare at ante sociosqu sed in, elementum primis curae enim suspendisse volutpat condimentum, id in ad eu maecenas aliquam proin erat magna vivamus fermentum blandit nec faucibus, viverra torquent massa tortor adipiscing ad consectetur interdum aptent, magna accumsan egestas magna ut iaculis est. + +Dictum aenean integer interdum sed potenti tincidunt sem aptent, gravida nunc malesuada bibendum class quam taciti duis a, ipsum orci proin mollis lorem in himenaeos. + +Sed tincidunt lectus ad pharetra vel proin massa aliquam molestie, lectus vel primis facilisis aliquam lacinia ultricies fames feugiat, eleifend tempus sodales volutpat congue dolor primis pulvinar tellus lorem risus porttitor morbi vivamus turpis scelerisque habitant cursus, vivamus morbi quisque class eget aliquet suspendisse laoreet faucibus, pulvinar vulputate at cursus morbi ac euismod lectus aenean potenti pellentesque conubia etiam porttitor tincidunt quisque adipiscing laoreet lobortis nulla sociosqu lobortis consectetur lobortis iaculis ad blandit donec sapien in vehicula tellus est vivamus taciti ultrices fermentum viverra turpis volutpat ligula. + +Vehicula nullam hac lacinia nunc pulvinar nullam quam leo proin, in tristique donec pretium vestibulum consectetur pulvinar bibendum egestas, pharetra habitasse class vitae quisque phasellus turpis non eleifend arcu ultricies blandit curabitur venenatis rutrum vivamus a, primis urna viverra accumsan tristique mi vulputate. + +Netus enim eros sed duis nostra vestibulum nulla, urna eleifend curabitur lobortis aliquet cursus himenaeos primis, quam pharetra cursus urna quisque a ipsum nibh dapibus diam ante proin convallis venenatis accumsan lorem est tortor inceptos lacinia vestibulum lobortis metus praesent leo eget in ante volutpat consectetur diam. \ No newline at end of file diff --git a/aiohttp_study/data/sorted_names.txt b/aiohttp_study/data/sorted_names.txt new file mode 100644 index 0000000..38769ca --- /dev/null +++ b/aiohttp_study/data/sorted_names.txt @@ -0,0 +1,199 @@ +Adele +Adrienne +Agueda +Alda +Alejandrina +Amee +Amelia +Antonio +Antony +Bari +Bettina +Blanca +Brooks +Buck +Carisa +Carlotta +Caroll +Carson +Catalina +Catherin +Cecille +Charleen +Charlie +Cheryll +Chet +Cheyenne +Ching +Chrissy +Christa +Ciera +Cindi +Claudia +Clay +Columbus +Corrie +Corrin +Craig +Cristal +Dagmar +Dannette +Danuta +Darrick +Darryl +Demetrice +Denisse +Detra +Dierdre +Dino +Donald +Donnetta +Dorene +Dorothea +Dwana +Elayne +Elinore +Elisa +Elke +Elmira +Emanuel +Ericka +Erik +Erma +Erminia +Eustolia +Exie +Fatimah +Felton +Floyd +Fredia +Gaylene +Genesis +Gracia +GuillerminaAlaine +Gwyneth +Herma +Hiroko +Hwa +Idalia +Ilda +Irving +Jaimee +Jannette +Jasmine +Jeane +Jeanine +Jed +Jenifer +Joelle +Johnie +Julian +Junita +Justina +Ka +Karl +Karyl +Kasha +Katerine +Katharyn +Kayce +Keisha +Kelsie +Kendal +Kiley +Kirstie +Lashanda +Lavern +Len +Lena +Leonie +Lindy +Lisha +Loan +Lolita +Long +Louis +Luisa +Luz +Lydia +Lynne +Maggie +Maisha +Major +Marcelina +Marco +Margareta +Mariah +Marisol +Marla +Marline +Marlon +Marquetta +Mathilda +Matt +Maximina +Meda +Mei +Merideth +Merrill +Mervin +Michele +Mignon +Milissa +Morris +Myrl +Nicky +Nicolas +Ninfa +Noelia +Norman +Octavia +Oliva +Oma +Patsy +Penny +Petrina +Quentin +Ramiro +Randa +Randy +Raquel +Rebeca +Regina +Rena +Ricarda +Rina +Roberta +Roberto +Ronda +Rosetta +Royce +Sage +Samella +Sanjuanita +Saundra +Sebastian +Sharie +Sharleen +Sharon +Shavonda +Shea +Sheila +Sherry +Starla +Susanna +Tammie +Tashia +Tena +Toya +Treasa +Twanna +Tyler +Valentin +Vernell +Victoria +Vita +Wan +Williams +Willodean +Xavier \ No newline at end of file diff --git a/aiohttp_study/data/students.csv b/aiohttp_study/data/students.csv new file mode 100755 index 0000000..ee7209a --- /dev/null +++ b/aiohttp_study/data/students.csv @@ -0,0 +1,1001 @@ +student name,age,average mark +Willie Gray,22,8.6 +Phyllis Deloach,25,6.09 +Dewey Killingsworth,20,9.31 +Patricia Daniels,29,8.39 +Anne Mandrell,19,9.63 +Verdell Crawford,30,8.86 +Mario Lilley,24,5.78 +Francisco Jones,25,9.01 +Donald Laurent,29,4.34 +Denise Via,27,8.11 +Scott Lange,19,6.65 +Brenda Silva,30,7.53 +James Ross,29,6.72 +Kimberly Brown,18,7.05 +Heather Winnike,25,4.25 +Benjamin Getty,25,7.85 +Linda Crider,26,9.52 +Garrett Mitchell,18,4.01 +Thomas Roberts,28,5.28 +Pauline Montoya,29,9.09 +Georgia Wilson,27,6.52 +Roberta Kelly,23,8.09 +Johnny Jennings,22,7.54 +Sherry Grant,28,4.43 +Andrew Schmidt,29,7.55 +Carole Tewani,20,6.49 +Linda Miller,23,6.79 +Mary Glasser,30,9.77 +Ruby Greig,21,7.59 +Rosie Watkins,26,4.08 +Wilma Dominguez,26,6.94 +Daniel Youd,20,9.67 +Tamara Harris,24,9.92 +Arnoldo Ewert,24,9.54 +John Velazquez,18,8.5 +Audrey Camille,30,4.15 +Helen Klein,18,6.5 +Eric Ruegg,22,8.48 +Vera Charles,22,5.81 +Annie Sudbeck,28,9.85 +Michael Clark,20,5.8 +Rosa Thomas,30,4.17 +Daisy Granados,22,4.12 +Betty Mabry,18,5.74 +Bertha Gary,26,8.26 +Vickie Laigo,21,8.89 +Richard Grant,24,9.07 +Linda Harrison,27,9.96 +Phyllis Cole,18,5.31 +Devin Spencer,25,7.79 +George Guest,28,9.94 +Kim Pyles,30,9.87 +Kristin Dean,18,9.75 +Clarence Cantu,21,9.19 +Kenneth Evans,21,4.86 +Frank Borgeson,24,9.65 +Richard Grossman,24,8.42 +Ann White,29,4.26 +Virginia Harris,22,9.29 +Maria Benear,28,9.12 +George Leno,30,9.47 +Richard Hamrick,21,8.86 +Tony Engel,21,9.61 +Scott Miller,25,8.95 +Bridget Cotter,29,7.8 +Terry Major,30,8.45 +Maria Boswell,29,8.39 +Ronald Oliver,27,4.15 +Delilah Howard,20,5.64 +Jose Paul,22,5.41 +Francisco Miller,26,8.81 +Josephine Perkins,25,9.58 +Gerald Murray,28,7.04 +Randy Hord,21,8.42 +Janee Bailey,22,6.79 +Martha Pitcher,30,7.6 +Renee Pagan,24,4.62 +Kenneth Rummel,28,6.6 +Doretha Ferguson,30,8.18 +Donald Luevano,24,5.15 +Valerie Mondragon,27,9.54 +Gladys Gomez,19,6.36 +Christin Cross,22,4.4 +Robert Birmingham,22,5.73 +Willie Eskridge,27,6.52 +Josephina Medina,23,10.0 +Burl Navarro,27,7.61 +Lila Hill,29,9.83 +David Roberts,20,9.41 +Travis Rhyne,23,8.16 +Robert Kirkland,21,4.99 +John Torres,24,8.33 +Cindy Nilson,23,8.16 +Steven Lawson,21,4.37 +Sylvia Kuhn,23,8.91 +Richard Crawford,28,7.76 +Fred Maestas,28,5.83 +Janie Waterman,22,8.49 +Paula Morales,28,7.51 +Lawrence Bentson,27,8.47 +Hattie Bramer,18,9.71 +Cynthia Beegle,20,5.79 +Sarah Martindale,26,7.16 +Shawn Bonifacio,26,6.26 +Lena Weston,29,8.01 +Joyce Beatty,23,9.65 +Juan Dunn,22,8.26 +Barry Mckenzie,20,9.63 +Joyce Foley,18,6.57 +Doris Kuck,21,5.73 +Kim Cohran,21,5.0 +Robert Martin,25,7.14 +George Jackson,25,9.67 +David Hayden,19,7.08 +David Barnas,20,4.7 +Amada Duncan,30,9.22 +Kathryn Harryman,28,6.82 +Janette Law,26,7.02 +Tonja Bull,21,5.36 +Alissa Belyoussian,25,6.54 +Lou Bible,26,8.37 +Marc Bibbs,18,6.26 +Arthur Kuhl,18,6.48 +Martha Woods,23,6.83 +Jeffrey Petty,20,6.36 +Harry Dampeer,21,7.81 +Wesley Wolf,18,9.2 +Elizabeth Lowe,28,7.42 +Marvin Silvas,26,6.27 +Donald Hardnett,19,7.21 +Michael Mcdonald,27,9.36 +Edna Mahoney,23,5.24 +Deborah Penn,18,7.98 +Ethel Disher,22,4.28 +Michael Jackson,23,4.31 +Kevin Houston,19,6.53 +Margaret Branstetter,28,6.57 +Billy Henry,27,7.35 +Christopher Mcintire,25,8.54 +Amy Martin,21,7.13 +Stephanie Grose,27,5.11 +Deanna Kathan,30,8.9 +Ann Arteaga,26,8.33 +David Goins,29,6.27 +Paul Alexander,21,5.24 +Robert Parker,18,8.88 +Patricia York,27,6.87 +Donna Baker,21,4.17 +Carla Morris,21,5.92 +John Hubbard,27,6.59 +Oscar Linahan,28,4.68 +David Cain,30,6.75 +Cindy Oconnor,22,4.74 +Nicholas Richter,20,6.46 +Faye Roberge,18,8.49 +Jessica Keenan,21,9.9 +Rebecca Garcia,22,4.22 +Esther Simmering,28,9.31 +Lou Houston,22,9.91 +Rebecca Gillies,19,4.09 +Philip Urbanski,21,8.87 +Teresa Perkins,24,5.85 +Mary Holley,25,6.74 +Tricia Davanzo,19,5.17 +Bridget Mcneal,26,5.46 +Douglas Holland,27,6.25 +Justin Whitmer,22,5.62 +David Davis,18,6.81 +Frances Kerr,27,8.3 +Kim Ellis,24,8.32 +Brian Brown,21,6.25 +Monica Lubrano,22,8.02 +Joyce Skaggs,29,8.43 +Penelope Fries,18,6.81 +Alice Randolph,26,8.1 +Jeffrey Ermitanio,28,9.5 +Stephanie Davis,27,9.36 +John Snow,30,8.67 +Barbara Gott,23,8.69 +Sharon Deleon,19,7.66 +Rigoberto Wilenkin,28,7.71 +Mathew Embree,24,5.97 +Bobby Walker,27,4.85 +Jacqueline Macias,27,8.76 +Benjamin Beck,27,8.8 +Steve Williams,22,6.99 +James Elick,29,9.68 +Elva Diaz,20,7.79 +Terrance Bruce,25,6.96 +Mark Pearson,24,8.49 +Arthur Lowrey,28,8.1 +Scott Lopez,18,4.67 +Hilario Lewis,24,8.95 +Esther Urbancic,18,8.93 +Eric Long,20,4.9 +Matthew Perry,18,4.48 +Lois Alexander,18,5.42 +James Brokaw,28,6.26 +Donald Lewis,27,8.64 +Amanda Gunderson,22,4.73 +Ryan Henricks,29,8.58 +Michelle Mori,25,5.38 +Stacy Erickson,22,5.69 +Kevin Hadley,30,4.64 +Daniel Lopez,23,4.66 +Jose Perez,22,4.53 +Nina Earp,21,9.88 +Richard Stellhorn,21,7.53 +Travis Sanchez,22,5.92 +Earl Anderson,29,4.2 +Antonio Watts,21,7.73 +Katia Cowan,19,7.55 +Michael Routzahn,29,5.97 +Teresa Baridon,26,8.05 +Bertram Eilerman,18,6.18 +Dianne Lucero,22,8.73 +Barbara Fine,28,4.7 +Betty Ferreira,25,6.18 +Charles Jimeson,24,4.34 +Marta Wang,27,4.33 +Travis Stanphill,29,8.21 +John Ashley,24,6.39 +John Merkel,28,7.08 +Josephine Zechman,20,9.64 +Mark Haven,27,8.27 +Carlos London,28,7.19 +Annemarie Keller,30,7.62 +Robert Mccollough,24,5.85 +Harold Slater,21,8.63 +Benjamin Sykes,30,6.9 +Vickie Potter,23,4.77 +Susan Chavis,29,5.89 +Patricia Robinson,18,5.61 +Florence Smith,21,9.62 +Olimpia Connolly,26,6.06 +Robert Stehlik,22,8.79 +Harry Mckenzie,24,4.15 +Kelly Friel,23,4.44 +Therese Butts,29,8.26 +Brian Cole,28,8.75 +Michael Zable,30,5.07 +Otis Bubar,27,6.14 +John Valdez,25,4.97 +Denise Tanner,28,8.19 +Catherine Wagner,30,4.32 +Lorenzo Dayton,22,9.9 +Shelby Martinez,26,5.74 +Nina Berner,25,9.67 +Rachel Bapties,26,8.1 +Wesley Byron,18,8.03 +Gregory Mccollum,30,9.8 +Diane Brady,29,9.86 +Christopher Hahn,21,5.22 +Dennis Rogers,19,4.47 +Gerald Hartley,21,5.9 +Barbara Pagan,23,4.32 +Trevor Hansen,30,6.03 +Pamela Alexander,30,6.6 +Don Smith,28,7.32 +Thomas Hill,26,6.0 +Catina Burgin,29,8.47 +James Moore,23,7.56 +Dorothy Laudat,24,7.63 +Eloise Griner,26,9.36 +Edna Huey,26,7.15 +Cheryl Bennett,24,9.01 +George Woodard,29,7.87 +Louis French,28,7.63 +Ruth Campbell,22,5.99 +Anna Johansson,26,5.47 +Cindy Christiansen,30,6.47 +Buck Buban,23,8.28 +Maria Wolfson,29,9.3 +Joyce Abernathy,21,8.27 +Adam Campbell,20,4.88 +Astrid Denoon,25,6.89 +Vera Mcdaniel,28,6.77 +Teresa Triplett,20,7.02 +Stacy Dingle,27,5.94 +Peter Hutchins,30,4.16 +Emma Garfield,23,4.24 +George Ober,19,9.47 +Linda Estrada,21,6.84 +Jimmy Gee,24,9.77 +Juanita Kimple,26,5.07 +Morris Todd,24,7.88 +Ruth Minor,30,4.32 +Hilda Kofford,29,6.36 +Jennifer Loftus,27,5.67 +Kristy Gilbert,28,6.41 +Juan Wall,22,8.08 +Brandy Crockett,29,5.63 +Stanley Guerrero,27,5.92 +Kelly Baker,18,5.7 +Thomas Phelan,29,4.34 +Sarah Dye,22,7.13 +Denise Myers,22,8.26 +Wallace Lafleur,30,7.25 +Esther Yother,18,9.38 +Nicole Bussman,20,6.86 +Edgar Meacham,24,5.6 +Michael Dorland,27,7.83 +Brenda Baumgartner,25,8.59 +Loretta Bonsall,30,9.93 +Arturo Orange,18,4.08 +Larry Sims,22,7.41 +Christopher Greene,28,4.63 +Teresa Owings,28,9.74 +Linda Herrington,26,5.62 +Dora Hass,28,5.83 +Joan Bodo,27,5.42 +Thomas Steel,21,7.04 +Walter Musick,28,4.47 +Suzy Williams,18,4.62 +Reginald Wilke,20,5.84 +Anthony Gunter,30,4.74 +Carlyn Harris,18,5.63 +Elizabeth Scharf,28,8.47 +Arlinda Kierzewski,26,5.12 +Glenn Herren,24,8.62 +Carolyn Weiss,20,6.36 +Evelyn Curles,24,6.1 +Kenneth Chase,25,6.73 +Sue Carlock,19,6.6 +Terry Chandler,30,5.21 +Margaret Fahnestock,26,7.08 +Terry Dale,18,7.86 +Dorothy Burke,27,5.06 +John Holm,30,9.92 +Frederick Teel,22,8.66 +Randy Wylie,22,4.58 +Charles Miller,18,6.7 +Leslie Johnson,26,6.99 +Charlotte Leftwich,30,7.96 +Donald Colantuono,30,4.91 +Gina Rice,21,7.39 +Ethel Freeman,19,4.38 +Paul Thrasher,19,5.78 +Marci Trimble,21,8.43 +Lenny Castoe,29,4.36 +Melissa Wozniak,20,9.13 +Jan Cunningham,30,8.83 +Daniel Hoobler,23,5.17 +Anna Dixon,21,9.46 +Xavier Bishop,28,6.34 +William Nighman,26,5.07 +Reinaldo Varrone,28,9.89 +Gregory Schick,21,5.9 +Kenneth Water,25,4.68 +Ruby Winkler,24,5.61 +Michael Weaver,21,7.59 +Mark Jewell,21,9.15 +Mary Buchanon,23,4.51 +Michelle Mayhugh,25,6.19 +Edna Avery,28,4.73 +James Jenkins,23,5.79 +Alex Heefner,21,5.12 +Karen Denny,21,4.58 +Matthew Gonzales,22,7.54 +Linda Quella,24,8.31 +Lynn Jones,30,5.8 +Darryl Sutton,30,4.43 +Marietta Ward,28,5.78 +Gregory Knight,18,9.64 +Terri Kelly,26,5.45 +Peter Nevills,23,8.13 +Christopher Ouzts,19,9.8 +Maxine Zirin,20,6.1 +Ruth Young,20,5.34 +David Phillies,30,6.85 +Lisa Sullivan,25,5.55 +David Bourque,25,8.96 +Adrianne Ali,20,6.84 +Ernest Sommerville,27,4.16 +Virginia Price,21,8.39 +Leon Morgan,24,5.34 +William Johnson,25,9.86 +Nicholas Mathes,18,4.47 +Alisa Smith,25,7.21 +Yolanda Mays,27,5.57 +Edith Shaffner,24,5.91 +William Gonzales,30,6.71 +Krista Henley,23,8.14 +Yvonne King,19,6.73 +Laura Hoffmann,29,6.1 +Raymond Brooks,27,9.49 +Arthur Loveless,30,5.47 +Louis Jones,30,5.97 +Sabine Smith,26,7.87 +David Hill,21,8.02 +John Gary,21,6.78 +Johnny Huffman,18,5.98 +Audrey Williams,18,6.78 +Kelly Rodriguez,19,8.71 +Keneth Burch,26,5.8 +Sean Fox,24,7.69 +Jan Leclair,22,8.35 +Eric Feagin,22,8.85 +Armanda Horgan,28,8.4 +Kenneth Joyce,18,9.62 +Maria Breton,22,7.93 +David Parr,21,5.87 +Logan Bartolet,24,7.59 +Hubert Williams,29,6.88 +Linda Foulkes,20,9.25 +Phyllis Thomas,25,9.08 +Lucille Berry,25,8.68 +Frank Beauchesne,24,5.55 +Kathryn Brown,19,6.24 +Marilyn Mathews,29,6.05 +Tim Moscoso,30,8.25 +William Milligan,20,8.15 +Nicholas Hahn,22,7.67 +Melinda Ludgate,19,9.48 +Theodore Yates,27,7.25 +Ester Leis,21,6.43 +Francis Robinson,27,4.19 +Tina Bath,26,8.4 +Mandy Hambric,29,8.22 +Jose Martin,21,4.07 +Helen Shoemake,24,8.07 +Richard Castro,19,4.91 +Willie Lowell,19,9.54 +Jennie Ramlall,21,4.5 +Karen Gavin,26,7.41 +Michael Mckinnon,28,4.23 +Priscilla Roper,20,6.69 +Jonathan Newsome,18,4.97 +Anthony Branch,25,6.3 +Robert Gibson,30,6.59 +Thomas Schade,23,4.16 +Kirby Green,27,7.6 +Brian Edwards,18,4.79 +Debra Flores,21,6.25 +David Macleod,21,9.12 +Lois Nelsen,30,5.88 +Wanda Jones,21,6.75 +Marsha Robinson,18,8.76 +Nicole Jeffries,28,9.94 +Ann Turner,24,6.25 +Agnes Warnock,25,9.38 +Darlene Wertman,21,9.53 +Leo Fleming,27,5.88 +Nicholas Maldonado,26,9.73 +Lanny Mccrary,27,7.31 +Lee Walburn,19,5.99 +Grace Souphom,20,4.33 +Thomas Mason,19,8.88 +Dudley Peterson,23,8.5 +Jennifer Guerrero,27,5.02 +Christopher Rash,23,7.76 +Tracey Kelty,18,7.89 +Patrick Hickman,22,9.87 +Roland Charleston,26,9.45 +Lucia Sherrill,23,8.46 +Barbara Buck,27,8.09 +Warren Pereira,26,6.42 +Heather Peterson,28,6.67 +Jasper Gonzalez,24,6.24 +Diane Stclair,29,4.53 +Dorothy Gosnell,22,7.31 +Charles Childress,24,9.34 +Linda Simmons,23,6.11 +Todd Netterville,29,5.38 +Rebecca Lamb,25,6.83 +Tiffany Erkkila,23,4.52 +Charles Hooper,20,5.09 +Raymond Brickey,19,5.27 +William Sheehan,22,4.54 +Margaret Miller,26,6.83 +Peggy Rael,27,9.0 +Barbara Roy,22,7.19 +Bernice Adams,29,6.98 +Michael Hamel,23,8.97 +Paul Swasey,23,4.92 +Johanna Chavez,28,4.36 +Gloria Gutierrez,29,6.63 +Harry Rusher,27,7.69 +Carlos Mcreynolds,19,6.85 +Susan Peschel,26,9.74 +Margaret Mcguire,19,7.17 +John Peralta,22,9.95 +Barbara Brown,25,4.94 +Dustin Patrick,23,7.01 +Brian Vargas,28,8.21 +Rick Capizzi,25,8.9 +Lisa Palmieri,29,6.59 +Brenda Sumter,24,7.63 +Laverne Radford,23,4.97 +Heather Lish,21,4.08 +Jeffrey Deane,18,5.5 +Valerie Woode,27,7.79 +Benjamin Brown,25,6.53 +Timothy Armstrong,24,6.16 +Krystal Janssen,24,7.73 +Daniel Bell,30,5.16 +George Basil,19,6.28 +Lilian Rocha,26,8.72 +Stanley Jackson,26,5.33 +Christine Franks,30,7.31 +Janelle Vecker,18,7.08 +Grace Robbins,19,5.24 +Joshua Ream,18,8.18 +Georgia Calaf,20,9.18 +Rhonda Leona,29,9.24 +Charles Schueller,28,5.49 +Leonor Adams,26,6.95 +John Bond,28,9.29 +Deirdre Marthe,24,7.48 +Gene Utley,25,9.94 +Lisa Wilson,20,9.13 +Catherine Kim,22,9.36 +Randolph Martin,24,8.77 +Velma Jobe,30,4.22 +Naomi Mendosa,21,4.03 +William Grove,29,7.01 +Sandra Hackney,29,5.68 +Jennifer Higdon,28,9.61 +Tina Tidwell,29,9.4 +Emily Simpson,30,4.06 +Frank Rasmussen,24,4.51 +Lisa Strause,19,6.06 +Donald Skinner,30,4.61 +Robert Jordan,22,8.48 +Enedina Mcneil,24,5.83 +Nathaniel Boyd,18,5.46 +Clyde Huelskamp,25,4.46 +Lorena Harris,22,6.29 +Walter Ham,25,7.2 +Brian Lee,22,8.08 +Jason Page,28,9.64 +Deborah Watt,22,5.58 +Christopher Zupancic,28,5.5 +Helen Perkins,22,7.12 +Nina Aber,23,7.79 +Dwight Johnson,30,4.06 +Allyson Gay,25,8.9 +David Propes,24,7.61 +Sheldon Johnson,29,4.64 +Elana Bergeron,19,7.27 +Lisa Rowe,19,7.85 +William Filmore,18,4.56 +Angela Stultz,24,7.6 +John Collins,26,5.52 +Thomas Meade,25,4.62 +Ann Lorenz,20,9.85 +Delphia Clarke,30,9.3 +Richard Allen,21,4.44 +Amelia Costain,29,6.9 +Anisha Bridges,18,6.99 +Marcus Denson,20,6.42 +Almeda Stamey,25,5.29 +Cindy Chapman,26,6.77 +Jadwiga Truocchio,25,6.37 +Ricky Bergman,18,5.26 +Jennifer Franz,29,4.82 +Brenda Painter,29,8.07 +Robert Hawkins,26,4.92 +Johnny Alvidrez,30,6.61 +Meredith Spears,22,8.29 +Kevin Walton,22,5.85 +Dave White,20,7.53 +Timothy Wagner,24,4.7 +Billie Hodge,29,7.17 +Angela Sangi,21,5.22 +Paula Moore,23,6.74 +Harold Aguilar,19,5.67 +Rocky Brooks,19,6.56 +Rachel Smith,29,9.5 +Barbara Harry,18,4.24 +Vicki Ricker,25,5.95 +Terry Carlyle,19,7.24 +Leslie Hamlin,30,6.67 +Eugene Bunting,20,7.1 +Bryan Hickerson,25,4.02 +Amanda James,19,8.13 +Steven Ball,21,7.25 +George Surratt,26,6.42 +Adriana Johnson,22,7.11 +Rachel Russell,27,6.51 +Rebecca Cully,18,4.83 +Nancy Landrum,29,7.16 +Elizabeth Howard,25,9.4 +Clifford Perkins,18,5.68 +Jonathan Koester,24,4.9 +Dona Chambers,27,9.43 +Sandra Schmiedeskamp,26,7.83 +Viola Bailey,22,5.75 +Joseph Head,24,9.97 +Wesley Bouyer,30,9.94 +Teresa Jones,19,9.99 +Michael Ginn,24,8.54 +Rebecca Imfeld,21,4.34 +Cynthia Tippins,29,7.96 +Inez Johnson,22,7.49 +Beverly Hertzler,18,4.41 +Helen Gloor,21,9.21 +Gail Monahan,21,7.26 +Marla Dodson,20,5.77 +Adele Deemer,22,4.37 +Jim Smith,20,8.18 +Julian Gutierrez,22,4.23 +Anna Payne,29,6.15 +James Pratka,29,4.13 +Sheila Linn,26,9.64 +Delphine Yousef,18,8.84 +Gwendolyn Alvarez,25,4.35 +Howard Holloway,19,9.64 +Harry Hanson,19,7.58 +Bobby Shelton,22,4.72 +Sara Wood,22,5.16 +Michael Toller,29,5.24 +Lisa Glover,18,7.62 +Robert Figueroa,24,6.02 +Margery Turner,21,6.98 +Ladonna Guinyard,23,8.56 +Anthony Sobus,25,9.43 +Patrick Ruiz,28,5.32 +Victor Santiago,20,6.31 +Harry Wages,30,4.19 +Celeste Pope,24,8.33 +Royce Hale,28,8.83 +Marie Powell,21,6.3 +Eva Buske,26,5.29 +Mary Ortiz,26,7.25 +Edward Williams,21,8.56 +William Moore,27,5.99 +Robert Jackson,30,7.9 +Jocelyn Jensen,20,6.64 +Clayton Williams,26,5.82 +Melinda Bass,19,9.45 +Salvador Kinney,18,5.83 +Patrick Rios,27,5.74 +Janice Smith,23,6.43 +Wilhelmina Collins,26,9.55 +Mary Skeesick,25,6.26 +David Diaz,22,9.11 +Maritza Evans,27,9.8 +Samuel Regan,30,8.45 +Richard Madden,24,8.58 +Bertha Boyd,21,6.67 +Travis Gutierrez,19,5.88 +Lisa Bernier,20,7.74 +Willie Keith,24,7.21 +Micheal Scott,21,5.54 +Norma Dixon,19,5.9 +Angel Rhoades,22,6.66 +May Avent,27,4.22 +Thad Banks,25,4.44 +Marlene Leonard,22,5.2 +Cora Fahey,23,7.37 +Bessie Trivedi,26,8.6 +Harold Delgado,30,6.31 +Brenda Jackson,27,8.89 +Nicole Larkin,22,8.27 +Henry Ferrell,20,6.99 +Holly White,27,7.29 +Ryan Digeorgio,26,5.82 +Floyd Anderson,20,7.22 +Robert Cahill,28,4.58 +Lori Villegas,24,9.77 +Jennifer Maxie,30,6.87 +Cindy Frazier,30,7.0 +Jerome Harper,18,7.09 +Christopher Luna,19,9.31 +David Valdez,20,8.7 +Ted Anderson,28,4.15 +Marie Marn,18,4.53 +James Doyle,18,5.98 +Jerry Pinner,29,5.0 +Eileen Fata,19,8.18 +Gary Simmons,21,8.49 +Willie Haven,29,5.16 +John Meyer,29,8.28 +Leola Murphy,25,8.96 +Nina Baker,23,5.73 +Edwin Zeger,30,7.64 +Mildred Perkins,24,6.81 +Yong Reaid,26,8.31 +Lynn Walker,28,8.42 +Jason Yates,19,7.55 +Cedric Wallace,29,4.08 +Anne Reedy,21,4.15 +Ricky Tetreault,26,6.0 +Gary Littleton,22,6.69 +Brian Deubler,28,6.52 +Adrian Colvin,29,6.69 +Eleanor Schroder,21,7.5 +Jean Gethers,28,6.89 +Matthew Kim,23,8.1 +Jennifer Mclean,19,4.71 +Jesus Weckerly,25,9.68 +Michael Boyd,20,4.94 +Michael Chavarria,28,6.47 +Sydney Anderson,30,7.15 +William Julius,28,6.29 +Richard Meza,19,6.99 +Katherine Roche,28,7.13 +Jacob Figgs,22,6.28 +Thomas Weimer,29,4.32 +Willie Mcgurk,19,5.99 +Minnie Cook,28,7.51 +Loretta Molina,21,8.69 +James Harris,24,4.44 +John Lyons,21,5.78 +Annie Krings,21,7.61 +Carrie Ontiveros,19,4.73 +Marie Clausen,24,4.55 +Robert Hung,23,5.55 +Wesley Shah,23,6.91 +Frank Lopez,30,6.66 +Albert Coral,25,7.12 +Kristine Harvey,22,4.83 +Arlene Bauer,29,8.29 +Connie Figueroa,23,9.86 +Tom Bishop,27,4.48 +James Harrison,19,5.6 +Sheila Stier,30,5.88 +Pearl Mckenna,26,9.45 +Casey Williams,25,7.92 +Yvette Heard,26,4.48 +Paul Paneto,28,4.97 +Christopher Iniguez,18,7.78 +Sheila Hudson,29,5.37 +Marilyn Sexton,21,5.97 +Eric Marchetti,28,5.47 +Veronica Benz,26,7.59 +Mackenzie Horta,24,8.8 +Nellie Cunningham,23,7.64 +Teresa Valiente,28,8.89 +Kate Pospicil,29,8.75 +Lawrence Mccullough,27,5.51 +Robert Hannan,23,7.27 +Paul Miyoshi,18,5.05 +Rebekah Leonardo,18,7.68 +Lillian Sanders,26,4.7 +Russell Tran,21,5.76 +Charles Fletcher,30,6.28 +Sibyl Barthelemy,18,7.47 +Trena Head,23,4.02 +Tracy Hogan,25,4.2 +Christopher Scott,24,5.07 +Peter Langenfeld,19,6.97 +Sara Miller,21,7.37 +Flora Allen,20,9.37 +Sarah Figueiredo,27,8.94 +Ronald Gotay,21,9.74 +Maryanne White,22,8.68 +Bettie Illsley,28,6.84 +Margaret Eychaner,19,5.1 +Frank Stevens,22,5.81 +Anthony Huie,19,5.69 +Jason Wainwright,20,7.13 +Kenneth Robles,18,9.21 +Chad Barnes,27,7.81 +Kelly Holcomb,29,4.03 +Ruby Astin,28,4.1 +Laurie Marshall,20,5.71 +Melanie Kath,20,8.14 +Jessica Dubose,26,9.98 +George Wofford,25,9.36 +Elizabeth Hollyday,23,4.1 +Gloria Gilreath,29,5.5 +Kathleen Pruitt,24,4.43 +James Bohman,20,6.95 +John Ferreira,28,4.88 +Everett Mccollough,28,5.82 +Phyliss Wood,21,4.47 +Jamie Wood,22,5.31 +Ralph Finwall,30,8.17 +Florence Lile,30,6.29 +Geraldine Nelson,22,9.52 +Robin Santiago,27,9.74 +Maureen Daugherty,18,9.49 +Matthew Grogan,28,7.05 +James Ryan,25,9.54 +Brian Christiansen,24,4.82 +Sondra Bui,21,9.7 +Janice Luna,21,7.6 +Roger Felton,20,9.08 +Gregory Harris,28,9.96 +Jewell Pate,22,5.3 +Antionette Blaydes,22,8.9 +Lisa Harrison,23,8.22 +Avery Chestnut,24,4.15 +Alfred Mendez,29,9.9 +Loretta Sullivan,20,7.7 +Matthew Fischer,22,6.28 +Fred Mckane,19,5.32 +Aaron Netolicky,30,9.48 +Mark Phillips,22,6.4 +Curtis Aiello,19,5.2 +Karen Spalding,29,9.24 +Angelita Williamson,18,7.66 +Rita Peterson,22,5.52 +William Childs,18,9.05 +Jackie Hummel,26,5.33 +Lance Cainne,28,6.21 +James Moore,22,7.15 +Bambi Sholders,22,5.03 +Pamela Collins,24,6.44 +John Gray,26,5.99 +Cynthia Greene,30,4.37 +Lori Hennemann,20,6.25 +Thomas Scruggs,23,4.82 +Hattie Dougherty,20,4.15 +Justin Mckenney,28,7.39 +Mark Shippey,28,9.87 +George Berti,19,4.11 +Sheila Miranda,29,9.19 +Gloria Kline,19,5.55 +Ardith Thomas,18,4.24 +Raymond Gagnon,24,6.08 +Pamela Goehner,20,6.97 +Julia Jackson,27,5.56 +Jan Arndt,29,5.03 +James Rivera,29,6.2 +Jennifer Dullea,24,4.31 +Laura Norris,21,9.02 +Amy Marshall,19,9.72 +Todd Wayman,26,6.5 +Louis Parson,29,8.36 +Charles Hawley,24,4.08 +Tammy Munday,25,5.14 +Dawn Oconor,20,9.64 +Ila Tobin,27,5.46 +Gloria Gaffney,22,9.37 +Francis Fletcher,20,4.38 +Tammy Perry,29,9.07 +Robert Carrera,26,5.26 +Sharron Ellis,24,4.94 +Sheila Taylor,26,9.59 +Richard Eaddy,22,7.86 +Billy Chrisman,28,7.46 +Dorothy Daugherty,23,9.13 +Paul Colon,29,7.21 +Justin Mann,30,4.81 +Michelle Torres,29,6.33 +Timothy Mercado,28,6.59 +Christopher Frank,25,8.15 +Johnnie Evans,18,8.86 +Jean Carter,18,7.11 +Matthew Mcdearmont,22,6.88 +Dorothy Yeager,30,4.86 +Ruth Rhodes,24,6.86 +James Powers,25,6.07 +Nell Dyson,29,5.27 +Edward Bailey,27,6.71 +Diana Patton,23,6.92 +Barbara Copeland,19,9.27 +Clarence Cerverizzo,30,4.0 +Daniel Lloyd,20,6.62 +Jeffrey Maxcy,24,4.25 +Brian Heidinger,20,7.28 +Howard Haitz,23,6.78 +Barbara Leroy,27,8.85 +Doris Scantling,26,5.97 +Richard Caruthers,24,5.54 +Mabel Dorch,27,4.56 +Yolanda Conner,27,9.08 +Susan Haley,26,7.99 +Brenda Scott,22,4.09 +George Lawless,24,9.48 +Richard Snider,18,9.99 +Florence Sooter,29,7.92 +Ann Sorensen,19,5.1 +Debbie Feazel,24,7.95 +Blaine Gust,22,5.42 +Gerald Gomez,21,9.62 +Daniel Wilson,25,9.46 +George Lapointe,28,5.96 +Brian Darrow,28,5.92 +Edward Jarvie,27,5.1 +John Paolucci,26,7.67 +Don Dryden,20,5.94 +Tonya Sculley,29,4.54 +William Erling,27,5.14 +Annie Maddox,26,9.59 +James Purcell,19,7.58 +Theresa Morgan,26,9.03 +Sean Dieteman,27,5.96 +Joyce Robison,19,5.89 +Larissa Stalling,23,7.82 +Thomas Ramos,23,6.96 +Kimberly Tarver,29,4.65 +Louie Unrein,30,4.43 +Miguel Bertalan,27,8.19 +Brian Perkins,29,6.69 +Brittney Muller,24,8.6 +Terry Gillikin,19,6.92 +Lela Sanders,25,4.36 +Herman Mcavoy,30,8.17 +Robert Ange,21,6.82 +Stephanie Ramirez,21,6.33 +Noah Minton,25,9.62 +Cynthia Wood,24,6.47 +Sue Mahon,28,6.82 +Lisa Robards,25,5.33 +John Jones,28,8.42 +Roger Williams,26,9.39 +Thomas Black,20,9.29 +Leonore Mcmillian,23,5.66 +Betty Mccoy,19,7.76 +Janice Sousa,21,5.0 +Emma Mottillo,24,8.7 +Kristi Swanson,19,6.24 +Ann Eaton,27,8.44 +Olive Williams,28,6.54 +Paul Rio,27,8.65 +Earl Horan,26,6.6 +Linda Mckoy,25,8.06 +Kevin Brown,23,5.38 +Jack Meza,26,7.07 +Joe Smith,28,7.27 +Don Knox,19,8.12 +Teresa Robotham,26,6.3 +Maryjane Shafer,21,7.26 +Estella Neubauer,24,5.14 +Cassandra Maldonado,25,9.95 +Sherry Bean,26,4.03 +Leonard Jackson,23,8.03 +James Mills,19,5.35 +Kristen Keri,19,6.44 +Jerry Kirk,20,8.95 +Angelo Landrum,28,4.93 +Dora Swarr,22,4.18 +Diane Laird,20,6.12 +Darren Charbonneau,27,4.84 +Barbara Lambert,28,5.43 +Mark Waits,30,5.81 +Ann Mondragon,19,5.76 +Michelle Oneal,23,5.51 +Carl Campbell,25,9.82 +Alice Digangi,27,4.55 +Frances Nez,30,9.64 +Amber Wilson,24,8.96 +Maria Ceraos,27,4.26 +Jennifer Turner,29,4.33 +Larry Smith,29,5.43 +Daniel Dumar,28,9.07 +Mary Macdonald,22,6.04 +Johnnie Yepez,29,6.35 +Stella Hallmark,20,7.76 +Jimmy Dunnaway,27,4.87 +Hilda Bohlke,23,7.34 +Robert Maines,18,8.81 +Richard Shackleford,19,8.86 +Shane Machesky,24,8.83 +Rodolfo Maldonado,18,7.97 +Connie Butler,29,4.52 +Michael Kath,19,9.28 +Josephine Newbury,21,7.71 +Martha Burton,24,8.0 +Evelyn Johnson,24,8.18 +Renee Munn,27,8.84 +Brenna Szymansky,29,7.99 +Luz Roseboro,29,8.46 +Heather Garcia,28,9.98 +Anita Tudor,26,5.05 +Eddie Shiels,30,9.1 +Edwin Broadwell,24,7.35 +Corinne Hamblin,22,8.88 +Connie Berry,24,7.87 +Larry Fields,22,4.37 +Amber Wallin,18,9.29 +Richard Somers,27,4.48 +Steve Williams,27,7.52 +Lee Davis,30,9.91 +Alice Hudson,21,9.25 +Elissa Sinclair,29,7.02 +Anita Mcpherson,21,5.13 +Jackie Johnson,30,9.15 +Howard Smoot,30,7.52 +Robert Gonzalez,28,7.91 +Leticia Wright,21,5.72 +Carl Olson,24,6.19 +Evelyn Daniels,19,4.54 +Robert Hatley,25,4.39 +Kelly Stewart,29,4.5 +Logan Pruitt,18,7.63 +Tammy Wong,30,6.13 +Henry Quinton,24,9.51 +Stanley Monteleone,30,4.76 +Harry Neher,28,9.4 +Jason Rossetti,23,7.23 +Emma Marcus,26,5.36 +Lindsey Cummings,18,6.88 +Miguel Guinn,25,5.41 +James Herring,27,5.65 +Glenda Cisneros,21,7.86 +Gladys Purdom,29,9.43 +Marjorie Rapelyea,25,6.85 +Malcolm Smith,30,6.78 +Erica Broussard,19,8.73 +Emma Mcbride,19,7.36 +Raymond Soileau,18,7.27 +Rikki Gomes,30,7.19 +Thomas Spaur,29,6.4 +Gabrielle Szmidt,29,8.41 +Justin Gonzales,24,7.66 \ No newline at end of file diff --git a/aiohttp_study/data/students_sorted_by_age.csv b/aiohttp_study/data/students_sorted_by_age.csv new file mode 100644 index 0000000..bcd4cb7 --- /dev/null +++ b/aiohttp_study/data/students_sorted_by_age.csv @@ -0,0 +1,1001 @@ +student name,age,average mark +Verdell Crawford,30,8.86 +Brenda Silva,30,7.53 +Mary Glasser,30,9.77 +Audrey Camille,30,4.15 +Rosa Thomas,30,4.17 +Kim Pyles,30,9.87 +George Leno,30,9.47 +Terry Major,30,8.45 +Martha Pitcher,30,7.6 +Doretha Ferguson,30,8.18 +Amada Duncan,30,9.22 +Deanna Kathan,30,8.9 +David Cain,30,6.75 +John Snow,30,8.67 +Kevin Hadley,30,4.64 +Annemarie Keller,30,7.62 +Benjamin Sykes,30,6.9 +Michael Zable,30,5.07 +Catherine Wagner,30,4.32 +Gregory Mccollum,30,9.8 +Trevor Hansen,30,6.03 +Pamela Alexander,30,6.6 +Cindy Christiansen,30,6.47 +Peter Hutchins,30,4.16 +Ruth Minor,30,4.32 +Wallace Lafleur,30,7.25 +Loretta Bonsall,30,9.93 +Anthony Gunter,30,4.74 +Terry Chandler,30,5.21 +John Holm,30,9.92 +Charlotte Leftwich,30,7.96 +Donald Colantuono,30,4.91 +Jan Cunningham,30,8.83 +Lynn Jones,30,5.8 +Darryl Sutton,30,4.43 +David Phillies,30,6.85 +William Gonzales,30,6.71 +Arthur Loveless,30,5.47 +Louis Jones,30,5.97 +Tim Moscoso,30,8.25 +Robert Gibson,30,6.59 +Lois Nelsen,30,5.88 +Daniel Bell,30,5.16 +Christine Franks,30,7.31 +Velma Jobe,30,4.22 +Emily Simpson,30,4.06 +Donald Skinner,30,4.61 +Dwight Johnson,30,4.06 +Delphia Clarke,30,9.3 +Johnny Alvidrez,30,6.61 +Leslie Hamlin,30,6.67 +Wesley Bouyer,30,9.94 +Harry Wages,30,4.19 +Robert Jackson,30,7.9 +Samuel Regan,30,8.45 +Harold Delgado,30,6.31 +Jennifer Maxie,30,6.87 +Cindy Frazier,30,7.0 +Edwin Zeger,30,7.64 +Sydney Anderson,30,7.15 +Frank Lopez,30,6.66 +Sheila Stier,30,5.88 +Charles Fletcher,30,6.28 +Ralph Finwall,30,8.17 +Florence Lile,30,6.29 +Aaron Netolicky,30,9.48 +Cynthia Greene,30,4.37 +Justin Mann,30,4.81 +Dorothy Yeager,30,4.86 +Clarence Cerverizzo,30,4.0 +Louie Unrein,30,4.43 +Herman Mcavoy,30,8.17 +Mark Waits,30,5.81 +Frances Nez,30,9.64 +Eddie Shiels,30,9.1 +Lee Davis,30,9.91 +Jackie Johnson,30,9.15 +Howard Smoot,30,7.52 +Tammy Wong,30,6.13 +Stanley Monteleone,30,4.76 +Malcolm Smith,30,6.78 +Rikki Gomes,30,7.19 +Patricia Daniels,29,8.39 +Donald Laurent,29,4.34 +James Ross,29,6.72 +Pauline Montoya,29,9.09 +Andrew Schmidt,29,7.55 +Ann White,29,4.26 +Bridget Cotter,29,7.8 +Maria Boswell,29,8.39 +Lila Hill,29,9.83 +Lena Weston,29,8.01 +David Goins,29,6.27 +Joyce Skaggs,29,8.43 +James Elick,29,9.68 +Ryan Henricks,29,8.58 +Earl Anderson,29,4.2 +Michael Routzahn,29,5.97 +Travis Stanphill,29,8.21 +Susan Chavis,29,5.89 +Therese Butts,29,8.26 +Diane Brady,29,9.86 +Catina Burgin,29,8.47 +George Woodard,29,7.87 +Maria Wolfson,29,9.3 +Hilda Kofford,29,6.36 +Brandy Crockett,29,5.63 +Thomas Phelan,29,4.34 +Lenny Castoe,29,4.36 +Laura Hoffmann,29,6.1 +Hubert Williams,29,6.88 +Marilyn Mathews,29,6.05 +Mandy Hambric,29,8.22 +Diane Stclair,29,4.53 +Todd Netterville,29,5.38 +Bernice Adams,29,6.98 +Gloria Gutierrez,29,6.63 +Lisa Palmieri,29,6.59 +Rhonda Leona,29,9.24 +William Grove,29,7.01 +Sandra Hackney,29,5.68 +Tina Tidwell,29,9.4 +Sheldon Johnson,29,4.64 +Amelia Costain,29,6.9 +Jennifer Franz,29,4.82 +Brenda Painter,29,8.07 +Billie Hodge,29,7.17 +Rachel Smith,29,9.5 +Nancy Landrum,29,7.16 +Cynthia Tippins,29,7.96 +Anna Payne,29,6.15 +James Pratka,29,4.13 +Michael Toller,29,5.24 +Jerry Pinner,29,5.0 +Willie Haven,29,5.16 +John Meyer,29,8.28 +Cedric Wallace,29,4.08 +Adrian Colvin,29,6.69 +Thomas Weimer,29,4.32 +Arlene Bauer,29,8.29 +Sheila Hudson,29,5.37 +Kate Pospicil,29,8.75 +Kelly Holcomb,29,4.03 +Gloria Gilreath,29,5.5 +Alfred Mendez,29,9.9 +Karen Spalding,29,9.24 +Sheila Miranda,29,9.19 +Jan Arndt,29,5.03 +James Rivera,29,6.2 +Louis Parson,29,8.36 +Tammy Perry,29,9.07 +Paul Colon,29,7.21 +Michelle Torres,29,6.33 +Nell Dyson,29,5.27 +Florence Sooter,29,7.92 +Tonya Sculley,29,4.54 +Kimberly Tarver,29,4.65 +Brian Perkins,29,6.69 +Jennifer Turner,29,4.33 +Larry Smith,29,5.43 +Johnnie Yepez,29,6.35 +Connie Butler,29,4.52 +Brenna Szymansky,29,7.99 +Luz Roseboro,29,8.46 +Elissa Sinclair,29,7.02 +Kelly Stewart,29,4.5 +Gladys Purdom,29,9.43 +Thomas Spaur,29,6.4 +Gabrielle Szmidt,29,8.41 +Thomas Roberts,28,5.28 +Sherry Grant,28,4.43 +Annie Sudbeck,28,9.85 +George Guest,28,9.94 +Maria Benear,28,9.12 +Gerald Murray,28,7.04 +Kenneth Rummel,28,6.6 +Richard Crawford,28,7.76 +Fred Maestas,28,5.83 +Paula Morales,28,7.51 +Kathryn Harryman,28,6.82 +Elizabeth Lowe,28,7.42 +Margaret Branstetter,28,6.57 +Oscar Linahan,28,4.68 +Esther Simmering,28,9.31 +Jeffrey Ermitanio,28,9.5 +Rigoberto Wilenkin,28,7.71 +Arthur Lowrey,28,8.1 +James Brokaw,28,6.26 +Barbara Fine,28,4.7 +John Merkel,28,7.08 +Carlos London,28,7.19 +Brian Cole,28,8.75 +Denise Tanner,28,8.19 +Don Smith,28,7.32 +Louis French,28,7.63 +Vera Mcdaniel,28,6.77 +Kristy Gilbert,28,6.41 +Christopher Greene,28,4.63 +Teresa Owings,28,9.74 +Dora Hass,28,5.83 +Walter Musick,28,4.47 +Elizabeth Scharf,28,8.47 +Xavier Bishop,28,6.34 +Reinaldo Varrone,28,9.89 +Edna Avery,28,4.73 +Marietta Ward,28,5.78 +Armanda Horgan,28,8.4 +Michael Mckinnon,28,4.23 +Nicole Jeffries,28,9.94 +Heather Peterson,28,6.67 +Johanna Chavez,28,4.36 +Brian Vargas,28,8.21 +Charles Schueller,28,5.49 +John Bond,28,9.29 +Jennifer Higdon,28,9.61 +Jason Page,28,9.64 +Christopher Zupancic,28,5.5 +Patrick Ruiz,28,5.32 +Royce Hale,28,8.83 +Robert Cahill,28,4.58 +Ted Anderson,28,4.15 +Lynn Walker,28,8.42 +Brian Deubler,28,6.52 +Jean Gethers,28,6.89 +Michael Chavarria,28,6.47 +William Julius,28,6.29 +Katherine Roche,28,7.13 +Minnie Cook,28,7.51 +Paul Paneto,28,4.97 +Eric Marchetti,28,5.47 +Teresa Valiente,28,8.89 +Bettie Illsley,28,6.84 +Ruby Astin,28,4.1 +John Ferreira,28,4.88 +Everett Mccollough,28,5.82 +Matthew Grogan,28,7.05 +Gregory Harris,28,9.96 +Lance Cainne,28,6.21 +Justin Mckenney,28,7.39 +Mark Shippey,28,9.87 +Billy Chrisman,28,7.46 +Timothy Mercado,28,6.59 +George Lapointe,28,5.96 +Brian Darrow,28,5.92 +Sue Mahon,28,6.82 +John Jones,28,8.42 +Olive Williams,28,6.54 +Joe Smith,28,7.27 +Angelo Landrum,28,4.93 +Barbara Lambert,28,5.43 +Daniel Dumar,28,9.07 +Heather Garcia,28,9.98 +Robert Gonzalez,28,7.91 +Harry Neher,28,9.4 +Denise Via,27,8.11 +Georgia Wilson,27,6.52 +Linda Harrison,27,9.96 +Ronald Oliver,27,4.15 +Valerie Mondragon,27,9.54 +Willie Eskridge,27,6.52 +Burl Navarro,27,7.61 +Lawrence Bentson,27,8.47 +Michael Mcdonald,27,9.36 +Billy Henry,27,7.35 +Stephanie Grose,27,5.11 +Patricia York,27,6.87 +John Hubbard,27,6.59 +Douglas Holland,27,6.25 +Frances Kerr,27,8.3 +Stephanie Davis,27,9.36 +Bobby Walker,27,4.85 +Jacqueline Macias,27,8.76 +Benjamin Beck,27,8.8 +Donald Lewis,27,8.64 +Marta Wang,27,4.33 +Mark Haven,27,8.27 +Otis Bubar,27,6.14 +Stacy Dingle,27,5.94 +Jennifer Loftus,27,5.67 +Stanley Guerrero,27,5.92 +Michael Dorland,27,7.83 +Joan Bodo,27,5.42 +Dorothy Burke,27,5.06 +Ernest Sommerville,27,4.16 +Yolanda Mays,27,5.57 +Raymond Brooks,27,9.49 +Theodore Yates,27,7.25 +Francis Robinson,27,4.19 +Kirby Green,27,7.6 +Leo Fleming,27,5.88 +Lanny Mccrary,27,7.31 +Jennifer Guerrero,27,5.02 +Barbara Buck,27,8.09 +Peggy Rael,27,9.0 +Harry Rusher,27,7.69 +Valerie Woode,27,7.79 +Rachel Russell,27,6.51 +Dona Chambers,27,9.43 +William Moore,27,5.99 +Patrick Rios,27,5.74 +Maritza Evans,27,9.8 +May Avent,27,4.22 +Brenda Jackson,27,8.89 +Holly White,27,7.29 +Tom Bishop,27,4.48 +Lawrence Mccullough,27,5.51 +Sarah Figueiredo,27,8.94 +Chad Barnes,27,7.81 +Robin Santiago,27,9.74 +Julia Jackson,27,5.56 +Ila Tobin,27,5.46 +Edward Bailey,27,6.71 +Barbara Leroy,27,8.85 +Mabel Dorch,27,4.56 +Yolanda Conner,27,9.08 +Edward Jarvie,27,5.1 +William Erling,27,5.14 +Sean Dieteman,27,5.96 +Miguel Bertalan,27,8.19 +Ann Eaton,27,8.44 +Paul Rio,27,8.65 +Darren Charbonneau,27,4.84 +Alice Digangi,27,4.55 +Maria Ceraos,27,4.26 +Jimmy Dunnaway,27,4.87 +Renee Munn,27,8.84 +Richard Somers,27,4.48 +Steve Williams,27,7.52 +James Herring,27,5.65 +Linda Crider,26,9.52 +Rosie Watkins,26,4.08 +Wilma Dominguez,26,6.94 +Bertha Gary,26,8.26 +Francisco Miller,26,8.81 +Sarah Martindale,26,7.16 +Shawn Bonifacio,26,6.26 +Janette Law,26,7.02 +Lou Bible,26,8.37 +Marvin Silvas,26,6.27 +Ann Arteaga,26,8.33 +Bridget Mcneal,26,5.46 +Alice Randolph,26,8.1 +Teresa Baridon,26,8.05 +Olimpia Connolly,26,6.06 +Shelby Martinez,26,5.74 +Rachel Bapties,26,8.1 +Thomas Hill,26,6.0 +Eloise Griner,26,9.36 +Edna Huey,26,7.15 +Anna Johansson,26,5.47 +Juanita Kimple,26,5.07 +Linda Herrington,26,5.62 +Arlinda Kierzewski,26,5.12 +Margaret Fahnestock,26,7.08 +Leslie Johnson,26,6.99 +William Nighman,26,5.07 +Terri Kelly,26,5.45 +Sabine Smith,26,7.87 +Keneth Burch,26,5.8 +Tina Bath,26,8.4 +Karen Gavin,26,7.41 +Nicholas Maldonado,26,9.73 +Roland Charleston,26,9.45 +Warren Pereira,26,6.42 +Margaret Miller,26,6.83 +Susan Peschel,26,9.74 +Lilian Rocha,26,8.72 +Stanley Jackson,26,5.33 +Leonor Adams,26,6.95 +John Collins,26,5.52 +Cindy Chapman,26,6.77 +Robert Hawkins,26,4.92 +George Surratt,26,6.42 +Sandra Schmiedeskamp,26,7.83 +Sheila Linn,26,9.64 +Eva Buske,26,5.29 +Mary Ortiz,26,7.25 +Clayton Williams,26,5.82 +Wilhelmina Collins,26,9.55 +Bessie Trivedi,26,8.6 +Ryan Digeorgio,26,5.82 +Yong Reaid,26,8.31 +Ricky Tetreault,26,6.0 +Pearl Mckenna,26,9.45 +Yvette Heard,26,4.48 +Veronica Benz,26,7.59 +Lillian Sanders,26,4.7 +Jessica Dubose,26,9.98 +Jackie Hummel,26,5.33 +John Gray,26,5.99 +Todd Wayman,26,6.5 +Robert Carrera,26,5.26 +Sheila Taylor,26,9.59 +Doris Scantling,26,5.97 +Susan Haley,26,7.99 +John Paolucci,26,7.67 +Annie Maddox,26,9.59 +Theresa Morgan,26,9.03 +Roger Williams,26,9.39 +Earl Horan,26,6.6 +Jack Meza,26,7.07 +Teresa Robotham,26,6.3 +Sherry Bean,26,4.03 +Anita Tudor,26,5.05 +Emma Marcus,26,5.36 +Phyllis Deloach,25,6.09 +Francisco Jones,25,9.01 +Heather Winnike,25,4.25 +Benjamin Getty,25,7.85 +Devin Spencer,25,7.79 +Scott Miller,25,8.95 +Josephine Perkins,25,9.58 +Robert Martin,25,7.14 +George Jackson,25,9.67 +Alissa Belyoussian,25,6.54 +Christopher Mcintire,25,8.54 +Mary Holley,25,6.74 +Terrance Bruce,25,6.96 +Michelle Mori,25,5.38 +Betty Ferreira,25,6.18 +John Valdez,25,4.97 +Nina Berner,25,9.67 +Astrid Denoon,25,6.89 +Brenda Baumgartner,25,8.59 +Kenneth Chase,25,6.73 +Kenneth Water,25,4.68 +Michelle Mayhugh,25,6.19 +Lisa Sullivan,25,5.55 +David Bourque,25,8.96 +William Johnson,25,9.86 +Alisa Smith,25,7.21 +Phyllis Thomas,25,9.08 +Lucille Berry,25,8.68 +Anthony Branch,25,6.3 +Agnes Warnock,25,9.38 +Rebecca Lamb,25,6.83 +Barbara Brown,25,4.94 +Rick Capizzi,25,8.9 +Benjamin Brown,25,6.53 +Gene Utley,25,9.94 +Clyde Huelskamp,25,4.46 +Walter Ham,25,7.2 +Allyson Gay,25,8.9 +Thomas Meade,25,4.62 +Almeda Stamey,25,5.29 +Jadwiga Truocchio,25,6.37 +Vicki Ricker,25,5.95 +Bryan Hickerson,25,4.02 +Elizabeth Howard,25,9.4 +Gwendolyn Alvarez,25,4.35 +Anthony Sobus,25,9.43 +Mary Skeesick,25,6.26 +Thad Banks,25,4.44 +Leola Murphy,25,8.96 +Jesus Weckerly,25,9.68 +Albert Coral,25,7.12 +Casey Williams,25,7.92 +Tracy Hogan,25,4.2 +George Wofford,25,9.36 +James Ryan,25,9.54 +Tammy Munday,25,5.14 +Christopher Frank,25,8.15 +James Powers,25,6.07 +Daniel Wilson,25,9.46 +Lela Sanders,25,4.36 +Noah Minton,25,9.62 +Lisa Robards,25,5.33 +Linda Mckoy,25,8.06 +Cassandra Maldonado,25,9.95 +Carl Campbell,25,9.82 +Robert Hatley,25,4.39 +Miguel Guinn,25,5.41 +Marjorie Rapelyea,25,6.85 +Mario Lilley,24,5.78 +Tamara Harris,24,9.92 +Arnoldo Ewert,24,9.54 +Richard Grant,24,9.07 +Frank Borgeson,24,9.65 +Richard Grossman,24,8.42 +Renee Pagan,24,4.62 +Donald Luevano,24,5.15 +John Torres,24,8.33 +Teresa Perkins,24,5.85 +Kim Ellis,24,8.32 +Mathew Embree,24,5.97 +Mark Pearson,24,8.49 +Hilario Lewis,24,8.95 +Charles Jimeson,24,4.34 +John Ashley,24,6.39 +Robert Mccollough,24,5.85 +Harry Mckenzie,24,4.15 +Dorothy Laudat,24,7.63 +Cheryl Bennett,24,9.01 +Jimmy Gee,24,9.77 +Morris Todd,24,7.88 +Edgar Meacham,24,5.6 +Glenn Herren,24,8.62 +Evelyn Curles,24,6.1 +Ruby Winkler,24,5.61 +Linda Quella,24,8.31 +Leon Morgan,24,5.34 +Edith Shaffner,24,5.91 +Sean Fox,24,7.69 +Logan Bartolet,24,7.59 +Frank Beauchesne,24,5.55 +Helen Shoemake,24,8.07 +Ann Turner,24,6.25 +Jasper Gonzalez,24,6.24 +Charles Childress,24,9.34 +Brenda Sumter,24,7.63 +Timothy Armstrong,24,6.16 +Krystal Janssen,24,7.73 +Deirdre Marthe,24,7.48 +Randolph Martin,24,8.77 +Frank Rasmussen,24,4.51 +Enedina Mcneil,24,5.83 +David Propes,24,7.61 +Angela Stultz,24,7.6 +Timothy Wagner,24,4.7 +Jonathan Koester,24,4.9 +Joseph Head,24,9.97 +Michael Ginn,24,8.54 +Robert Figueroa,24,6.02 +Celeste Pope,24,8.33 +Richard Madden,24,8.58 +Willie Keith,24,7.21 +Lori Villegas,24,9.77 +Mildred Perkins,24,6.81 +James Harris,24,4.44 +Marie Clausen,24,4.55 +Mackenzie Horta,24,8.8 +Christopher Scott,24,5.07 +Kathleen Pruitt,24,4.43 +Brian Christiansen,24,4.82 +Avery Chestnut,24,4.15 +Pamela Collins,24,6.44 +Raymond Gagnon,24,6.08 +Jennifer Dullea,24,4.31 +Charles Hawley,24,4.08 +Sharron Ellis,24,4.94 +Ruth Rhodes,24,6.86 +Jeffrey Maxcy,24,4.25 +Richard Caruthers,24,5.54 +George Lawless,24,9.48 +Debbie Feazel,24,7.95 +Brittney Muller,24,8.6 +Cynthia Wood,24,6.47 +Emma Mottillo,24,8.7 +Estella Neubauer,24,5.14 +Amber Wilson,24,8.96 +Shane Machesky,24,8.83 +Martha Burton,24,8.0 +Evelyn Johnson,24,8.18 +Edwin Broadwell,24,7.35 +Connie Berry,24,7.87 +Carl Olson,24,6.19 +Henry Quinton,24,9.51 +Justin Gonzales,24,7.66 +Roberta Kelly,23,8.09 +Linda Miller,23,6.79 +Josephina Medina,23,10.0 +Travis Rhyne,23,8.16 +Cindy Nilson,23,8.16 +Sylvia Kuhn,23,8.91 +Joyce Beatty,23,9.65 +Martha Woods,23,6.83 +Edna Mahoney,23,5.24 +Michael Jackson,23,4.31 +Barbara Gott,23,8.69 +Daniel Lopez,23,4.66 +Vickie Potter,23,4.77 +Kelly Friel,23,4.44 +Barbara Pagan,23,4.32 +James Moore,23,7.56 +Buck Buban,23,8.28 +Emma Garfield,23,4.24 +Daniel Hoobler,23,5.17 +Mary Buchanon,23,4.51 +James Jenkins,23,5.79 +Peter Nevills,23,8.13 +Krista Henley,23,8.14 +Thomas Schade,23,4.16 +Dudley Peterson,23,8.5 +Christopher Rash,23,7.76 +Lucia Sherrill,23,8.46 +Linda Simmons,23,6.11 +Tiffany Erkkila,23,4.52 +Michael Hamel,23,8.97 +Paul Swasey,23,4.92 +Dustin Patrick,23,7.01 +Laverne Radford,23,4.97 +Nina Aber,23,7.79 +Paula Moore,23,6.74 +Ladonna Guinyard,23,8.56 +Janice Smith,23,6.43 +Cora Fahey,23,7.37 +Nina Baker,23,5.73 +Matthew Kim,23,8.1 +Robert Hung,23,5.55 +Wesley Shah,23,6.91 +Connie Figueroa,23,9.86 +Nellie Cunningham,23,7.64 +Robert Hannan,23,7.27 +Trena Head,23,4.02 +Elizabeth Hollyday,23,4.1 +Lisa Harrison,23,8.22 +Thomas Scruggs,23,4.82 +Dorothy Daugherty,23,9.13 +Diana Patton,23,6.92 +Howard Haitz,23,6.78 +Larissa Stalling,23,7.82 +Thomas Ramos,23,6.96 +Leonore Mcmillian,23,5.66 +Kevin Brown,23,5.38 +Leonard Jackson,23,8.03 +Michelle Oneal,23,5.51 +Hilda Bohlke,23,7.34 +Jason Rossetti,23,7.23 +Willie Gray,22,8.6 +Johnny Jennings,22,7.54 +Eric Ruegg,22,8.48 +Vera Charles,22,5.81 +Daisy Granados,22,4.12 +Virginia Harris,22,9.29 +Jose Paul,22,5.41 +Janee Bailey,22,6.79 +Christin Cross,22,4.4 +Robert Birmingham,22,5.73 +Janie Waterman,22,8.49 +Juan Dunn,22,8.26 +Ethel Disher,22,4.28 +Cindy Oconnor,22,4.74 +Rebecca Garcia,22,4.22 +Lou Houston,22,9.91 +Justin Whitmer,22,5.62 +Monica Lubrano,22,8.02 +Steve Williams,22,6.99 +Amanda Gunderson,22,4.73 +Stacy Erickson,22,5.69 +Jose Perez,22,4.53 +Travis Sanchez,22,5.92 +Dianne Lucero,22,8.73 +Robert Stehlik,22,8.79 +Lorenzo Dayton,22,9.9 +Ruth Campbell,22,5.99 +Juan Wall,22,8.08 +Sarah Dye,22,7.13 +Denise Myers,22,8.26 +Larry Sims,22,7.41 +Frederick Teel,22,8.66 +Randy Wylie,22,4.58 +Matthew Gonzales,22,7.54 +Jan Leclair,22,8.35 +Eric Feagin,22,8.85 +Maria Breton,22,7.93 +Nicholas Hahn,22,7.67 +Patrick Hickman,22,9.87 +Dorothy Gosnell,22,7.31 +William Sheehan,22,4.54 +Barbara Roy,22,7.19 +John Peralta,22,9.95 +Catherine Kim,22,9.36 +Robert Jordan,22,8.48 +Lorena Harris,22,6.29 +Brian Lee,22,8.08 +Deborah Watt,22,5.58 +Helen Perkins,22,7.12 +Meredith Spears,22,8.29 +Kevin Walton,22,5.85 +Adriana Johnson,22,7.11 +Viola Bailey,22,5.75 +Inez Johnson,22,7.49 +Adele Deemer,22,4.37 +Julian Gutierrez,22,4.23 +Bobby Shelton,22,4.72 +Sara Wood,22,5.16 +David Diaz,22,9.11 +Angel Rhoades,22,6.66 +Marlene Leonard,22,5.2 +Nicole Larkin,22,8.27 +Gary Littleton,22,6.69 +Jacob Figgs,22,6.28 +Kristine Harvey,22,4.83 +Maryanne White,22,8.68 +Frank Stevens,22,5.81 +Jamie Wood,22,5.31 +Geraldine Nelson,22,9.52 +Jewell Pate,22,5.3 +Antionette Blaydes,22,8.9 +Matthew Fischer,22,6.28 +Mark Phillips,22,6.4 +Rita Peterson,22,5.52 +James Moore,22,7.15 +Bambi Sholders,22,5.03 +Gloria Gaffney,22,9.37 +Richard Eaddy,22,7.86 +Matthew Mcdearmont,22,6.88 +Brenda Scott,22,4.09 +Blaine Gust,22,5.42 +Dora Swarr,22,4.18 +Mary Macdonald,22,6.04 +Corinne Hamblin,22,8.88 +Larry Fields,22,4.37 +Ruby Greig,21,7.59 +Vickie Laigo,21,8.89 +Clarence Cantu,21,9.19 +Kenneth Evans,21,4.86 +Richard Hamrick,21,8.86 +Tony Engel,21,9.61 +Randy Hord,21,8.42 +Robert Kirkland,21,4.99 +Steven Lawson,21,4.37 +Doris Kuck,21,5.73 +Kim Cohran,21,5.0 +Tonja Bull,21,5.36 +Harry Dampeer,21,7.81 +Amy Martin,21,7.13 +Paul Alexander,21,5.24 +Donna Baker,21,4.17 +Carla Morris,21,5.92 +Jessica Keenan,21,9.9 +Philip Urbanski,21,8.87 +Brian Brown,21,6.25 +Nina Earp,21,9.88 +Richard Stellhorn,21,7.53 +Antonio Watts,21,7.73 +Harold Slater,21,8.63 +Florence Smith,21,9.62 +Christopher Hahn,21,5.22 +Gerald Hartley,21,5.9 +Joyce Abernathy,21,8.27 +Linda Estrada,21,6.84 +Thomas Steel,21,7.04 +Gina Rice,21,7.39 +Marci Trimble,21,8.43 +Anna Dixon,21,9.46 +Gregory Schick,21,5.9 +Michael Weaver,21,7.59 +Mark Jewell,21,9.15 +Alex Heefner,21,5.12 +Karen Denny,21,4.58 +Virginia Price,21,8.39 +David Hill,21,8.02 +John Gary,21,6.78 +David Parr,21,5.87 +Ester Leis,21,6.43 +Jose Martin,21,4.07 +Jennie Ramlall,21,4.5 +Debra Flores,21,6.25 +David Macleod,21,9.12 +Wanda Jones,21,6.75 +Darlene Wertman,21,9.53 +Heather Lish,21,4.08 +Naomi Mendosa,21,4.03 +Richard Allen,21,4.44 +Angela Sangi,21,5.22 +Steven Ball,21,7.25 +Rebecca Imfeld,21,4.34 +Helen Gloor,21,9.21 +Gail Monahan,21,7.26 +Margery Turner,21,6.98 +Marie Powell,21,6.3 +Edward Williams,21,8.56 +Bertha Boyd,21,6.67 +Micheal Scott,21,5.54 +Gary Simmons,21,8.49 +Anne Reedy,21,4.15 +Eleanor Schroder,21,7.5 +Loretta Molina,21,8.69 +John Lyons,21,5.78 +Annie Krings,21,7.61 +Marilyn Sexton,21,5.97 +Russell Tran,21,5.76 +Sara Miller,21,7.37 +Ronald Gotay,21,9.74 +Phyliss Wood,21,4.47 +Sondra Bui,21,9.7 +Janice Luna,21,7.6 +Laura Norris,21,9.02 +Gerald Gomez,21,9.62 +Robert Ange,21,6.82 +Stephanie Ramirez,21,6.33 +Janice Sousa,21,5.0 +Maryjane Shafer,21,7.26 +Josephine Newbury,21,7.71 +Alice Hudson,21,9.25 +Anita Mcpherson,21,5.13 +Leticia Wright,21,5.72 +Glenda Cisneros,21,7.86 +Dewey Killingsworth,20,9.31 +Carole Tewani,20,6.49 +Daniel Youd,20,9.67 +Michael Clark,20,5.8 +Delilah Howard,20,5.64 +David Roberts,20,9.41 +Cynthia Beegle,20,5.79 +Barry Mckenzie,20,9.63 +David Barnas,20,4.7 +Jeffrey Petty,20,6.36 +Nicholas Richter,20,6.46 +Elva Diaz,20,7.79 +Eric Long,20,4.9 +Josephine Zechman,20,9.64 +Adam Campbell,20,4.88 +Teresa Triplett,20,7.02 +Nicole Bussman,20,6.86 +Reginald Wilke,20,5.84 +Carolyn Weiss,20,6.36 +Melissa Wozniak,20,9.13 +Maxine Zirin,20,6.1 +Ruth Young,20,5.34 +Adrianne Ali,20,6.84 +Linda Foulkes,20,9.25 +William Milligan,20,8.15 +Priscilla Roper,20,6.69 +Grace Souphom,20,4.33 +Charles Hooper,20,5.09 +Georgia Calaf,20,9.18 +Lisa Wilson,20,9.13 +Ann Lorenz,20,9.85 +Marcus Denson,20,6.42 +Dave White,20,7.53 +Eugene Bunting,20,7.1 +Marla Dodson,20,5.77 +Jim Smith,20,8.18 +Victor Santiago,20,6.31 +Jocelyn Jensen,20,6.64 +Lisa Bernier,20,7.74 +Henry Ferrell,20,6.99 +Floyd Anderson,20,7.22 +David Valdez,20,8.7 +Michael Boyd,20,4.94 +Flora Allen,20,9.37 +Jason Wainwright,20,7.13 +Laurie Marshall,20,5.71 +Melanie Kath,20,8.14 +James Bohman,20,6.95 +Roger Felton,20,9.08 +Loretta Sullivan,20,7.7 +Lori Hennemann,20,6.25 +Hattie Dougherty,20,4.15 +Pamela Goehner,20,6.97 +Dawn Oconor,20,9.64 +Francis Fletcher,20,4.38 +Daniel Lloyd,20,6.62 +Brian Heidinger,20,7.28 +Don Dryden,20,5.94 +Thomas Black,20,9.29 +Jerry Kirk,20,8.95 +Diane Laird,20,6.12 +Stella Hallmark,20,7.76 +Anne Mandrell,19,9.63 +Scott Lange,19,6.65 +Gladys Gomez,19,6.36 +David Hayden,19,7.08 +Donald Hardnett,19,7.21 +Kevin Houston,19,6.53 +Rebecca Gillies,19,4.09 +Tricia Davanzo,19,5.17 +Sharon Deleon,19,7.66 +Katia Cowan,19,7.55 +Dennis Rogers,19,4.47 +George Ober,19,9.47 +Sue Carlock,19,6.6 +Ethel Freeman,19,4.38 +Paul Thrasher,19,5.78 +Christopher Ouzts,19,9.8 +Yvonne King,19,6.73 +Kelly Rodriguez,19,8.71 +Kathryn Brown,19,6.24 +Melinda Ludgate,19,9.48 +Richard Castro,19,4.91 +Willie Lowell,19,9.54 +Lee Walburn,19,5.99 +Thomas Mason,19,8.88 +Raymond Brickey,19,5.27 +Carlos Mcreynolds,19,6.85 +Margaret Mcguire,19,7.17 +George Basil,19,6.28 +Grace Robbins,19,5.24 +Lisa Strause,19,6.06 +Elana Bergeron,19,7.27 +Lisa Rowe,19,7.85 +Harold Aguilar,19,5.67 +Rocky Brooks,19,6.56 +Terry Carlyle,19,7.24 +Amanda James,19,8.13 +Teresa Jones,19,9.99 +Howard Holloway,19,9.64 +Harry Hanson,19,7.58 +Melinda Bass,19,9.45 +Travis Gutierrez,19,5.88 +Norma Dixon,19,5.9 +Christopher Luna,19,9.31 +Eileen Fata,19,8.18 +Jason Yates,19,7.55 +Jennifer Mclean,19,4.71 +Richard Meza,19,6.99 +Willie Mcgurk,19,5.99 +Carrie Ontiveros,19,4.73 +James Harrison,19,5.6 +Peter Langenfeld,19,6.97 +Margaret Eychaner,19,5.1 +Anthony Huie,19,5.69 +Fred Mckane,19,5.32 +Curtis Aiello,19,5.2 +George Berti,19,4.11 +Gloria Kline,19,5.55 +Amy Marshall,19,9.72 +Barbara Copeland,19,9.27 +Ann Sorensen,19,5.1 +James Purcell,19,7.58 +Joyce Robison,19,5.89 +Terry Gillikin,19,6.92 +Betty Mccoy,19,7.76 +Kristi Swanson,19,6.24 +Don Knox,19,8.12 +James Mills,19,5.35 +Kristen Keri,19,6.44 +Ann Mondragon,19,5.76 +Richard Shackleford,19,8.86 +Michael Kath,19,9.28 +Evelyn Daniels,19,4.54 +Erica Broussard,19,8.73 +Emma Mcbride,19,7.36 +Kimberly Brown,18,7.05 +Garrett Mitchell,18,4.01 +John Velazquez,18,8.5 +Helen Klein,18,6.5 +Betty Mabry,18,5.74 +Phyllis Cole,18,5.31 +Kristin Dean,18,9.75 +Hattie Bramer,18,9.71 +Joyce Foley,18,6.57 +Marc Bibbs,18,6.26 +Arthur Kuhl,18,6.48 +Wesley Wolf,18,9.2 +Deborah Penn,18,7.98 +Robert Parker,18,8.88 +Faye Roberge,18,8.49 +David Davis,18,6.81 +Penelope Fries,18,6.81 +Scott Lopez,18,4.67 +Esther Urbancic,18,8.93 +Matthew Perry,18,4.48 +Lois Alexander,18,5.42 +Bertram Eilerman,18,6.18 +Patricia Robinson,18,5.61 +Wesley Byron,18,8.03 +Kelly Baker,18,5.7 +Esther Yother,18,9.38 +Arturo Orange,18,4.08 +Suzy Williams,18,4.62 +Carlyn Harris,18,5.63 +Terry Dale,18,7.86 +Charles Miller,18,6.7 +Gregory Knight,18,9.64 +Nicholas Mathes,18,4.47 +Johnny Huffman,18,5.98 +Audrey Williams,18,6.78 +Kenneth Joyce,18,9.62 +Jonathan Newsome,18,4.97 +Brian Edwards,18,4.79 +Marsha Robinson,18,8.76 +Tracey Kelty,18,7.89 +Jeffrey Deane,18,5.5 +Janelle Vecker,18,7.08 +Joshua Ream,18,8.18 +Nathaniel Boyd,18,5.46 +William Filmore,18,4.56 +Anisha Bridges,18,6.99 +Ricky Bergman,18,5.26 +Barbara Harry,18,4.24 +Rebecca Cully,18,4.83 +Clifford Perkins,18,5.68 +Beverly Hertzler,18,4.41 +Delphine Yousef,18,8.84 +Lisa Glover,18,7.62 +Salvador Kinney,18,5.83 +Jerome Harper,18,7.09 +Marie Marn,18,4.53 +James Doyle,18,5.98 +Christopher Iniguez,18,7.78 +Paul Miyoshi,18,5.05 +Rebekah Leonardo,18,7.68 +Sibyl Barthelemy,18,7.47 +Kenneth Robles,18,9.21 +Maureen Daugherty,18,9.49 +Angelita Williamson,18,7.66 +William Childs,18,9.05 +Ardith Thomas,18,4.24 +Johnnie Evans,18,8.86 +Jean Carter,18,7.11 +Richard Snider,18,9.99 +Robert Maines,18,8.81 +Rodolfo Maldonado,18,7.97 +Amber Wallin,18,9.29 +Logan Pruitt,18,7.63 +Lindsey Cummings,18,6.88 +Raymond Soileau,18,7.27 diff --git a/aiohttp_study/data/unsorted_names.txt b/aiohttp_study/data/unsorted_names.txt new file mode 100755 index 0000000..4c9ca1f --- /dev/null +++ b/aiohttp_study/data/unsorted_names.txt @@ -0,0 +1,199 @@ +Erminia +Elisa +Ricarda +Royce +Amelia +Mariah +Kendal +Karl +Eustolia +Clay +Erma +Vita +Corrin +Sanjuanita +Shavonda +Donnetta +Adrienne +Ching +Leonie +Wan +Cheyenne +Sharon +Milissa +Marlon +Lena +Adele +Amee +Lolita +Junita +Agueda +Maggie +Herma +Major +Tyler +Ka +Dannette +Carlotta +Donald +Ramiro +Norman +Columbus +Detra +Maximina +Cindi +Elke +Tammie +Claudia +Irving +Jeane +Susanna +Michele +Chet +Kirstie +Blanca +Dorothea +Octavia +Randa +Louis +Penny +Twanna +Darryl +Mignon +Myrl +Lavern +Christa +Brooks +Samella +Roberto +Fredia +Raquel +Darrick +Willodean +Denisse +Idalia +Alda +Lashanda +Shea +Treasa +Rosetta +Charleen +Marisol +Matt +Keisha +Len +Tena +Mervin +Regina +Loan +Starla +Julian +Roberta +Long +Mei +Felton +Merrill +Lisha +Lydia +Toya +Katharyn +Fatimah +Cristal +Mathilda +Merideth +Carson +Marcelina +Floyd +Demetrice +Luz +Cheryll +Saundra +Vernell +Sheila +Quentin +Oliva +Victoria +Sage +Emanuel +Gwyneth +Buck +Patsy +Jeanine +Gaylene +Noelia +Dorene +Petrina +Chrissy +Kelsie +Marla +Antonio +Kiley +Katerine +Rina +Bettina +Charlie +Dino +Meda +Sherry +Gracia +Maisha +Hiroko +Margareta +Caroll +Sharie +Ciera +Lindy +Dierdre +Alejandrina +Jannette +Marco +Hwa +Exie +Jed +Rena +Rebeca +Luisa +Jasmine +Elinore +Tashia +GuillerminaAlaine +Ronda +Kasha +Joelle +Antony +Bari +Nicolas +Johnie +Ninfa +Sebastian +Catalina +Nicky +Justina +Danuta +Morris +Jaimee +Erik +Jenifer +Cecille +Lynne +Sharleen +Valentin +Elayne +Kayce +Karyl +Catherin +Craig +Marline +Ilda +Xavier +Genesis +Corrie +Elmira +Ericka +Carisa +Dwana +Randy +Marquetta +Dagmar +Williams +Oma diff --git a/aiohttp_study/foundurls.txt b/aiohttp_study/foundurls.txt new file mode 100644 index 0000000..500aa65 --- /dev/null +++ b/aiohttp_study/foundurls.txt @@ -0,0 +1,367 @@ +source_url parsed_url +https://1.1.1.1/ https://1.1.1.1/#a +https://1.1.1.1/ https://1.1.1.1/favicon.ico +https://1.1.1.1/ https://developers.cloudflare.com/warpclient/setting-up/linux/ +https://1.1.1.1/ https://1.1.1.1/media/manifest.json +https://1.1.1.1/ https://1.1.1.1/Cloudflare_WARP_Release-x64.msi +https://1.1.1.1/ https://pkg.cloudflareclient.com/ +https://1.1.1.1/ https://1.1.1.1/#b +https://1.1.1.1/ https://1.1.1.1/dns/ +https://1.1.1.1/ https://cloudflare.com +https://1.1.1.1/ https://1.1.1.1/family/ +https://1.1.1.1/ https://itunes.apple.com/us/app/1-1-1-1-faster-internet/id1423538627 +https://1.1.1.1/ https://1.1.1.1 +https://1.1.1.1/ https://1.1.1.1/Cloudflare_WARP.zip +https://1.1.1.1/ https://blog.cloudflare.com/warp-for-desktop +https://1.1.1.1/ https://twitter.com/intent/tweet?text=ISPs%20spy%20on%20your%20Internet%20traffic%20and%20sell%20the%20data.%20I%27m%20using%201.1.1.1%20with%20WARP%2C%20a%20free%20app%20which%20makes%20the%20Internet%20on%20my%20phone%20faster%20and%20more%20private.%20You%20should%20get%20the%20app%20too%3A%20https%3A//one.one.one.one +https://1.1.1.1/ https://www.cloudflare.com/careers/departments/ +https://1.1.1.1/ https://1.1.1.1/site-1c73aade914cfb299614.css +https://1.1.1.1/ https://developers.cloudflare.com/warpclient/setting-up/macOS/ +https://1.1.1.1/ https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone +https://1.1.1.1/ https://developers.cloudflare.com/warpclient/setting-up/windows/ +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-loaded-gun-aimed-american-democracy +https://www.mediamatters.org/ https://www.mediamatters.org/mark-levin/fox-host-mark-levin-were-losing-red-state-america-and-they-are-doing-it-they-are +https://www.mediamatters.org/ https://www.youtube.com/channel/UC_70iWZ6ym2cglS_kv5YfmA +https://www.mediamatters.org/ https://www.mediamatters.org/#instagram +https://www.mediamatters.org/ https://www.mediamatters.org/fox-nation/tucker-carlson-guest-warns-well-be-put-camps-if-we-dont-push-back-against-democrats +https://www.mediamatters.org/ https://www.mediamatters.org/sites/default/files/css/css_VMSLttmpBLA885ZXp-7B7fr04v8HZICSqDMp9cRylNY.css +https://www.mediamatters.org/ https://www.mediamatters.org/jeanine-pirro/these-are-jeanine-pirros-leading-advertisers +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/these-are-laura-ingrahams-leading-advertisers +https://www.mediamatters.org/ https://use.typekit.net/jqh3ujo.css +https://www.mediamatters.org/ https://www.mediamatters.org/take-action +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-has-aired-more-segments-trans-athletes-so-far-2021-it-did-last-two-years-combined +https://www.mediamatters.org/ https://twitter.com/mmfa +https://www.mediamatters.org/ https://www.mediamatters.org/#main-content +https://www.mediamatters.org/ https://www.mediamatters.org/diversity-discrimination/coverage-simone-biles-right-wing-pundits-continue-their-attacks-black +https://www.mediamatters.org/ https://www.mediamatters.org/tucker-carlson/tucker-carlson-praises-alex-jones-covid-commentary +https://www.mediamatters.org/ https://www.mediamatters.org/tucker-carlson/tucker-carlson-returns-fox-news-advertisers-are-staying-away +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/after-years-climate-denial-there-no-reason-trust-fox-weather +https://www.mediamatters.org/ https://www.mediamatters.org/mark-levin/fox-host-mark-levin-defends-my-pillow-ceo-mike-lindell-people-trying-take-him-out +https://www.mediamatters.org/ https://www.mediamatters.org/critical-race-theory/right-attacking-trans-people-part-its-critical-race-theory-political-tactic +https://www.mediamatters.org/ https://www.mediamatters.org/#study +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-manufactures-dissent-over-officers-searing-select-committee-testimony +https://www.mediamatters.org/ https://www.facebook.com/Mediamatters/ +https://www.mediamatters.org/ https://www.mediamatters.org/sean-hannity/hannity-predicts-delta-variant-will-begin-disappear-its-own-6-weeks +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/anti-vax-persuasion-problem-about-right-wing-sabotage +https://www.mediamatters.org/ https://www.mediamatters.org/these-are-tucker-carlsons-leading-advertisers +https://www.mediamatters.org/ https://www.mediamatters.org/#article +https://www.mediamatters.org/ https://www.mediamatters.org/coronavirus-covid-19/fox-news-lies-about-history-vaccine-mandates-suggesting-people-will-resist-and +https://www.mediamatters.org/ https://www.mediamatters.org/?page=0 +https://www.mediamatters.org/ https://www.mediamatters.org/critical-race-theory/former-trump-appointee-linked-critical-race-theory-legislation-over-20-states +https://www.mediamatters.org/ https://www.mediamatters.org/sinclair-broadcast-group/sinclair-reporting-misleadingly-portrays-federal-efforts-limit-gun +https://www.mediamatters.org/ https://www.mediamatters.org/contact-us +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/these-are-fox-news-leading-advertisers +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-critical-race-theory-obsession +https://www.mediamatters.org/ https://www.mediamatters.org/nratv/nratv-now-finished-here-are-bigotry-lies-and-hatred-nra-tolerated-years +https://www.mediamatters.org/ https://www.mediamatters.org/#facebook +https://www.mediamatters.org/ https://www.mediamatters.org/lachlan-murdoch/lachlan-murdoch-continues-lie-advertising-industry +https://www.mediamatters.org/ https://www.mediamatters.org/#audio +https://www.mediamatters.org/ https://www.mediamatters.org/coronavirus-covid-19/fox-news-attacks-biden-administration-implementing-foxs-own-vaccine-policy-its +https://www.mediamatters.org/ https://www.mediamatters.org/critical-race-theory/guide-right-wing-medias-critical-race-theory-strategy +https://www.mediamatters.org/ https://www.mediamatters.org/sinclair-broadcast-group/sinclair-broadcast-group-guest-uses-antisemitic-language-attack +https://www.mediamatters.org/ https://www.mediamatters.org/one-america-news-network/watch-how-one-oan-host-relentlessly-fundraises-spread-fraudulent-arizona +https://www.mediamatters.org/ https://www.mediamatters.org/one-america-news-network/how-oan-figures-call-mass-executions-connected-arizona-ballot-audit +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-host-kayleigh-mcenany-democrats-are-aggregating-power-allowing-illegal-immigrants +https://www.mediamatters.org/ https://www.mediamatters.org/tucker-carlson/heres-how-you-can-take-action-hold-tucker-carlson-accountable +https://www.mediamatters.org/ https://www.mediamatters.org/tucker-carlson/anti-trans-bills-are-tearing-right-inside +https://www.mediamatters.org/ https://www.mediamatters.org/#video +https://www.mediamatters.org/ https://www.instagram.com/mediamattersforamerica/ +https://www.mediamatters.org/ https://www.mediamatters.org/sinclair-broadcast-group/sinclair-infrastructure-coverage-centers-corporate-front-groups-pushing +https://www.mediamatters.org/ https://www.mediamatters.org/studies +https://www.mediamatters.org/ https://www.mediamatters.org/job-openings +https://www.mediamatters.org/ https://www.mediamatters.org/ +https://www.mediamatters.org/ https://www.mediamatters.org/homepage +https://www.mediamatters.org/ https://www.mediamatters.org/archives +https://www.mediamatters.org/ https://fonts.googleapis.com/css?family=Barlow:400,400i,600,600i,700,700i +https://www.mediamatters.org/ https://www.mediamatters.org/climate-energy +https://www.mediamatters.org/ https://www.mediamatters.org/sean-hannity/these-are-sean-hannitys-leading-advertisers +https://www.mediamatters.org/ https://mediamattersforamerica.tumblr.com/ +https://www.mediamatters.org/ https://www.mediamatters.org/january-6-insurrection/right-wing-media-have-waged-full-scale-campaign-cover-events-january-6 +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-ran-nearly-80-segments-critical-race-theory-single-virginia-school-district +https://www.mediamatters.org/ https://www.mediamatters.org/#tumblr +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-obsession-critical-race-theory-numbers +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/foxs-ongoing-assault-coronavirus-vaccination-campaign-going-kill-its-viewers +https://www.mediamatters.org/ https://www.mediamatters.org/news-analysis +https://www.mediamatters.org/ https://www.mediamatters.org/facebook/facebook-grants-transparency-only-help-its-own-image +https://www.mediamatters.org/ https://www.mediamatters.org/broadcast-networks/broadcast-tv-news-shows-link-western-heat-wave-and-drought-climate-change-27 +https://www.mediamatters.org/ https://www.mediamatters.org/terms-conditions +https://www.mediamatters.org/ https://www.mediamatters.org/#youtube +https://www.mediamatters.org/ https://www.mediamatters.org/privacy +https://www.mediamatters.org/ https://www.mediamatters.org/submissions +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/foxs-anti-critical-race-theory-parents-are-also-gop-activists +https://www.mediamatters.org/ https://www.mediamatters.org/kamala-harris/right-wing-media-turn-anti-abortion-attacks-against-kamala-harris +https://www.mediamatters.org/ https://www.mediamatters.org/tucker-carlson/tucker-carlson-claims-covid-vaccine-killing-people-and-government-and-media-are +https://www.mediamatters.org/ https://www.mediamatters.org/facebook/despite-facebooks-covid-19-promises-anti-vaccine-groups-are-thriving +https://www.mediamatters.org/ https://www.mediamatters.org/audio-video +https://www.mediamatters.org/ https://www.mediamatters.org/one-america-news-network/oan-cesspool-anti-lgbtq-hate-its-supported-these-cable-providers-and +https://www.mediamatters.org/ https://www.mediamatters.org/sinclair-broadcast-group/sinclair-broadcast-group-report-people-act-whitewashed-gops-nationwide +https://www.mediamatters.org/ https://www.mediamatters.org/#arrow +https://www.mediamatters.org/ https://www.mediamatters.org/#twitter +https://www.mediamatters.org/ https://www.mediamatters.org/facebook/facebooks-responses-oversight-board-are-sham +https://www.mediamatters.org/ https://www.mediamatters.org/one-america-news-network/oans-months-long-campaign-against-covid-19-vaccines +https://www.mediamatters.org/ https://www.mediamatters.org/#search +https://www.mediamatters.org/ https://www.mediamatters.org/search +https://www.mediamatters.org/ https://www.mediamatters.org/themes/custom/mmfa_theme/favicon.ico +https://www.mediamatters.org/ https://www.mediamatters.org/corrections +https://www.mediamatters.org/ https://www.mediamatters.org/abortion-rights-and-reproductive-health +https://www.mediamatters.org/ https://www.mediamatters.org/one-america-news-network/oans-shady-involvement-conspiracy-theory-based-arizona-election-audit +https://www.mediamatters.org/ https://www.mediamatters.org/?page=1 +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-has-undermined-vaccination-efforts-nearly-60-all-vaccination-segments-2-week-period +https://www.mediamatters.org/ https://www.mediamatters.org/coronavirus-covid-19/fox-news-anti-vaccine-campaign-isnt-over +https://www.mediamatters.org/ https://www.mediamatters.org/sites/default/files/css/css_vUt0GK4OfEXUi5i0VJuEV9nf8bDJwmJWZVb1Ca5G1yM.css +https://www.mediamatters.org/ https://www.mediamatters.org/cable-news/cable-news-programs-lag-behind-their-broadcast-news-counterparts-linking-climate-change +https://www.mediamatters.org/ https://www.mediamatters.org/fox-news/fox-news-attempts-rehabilitate-its-ratings-returning-tirades-against-abortion +https://www.mediamatters.org/ https://www.mediamatters.org/mike-lindell/mike-lindell-says-hes-pulling-mypillow-ads-fox-news-heres-what-means +https://www.mediamatters.org/ https://www.mediamatters.org/cnn/cable-news-fails-cover-gun-violence-public-health-crisis-it +https://www.mediamatters.org/ https://www.mediamatters.org/2020-supreme-court-vacancy/dont-believe-right-wing-media-overturning-roe-v-wade-big-deal +https://www.mediamatters.org/ https://www.mediamatters.org/about +https://www.mediamatters.org/ https://www.mediamatters.org/guns-public-safety +https://www.mediamatters.org/ https://www.mediamatters.org/cable-news/broadcast-and-cable-news-coverage-latest-record-breaking-heat-wave-west-mentioned +https://www.mediamatters.org/ https://action.mediamatters.org/secure/donate +https://www.mediamatters.org/ https://www.mediamatters.org/sites/default/files/css/css_oGZ7OLJDM4FApNs8xyoZMUIkjUZCXrNP16OA9NXAcMA.css +https://www.mediamatters.org/ https://www.mediamatters.org/newsmax/newsmax-host-i-still-have-concerns-about-election-2020-and-its-okay-have-concerns +https://www.mediamatters.org/ https://www.mediamatters.org/january-6-insurrection +https://www.mediamatters.org/ https://www.mediamatters.org/lgbtq +https://regex101.com/ https://regex101.com/static/assets/icon-72.png +https://regex101.com/ https://regex101.com/static/assets/icon-96.png +https://regex101.com/ https://regex101.com/library +https://regex101.com/ https://regex101.com/static/4.a0700f24d468995b2fe3.css +https://regex101.com/ https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=firas%2edib%40gmail%2ecom&lc=US&item_name=Regex101&no_note=0&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest +https://regex101.com/ https://regex101.com/static/assets/icon-16.png +https://regex101.com/ https://regex101.com/static/assets/manifest.webmanifest +https://regex101.com/ https://regex101.com/static/assets/icon-32.png +https://regex101.com/ mailto:contact@regex101.com +https://regex101.com/ https://regex101.com/quiz +https://regex101.com/ https://fonts.gstatic.com +https://regex101.com/ https://regex101.com/ +https://regex101.com/ https://regex101.com/static/assets/icon-60.png +https://regex101.com/ https://regex101.com/static/assets/favicon.ico +https://regex101.com/ https://regex101.com/static/bundle.bb20352093af87112590.css +https://regex101.com/ https://regex101.com/static/assets/icon-180.png +https://regex101.com/ https://regex101.com/static/assets/icon-76.png +https://regex101.com/ https://github.com/firasdib/Regex101/wiki +https://regex101.com/ https://regex101.com/static/assets/icon-114.png +https://regex101.com/ https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,400&family=Source+Code+Pro:wght@400;500;700&display=swap +https://regex101.com/ http://enable-javascript.com/ +https://regex101.com/ https://regex101.com/static/assets/icon-192.png +https://regex101.com/ https://regex101.com/debugger +https://regex101.com/ https://regex101.com/static/assets/icon-152.png +https://regex101.com/ https://regex101.com/static/quickref.23af15a0e560cd797a7d.chunk.js +https://regex101.com/ https://github.com/sponsors/firasdib +https://regex101.com/ https://regex101.com/account +https://regex101.com/ https://regex101.com +https://regex101.com/ https://regex101.com/codegen?language=php +https://regex101.com/ https://regex101.com/static/assets/icon-144.png +https://regex101.com/ https://regex101.com/static/assets/icon-120.png +https://regex101.com/ http://browsehappy.com/ +https://regex101.com/ https://twitter.com/regex101 +https://regex101.com/ https://web.libera.chat/?nick=re101-guest-?&chan=#regex +https://regex101.com/ https://regex101.com/settings +https://regex101.com/ https://regex101.com/static/assets/changelog.txt +https://regex101.com/ https://regex101.com/static/assets/icon-57.png +https://regex101.com/ https://www.layer0.co/ +https://regex101.com/ https://github.com/firasdib/Regex101/issues +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/us-coronavirus-vaccine-goal-502142 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money/2021/07/30/bidens-very-good-not-great-economy-796838 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/privacy#california +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money/2021/07/29/here-comes-a-big-gdp-number-796801 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/space +https://www.politico.com/tipsheets/morning-money https://www.politico.com/magazine +https://www.politico.com/tipsheets/morning-money http://banking.senate.gov/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/house-democrats-biden-eviction-moratorium-502156 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/faq +https://www.politico.com/tipsheets/morning-money https://www.politicopro.com/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/fourth-estate +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-180x180.png +https://www.politico.com/tipsheets/morning-money https://www.politicopro.com/policy-resources?cid=pro_21q3_corenews_how-to +https://www.politico.com/tipsheets/morning-money https://www.politico.com/rss +https://www.politico.com/tipsheets/morning-money https://www.wsj.com/articles/delta-variant-stalls-asias-economic-recovery-after-early-rebound-11627922736?mod=hp_lead_pos2 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/subscribe/breaking-news-alerts +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money/2021/08/03/dems-want-much-more-spending-796893 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/cartoon-carousel +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/biden-infrastructure-deal-progressives-senate-502213 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-120x120.png +https://www.politico.com/tipsheets/morning-money http://api.addthis.com/oexchange/0.8/forward/twitter/offer?pco=tbx32nj-1.0&url=https://www.politico.com/newsletters/morning-money/2021/08/03/dems-want-much-more-spending-796893&text=Dems want MUCH more spending &pubid=politico.com&via=politico +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/employment-immigration +https://www.politico.com/tipsheets/morning-money http://edition.pagesuite-professional.co.uk/Launch.aspx?bypass=true&PBID=74262970-aa07-44b3-80c8-21fa8a8ac376 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/settings +https://www.politico.com/tipsheets/morning-money https://www.politico.com/about-us +https://www.politico.com/tipsheets/morning-money https://cd.politicopro.com/member/51658 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters +https://www.politico.com/tipsheets/morning-money https://www.politico.com/advertising +https://www.politico.com/tipsheets/morning-money https://twitter.com/politico +https://www.politico.com/tipsheets/morning-money https://www.politico.com/press/about +https://www.politico.com/tipsheets/morning-money https://www.politico.com/transportation +https://www.politico.com/tipsheets/morning-money https://www.politico.eu/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/playbook +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tipsheets/morning-money +https://www.politico.com/tipsheets/morning-money https://feeder-prod.ops.politico.com/feeds/rss/morningmoney.xml +https://www.politico.com/tipsheets/morning-money https://www.politico.com/states/florida +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-114x114.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/white-house +https://www.politico.com/tipsheets/morning-money https://www.politico.com/cannabis +https://www.politico.com/tipsheets/morning-money https://static.politico.com/dims4/default/27ede68/2147483647/legacy_thumbnail/72x72/quality/90/?url=https%3A%2F%2Fstatic.politico.com%2Fcf%2F05%2Fee684a274496b04fa20ba2978da1%2Fpolitico.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/favicon-16x16.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/series/states/the-fifty#recovery-lab +https://www.politico.com/tipsheets/morning-money https://www.politico.com/video +https://www.politico.com/tipsheets/morning-money https://www.politico.com/feedback +https://www.politico.com/tipsheets/morning-money http://www.powerjobs.com/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/trump-legal-doj-502229 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/states/new-jersey +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-144x144.png +https://www.politico.com/tipsheets/morning-money https://subscriber.politicopro.com/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/live-events/about +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2020-elections +https://www.politico.com/tipsheets/morning-money https://www.politico.com/huddle/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/terms-of-service +https://www.politico.com/tipsheets/morning-money http://api.addthis.com/oexchange/0.8/forward/facebook/offer?pco=tbx32nj-1.0&url=https://www.politico.com/newsletters/morning-money/2021/08/03/dems-want-much-more-spending-796893&pubid=politico.com +https://www.politico.com/tipsheets/morning-money https://www.politico.com/privacy +https://www.politico.com/tipsheets/morning-money https://www.politico.com/series/states/the-fifty +https://www.politico.com/tipsheets/morning-money https://www.facebook.com/politico/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/joe-biden-first-100-days-presidency +https://www.politico.com/tipsheets/morning-money https://www.politico.com/technology +https://www.politico.com/tipsheets/morning-money https://www.politico.com//_logout?base=https%3A%2F%2Fwww.politico.com&redirect=%2F_logout&js=false +https://www.politico.com/tipsheets/morning-money https://www.politico.com/ +https://www.politico.com/tipsheets/morning-money https://www.reuters.com/world/asia-pacific/japan-limits-hospitalisation-covid-19-patients-most-serious-cases-surge-2021-08-03/ +https://www.politico.com/tipsheets/morning-money https://cd.politicopro.com/member/140963 +https://www.politico.com/tipsheets/morning-money https://policies.google.com/privacy +https://www.politico.com/tipsheets/morning-money https://www.politico.com/transitionpb?cid=mkt_tpb_NL +https://www.politico.com/tipsheets/morning-money https://www.politico.com/finance +https://www.politico.com/tipsheets/morning-money https://www.politico.com/live-events +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-152x152.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/write-for-us +https://www.politico.com/tipsheets/morning-money https://legislation.politicopro.com/bill/US_117_HR_3684 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/do-not-sell +https://www.politico.com/tipsheets/morning-money https://www.politico.com/sitemap +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money/2021/08/02/heres-the-infrastructure-bill-796863 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/manifest.json +https://www.politico.com/tipsheets/morning-money https://www.politico.com/payment +https://www.politico.com/tipsheets/morning-money https://www.politico.com/vaccinerace +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tipsheets/morning-money#icon-search +https://www.politico.com/tipsheets/morning-money https://www.politico.com/WomenRule +https://www.politico.com/tipsheets/morning-money https://www.politico.com/states/florida/story/2021/08/02/florida-covid-hospitalizations-shatter-record-as-desantis-downplays-threat-1389356 +https://www.politico.com/tipsheets/morning-money https://www.nytimes.com/2021/08/02/business/wall-street-casual.html +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/agriculture +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/west-wing-playbook +https://www.politico.com/tipsheets/morning-money https://static.politico.com/cf/05/ee684a274496b04fa20ba2978da1/politico.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/the-recast +https://www.politico.com/tipsheets/morning-money https://static.politico.com/dims4/default/59ee5a3/2147483647/legacy_thumbnail/114x114/quality/90/?url=https%3A%2F%2Fstatic.politico.com%2Fcf%2F05%2Fee684a274496b04fa20ba2978da1%2Fpolitico.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/trump-campaign-four-seasons-landscaping-fixation-502163 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/staff/ben-white +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/matt-wuerker +https://www.politico.com/tipsheets/morning-money https://www.politico.com/agenda +https://www.politico.com/tipsheets/morning-money https://www.politico.com/cdn-cgi/l/email-protection#d3b1a4bbbaa7b693a3bcbfbaa7bab0bcfdb0bcbe +https://www.politico.com/tipsheets/morning-money https://www.politico.com/trade +https://www.politico.com/tipsheets/morning-money https://www.politico.com//_login?base=https%3A%2F%2Fwww.politico.com&redirect=%2F_login&logout=%2F_logout&lRedirect=true&sRedirect=%2Fsettings&js=false +https://www.politico.com/tipsheets/morning-money https://static.politico.com/dims4/default/c73c7f7/2147483647/legacy_thumbnail/57x57/quality/90/?url=https%3A%2F%2Fstatic.politico.com%2Fcf%2F05%2Fee684a274496b04fa20ba2978da1%2Fpolitico.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/favicon-96x96.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/2020-election/results/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/health-care +https://www.politico.com/tipsheets/morning-money https://www.politico.com/podcasts +https://www.politico.com/tipsheets/morning-money https://www.politico.com/safari-pinned-tab.svg +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/playbook-pm +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/politico-nightly +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/sustainability +https://www.politico.com/tipsheets/morning-money https://www.politico.com/energy-and-environment +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/schumer-august-recess-biden-agenda-502167 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/live-events/upcoming +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/rich-lowry +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/cybersecurity +https://www.politico.com/tipsheets/morning-money https://www.politico.com/ehealth +https://www.politico.com/tipsheets/morning-money https://static.politico.com/resource/assets/css/style-core.min.22eb992e27406d79aea752388a5626bf.gz.css +https://www.politico.com/tipsheets/morning-money https://policies.google.com/terms +https://www.politico.com/tipsheets/morning-money https://www.politico.com/android-chrome-192x192.png +https://www.politico.com/tipsheets/morning-money https://www.politicopro.com/act-on-the-news?cid=promkt_20q1_corenews_act_money +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-76x76.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/congress +https://www.politico.com/tipsheets/morning-money https://www.politico.com/news/2021/08/02/trump-gettr-social-media-isis-502078 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/politics +https://www.politico.com/tipsheets/morning-money https://www.instagram.com/politico/ +https://www.politico.com/tipsheets/morning-money https://cd.politicopro.com/member/51503 +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money/2021/07/28/america-back-sliding-796773 +https://www.politico.com/tipsheets/morning-money https://thehill.com/homenews/senate/565958-poll-shows-broad-support-for-bipartisan-infrastructure-bill +https://www.politico.com/tipsheets/morning-money https://www.politico.com/live-events/previous +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/defense +https://www.politico.com/tipsheets/morning-money https://www.politico.com/states/new-york +https://www.politico.com/tipsheets/morning-money https://www.reuters.com/world/us/us-treasury-suspends-government-retirement-health-fund-payments-debt-limit-re-2021-08-02/ +https://www.politico.com/tipsheets/morning-money https://www.politico.com/privacy-policy +https://www.politico.com/tipsheets/morning-money https://www.monmouth.edu/polling-institute/reports/monmouthpoll_us_072921/ +https://www.politico.com/tipsheets/morning-money https://subscriber.politicopro.com/article/2021/07/cryptocurrency-industry-fears-big-tax-hit-in-infrastructure-bill-2073453 +https://www.politico.com/tipsheets/morning-money https://static.politico.com/dims4/default/bd69088/2147483647/legacy_thumbnail/144x144/quality/90/?url=https%3A%2F%2Fstatic.politico.com%2Fcf%2F05%2Fee684a274496b04fa20ba2978da1%2Fpolitico.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/subscriptions +https://www.politico.com/tipsheets/morning-money https://subscriber.politicopro.com/article/2021/08/warren-demands-answers-from-treasury-climate-coordinator-3990428?source=email +https://www.politico.com/tipsheets/morning-money https://www.politico.com/favicon-32x32.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money/archive +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tipsheets/morning-money?tab=most-read +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-72x72.png +https://www.politico.com/tipsheets/morning-money https://www.politico.com/apple-touch-icon-60x60.png +https://www.politico.com/tipsheets/morning-money http://twitter.com/morningmoneyben +https://www.politico.com/tipsheets/morning-money https://www.politico.com/careers +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/education +https://www.politico.com/tipsheets/morning-money https://www.politico.com/tag/pro-canada +https://www.politico.com/tipsheets/morning-money https://www.politico.com/gallery +https://www.politico.com/tipsheets/morning-money https://www.politico.com/newsletters/morning-money +https://www.politico.com/tipsheets/morning-money https://www.politico.com/states/california +https://www.bloomberg.com/markets/economics https://www.bloomberg.com/feedback +https://www.bloomberg.com/markets/economics https://assets.bwbx.io/font-service/css/BWHaasGrotesk-55Roman-Web,BWHaasGrotesk-75Bold-Web,BW%20Haas%20Text%20Mono%20A-55%20Roman/font-face.css +https://www.bloomberg.com/markets/economics https://www.bloomberg.com/notices/tos +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2018/well/guide-mindfulwork.html +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/well/family/well-caregiver-guide.html +https://www.nytimes.com/guides/ https://www.nytimes.com/svc/collections/v1/publish/https://www.nytimes.com/spotlight/guides/rss.xml +https://www.nytimes.com/guides/ https://g1.nyt.com/fonts/css/web-fonts.b1c035e4560e0216caf8f03326e0430712b61041.css +https://www.nytimes.com/guides/ https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility +https://www.nytimes.com/guides/ https://www.nytimes.com/privacy/privacy-policy +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#after-top +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#after-mid1 +https://www.nytimes.com/guides/ https://www.nytimes.com/vi-assets/static-assets/ios-iphone-114x144-080e7ec6514fdc62bcbb7966d9b257d2.png +https://www.nytimes.com/guides/ https://www.nytimes.com/ca/?action=click&region=Footer&pgtype=Homepage +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2018/fashion/how-to-dress-up.html +https://www.nytimes.com/guides/ https://www.nytco.com/ +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#after-sponsor +https://www.nytimes.com/guides/ https://api.whatsapp.com/send?text=Guides%20https%3A%2F%2Fwww.nytimes.com%2Fspotlight%2Fguides%3Fsmid%3Dwa-share +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide-entertainment.html +https://www.nytimes.com/guides/ https://www.nytco.com/careers/ +https://www.nytimes.com/guides/ https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide-food.html +https://www.nytimes.com/guides/ https://www.nytimes.com/section/smarter-living +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2018/realestate/real-estate-decorating-guide.html +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#stream-panel +https://www.nytimes.com/guides/ https://www.nytimes.com/vi-assets/static-assets/ios-default-homescreen-57x57-43808a4cd5333b648057a01624d84960.png +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/climate/cli-timesmachine-promo.html +https://www.nytimes.com/guides/ https://www.nytimes.com/vi-assets/static-assets/global-69acc7c8fb6a313ed7e8641e4a88bf30.css +https://www.nytimes.com/guides/ mailto:?subject=NYTimes.com%3A%20Guides&body=From%20The%20New%20York%20Times%3A%0A%0AGuides%0A%0A%0A%0Ahttps%3A%2F%2Fwww.nytimes.com%2Fspotlight%2Fguides%3Fsmid%3Dem-share +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#site-content +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2018/smarter-living/guide-sugar.html +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide-hard.html +https://www.nytimes.com/guides/ https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice +https://www.nytimes.com/guides/ https://www.nytimes.com/sitemap/ +https://www.nytimes.com/guides/ https://www.facebook.com/dialog/feed?app_id=9869919170&link=https%3A%2F%2Fwww.nytimes.com%2Fspotlight%2Fguides%3Fsmid%3Dfb-share&name=Guides&redirect_uri=https%3A%2F%2Fwww.facebook.com%2F +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#site-index +https://www.nytimes.com/guides/ https://www.nytimes.com/ +https://www.nytimes.com/guides/ https://www.nytimes.com/vi-assets/static-assets/apple-touch-icon-28865b72953380a40aa43318108876cb.png +https://www.nytimes.com/guides/ https://www.nytimes.com/spotlight/guides +https://www.nytimes.com/guides/ https://help.nytimes.com/hc/en-us +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide.html +https://www.nytimes.com/guides/ https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us +https://www.nytimes.com/guides/ https://myaccount.nytimes.com/auth/login?response_type=cookie&client_id=vi +https://www.nytimes.com/guides/ https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/us/womens-issues-course.html +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide-tech.html +https://www.nytimes.com/guides/ https://www.nytimes.com/subscription?campaignId=37WXW +https://www.nytimes.com/guides/ https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#after-mid2 +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide-cooking.html +https://www.nytimes.com/guides/ https://www.nytimes.com/section/todayspaper +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2019/smarter-living/how-to-find-a-hobby-guide.html +https://www.nytimes.com/guides/ https://www.nytimes.com/guides/#after-mktg +https://www.nytimes.com/guides/ https://www.nytimes.com/vi-assets/static-assets/ios-ipad-144x144-28865b72953380a40aa43318108876cb.png +https://www.nytimes.com/guides/ https://www.nytimes.com/vi-assets/static-assets/favicon-d2483f10ef688e6f89e23806b9700298.ico +https://www.nytimes.com/guides/ https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.nytimes.com%2Fspotlight%2Fguides%3Fsmid%3Dtw-share&text=Guides +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2020/guides/2020-gift-guide-home.html +https://www.nytimes.com/guides/ https://nytmediakit.com/ +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2018/guides/how-to-make-the-world-a-better-place.html +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2016/well/move/well-runningforwomen-guide-interactive.html +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2018/well/how-to-use-yoga-to-relax.html +https://www.nytimes.com/guides/ https://www.nytimes.com/interactive/2019/guides/a-guide-to-sleep-apnea.html +https://www.nytimes.com/guides/ https://www.nytimes.com/international/?action=click&region=Footer&pgtype=Homepage +https://www.nytimes.com/guides/ http://www.tbrandstudio.com/ diff --git a/aiohttp_study/polls/aiohttpdemo_polls/db.py b/aiohttp_study/polls/aiohttpdemo_polls/db.py new file mode 100644 index 0000000..fddc0fd --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/db.py @@ -0,0 +1,92 @@ +''' +Start from: +Run Postgres: + docker run --rm -it -p 5432:5432 postgres:10 +or in my case: + docker run --rm -it -p 5432:5432 postgres:12.0-alpine + +Then create DB, role and rights: + +$ psql -U postgres -h localhost +> CREATE DATABASE aiohttpdemo_polls; +> CREATE USER aiohttpdemo_user WITH PASSWORD 'aiohttpdemo_pass'; +> GRANT ALL PRIVILEGES ON DATABASE aiohttpdemo_polls TO aiohttpdemo_user; +''' +from sqlalchemy import ( + MetaData, Table, Column, ForeignKey, + Integer, String, Date +) +import aiopg.sa + +meta = MetaData() + +question = Table( + 'question', meta, + + Column('id', Integer, primary_key=True), + Column('question_text', String(200), nullable=False), + Column('pub_date', Date, nullable=False) +) + +choice = Table( + 'choice', meta, + + Column('id', Integer, primary_key=True), + Column('choice_text', String(200), nullable=False), + Column('votes', Integer, server_default="0", nullable=False), + + Column('question_id', + Integer, + ForeignKey('question.id', ondelete='CASCADE')) +) + +class RecordNotFound(Exception): + """Requested record in database was not found""" + + +async def init_pg(app): + conf = app['config']['postgres'] + engine = await aiopg.sa.create_engine( + database=conf['database'], + user=conf['user'], + password=conf['password'], + host=conf['host'], + port=conf['port'], + minsize=conf['minsize'], + maxsize=conf['maxsize'], + ) + app['db'] = engine + + +async def close_pg(app): + app['db'].close() + await app['db'].wait_closed() + + +async def get_question(conn, question_id): + result = await conn.execute( + question.select() + .where(question.c.id == question_id)) + question_record = await result.first() + if not question_record: + msg = "Question with id: {} does not exists" + raise RecordNotFound(msg.format(question_id)) + result = await conn.execute( + choice.select() + .where(choice.c.question_id == question_id) + .order_by(choice.c.id)) + choice_records = await result.fetchall() + return question_record, choice_records + + +async def vote(conn, question_id, choice_id): + result = await conn.execute( + choice.update() + .returning(*choice.c) + .where(choice.c.question_id == question_id) + .where(choice.c.id == choice_id) + .values(votes=choice.c.votes+1)) + record = await result.fetchone() + if not record: + msg = "Question with id: {} or choice id: {} does not exists" + raise RecordNotFound(msg.format(question_id, choice_id)) \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/init_db.py b/aiohttp_study/polls/aiohttpdemo_polls/init_db.py new file mode 100644 index 0000000..032a080 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/init_db.py @@ -0,0 +1,33 @@ +from sqlalchemy import create_engine, MetaData + +from settings import config +from db import question, choice + + +DSN = "postgresql://{user}:{password}@{host}:{port}/{database}" + +def create_tables(engine): + meta = MetaData() + meta.create_all(bind=engine, tables=[question, choice]) + + +def sample_data(engine): + conn = engine.connect() + conn.execute(question.insert(), [ + {'question_text': 'What\'s new?', + 'pub_date': '2015-12-15 17:17:49.629+02'} + ]) + conn.execute(choice.insert(), [ + {'choice_text': 'Not much', 'votes': 0, 'question_id': 1}, + {'choice_text': 'The sky', 'votes': 0, 'question_id': 1}, + {'choice_text': 'Just hacking again', 'votes': 0, 'question_id': 1}, + ]) + conn.close() + + +if __name__ == '__main__': + db_url = DSN.format(**config['postgres']) + engine = create_engine(db_url) + + create_tables(engine) + sample_data(engine) \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/main.py b/aiohttp_study/polls/aiohttpdemo_polls/main.py new file mode 100644 index 0000000..e23de72 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/main.py @@ -0,0 +1,59 @@ +# aiohttpdemo_polls/main.py +import logging +import sys +from routes import setup_routes +from aiohttp import web +import aiohttp_jinja2 +import jinja2 +from middlewares import setup_middlewares +from settings import get_config, BASE_DIR +from db import init_pg, close_pg + + +# app = web.Application() +# setup_routes(app) +# app['config'] = config +# aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(str(BASE_DIR / +# 'aiohttpdemo_polls' / +# 'templates'))) +# app.on_startup.append(init_pg) +# app.on_cleanup.append(close_pg) +# web.run_app(app) + +async def init_app(argv=None): + + app = web.Application() + + app['config'] = get_config(argv) + + # setup Jinja2 template renderer + # aiohttp_jinja2.setup( + # app, loader=jinja2.PackageLoader('aiohttpdemo_polls', 'templates')) + aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(str(BASE_DIR / + 'aiohttpdemo_polls' / + 'templates'))) + # create db connection on startup, shutdown on exit + app.on_startup.append(init_pg) + app.on_cleanup.append(close_pg) + + # setup views and routes + setup_routes(app) + + setup_middlewares(app) + + return app + + +def main(argv): + logging.basicConfig(level=logging.DEBUG) + + app = init_app(argv) + + config = get_config(argv) + web.run_app(app, + host=config['host'], + port=config['port']) + + +if __name__ == '__main__': + main(sys.argv[1:]) \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/middlewares.py b/aiohttp_study/polls/aiohttpdemo_polls/middlewares.py new file mode 100644 index 0000000..6e338aa --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/middlewares.py @@ -0,0 +1,37 @@ +# middlewares.py +import aiohttp_jinja2 +from aiohttp import web + + +async def handle_404(request): + return aiohttp_jinja2.render_template('404.html', request, {}, status=404) + + +async def handle_500(request): + return aiohttp_jinja2.render_template('500.html', request, {}, status=500) + + +def create_error_middleware(overrides): + + @web.middleware + async def error_middleware(request, handler): + try: + return await handler(request) + except web.HTTPException as ex: + override = overrides.get(ex.status) + if override: + return await override(request) + + raise + except Exception: + return await overrides[500](request) + + return error_middleware + + +def setup_middlewares(app): + error_middleware = create_error_middleware({ + 404: handle_404, + 500: handle_500 + }) + app.middlewares.append(error_middleware) \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/routes.py b/aiohttp_study/polls/aiohttpdemo_polls/routes.py new file mode 100644 index 0000000..4dc25d4 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/routes.py @@ -0,0 +1,20 @@ +# aiohttpdemo_polls/routes.py +import pathlib + +from views import index, poll, results, vote + +PROJECT_ROOT = pathlib.Path(__file__).parent.parent + +def setup_routes(app): + app.router.add_get('/', index) + app.router.add_get('/poll/{question_id}', poll, name='poll') + app.router.add_get('/poll/{question_id}/results', + results, name='results') + app.router.add_post('/poll/{question_id}/vote', vote, name='vote') + setup_static_routes(app) + + +def setup_static_routes(app): + app.router.add_static('/static/', + path=PROJECT_ROOT / 'static', + name='static') \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/settings.py b/aiohttp_study/polls/aiohttpdemo_polls/settings.py new file mode 100644 index 0000000..96ce996 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/settings.py @@ -0,0 +1,35 @@ +# aiohttpdemo_polls/settings.py +import pathlib +import argparse +import yaml +from trafaret_config import commandline +from utils import TRAFARET +# BASE_DIR = pathlib.Path(__file__).parent.parent +# config_path = BASE_DIR / 'config' / 'polls.yaml' + +# def get_config(path): +# with open(path) as f: +# config = yaml.safe_load(f) +# return config + +# config = get_config(config_path) + +BASE_DIR = pathlib.Path(__file__).parent.parent +DEFAULT_CONFIG_PATH = BASE_DIR / 'config' / 'polls.yaml' + + +def get_config(argv=None): + ap = argparse.ArgumentParser() + commandline.standard_argparse_options( + ap, + default_config=DEFAULT_CONFIG_PATH + ) + + # ignore unknown options + options, unknown = ap.parse_known_args(argv) + + config = commandline.config_from_options(options, TRAFARET) + return config + +if __name__ == '__main__': + get_config() \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/templates/400.html b/aiohttp_study/polls/aiohttpdemo_polls/templates/400.html new file mode 100644 index 0000000..e5ecca9 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/templates/400.html @@ -0,0 +1,3 @@ +{% extends "base.html" %} + +{% set title = "Page Not Found" %} \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/templates/500.html b/aiohttp_study/polls/aiohttpdemo_polls/templates/500.html new file mode 100644 index 0000000..59fdefe --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/templates/500.html @@ -0,0 +1,4 @@ + +{% extends "base.html" %} + +{% set title = "Internal Server Error" %} \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/templates/base.html b/aiohttp_study/polls/aiohttpdemo_polls/templates/base.html new file mode 100644 index 0000000..4fd81f1 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/templates/base.html @@ -0,0 +1,17 @@ + + + + {% block head %} + + {{title}} + {% endblock %} + + +

{{title}}

+
{% block content %} {% endblock %}
+ + diff --git a/aiohttp_study/polls/aiohttpdemo_polls/templates/detail.html b/aiohttp_study/polls/aiohttpdemo_polls/templates/detail.html new file mode 100644 index 0000000..8509ee6 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/templates/detail.html @@ -0,0 +1,16 @@ + +{% extends "base.html" %} + +{% set title = question.question_text %} + +{% block content %} +{% if error_message %}

{{ error_message }}

{% endif %} + +
+{% for choice in choices %} + +
+{% endfor %} + +
+{% endblock %} \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/templates/index.html b/aiohttp_study/polls/aiohttpdemo_polls/templates/index.html new file mode 100644 index 0000000..c676d81 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/templates/index.html @@ -0,0 +1,16 @@ + +{% extends "base.html" %} + +{% set title = "Main" %} + +{% block content %} +{% if questions %} + +{% else %} +

No polls are available.

+{% endif %} +{% endblock %} \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/templates/results.html b/aiohttp_study/polls/aiohttpdemo_polls/templates/results.html new file mode 100644 index 0000000..58e1597 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/templates/results.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} + +{% set title = question.question_text %} + +{% block content %} + + +Vote again? +{% endblock %} \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/utils.py b/aiohttp_study/polls/aiohttpdemo_polls/utils.py new file mode 100644 index 0000000..6e0e521 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/utils.py @@ -0,0 +1,18 @@ +# utils.py +import trafaret as T + + +TRAFARET = T.Dict({ + T.Key('postgres'): + T.Dict({ + 'database': T.String(), + 'user': T.String(), + 'password': T.String(), + 'host': T.String(), + 'port': T.Int(), + 'minsize': T.Int(), + 'maxsize': T.Int(), + }), + T.Key('host'): T.IP, + T.Key('port'): T.Int(), +}) \ No newline at end of file diff --git a/aiohttp_study/polls/aiohttpdemo_polls/views.py b/aiohttp_study/polls/aiohttpdemo_polls/views.py new file mode 100644 index 0000000..3cfd7f6 --- /dev/null +++ b/aiohttp_study/polls/aiohttpdemo_polls/views.py @@ -0,0 +1,65 @@ +# aiohttpdemo_polls/views.py +from aiohttp import web +import db + +import aiohttp_jinja2 + +@aiohttp_jinja2.template('index.html') +async def index(request): + async with request.app['db'].acquire() as conn: + cursor = await conn.execute(db.question.select()) + records = await cursor.fetchall() + questions = [dict(q) for q in records] + print(questions) + # return web.Response(text=str(questions)) + return {"questions": questions} + +@aiohttp_jinja2.template('detail.html') +async def poll(request): + print(request) + async with request.app['db'].acquire() as conn: + question_id = request.match_info['question_id'] + try: + question, choices = await db.get_question(conn, + question_id) + except db.RecordNotFound as e: + raise web.HTTPNotFound(text=str(e)) + return { + 'question': question, + 'choices': choices + } + + +@aiohttp_jinja2.template('results.html') +async def results(request): + async with request.app['db'].acquire() as conn: + question_id = request.match_info['question_id'] + + try: + question, choices = await db.get_question(conn, + question_id) + except db.RecordNotFound as e: + raise web.HTTPNotFound(text=str(e)) + + return { + 'question': question, + 'choices': choices + } + + +async def vote(request): + async with request.app['db'].acquire() as conn: + question_id = int(request.match_info['question_id']) + data = await request.post() + try: + choice_id = int(data['choice']) + except (KeyError, TypeError, ValueError) as e: + raise web.HTTPBadRequest( + text='You have not specified choice value') from e + try: + await db.vote(conn, question_id, choice_id) + except db.RecordNotFound as e: + raise web.HTTPNotFound(text=str(e)) + router = request.app.router + url = router['results'].url_for(question_id=str(question_id)) + return web.HTTPFound(location=url) \ No newline at end of file diff --git a/aiohttp_study/polls/config/polls.yaml b/aiohttp_study/polls/config/polls.yaml new file mode 100644 index 0000000..09138e8 --- /dev/null +++ b/aiohttp_study/polls/config/polls.yaml @@ -0,0 +1,12 @@ +# config/polls.yaml +postgres: + database: aiohttpdemo_polls + user: aiohttpdemo_user + password: aiohttpdemo_pass + host: localhost + port: 5432 + minsize: 1 + maxsize: 5 + +host: 127.0.0.1 +port: 8080 \ No newline at end of file diff --git a/aiohttp_study/polls/config/polls_text.yaml b/aiohttp_study/polls/config/polls_text.yaml new file mode 100644 index 0000000..547f033 --- /dev/null +++ b/aiohttp_study/polls/config/polls_text.yaml @@ -0,0 +1,11 @@ +postgres: + database: test_aiohttpdemo_polls + user: test_aiohttpdemo_user + password: aiohttpdemo_pass + host: localhost + port: 5432 + minsize: 1 + maxsize: 5 + +host: 127.0.0.1 +port: 8080 \ No newline at end of file diff --git a/aiohttp_study/requirements.txt b/aiohttp_study/requirements.txt new file mode 100644 index 0000000..c9dfa9b --- /dev/null +++ b/aiohttp_study/requirements.txt @@ -0,0 +1,6 @@ +pyyaml +aiohttp +sqlalchemy +aiopg[sa] +aiohttp-jinja2 +trafaret-config \ No newline at end of file diff --git a/aiohttp_study/server.py b/aiohttp_study/server.py new file mode 100644 index 0000000..cae6662 --- /dev/null +++ b/aiohttp_study/server.py @@ -0,0 +1,13 @@ +from aiohttp import web + +async def handle(request): + name = request.match_info.get('name', "Anonymous") + text = "Hello, " + name + return web.Response(text=text) + +app = web.Application() +app.add_routes([web.get('/', handle), + web.get('/{name}', handle)]) + +if __name__ == '__main__': + web.run_app(app) \ No newline at end of file diff --git a/aiohttp_study/urls.txt b/aiohttp_study/urls.txt new file mode 100644 index 0000000..dccdbe0 --- /dev/null +++ b/aiohttp_study/urls.txt @@ -0,0 +1,8 @@ +https://regex101.com/ +https://docs.python.org/3/this-url-will-404.html +https://www.nytimes.com/guides/ +https://www.mediamatters.org/ +https://1.1.1.1/ +https://www.politico.com/tipsheets/morning-money +https://www.bloomberg.com/markets/economics +https://www.ietf.org/rfc/rfc2616.txt \ No newline at end of file diff --git a/bin_search.py b/bin_search.py new file mode 100644 index 0000000..44d759b --- /dev/null +++ b/bin_search.py @@ -0,0 +1,19 @@ +def binary_search_iterative(array, element): + mid = 0 + start = 0 + end = len(array) + step = 0 + + while (start <= end): + step = step+1 + mid = (start + end) // 2 + + if element == array[mid]: + return mid + + if element < array[mid]: + end = mid - 1 + else: + start = mid + 1 + return -1 + diff --git a/bublesort.py b/bublesort.py new file mode 100644 index 0000000..7b420d0 --- /dev/null +++ b/bublesort.py @@ -0,0 +1,20 @@ +def bubbleSort(arr): + n = len(arr) + + # Traverse through all array elements + for i in range(n-1): + # range(n) also work but outer loop will repeat one time more than needed. + + # Last i elements are already in place + for j in range(0, n-i-1): + + # traverse the array from 0 to n-i-1 + # Swap if the element found is greater + # than the next element + if arr[j] > arr[j + 1] : + arr[j], arr[j + 1] = arr[j + 1], arr[j] + return arr + +if __name__ == '__main__': + result = bubbleSort([64, 34, 25, 12, 22, 11, 1]) + print(result) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..50bf0ec --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + web: + build: + context: . + dockerfile: Dockerfile + command: python3 -m server + stdin_open: true + ports: + - "5000:5000" + volumes: + - .:/code + # links: + depends_on: + - db + + db: + image: "keinos/sqlite3:latest" \ No newline at end of file diff --git a/input.txt b/input.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/input.txt @@ -0,0 +1 @@ + diff --git a/install_util.sh b/install_util.sh new file mode 100755 index 0000000..2901a7a --- /dev/null +++ b/install_util.sh @@ -0,0 +1,26 @@ +#!/bin/bash +GREEN='\033[0;32m' +YELLOW='\033[0;32m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +echo -e "${GREEN}Installing requirements: ${NC}" +python3 -m pip install -r requirements.txt +echo -e "${GREEN}Installing rss_reader: ${NC}" +python3 -m pip install . + +echo -e "${GREEN}Launching rss_reader: ${YELLOW}python3 -m rss_reader -h${NC}" +echo -e "${RED}" +python3 -m rss_reader -h +echo -e "${NC}" + + +#echo -e "${GREEN}Launching docker-compose build: ${NC}" +#docker-compose up --build +# +#echo -e "${GREEN}Docker-compose builing is finished. Server should be started. ${NC}" +# +echo -e "${GREEN}Launching server: ${NC}" +docker build . -t flask:v1 +docker run -p 5000:5000 flask:v1 +echo -e "${GREEN}Server should be started. ${NC}" \ No newline at end of file diff --git a/knight_dialer.py b/knight_dialer.py new file mode 100644 index 0000000..192d348 --- /dev/null +++ b/knight_dialer.py @@ -0,0 +1,73 @@ +MOD = (10**9 + 7) + +class Solution: + def knightDialer(self, n: int) -> int: + if n == 1: return 10 + v = [1 for _ in range(10)] + tmp = [0 for _ in range(10)] + v[5]=0 + for i in range(n-1): + tmp[0] = v[4]+v[6] + tmp[1] = v[8]+v[6] + tmp[2] = v[7]+v[9] + tmp[3] = v[4]+v[8] + tmp[4] = v[0]+v[3]+v[9] + tmp[6] = v[0]+v[1]+v[7] + tmp[7] = v[2]+v[6] + tmp[8] = v[1]+v[3] + tmp[9] = v[4]+v[2] + for j in range(10): + v[j] = tmp[j] + + sm = 0 + for i in range(10): + sm += v[i] + sm %= MOD + return sm + + + + +from typing import List +class Solution2: + transitions = { + 1: [6, 8], + 2: [7, 9], + 3: [4, 8], + 4: [3, 9, 0], + 5: [], + 6: [1, 7, 0], + 7: [2, 6], + 8: [1, 3], + 9: [2, 4], + 0: [4, 6] + } + def step_comb(self, inp: str) -> str: + inp = int(inp[-1]) + allowed_transition = self.transitions[inp] + for i in allowed_transition: + yield str(i) + def knightDialer(self, n: int) -> int: + if n == 0: return 0 + combs: List[str] = [] + for start_number in range(10): + combs.append(str(start_number)) + if n ==1: return 1 + n -= 1 + while n != 0: + new_combs = [] + for i, comb in enumerate(combs): + print(comb) + for extra in self.step_comb(comb): + new_combs.append(comb+extra) + print('- ', comb+extra) + combs = new_combs + n -= 1 + return len(combs) +# c = Solution() +# print(c.knightDialer(4)) + + +if __name__ == '__main__': + knight = Solution2().knightDialer(4) + print(knight) \ No newline at end of file diff --git a/leetcode/add two numbers.py b/leetcode/add two numbers.py new file mode 100644 index 0000000..e1123fe --- /dev/null +++ b/leetcode/add two numbers.py @@ -0,0 +1,54 @@ + +from typing import List + +# Definition for singly-linked list. +class ListNode: + def __init__(self, val=0, next=None): + self.val = val + self.next = next + +class Solution: + def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + + carry = 0 + head = first_head = ListNode() + + while l1 or l2 or carry: + result = 0 + if l1: + result += l1.val + l1 = l1.next + if l2: + result += l2.val + l2 = l2.next + if carry: + result += carry + + carry = result // 10 + val = result % 10 + head.next = ListNode(val) + head = head.next + return first_head.next + + def stringToListNode(self,number_string: List[int]): + previousNode = None + first = None + for i in number_string: + currentNode = ListNode(i) + if first is None: + first = currentNode + if previousNode is not None: + previousNode.next = currentNode + previousNode = currentNode + return first + +if __name__ == '__main__': + s = Solution() + l1 = s.stringToListNode([2,4,3]) + l2 = s.stringToListNode([5,6,4]) + s.addTwoNumbers(l1, l2) \ No newline at end of file diff --git a/leetcode/is_palindrome.py b/leetcode/is_palindrome.py new file mode 100644 index 0000000..7219510 --- /dev/null +++ b/leetcode/is_palindrome.py @@ -0,0 +1,69 @@ +from typing import Tuple, List + + +class Solution: + def longestPalindrome(self, s: str) -> str: + # max_result_length = 0 + # max_result_idx = 0 + # d = {} + # times = 0 + # for idx in range(len(s)): + # if len(s) - idx < max_result_length: + # break + # for count_letters in range(1, len(s) + 1): + # if count_letters < max_result_length: + # continue + # substring_to_check = s[idx:count_letters] + # if substring_to_check not in d: + # is_palindrom, n = self.is_palindrom(substring_to_check) + # times += 1 + # if is_palindrom: + # if n > max_result_length: + # max_result_length = n + # max_result_idx = idx + # d[substring_to_check] = (True, idx, n) + # else: + # d[substring_to_check] = (False, idx, n) + + # # is_palindrom, n = self.is_palindrom(substring_to_check) + # # times += 1 + # # if is_palindrom: + # # if n > max_result_length: + # # max_result_length = n + # # max_result_idx = idx + # # d[substring_to_check] = (True, n) + # output = s[max_result_idx: max_result_length + max_result_idx] + # return output + dp: List[List[bool]] = [[False] * len(s) for _ in range(len(s))] + length: int = 0 + result: str = '' + times = 0 + temp_results = [] + for end in range(len(s)): + for start in range(end+1): + if start == end: + dp[start][end] = True + elif start + 1 == end: + dp[start][end] = s[start] == s[end] + else: + dp[start][end] = s[start] == s[end] and dp[start+1][end-1] + + if dp[start][end] and end-start+1 > length: + times += 1 + length = end-start+1 + result = s[start:end+1] + temp_results.append(result) + + return result + def is_palindrom(self, s: str) -> Tuple[bool, int]: + if s == s[::-1]: + return True, len(s) + else: + return False, 0 + +if __name__ == '__main__': + s = Solution() + # print(s.longestPalindrome("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")) + # print(s.longestPalindrome('forgeeksskeegfor')) + # print(s.longestPalindrome('a')) + print(s.longestPalindrome('twbiqwtafgjbtolwprpdnymaatlbuacrmzzwhkpvuwdtyfjsbsqxrlxxtqkjlpkvpxmlajdmnyepsmczmmfdtjfbyybotpoebilayqzvqztqgddpcgpelwmriwmoeeilpetbxoyktizwcqeeivzgxacuotnlzutdowiudwuqnghjgoeyojikjhlmcsrctvnahnoapmkcrqmwixpbtirkasbyajenknuccojooxfwdeflmxoueasvuovcayisflogtpxtbvcxfmydjupwihnxlpuxxcclbhvutvvshcaikuedhyuksbwwjsnssizoedjkbybwndxpkwcdxaexagazztuiuxphxcedqstahmevkwlayktrubjypzpaiwexkwbxcrqhkpqevhxbyipkmlqmmmogrnexsztsbkvebjgybrolttvnidnntpgvsawgaobycfaaviljsvyuaanguhohsepbthgjyqkicyaxkytshqmtxhilcjxdpcbmvnpippdrpggyohwyswuydyrhczlxyyzregpvxyfwpzvmjuukswcgpenygmnfwdlryobeginxwqjhxtmbpnccwdaylhvtkgjpeyydkxcqarkwvrmwbxeetmhyoudfuuwxcviabkqyhrvxbjmqcqgjjepmalyppymatylhdrazxytixtwwqqqlrcusxyxzymrnryyernrxbgrphsioxrxhmxwzsytmhnosnrpwtphaunprdtbpwapgjjqcnykgspjsxslxztfsuflijbeebwyyowjzpsbjcdabxmxhtweppffglvhfloprfavduzbgkw')) \ No newline at end of file diff --git a/leetcode/stonegame.py b/leetcode/stonegame.py new file mode 100644 index 0000000..02fa98e --- /dev/null +++ b/leetcode/stonegame.py @@ -0,0 +1,58 @@ +''' +Alex and Lee play a game with piles of stones. There are an even number of piles arranged in a row, and each pile has a positive integer number of stones piles[i]. + +The objective of the game is to end with the most stones. The total number of stones is odd, so there are no ties. + +Alex and Lee take turns, with Alex starting first. Each turn, a player takes the entire pile of stones from either the beginning or the end of the row. +This continues until there are no more piles left, at which point the person with the most stones wins. + +Assuming Alex and Lee play optimally, return True if and only if Alex wins the game. +''' + +''' +Input: piles = [5,3,4,5] +Output: true +Explanation: +Alex starts first, and can only take the first 5 or the last 5. +Say he takes the first 5, so that the row becomes [3, 4, 5]. +If Lee takes 3, then the board is [4, 5], and Alex takes 5 to win with 10 points. +If Lee takes the last 5, then the board is [3, 4], and Alex takes 4 to win with 9 points. +This demonstrated that taking the first 5 was a winning move for Alex, so we return true. +''' + +''' DP SOLUTION''' +''' +What if piles.length can be odd? +What if we want to know exactly the diffenerce of score? +Then we need to solve it with DP. + +dp[i][j] means the biggest number of stones you can get more than opponent picking piles in piles[i] ~ piles[j]. +You can first pick piles[i] or piles[j]. + +If you pick piles[i], your result will be piles[i] - dp[i + 1][j] +If you pick piles[j], your result will be piles[j] - dp[i][j - 1] +So we get: +dp[i][j] = max(piles[i] - dp[i + 1][j], piles[j] - dp[i][j - 1]) +We start from smaller subarray and then we use that to calculate bigger subarray. + +Note that take evens or take odds, it's just an easy strategy to win when the number of stones is even. +It's not the best solution! +I didn't find a tricky solution when the number of stones is odd (maybe there is). +''' +from typing import List + +class Solution: + + def stoneGame(self, piles: List[int]) -> bool: + n = len(piles) + dp = [[0] * n for i in range(n)] + for i in range(n): dp[i][i] = piles[i] + for d in range(1, n): + for i in range(n - d): + dp[i][i + d] = max(piles[i] - dp[i + 1][i + d], piles[i + d] - dp[i][i + d - 1]) + return dp[0][-1] > 0 + + +if __name__ == '__main__': + s = Solution() + print(s.stoneGame([5,3,4,5])) \ No newline at end of file diff --git a/leetcode/str_to_int_atoi.py b/leetcode/str_to_int_atoi.py new file mode 100644 index 0000000..8ad8bab --- /dev/null +++ b/leetcode/str_to_int_atoi.py @@ -0,0 +1,53 @@ +class Solution: + def myAtoi(self, s: str) -> int: + result = s.strip() + + sign = '' + + if not result: + return 0 + if result[0] in ['-', '+']: + sign = result[0] + if len(result) > 1 and not str.isdigit(result[1]): + return 0 # '+-12' case + + digit: str = result[1:] + elif not str.isdigit(result[0]): + return 0 + elif str.isdigit(result[0]): + + digit: str = result + + + digits = ''.join(list(filter(lambda s: str.isdigit(s) or s == '.', digit))) + if digits not in digit: + first_alpha = list(filter(lambda s: str.isalpha(s) or s in ['+', ' ', '-'], digit)) + if first_alpha: + first_alpha = first_alpha[0] + + idx = digit.index(first_alpha) + digit = digit[0:idx].strip().split()[0] + else: + digit = digit + # return 0 + else: + digit = digits + try: + output = int(sign + digit) + except ValueError: + try: + output = int(float(sign + digit)) + except ValueError: + return 0 + + if output >= 2 ** 32 // 2: + return 2 ** 32 // 2 -1 + elif output < -2 ** 32 // 2: + return -2 ** 32 // 2 + else: + return output + + +if __name__ == '__main__': + s = Solution() + print(s.myAtoi(" 123 456")) \ No newline at end of file diff --git a/leetcode/two_sums.py b/leetcode/two_sums.py new file mode 100644 index 0000000..3ab9a9c --- /dev/null +++ b/leetcode/two_sums.py @@ -0,0 +1,17 @@ + +from typing import List + +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + + hash_keys = {} + + for idx, num in enumerate(nums): + if target - num in hash_keys: + print(hash_keys[target - num], idx) + else: + hash_keys[num] = idx + +if __name__ == '__main__': + s = Solution() + s.twoSum([3,3], 6) \ No newline at end of file diff --git a/leetcode/zigzag_conversion.py b/leetcode/zigzag_conversion.py new file mode 100644 index 0000000..33592fc --- /dev/null +++ b/leetcode/zigzag_conversion.py @@ -0,0 +1,27 @@ +class Solution: + def convert(self, s: str, numRows: int) -> str: + m = [[''] * len(s) for i in range(numRows)] + global_idx = 0 + column = 0 + while global_idx < len(s): + + for row_idx in range(numRows): + m[row_idx][column] = s[global_idx] + global_idx += 1 + if global_idx >= len(s): + break + if global_idx < len(s): + for rox_idx_up in range(numRows - 2): + column += 1 + m[numRows - rox_idx_up - 2][column] = s[global_idx] + global_idx += 1 + if global_idx >= len(s): + break + column += 1 + + return ''.join([m[r][c] for r in range(len(m)) for c in range(len(m[0]))]) + + +if __name__ == '__main__': + s = Solution() + print(s.convert("PAYPALISHIRING", 3)) \ No newline at end of file diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/modules/legb.py b/modules/legb.py new file mode 100755 index 0000000..9c78b29 --- /dev/null +++ b/modules/legb.py @@ -0,0 +1,13 @@ +a = "I am global variable!" + + +def enclosing_funcion(): + a = "I am variable from enclosed function!" + + def inner_function(): + + a = "I am local variable!" + print(a) + + + diff --git a/modules/mod_a.py b/modules/mod_a.py new file mode 100755 index 0000000..465c1de --- /dev/null +++ b/modules/mod_a.py @@ -0,0 +1,5 @@ +import mod_c +import mod_b + + +print(mod_c.x) diff --git a/modules/mod_b.py b/modules/mod_b.py new file mode 100755 index 0000000..cbc5b30 --- /dev/null +++ b/modules/mod_b.py @@ -0,0 +1,4 @@ +import mod_c + + +mod_c.x = 42 diff --git a/modules/mod_c.py b/modules/mod_c.py new file mode 100755 index 0000000..d453a5e --- /dev/null +++ b/modules/mod_c.py @@ -0,0 +1 @@ +x = 5 diff --git a/orders.csv b/orders.csv new file mode 100644 index 0000000..e24ed92 --- /dev/null +++ b/orders.csv @@ -0,0 +1,9 @@ +order_id,product_id,price,name,quantity,cust_name +1,prod-b-1,195,Chair,1,Alice +2,prod-b-5,1595,Mattress,1,Charlie +2,prod-c-4,90,Pillow,2,Charlie +5,prod-d-10,1900,King Sofa,1,Bob +5,prod-c-4,175,Decorative Pillow,1,Bob +5,prod-d-9,1200,Sofa,1,Bob +5,prod-c-5,90,Pillow,1,Bob +5,prod-m-7,580,Ottoman,1,Bob \ No newline at end of file diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/output.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/pycodestyle.sh b/pycodestyle.sh new file mode 100755 index 0000000..be7adc8 --- /dev/null +++ b/pycodestyle.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +YELLOW='\033[0;33m' +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +echo -e "${YELLOW}Starting static code analys ${NC}" + +# utils/ +python3 -m pycodestyle rss_reader/ --max-line-length=120 +echo -e "${YELLOW}rss_reader/ ${GREEN}PASSED${NC}" + +# rss.py +python3 -m pycodestyle server/ --max-line-length=120 +echo -e "${YELLOW}server/ ${GREEN}PASSED${NC}" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e42b512 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,15 @@ +attrs==19.3.0 +bs4==0.0.1 +colorama==0.4.1 +coloredlogs==10.0 +coverage==4.5.4 +feedparser==5.2.1 +Flask==1.1.1 +Flask-RESTful==0.3.7 +fpdf==1.7.2 +lxml==4.4.1 +nose==1.3.7 +pycodestyle==2.5.0 +python-dateutil==2.8.1 +terminaltables==3.1.0 +wheel==0.33.6 diff --git a/rss_reader/bots/yahoo.py b/rss_reader/bots/yahoo.py new file mode 100755 index 0000000..31ebc0c --- /dev/null +++ b/rss_reader/bots/yahoo.py @@ -0,0 +1,51 @@ +"""Yahoo specified rss parser bot""" +import bs4 + +from colorama import Fore + +from ..utils.rss_interface import BaseRssBot +from ..utils.data_structures import NewsItem + + +class Bot(BaseRssBot): + """Yahoo specified rss parser bot""" + + def _parse_news_item(self, news_item: NewsItem) -> str: + """ + Forms a human readable string from news_item and adds it to the news_item dict + :param news_item: news_item content + :return: human readable news content + """ + + out_str = '' + out_str += f"\n{self.colors.green}Title: {self.colors.cyan} {news_item.title} {Fore.RESET}\n" \ + f"{self.colors.green}Date: {self.colors.cyan}{news_item.published}{Fore.RESET}\n" \ + f"{self.colors.green}Link: {self.colors.blue}{news_item.link}{Fore.RESET}\n" + + html = bs4.BeautifulSoup(news_item.html, "html.parser") + + links = news_item.links + imgs = news_item.imgs + + for tag in html.descendants: + if tag.name == 'a': + pass + elif tag.name == 'img': + src = tag.attrs.get('src') + if src in imgs: + img_idx = imgs.index(src) + len(links) + 1 + else: + imgs.append(src) + img_idx = len(imgs) + len(links) + out_str += f'\n[image {img_idx}: {tag.attrs.get("title")}][{img_idx}]' + elif tag.name == 'p': + out_str += '\n' + tag.text + elif tag.name == 'br': + out_str += '\n' + + # out_str += Color('{autocyan}Links:{/autocyan}\n') + out_str += f'{self.colors.red}Links:{Fore.RESET}\n' + out_str += '\n'.join([f'[{i + 1}]: {link} (link)' for i, link in enumerate(links)]) + '\n' + out_str += '\n'.join([f'[{i + len(links) + 1}]: {link} (image)' for i, link in enumerate(imgs)]) + '\n' + + return out_str diff --git a/server/__init__.py b/server/__init__.py new file mode 100644 index 0000000..0722071 --- /dev/null +++ b/server/__init__.py @@ -0,0 +1 @@ +from . import app \ No newline at end of file diff --git a/server/__main__.py b/server/__main__.py new file mode 100644 index 0000000..6e8b004 --- /dev/null +++ b/server/__main__.py @@ -0,0 +1,2 @@ +from server import app +app.app.run(debug=True, host='0.0.0.0') diff --git a/server/app.py b/server/app.py new file mode 100644 index 0000000..6aa82a5 --- /dev/null +++ b/server/app.py @@ -0,0 +1,69 @@ +import os + +from datetime import datetime +from flask import Flask, render_template, request, send_from_directory, jsonify +from flask_restful import Api +from pathlib import Path +from rss_reader import rss +from rss_reader.utils.data_structures import ConsoleArgs +from rss_reader.bots import default +from rss_reader.utils.rss_utils import get_date + +app = Flask(__name__) +api = Api(app) + + +@app.route('/') +def index(): + return render_template('index.html', now=datetime.now().strftime('%Y-%m-%d')) + + +# +@app.route('/v6.0/news', methods=['GET', 'POST']) +def get_news(): + logger = rss.logger_init() + path_to_html = Path('server/templates/here.html') + path_to_pdf = Path('static/pdf.pdf') + is_pdf = False + is_json = False + date = '' + limit = 5 + + if request.method == 'POST': + + form_data = request.form + url = form_data.get('url') + limit = int(form_data.get('limit')) + is_pdf = form_data.get('is_pdf', False) + is_json = form_data.get('json', False) + date = form_data.get('date') if form_data.get('is_date') else '' + if date: + date = get_date(date).strftime('%Y%m%d') + + else: + url = request.args.get('url', 'https://news.google.com/news/rss') + + args = ConsoleArgs( + url=url, + limit=limit, + to_html=path_to_html, + to_pdf=path_to_pdf if is_pdf else '', + date=date, + ) + try: + bot = default.Bot(args, logger) + bot.store_news() + except Exception as ex: + return str(ex) + if is_pdf: + return send_from_directory(directory=path_to_pdf.parent.absolute().as_posix(), + filename=path_to_pdf.name, + mimetype='application/pdf') + if is_json: + return jsonify(bot.news) + else: + return render_template(path_to_html.name) + + +if __name__ == '__main__': + app.run(debug=True, host='0.0.0.0') diff --git a/server/launch_server.sh b/server/launch_server.sh new file mode 100755 index 0000000..a8bfa47 --- /dev/null +++ b/server/launch_server.sh @@ -0,0 +1,3 @@ +export FLASK_ENV=development +export FLASK_APP=app.py +flask run \ No newline at end of file diff --git a/server/templates/here.html b/server/templates/here.html new file mode 100644 index 0000000..53b57de --- /dev/null +++ b/server/templates/here.html @@ -0,0 +1,24 @@ + + +TUT.BY: Новости ТУТ - Главные новости + +

Title: TUT.BY: Новости ТУТ - Главные новости

+

Link:

https://news.tut.by/

+

+ +
[1]
+

Title: Минское «Динамо» проигрывает в гостях «Барысу» Скабелки. Онлайн матча

Link:

https://sport.tut.by/news/hockey/663377.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-news

Published: Sun, 01 Dec 2019 13:48:00 +0300

+Фото: Дарья Бурякина, TUT.BYМинское «Динамо» проводит сегодня второй матч выездной серии. В Нур-Султане команда сыграет против местного «Барыса».



+
[2]
+

Title: Число погибших при падении автобуса с моста в Забайкалье выросло до 19

Link:

https://news.tut.by/world/663373.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-news

Published: Sun, 01 Dec 2019 11:25:00 +0300

+Пассажирский автобус перевернулся в Забайкальском крае из-за лопнувшего колеса. Об этом ТАСС сообщили в ГИБДД России.



+
[3]
+

Title: МЧС рассказало подробности обрушения в минской новостройке: общая площадь 400 кв. м

Link:

https://news.tut.by/accidents/663368.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-news

Published: Sun, 01 Dec 2019 09:59:00 +0300

+Фото: МЧСВ субботу, около семи вечера, в строящемся доме на проспекте Дзержинского, 19 в Минске обвалились перекрытия. О подробностях ЧП сообщило Минское городское управление МЧС.



+
[4]
+

Title: Премьер здравого смысла. Сергею Румасу - 50

Link:

https://news.tut.by/economics/663352.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-news

Published: Sun, 01 Dec 2019 08:23:00 +0300

+Фото: Сергей Балай, TUT.BY1 декабря исполняется 50 лет премьер-министру Беларуси, завсегдатаю наших топов и самых красивых, и самых умных, теннисисту, охотнику, футбольному болельщику, главе большой и весьма симпатичной семьи Сергею Румасу.



+
[5]
+

Title: Жеребьевка Евро-2020: Франция, Германия и Португалия попали в одну группу

Link:

https://sport.tut.by/news/football/663351.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-news

Published: Sat, 30 Nov 2019 20:59:00 +0300

+Фото: ReutersВ Бухаресте завершилась жеребьевка чемпионата Европы по футболу 2020 года, на который еще имеет шанс отобраться и сборная Беларуси.



+ diff --git a/server/templates/index.html b/server/templates/index.html new file mode 100644 index 0000000..a13f213 --- /dev/null +++ b/server/templates/index.html @@ -0,0 +1,74 @@ + + + + + Title + + + +
+

Welcom to Rss reader utility!

+

Here you can reed news)

+
+ +

Please, choose one of these case of feeds:

+ +

Or use the form to download preferred news:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
urlRss Feed's url
limitCount of news you'd like to reed
Date + + + Date of store news. Check the checkbox, enter the date you want to and enjoy with your favorite news! +
JsonNews will be printed in json format
PdfNews will be printed in pdf format
+
+ + \ No newline at end of file diff --git a/static/dejavu_font/DejaVuSansCondensed.ttf b/static/dejavu_font/DejaVuSansCondensed.ttf new file mode 100644 index 0000000..826e619 Binary files /dev/null and b/static/dejavu_font/DejaVuSansCondensed.ttf differ diff --git a/yandex_stones.py b/yandex_stones.py new file mode 100644 index 0000000..8ce5d6e --- /dev/null +++ b/yandex_stones.py @@ -0,0 +1,19 @@ +def get_input_values(file): + rows = ['', ''] + with open(file, 'r') as file: + lines = file.readlines() + + for idx, line in enumerate(lines): + rows[idx] = '' if not line.strip().split() else line.strip().split()[0] + + return rows + +def main(): + + j, s = get_input_values('input.txt') + jeweleries = set(s).intersection(j) + answer = sum(s.count(jew) for jew in jeweleries) + print(answer) + +if __name__ == '__main__': + main() \ No newline at end of file