Download tests/conftest.py from AlessandroAlfieri/progetto_hackathon: direct link, hf CLI and curl.
- Browser
- Download file 4.89 kB
-
https://huggingface.co/spaces/AlessandroAlfieri/progetto_hackathon/resolve/main/tests/conftest.py
- Command line
-
hf download hf://spaces/AlessandroAlfieri/progetto_hackathon/tests/conftest.py
-
curl -L -o conftest.py https://huggingface.co/spaces/AlessandroAlfieri/progetto_hackathon/resolve/main/tests/conftest.py
4.89 kB
| """ | |
| Configurazioni pytest e fixtures condivise. | |
| """ | |
| import pytest | |
| import os | |
| import tempfile | |
| from unittest.mock import Mock, patch | |
| import sys | |
| from pathlib import Path | |
| # Aggiungi src al path per import | |
| sys.path.insert(0, r"Giorno_10\src") | |
| def sample_text(): | |
| """Testo di esempio per test""" | |
| return """ | |
| Gentile Mario Rossi, | |
| La contatto in merito alla fattura n. 12345. | |
| Il suo codice fiscale RSSMRA80A01H501Z risulta corretto. | |
| Per il pagamento può utilizzare: | |
| IBAN: IT60 X054 2811 1010 0000 0123 456 | |
| Email: mario.rossi@example.com | |
| Telefono: +39 333 1234567 | |
| Carta: 4532 1234 5678 9012 | |
| Cordiali saluti, | |
| Ufficio Amministrazione | |
| ACME SpA | |
| """ | |
| def sample_text_no_entities(): | |
| """Testo senza entità sensibili""" | |
| return """ | |
| Questo è un documento di prova | |
| che non contiene informazioni sensibili. | |
| Solo testo normale per i test. | |
| """ | |
| def sample_empty_text(): | |
| """Testo vuoto""" | |
| return "" | |
| def sample_entities(): | |
| """Entità di esempio per test""" | |
| return { | |
| "[PER_0]": "Mario Rossi", | |
| "[CF_0]": "RSSMRA80A01H501Z", | |
| "[IBAN_0]": "IT60 X054 2811 1010 0000 0123 456", | |
| "[EMAIL_0]": "mario.rossi@example.com", | |
| "[PHONE_0]": "+39 333 1234567", | |
| "[CARD_0]": "4532 1234 5678 9012", | |
| "[ORG_0]": "ACME SpA" | |
| } | |
| def mock_azure_config(): | |
| """Mock configurazioni Azure""" | |
| with patch.dict(os.environ, { | |
| 'AZURE_ENDPOINT': 'https://test.openai.azure.com/', | |
| 'AZURE_API_KEY': 'test-api-key', | |
| 'AZURE_ENDPOINT_EMB': 'https://test-emb.openai.azure.com/', | |
| 'AZURE_API_KEY_EMB': 'test-emb-key' | |
| }): | |
| yield | |
| def mock_azure_client(): | |
| """Mock client Azure OpenAI""" | |
| mock_client = Mock() | |
| # Mock response per chat completion | |
| mock_response = Mock() | |
| mock_response.choices = [Mock()] | |
| mock_response.choices[0].message.content = "Test analysis result" | |
| mock_client.chat.completions.create.return_value = mock_response | |
| return mock_client | |
| def mock_ner_pipeline(): | |
| """Mock pipeline NER""" | |
| mock_pipeline = Mock() | |
| # Mock entità rilevate | |
| mock_entities = [ | |
| { | |
| 'entity_group': 'PER', | |
| 'score': 0.9, | |
| 'start': 8, | |
| 'end': 19, | |
| 'word': 'Mario Rossi' | |
| }, | |
| { | |
| 'entity_group': 'ORG', | |
| 'score': 0.8, | |
| 'start': 200, | |
| 'end': 208, | |
| 'word': 'ACME SpA' | |
| } | |
| ] | |
| mock_pipeline.return_value = mock_entities | |
| return mock_pipeline | |
| def temp_test_file(): | |
| """File temporaneo per test""" | |
| with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f: | |
| f.write("Test content for file operations") | |
| temp_path = f.name | |
| yield temp_path | |
| # Cleanup | |
| if os.path.exists(temp_path): | |
| os.unlink(temp_path) | |
| def mock_streamlit(): | |
| """Mock componenti Streamlit per test""" | |
| with patch('streamlit.error') as mock_error, \ | |
| patch('streamlit.warning') as mock_warning, \ | |
| patch('streamlit.success') as mock_success, \ | |
| patch('streamlit.info') as mock_info, \ | |
| patch('streamlit.spinner') as mock_spinner: | |
| # Spinner context manager | |
| mock_spinner.return_value.__enter__ = Mock() | |
| mock_spinner.return_value.__exit__ = Mock(return_value=None) | |
| yield { | |
| 'error': mock_error, | |
| 'warning': mock_warning, | |
| 'success': mock_success, | |
| 'info': mock_info, | |
| 'spinner': mock_spinner | |
| } | |
| def sample_anonymized_docs(): | |
| """Documenti anonimizzati di esempio""" | |
| return { | |
| 'document1.txt': { | |
| 'original': 'Documento con Mario Rossi e mario@email.com', | |
| 'anonymized': 'Documento con [PER_0] e [EMAIL_0]', | |
| 'entities': { | |
| '[PER_0]': 'Mario Rossi', | |
| '[EMAIL_0]': 'mario@email.com' | |
| }, | |
| 'confirmed': True | |
| }, | |
| 'document2.txt': { | |
| 'original': 'Altro documento con ACME SpA', | |
| 'anonymized': 'Altro documento con [ORG_0]', | |
| 'entities': { | |
| '[ORG_0]': 'ACME SpA' | |
| }, | |
| 'confirmed': False | |
| } | |
| } | |
| # Configurazioni pytest | |
| def pytest_configure(config): | |
| """Configurazione pytest""" | |
| config.addinivalue_line( | |
| "markers", "slow: marks tests as slow (deselect with '-m \"not slow\"')" | |
| ) | |
| config.addinivalue_line( | |
| "markers", "integration: marks tests as integration tests" | |
| ) | |
| config.addinivalue_line( | |
| "markers", "azure: marks tests that require Azure credentials" | |
| ) |