Compare commits
22
Commits
v0.5.8
..
5f6ae79bf0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f6ae79bf0
|
||
|
|
697788c20f
|
||
|
|
5c5828cfc1
|
||
|
|
0a88217443
|
||
|
|
2d783778a7
|
||
|
|
a3d4114044
|
||
|
|
cec54a45d7
|
||
|
|
3efa7101e1
|
||
|
|
861ff0650f
|
||
|
|
73f72d1bbe
|
||
|
|
a407a108ed
|
||
|
|
d6277d7766
|
||
|
|
5b1d741a16
|
||
|
|
5957868e0f
|
||
|
|
525d3bf326
|
||
|
|
0e1eb0da3f
|
||
|
|
4b81cc7f9f
|
||
|
|
c4d9236b16
|
||
|
|
2a5883375f
|
||
|
|
c4b6e39e9e
|
||
|
|
d3b5b6b6fd
|
||
|
|
bcde9fccf5
|
No files matched your search
@@ -26,22 +26,11 @@ yamllint . # YAML linting
|
||||
markdownlint . # Markdown linting
|
||||
```
|
||||
|
||||
### Running Tests
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
# No formal test framework configured
|
||||
# Run tests (no specific test framework configured)
|
||||
# Project uses manual testing with example PDF files in repository
|
||||
# To test individual functions, run the CLI commands directly:
|
||||
# myice schedule --days 7
|
||||
# myice mobile-login
|
||||
# myice search --help
|
||||
```
|
||||
|
||||
### Running the Web API
|
||||
|
||||
```bash
|
||||
# Or with poetry
|
||||
poetry run fastapi run myice/webapi.py --host 127.0.0.1
|
||||
```
|
||||
|
||||
## Code Style Guidelines
|
||||
@@ -86,20 +75,3 @@ poetry run fastapi run myice/webapi.py --host 127.0.0.1
|
||||
- requests for HTTP requests
|
||||
- PyPDF2 for PDF processing
|
||||
- Use rich for enhanced console output
|
||||
- Custom rl_ai_tools package for AI functionalities
|
||||
|
||||
### Git Commit Messages
|
||||
|
||||
- Use conventional commits format
|
||||
- Never mention Claude in commit messages
|
||||
- Be descriptive but concise
|
||||
- Use present tense ("add feature" not "added feature")
|
||||
|
||||
### Additional Rules
|
||||
|
||||
- Always use ddg-mcp to perform Web Search functionality
|
||||
- Follow the existing code patterns in myice/myice.py and myice/webapi.py
|
||||
- Maintain backward compatibility when modifying existing APIs
|
||||
- Document new features in README.md
|
||||
- Always run ruff format and ruff check after editing a python file
|
||||
- use conventional commit messages
|
||||
+4
-128
@@ -32,28 +32,16 @@
|
||||
<div class="container mt-2" id="mainContent" style="display: none;">
|
||||
|
||||
<div id="eventFilters" style="display: none;">
|
||||
<div class="mb-3 row">
|
||||
<div class="col-md-3">
|
||||
<div class="mb-3">
|
||||
<label for="account" class="form-label">Compte</label>
|
||||
<select id="account" class="form-select">
|
||||
<option value="default">Défaut</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="agegroup" class="form-label">Âge</label>
|
||||
<select id="agegroup" class="form-select">
|
||||
<option value="">Tous</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="subgroup" class="form-label">Sous-groupe</label>
|
||||
<select id="subgroup" class="form-select">
|
||||
<option value="">Tous</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 d-flex align-items-end">
|
||||
<button id="fetchEvents" class="btn btn-primary">Charger</button>
|
||||
</div>
|
||||
<button id="fetchEvents" class="btn btn-primary" style="margin-top: 1.2rem;">Charger</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -89,7 +77,6 @@
|
||||
const eventFilters = document.getElementById("eventFilters");
|
||||
const accountSelect = document.getElementById("account");
|
||||
const agegroupSelect = document.getElementById("agegroup");
|
||||
const subgroupSelect = document.getElementById("subgroup");
|
||||
const eventList = document.getElementById("eventList");
|
||||
const fetchButton = document.getElementById("fetchEvents");
|
||||
const eventDetailsContent = document.getElementById("eventDetailsContent");
|
||||
@@ -348,12 +335,6 @@
|
||||
});
|
||||
|
||||
agegroupSelect.addEventListener("change", () => {
|
||||
// Update subgroup options based on selected agegroup
|
||||
updateSubgroupOptions(agegroupSelect.value, lastFetchedEvents);
|
||||
displayEvents(lastFetchedEvents);
|
||||
});
|
||||
|
||||
subgroupSelect.addEventListener("change", () => {
|
||||
displayEvents(lastFetchedEvents);
|
||||
});
|
||||
|
||||
@@ -432,61 +413,12 @@
|
||||
option.textContent = group;
|
||||
agegroupSelect.appendChild(option);
|
||||
});
|
||||
|
||||
// Reset subgroup selector
|
||||
subgroupSelect.innerHTML = '<option value="">Tous</option>';
|
||||
}
|
||||
|
||||
function updateSubgroupOptions(selectedAgegroup, events) {
|
||||
// Reset subgroup options
|
||||
subgroupSelect.innerHTML = '<option value="">Tous</option>';
|
||||
|
||||
if (selectedAgegroup === "") {
|
||||
// If no agegroup is selected, disable subgroup selector
|
||||
subgroupSelect.disabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Enable subgroup selector
|
||||
subgroupSelect.disabled = false;
|
||||
|
||||
// Extract subgroups from events matching the selected agegroup
|
||||
let subgroups = new Set();
|
||||
events
|
||||
.filter(event => event.agegroup === selectedAgegroup)
|
||||
.forEach(event => {
|
||||
// Extract subgroup from event.name or event.title
|
||||
// This assumes the subgroup is part of the name field
|
||||
if (event.name && event.name !== selectedAgegroup) {
|
||||
subgroups.add(event.name);
|
||||
}
|
||||
});
|
||||
|
||||
// Add subgroups to the selector
|
||||
Array.from(subgroups).sort().forEach(subgroup => {
|
||||
const option = document.createElement("option");
|
||||
option.value = subgroup;
|
||||
option.textContent = subgroup;
|
||||
subgroupSelect.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
function displayEvents(events) {
|
||||
eventList.innerHTML = "";
|
||||
let selectedAgegroup = agegroupSelect.value;
|
||||
let selectedSubgroup = subgroupSelect.value;
|
||||
let filteredEvents = events.filter(event => {
|
||||
// Filter by event type
|
||||
if (event.event !== "Jeu") return false;
|
||||
|
||||
// Filter by agegroup
|
||||
if (selectedAgegroup !== "" && event.agegroup !== selectedAgegroup) return false;
|
||||
|
||||
// Filter by subgroup
|
||||
if (selectedSubgroup !== "" && event.name !== selectedSubgroup) return false;
|
||||
|
||||
return true;
|
||||
});
|
||||
let filteredEvents = events.filter(event => event.event === "Jeu" && (selectedAgegroup === "" || event.agegroup === selectedAgegroup));
|
||||
|
||||
if (filteredEvents.length === 0) {
|
||||
eventList.innerHTML = "<p class='text-muted'>Aucun événement 'Jeu' trouvé.</p>";
|
||||
@@ -519,9 +451,7 @@
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
// Check if available players data exists
|
||||
const availablePlayers = data.convocation.available || [];
|
||||
const sortedPlayers = availablePlayers
|
||||
const sortedPlayers = data.convocation.available
|
||||
.sort((a, b) => (a.number || 0) - (b.number || 0));
|
||||
|
||||
// Calculate player statistics
|
||||
@@ -553,57 +483,6 @@
|
||||
return numA - numB;
|
||||
});
|
||||
|
||||
// Process staff data
|
||||
const staffList = data.convocation.staff || [];
|
||||
const totalStaff = staffList.length;
|
||||
|
||||
// Check if there are no players
|
||||
if (totalPlayers === 0 && totalStaff === 0) {
|
||||
eventDetailsContent.innerHTML = `
|
||||
<div class="card border-warning">
|
||||
<div class="card-body text-center">
|
||||
<h5 class="card-title">${data.title}</h5>
|
||||
<p class="card-text"><strong>Type:</strong> ${data.type}</p>
|
||||
<p class="card-text"><strong>Lieu:</strong> ${data.place}</p>
|
||||
<p class="card-text"><strong>Heure:</strong> ${data.time_start} - ${data.time_end}</p>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<h6 class="alert-heading">Aucun joueur ni personnel convoqué</h6>
|
||||
<p>Il n'y a actuellement aucun joueur ni personnel convoqué pour ce match.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
} else {
|
||||
let staffHtml = '';
|
||||
if (totalStaff > 0) {
|
||||
staffHtml = `
|
||||
<h6>Personnel (${totalStaff}):</h6>
|
||||
<ul>${staffList.map(staff => {
|
||||
return `<li><strong>${staff.role}:</strong> ${staff.fname} ${staff.lname}</li>`;
|
||||
}).join('')}</ul>
|
||||
`;
|
||||
} else {
|
||||
staffHtml = `
|
||||
<div class="alert alert-info" role="alert">
|
||||
<h6>Aucun personnel convoqué</h6>
|
||||
<p>Il n'y a actuellement aucun personnel convoqué pour ce match.</p>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
if (totalPlayers === 0) {
|
||||
eventDetailsContent.innerHTML = `
|
||||
<h5>${data.title}</h5>
|
||||
<p><strong>Type:</strong> ${data.type}</p>
|
||||
<p><strong>Lieu:</strong> ${data.place}</p>
|
||||
<p><strong>Heure:</strong> ${data.time_start} - ${data.time_end}</p>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<h6 class="alert-heading">Aucun joueur convoqué</h6>
|
||||
<p>Il n'y a actuellement aucun joueur convoqué pour ce match.</p>
|
||||
</div>
|
||||
${staffHtml}
|
||||
`;
|
||||
} else {
|
||||
eventDetailsContent.innerHTML = `
|
||||
<h5>${data.title}</h5>
|
||||
<p><strong>Type:</strong> ${data.type}</p>
|
||||
@@ -616,10 +495,7 @@
|
||||
let position = player.position ? player.position : "N/A";
|
||||
return `<li>[${position}] ${number} - ${player.fname} ${player.lname} (${player.dob})</li>`;
|
||||
}).join('')}</ul>
|
||||
${staffHtml}
|
||||
`;
|
||||
}
|
||||
}
|
||||
new bootstrap.Modal(document.getElementById('eventDetailsModal')).show();
|
||||
})
|
||||
.catch(error => console.error("Erreur lors du chargement des détails de l'événement:", error));
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ from . import myice
|
||||
# OIDC Configuration
|
||||
CLIENT_ID = os.environ.get("CLIENT_ID", "8ea04fbb-4237-4b1d-a895-0b3575a3af3f")
|
||||
CLIENT_SECRET = os.environ.get(
|
||||
"CLIENT_SECRET", "REDACTED_CLIENT_SECRET"
|
||||
"CLIENT_SECRET", "5iXycu7aU6o9e17NNTOUeetQkRkBqQlomoD2hTyLGLTAcwj0dwkkLH3mz1IrZSmJ"
|
||||
)
|
||||
REDIRECT_URI = os.environ.get("REDIRECT_URI", "http://localhost:8000/callback")
|
||||
AUTHORIZATION_ENDPOINT = "https://login.infomaniak.com/authorize"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "myice"
|
||||
version = "v0.5.7"
|
||||
version = "v0.5.5"
|
||||
description = "myice parsing"
|
||||
authors = [
|
||||
{ name = "Rene Luria", "email" = "<rene@luria.ch>"},
|
||||
|
||||
Reference in new issue
Block a user