Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pushing class02 challenge #13

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[flake8]
extend-ignore = E501
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
max-complexity = 10
31 changes: 31 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.4.4
hooks:
- id: autopep8
- repo: local
hooks:
- id: pylint
name: pylint
entry: pylint
language: system
types: [python]
- repo: local
hooks:
- id: unittests
name: run unit tests
entry: python -m unittest
language: system
pass_filenames: false
args: ["discover"]
674 changes: 674 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include requirements.txt README.md LICENSE
Empty file added app/__init__.py
Empty file.
Empty file added app/controllers/__init__.py
Empty file.
72 changes: 72 additions & 0 deletions app/controllers/average_age_by_career.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
""" Average Age By Career Controller file for Dojo_Datastructures
Reto: Identificar la edad promedio por carrera."""
from app.controllers.base_controller import BaseController
from app.models.average_age_by_career import AverageAgeByCareerModel
from app.views.average_age_by_career import AverageAgeByCareerView


class AverageAgeByCareerController(BaseController):
""" Class for Average Age By Career Controller """

def __init__(self, **kwargs) -> None:
"""
Init Average Age By Career Controller requirements
"""
super().__init__(**kwargs)

self.model = AverageAgeByCareerModel(**kwargs)
self.view = AverageAgeByCareerView(**kwargs)

self.model.data = self.data_model
self.data = self.data_model.get_data

def _get_submenu_section_data(self) -> list:
"""
Returns submenu section data
"""
return [self.lang.get("LANG_SELECT_AVERAGE_AGE_CAREERS")]

def _get_submenu_section_message(self) -> str:
"""
Returns submenu option message
"""
return self.lang.get("LANG_SELECT_OPTION")

def _get_submenu_section_path(self, section: str) -> list:
"""
Returns submenu city path
"""
return [self.lang.sprintf("LANG_SELECT_AVERAGE_AGE_CAREERS", section)]

def _get_submenu_formats_path(self, section: str, formats: str) -> list:
"""
Returns submenu formats path
"""
return [self.lang.sprintf("LANG_SELECT_AVERAGE_AGE_CAREERS", section),
self.lang.sprintf("LANG_PATH_FORMAT",
self.lang.translate(formats))]

def _get_submenu_output_path(self, section: str, formats: str, output: str) -> list:
"""
Returns submenu output path
"""
return [self.lang.sprintf("LANG_SELECT_AVERAGE_AGE_CAREERS", section),
self.lang.sprintf("LANG_PATH_FORMAT",
self.lang.translate(formats)),
self.lang.sprintf("LANG_PATH_OUTPUT",
self.lang.translate(output))]

def _get_submenu_path(self, *args) -> list:
"""
Returns submenu path
"""
if len(args) == 1:
return self._get_submenu_section_path(args[0])

if len(args) == 2:
return self._get_submenu_formats_path(args[0], args[1])

if len(args) == 3:
return self._get_submenu_output_path(args[0], args[1], args[2])

return args
147 changes: 147 additions & 0 deletions app/controllers/base_controller.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
""" Students By City Controller file for Dojo_Datastructures """
from app.models.data import DataModel


class BaseController():
""" Class for Base Controller """

def __init__(self, **kwargs) -> None:
"""
Init Base Controller requirements
"""
self.pmvcp_model = kwargs['pmvcp_model']
self.pmvcp_view = kwargs['pmvcp_view']
self.pmvcp_controller = kwargs['pmvcp_controller']
self.lang = kwargs['lang']
self.cfg = kwargs['cfg']
self.about = kwargs['about']
self.menus = kwargs['menus']

self.data_model = DataModel(**kwargs)

def execute(self) -> str:
"""
Excecute Base Controller
"""
self.pmvcp_view.clean_screen()
print(self.pmvcp_view.get_intro())

self._get_submenu()

return False

def _get_submenu(self) -> None:
"""
Returns submenu
"""
section_data = self._get_submenu_section_data()
section = self._get_submenu_section(
section_data, self._get_submenu_section_message())

formats_data = self._get_submenu_formats_data()
formats = self._get_submenu_section(
formats_data, self.lang.get("LANG_SELECT_FORMAT"), True, section)

output_data = self._get_submenu_output_data()
output = self._get_submenu_section(output_data, self.lang.get(
"LANG_SELECT_OUTPUT"), True, section, formats)

print(self.model.make_export(section, formats, output))
print(self.pmvcp_view.input_pause())

def _get_submenu_section(self, section_data: list, message: str, translate=False, *args) -> str:
"""
Returns submenu section
"""
section = self._get_submenu_section_value(
section_data, message, translate)
while section is None:
self.pmvcp_view.clean_screen()
print(self.pmvcp_view.get_intro())
section = self._get_submenu_section_value(
section_data, message, translate)

if section is not None:
break

self.pmvcp_view.clean_screen()
print(self.pmvcp_view.get_intro())

new_args = list(args)
new_args.append(section)
print(self.pmvcp_view.get_path(self._get_submenu_path(*new_args)))

return section

def _get_submenu_section_value(self, section_data: list, message: str, translate=False) -> str:
"""
Returns submenu section value
"""
print(self.view.get_select_section(message))
for index, value in enumerate(section_data, start=0):
if translate:
print(self.view.get_submenu_options(
index, self.lang.translate(value)))
else:
print(self.view.get_submenu_options(index, value))
section_input = self.view.input_option()

check = self._get_submenu_section_check(section_input, section_data)
while check:
if check is True:
return section_data[int(section_input)]
return None

def _get_submenu_section_check(self, section_input, temp_dict) -> bool:
"""
Returns submenu section loop check
"""
return section_input.isnumeric() and int(section_input) >= 0 and int(section_input) < len(temp_dict)

def _get_submenu_section_data(self) -> None:
"""
Returns submenu section data
"""
return None

def _get_submenu_formats_data(self) -> list:
"""
Returns submenu formats data
"""
return ['table', 'dictionary', 'csv', 'json']

def _get_submenu_output_data(self) -> list:
"""
Returns submenu output data
"""
return ['screen', 'file']

def _get_submenu_section_message(self) -> None:
"""
Returns submenu option message
"""
return None

def _get_submenu_section_path(self, section: str) -> None:
"""
Returns submenu section path
"""
return None

def _get_submenu_formats_path(self, section: str, formats: str) -> None:
"""
Returns submenu formats path
"""
return None

def _get_submenu_output_path(self, section: str, formats: str, output: str) -> None:
"""
Returns submenu output path
"""
return None

def _get_submenu_path(self, *args) -> None:
"""
Returns submenu path
"""
return None
76 changes: 76 additions & 0 deletions app/controllers/careers_by_average_age.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
""" Careers By Average Age Controller file for Dojo_Datastructures
Reto: Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad."""
from app.controllers.base_controller import BaseController
from app.models.careers_by_average_age import CareersByAverageAgeModel
from app.views.careers_by_average_age import CareersByAverageAgeView


class CareersByAverageAgeController(BaseController):
""" Class for Careers By Average Age Controller """

def __init__(self, **kwargs) -> None:
"""
Init Careers By Average Age Controller requirements
"""
super().__init__(**kwargs)

self.model = CareersByAverageAgeModel(**kwargs)
self.view = CareersByAverageAgeView(**kwargs)

self.model.data = self.data_model
self.data = self.data_model.get_data

def _get_submenu_section_data(self) -> list:
"""
Returns submenu section data
"""
sections = []

for row in self.data('list_dict'):
if row["carrera"] not in sections: # Removes duplicates
sections.append(row["carrera"])

return sorted(sections)

def _get_submenu_section_message(self) -> str:
"""
Returns submenu option message
"""
return self.lang.get("LANG_SELECT_CAREERS")

def _get_submenu_section_path(self, section: str) -> list:
"""
Returns submenu carrer path
"""
return [self.lang.sprintf("LANG_PATH_CAREER", section)]

def _get_submenu_formats_path(self, section: str, formats: str) -> list:
"""
Returns submenu formats path
"""
return [self.lang.sprintf("LANG_PATH_CAREER", section),
self.lang.sprintf("LANG_PATH_FORMAT", self.lang.translate(formats))]

def _get_submenu_output_path(self, section: str, formats: str, output: str) -> list:
"""
Returns submenu output path
"""
return [self.lang.sprintf("LANG_PATH_CAREER", section),
self.lang.sprintf("LANG_PATH_FORMAT",
self.lang.translate(formats)),
self.lang.sprintf("LANG_PATH_OUTPUT", self.lang.translate(output))]

def _get_submenu_path(self, *args) -> list:
"""
Returns submenu path
"""
if len(args) == 1:
return self._get_submenu_section_path(args[0])

if len(args) == 2:
return self._get_submenu_formats_path(args[0], args[1])

if len(args) == 3:
return self._get_submenu_output_path(args[0], args[1], args[2])

return args
Loading