-
Notifications
You must be signed in to change notification settings - Fork 16
GSoC'24 PSF @ PyAr pyafipws Final Submission Report
- Introduction
- Project Overview
- Objectives
- Implemented Features
- Challenges Faced
- Future Work
- Conclusion
- Acknowledgments
| Role: | Open Source Contributor |
| Duration: | 12 Weeks |
| Project: | pyafipws |
This experience has been a cornerstone in my development as a software engineer, allowing me to:
- 🔍 Dive deep into real-world software development and Testing
- 🤝 Collaborate with experienced developers
- 🛠️ Enhance my problem-solving skills
- 📚 Learn and apply best practices in open-source development
Join me as I unfold the story of my contributions, challenges, and growth throughout this incredible GSoC experience!
PyAfipWs is a comprehensive Python library designed to interact with web services provided by AFIP (Administración Federal de Ingresos Públicos), Argentina's federal tax agency. The project's primary focus is on electronic invoicing and various tax-related operations.
Key aspects of pyafipws include:
- Modules for operating with AFIP web services
- Support for electronic invoicing across different markets (domestic, foreign trade, etc.)
- Integration with other government agencies for traceability and regulatory compliance
- Handling of various data interchange formats (TXT, CSV, DBF, XML, JSON)
- Tools for authentication, invoice authorization, and other critical processes
This library plays a crucial role in helping Argentine businesses comply with tax regulations, streamline their invoicing processes, and interact efficiently with government systems.
As a cornerstone of my GSoC project, I spearheaded the development of an extensive testing framework for PyAfipWs, with a laser focus on the formatos modules. This initiative resulted in six meticulously crafted test suites, dramatically elevating the project's robustness and maintainability.
| Module | Test Suite | Coverage | Key Focus Areas | Pull Request |
|---|---|---|---|---|
| formato_csv.py | test_formato_csv.py | 95% | CSV operations, data integrity | https://github.com/PyAr/pyafipws/pull/151 |
| formato_dbf.py | test_formato_dbf.py | 92% | DBF file handling, data validation | https://github.com/PyAr/pyafipws/pull/155 |
| formato_sql.py | test_formato_sql.py | 88% | SQL query generation, DB interactions | https://github.com/PyAr/pyafipws/pull/156 |
| formato_txt.py | test_formato_txt.py | 97% | Text parsing, data extraction | https://github.com/PyAr/pyafipws/pull/157 |
| formato_xml.py | test_formato_xml.py | 93% | XML validation, data serialization | https://github.com/PyAr/pyafipws/pull/160 |
| formato_json.py | test_formato_json.py | 96% | JSON handling, schema validation | https://github.com/PyAr/pyafipws/pull/162 |
| Module | Commit Hash | Date | Commit Message | Stats |
|---|---|---|---|---|
| test_formato_csv.py | 6b85d45 | May 28, 2024 | csv-testing : leer function | Files changed: 5 +1,579 insertions, −84 deletions |
| 523eb0f | May 29, 2024 | formato_csv : leer tests updated | ||
| f707855 | Jun 10, 2024 | test_formato_csv : draft | ||
| 3ed426d | Jun 16, 2024 | feat : added tests for all functions and fixed failing build | ||
| 1c141f1 | Aug 15, 2024 | removed unittest dependency | ||
| test_formato_dbf.py | 86c9b08 | May 25, 2024 | test_formato_dbf : initial test cases | Files changed: 3 +581 −35 |
| 0f88d79 | May 25, 2024 | test_formato_dbf : initial tests | ||
| 5d39b60 | Jun 24, 2024 | refactor(formato_dbf) : improved dbf handling and added extensive tests | ||
| 355531f | Aug 16, 2024 | ran black and flake8 to follow PEP8 | ||
| test_formato_sql.py | 49379c7 | Jun 13, 2024 | feat : added esquema_sql test cases | Files changed: 2 +1,481 −57 |
| a2229c5 | Jun 16, 2024 | feat: added tests for 'configurar' and 'ejecutar' functions | ||
| 975900f | Jun 18, 2024 | feat : added test cases for max_id, redondear and ecribir functions | ||
| 757db8b | Jun 19, 2024 | feat : tests added for modificar function | ||
| b5292eb | Jun 19, 2024 | feat : tests added for leer function | ||
| a9cf0c6 | Jun 20, 2024 | feat : tests added for ayuda function | ||
| 4087a67 | Aug 16, 2024 | ran black and flake8 to make sure the test suite is PEP8 compliance | ||
| test_formato_txt.py | c84580e | Jun 21, 2024 | feat : Tests added for leer_linea_txt function | Files changed: 1 +857 −0 |
| 352544a | Jun 22, 2024 | feat : Tests added for escribir_linea_txt and leer function | ||
| b42cdb4 | Jun 22, 2024 | feat : Tests added for escribir function | ||
| 546f5c7 | Aug 15, 2024 | ran black and flake8 to follow PEP8 & removed unittest.mock dependency | ||
| test_formato_xml.py | bde2d02 | Jun 12, 2024 | feat : added tests for formato_xml.py module | Files changed: 2 +180 −4 |
| d42229e | Aug 15, 2024 | ran black and falke8 to follow PEP8 & removed unittest dependency | ||
| test_formato_json.py | 399310c | Jun 10, 2024 | test_formato_json.py : draft | Files changed: 2 +170 −6 |
| 87db461 | Jun 11, 2024 | build fail fixed | ||
| 0bae657 | Jul 9, 2024 | tests updated with pytest |
| Description | Issue Link |
|---|---|
| Comprehensive Tracking | https://github.com/PyAr/pyafipws/issues/161 |
This section details the improvements made to existing test suites and the introduction of new ones, as outlined in PR #165.
| Test Module | Original Coverage | New Coverage | Improvement |
|---|---|---|---|
test_pyemail.py |
76% | 89% | +13% |
test_pyi25.py |
82% | 86% | +4% |
test_ws_sr_padron.py |
69% | 80% | +11% |
test_wsaa.py |
66% | 77% | +11% |
test_cot.py |
N/A (New) | 74% | +74% |
test_recex1.py |
N/A (New) | 82% | +82% |
| Module | Test Suite | Coverage | Key Focus Areas | Pull Request |
|---|---|---|---|---|
| pyemail.py | test_pyemail.py | 89% | Email functionality, edge cases | PR #165 |
| pyi25.py | test_pyi25.py | 86% | I25 barcode generation | PR #165 |
| ws_sr_padron.py | test_ws_sr_padron.py | 80% | AFIP taxpayer registry interactions | PR #165 |
| wsaa.py | test_wsaa.py | 77% | Authentication and authorization | PR #165 |
| cot.py | test_cot.py | 74% | COT functionality | PR #165 |
| recex1.py | test_recex1.py | 82% | RECEX document processing | PR #165 |
| Module | Commit Hash | Date | Commit Message | Stats |
|---|---|---|---|---|
| test_pyemail.py | 2da128a | Jul 14, 2024 | test_pyemail.py | Files changed: 8, 1,301 insertions(+), 60 deletions(-) |
| test_pyi25.py | 3748f93 | Jul 14, 2024 | test_pyi25.py | |
| test_ws_sr_padron.py | 363fb2a | Jul 14, 2024 | test_ws_sr_padron.py | |
| test_wsaa.py | 92f3c7b | Jul 14, 2024 | test_wsaa.py | |
| test_cot.py | edcbe3a | Jul 17, 2024 | test_cot.py | |
| test_cot.py | b6da2b6 | Jul 17, 2024 | update test_cot.py | |
| test_recex1.py | 5e94653 | Jul 19, 2024 | test suite for recex1.py |
This section details the improvements made to VBS and COM automation testing using PowerShell, as outlined in PR #168.
| Module | Test Suite | Key Focus Areas | Pull Request |
|---|---|---|---|
| Windows Installer | PowerShell Scripts | Build process, PyI25 COM server | PR #168 |
| PyQR | PowerShell Scripts | COM server integration and testing | PR #168 |
| factura_electronica.vbs | PowerShell Scripts | VBS script functionality testing | PR #168 |
| Commit Hash | Date | Commit Message | Details | Stats |
|---|---|---|---|---|
| 9901a35 | Aug 5, 2024 | feat(windows-installer): update build process and add PyI25 COM server tests | - Update py2exe version to 0.13.0.2 in requirements-dev.txt - Simplify version handling in setup_win.py - Add PowerShell test script for PyI25 COM server automation - Implement Pester testing framework for PyI25 in CI workflow - Add step to list dist folder contents in CI workflow |
Files changed: 10 +338 insertions -42 deletions |
| 9662e78 | Aug 5, 2024 | add PyQR COM server integration and testing | - Add PyQR component registration step in Windows installer workflow - Create register_pyqr.py and register_pyqr.bat for COM server registration - Update pyqr.py to include parent directory in sys.path - Add new test_pyqr.ps1 for testing PyQR functionality |
Files changed: 10 +338 insertions -42 deletions |
| c395eab | Aug 7, 2024 | feat(tests): add PowerShell tests for factura_electronica.vbs and remito_electronico_carico.vbs | - Add test_factura_electronica.ps1 to test AFIP electronic invoicing - Add test_remito_electronico_carnico.ps1 to test meat shipping vouchers - Update test_pyqr.ps1 to remove commented code |
Files changed: 10 +338 insertions -42 deletions |
In addition to the PowerShell tests, an alternative approach using Python wrappers was explored in PR #166. While this method was interesting, it was ultimately not the preferred solution for the project.
- Utilized Python's
ctypeslibrary to interact with COM objects - Attempted to create a more Pythonic testing environment for VBS and COM components
- Provided a different perspective on testing Windows-specific functionality
- Limited compatibility with the existing Windows-centric testing infrastructure
- Potential issues with accurately replicating the COM environment in Python
- Preference for native Windows scripting solutions (PowerShell) for Windows-specific tests
While the Python wrapper approach was intresting, the project ultimately benefited more from the PowerShell-based testing strategy, which aligns better with the Windows ecosystem and provides a more authentic testing environment for VBS and COM components.