# andersonr7/tecemer-lab1 architecture

> Architecture diagram of the GitHub repository andersonr7/tecemer-lab1, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/andersonr7/tecemer-lab1
- Repository: https://github.com/andersonr7/tecemer-lab1

## Overview

This repository is a collection of course exercises rather than one integrated application: a joke-fetching example, a Huancayo weather-data workflow, a file organizer, and a NumPy demonstration. The weather workflow runs from API retrieval through analysis and exported summaries; the organizer classifies and optionally moves files. Relationships reflect the sampled scripts and README. The README documents capabilities not all represented in the sampled source, so those are shown only where their paths and behavior are supported.

Main entry points: [`clima.py`](https://github.com/andersonr7/tecemer-lab1/blob/main/clima.py) (Fetch forecast), [`analisis.py`](https://github.com/andersonr7/tecemer-lab1/blob/main/analisis.py) (Analyze forecast), [`src/tecemer_lab1/app.py`](https://github.com/andersonr7/tecemer-lab1/blob/main/src/tecemer_lab1/app.py) (Joke app), [`organizador.py`](https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py) (Organize folder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_jokes["Joke example"]
  node_joke_app["Joke app<br/>[app.py]"]
  node_joke_api["Joke API"]
end

subgraph group_weather["Weather analysis"]
  node_weather_script["Fetch forecast<br/>[clima.py]"]
  node_open_meteo["Open-Meteo"]
  node_raw_json["Raw forecast"]
  node_raw_csv["Forecast CSV"]
  node_analysis_script["Analyze forecast<br/>[analisis.py]"]
  node_processed_csv["Processed forecast"]
  node_summary_csv["Category summary"]
end

subgraph group_organizer["File organizer"]
  node_organizer_cli["Organizer CLI<br/>[organizador.py]"]
  node_organize_folder["Organize folder<br/>[organizador.py]"]
  node_classify_file["Classify file<br/>[organizador.py]"]
end

subgraph group_numpy["NumPy demo"]
  node_numpy_demo["Array demo<br/>[numpy_demo.py]"]
end

node_user(("User"))
node_console(("Console"))
node_filesystem[("Input folder")]

node_user -->|"runs"| node_joke_app
node_joke_app -->|"requests joke"| node_joke_api
node_joke_app -->|"prints joke"| node_console
node_user -->|"runs"| node_weather_script
node_weather_script -->|"requests forecast"| node_open_meteo
node_weather_script -->|"writes response"| node_raw_json
node_weather_script -->|"writes daily data"| node_raw_csv
node_user -->|"runs"| node_analysis_script
node_analysis_script -->|"reads data"| node_raw_csv
node_analysis_script -->|"writes derived data"| node_processed_csv
node_analysis_script -->|"writes aggregation"| node_summary_csv
node_user -->|"runs with folder"| node_organizer_cli
node_organizer_cli -->|"calls"| node_organize_folder
node_organize_folder -->|"classifies"| node_classify_file
node_organize_folder -->|"reads and moves files"| node_filesystem
node_user -->|"runs"| node_numpy_demo
node_numpy_demo -->|"prints results"| node_console

click node_joke_app "https://github.com/andersonr7/tecemer-lab1/blob/main/src/tecemer_lab1/app.py"
click node_weather_script "https://github.com/andersonr7/tecemer-lab1/blob/main/clima.py"
click node_raw_json "https://github.com/andersonr7/tecemer-lab1/blob/main/pronostico_huancayo.json"
click node_raw_csv "https://github.com/andersonr7/tecemer-lab1/blob/main/pronostico_huancayo.csv"
click node_analysis_script "https://github.com/andersonr7/tecemer-lab1/blob/main/analisis.py"
click node_processed_csv "https://github.com/andersonr7/tecemer-lab1/blob/main/pronostico_huancayo_procesado.csv"
click node_summary_csv "https://github.com/andersonr7/tecemer-lab1/blob/main/resumen_por_categoria.csv"
click node_organizer_cli "https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py"
click node_organize_folder "https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py"
click node_classify_file "https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py"
click node_numpy_demo "https://github.com/andersonr7/tecemer-lab1/blob/main/numpy_demo.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_joke_app,node_joke_api,node_user toneBlue
class node_weather_script,node_open_meteo,node_raw_json,node_raw_csv,node_analysis_script,node_processed_csv,node_summary_csv,node_filesystem toneAmber
class node_organizer_cli,node_organize_folder,node_classify_file toneMint
class node_numpy_demo toneRose
class node_console toneIndigo
```

## Components

### Joke example

- [Joke app](https://github.com/andersonr7/tecemer-lab1/blob/main/src/tecemer_lab1/app.py): `src/tecemer_lab1/app.py`
- **Joke API**

### Weather analysis

- [Fetch forecast](https://github.com/andersonr7/tecemer-lab1/blob/main/clima.py): `clima.py`
- **Open-Meteo**
- [Raw forecast](https://github.com/andersonr7/tecemer-lab1/blob/main/pronostico_huancayo.json): `pronostico_huancayo.json`
- [Forecast CSV](https://github.com/andersonr7/tecemer-lab1/blob/main/pronostico_huancayo.csv): `pronostico_huancayo.csv`
- [Analyze forecast](https://github.com/andersonr7/tecemer-lab1/blob/main/analisis.py): `analisis.py`
- [Processed forecast](https://github.com/andersonr7/tecemer-lab1/blob/main/pronostico_huancayo_procesado.csv): `pronostico_huancayo_procesado.csv`
- [Category summary](https://github.com/andersonr7/tecemer-lab1/blob/main/resumen_por_categoria.csv): `resumen_por_categoria.csv`

### File organizer

- [Organizer CLI](https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py): `organizador.py`
- [Organize folder](https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py): `organizador.py`
- [Classify file](https://github.com/andersonr7/tecemer-lab1/blob/main/organizador.py): `organizador.py`

### NumPy demo

- [Array demo](https://github.com/andersonr7/tecemer-lab1/blob/main/numpy_demo.py): `numpy_demo.py`

### Other components

- **User**
- **Console**
- **Input folder**

## Connections

- User → Joke app: runs
- Joke app → Joke API: requests joke
- Joke app → Console: prints joke
- User → Fetch forecast: runs
- Fetch forecast → Open-Meteo: requests forecast
- Fetch forecast → Raw forecast: writes response
- Fetch forecast → Forecast CSV: writes daily data
- User → Analyze forecast: runs
- Analyze forecast → Forecast CSV: reads data
- Analyze forecast → Processed forecast: writes derived data
- Analyze forecast → Category summary: writes aggregation
- User → Organizer CLI: runs with folder
- Organizer CLI → Organize folder: calls
- Organize folder → Classify file: classifies
- Organize folder → Input folder: reads and moves files
- User → Array demo: runs
- Array demo → Console: prints results
