pydoll icon indicating copy to clipboard operation
pydoll copied to clipboard

refactor: implement browser preferences types and validation

Open ArthurRodrigues4433 opened this issue 2 months ago • 3 comments

Pull Request

Description

Esta PR refatora o sistema de preferências do browser (ChromiumOptions) para adicionar tipagem forte, validação e melhor tratamento de erros. As principais mudanças incluem:

  • Criação de TypedDicts para BrowserPreferences, DownloadPreferences e ProfilePreferences, garantindo tipo seguro e autocomplete em IDEs.
  • Introdução de PREFERENCE_SCHEMA para validação de caminhos e tipos de valores.
  • Métodos _validate_pref_path e _validate_pref_value adicionados para checagem rigorosa de caminhos e tipos de preferências.
  • Atualização de getters e setters (browser_preferences, prompt_for_download, password_manager_enabled, open_pdf_externally) para refletirem tipagem correta e retornarem Optional quando apropriado.
  • Melhor tratamento de erros com mensagens descritivas para WrongPrefsDict, InvalidPreferencePath e InvalidPreferenceValue.
  • Adição de testes unitários completos cobrindo validação, merges e acesso seguro às preferências.
  • Pequenas melhorias no temp_dir_manager e no tratamento de argumentos do ChromiumOptions.

Related Issue(s)

https://github.com/autoscrape-labs/pydoll/issues/289

Type of Change

  • [ ] Bug fix (non-breaking change which fixes an issue)
  • [ ] New feature (non-breaking change which adds functionality)
  • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • [ ] Documentation update
  • [x] Refactoring (melhoria interna, tipagem e validação)
  • [ ] Performance improvement
  • [x] Tests (adição e correção de testes unitários)

How Has This Been Tested?

  • Testes unitários cobrindo:
    • Validação de caminhos de preferências válidos e inválidos
    • Validação de tipos de valores corretos e incorretos
    • Merge correto de preferências existentes
    • Acesso seguro a preferências existentes e inexistentes
  • Todos os testes existentes continuam passando.
  • Cobertura de código: 98%
# Exemplo de uso do novo sistema de tipos:
browser_preferences: BrowserPreferences = {
    'download': {
        'default_directory': 'C:/Downloads',
        'prompt_for_download': True
    },
    'profile': {
        'password_manager_enabled': True
    },
    'credentials_enable_service': True
}

Testing Checklist

  • [x] Unit tests added/updated
  • [x] Integration tests added/updated
  • [x] All existing tests pass

Screenshots

Implementation Details

  • Introduzido BrowserPreferences como TypedDict
  • Implementado PREFERENCE_SCHEMA para validação estrutural
  • Adicionados métodos de validação de caminhos e valores
  • Propriedades atualizadas com Optional quando necessário
  • Melhor documentação interna e mensagens de erro claras
  • Correção de comando de formatação no pyproject.toml

API Changes

Não há mudanças na API pública. As alterações são internas e mantêm compatibilidade total com o código existente.

Additional Info

  • O código segue padrões PEP8 e padrões do projeto.
  • Tipagem e validação agora permitem autocompletar e reduzem erros em tempo de execução.
  • Todas as preferências existentes foram mantidas.

Checklist before requesting a review

  • [x] My code follows the style guidelines of this project
  • [x] I have performed a self-review of my code
  • [x] I have commented my code, particularly in hard-to-understand areas
  • [x] I have made corresponding changes to the documentation
  • [x] My changes generate no new warnings
  • [x] I have added tests that prove my fix is effective or that my feature works
  • [x] New and existing unit tests pass locally with my changes
  • [x] I have run poetry run task lint and fixed any issues
  • [x] I have run poetry run task test and all tests pass
  • [x] My commits follow the conventional commits style

ArthurRodrigues4433 avatar Nov 01 '25 17:11 ArthurRodrigues4433

Codecov Report

:white_check_mark: All modified and coverable lines are covered by tests.

:loudspeaker: Thoughts on this report? Let us know!

codecov[bot] avatar Nov 01 '25 17:11 codecov[bot]

Opa, tudo bem? precisa de alguma ajuda com os erros?

thalissonvs avatar Nov 02 '25 01:11 thalissonvs

Sim, Está passando nos testes locais mas sempre falha nos teste aqui do GitHub!

ArthurRodrigues4433 avatar Nov 02 '25 21:11 ArthurRodrigues4433