SCRUM issueshttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues2018-10-11T13:42:30Zhttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/471Refatorar funções de alta complexidade no le-lab2018-10-11T13:42:30ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brRefatorar funções de alta complexidade no le-labO linter apontou algumas funções como sendo de alta complexidade (muitas ramificações e/ou muitos parâmetros).O linter apontou algumas funções como sendo de alta complexidade (muitas ramificações e/ou muitos parâmetros).Testing-freezing-6.1.1-8Davisson Henrique PaulinoDavisson Henrique Paulinohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/470Remover uso de variáveis privadas fora das classes no le-lab2018-04-16T18:35:02ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brRemover uso de variáveis privadas fora das classes no le-labAtualmente variáveis iniciando com _, comumente utilizadas para definir variáveis privadas no python, estão sendo utilizadas fora das classes. Se elas precisam ser utilizadas fora da classe devem ser definidas como públicas. Se necessári...Atualmente variáveis iniciando com _, comumente utilizadas para definir variáveis privadas no python, estão sendo utilizadas fora das classes. Se elas precisam ser utilizadas fora da classe devem ser definidas como públicas. Se necessário, definir getters and setters. Exemplos:
https://www.programiz.com/python-programming/property
https://www.python-course.eu/python3_properties.phpstable-6.1.1-2Rafael S CastilhoRafael S Castilhohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/469Centralizar o nível de log no le-lab2018-08-29T18:12:04ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brCentralizar o nível de log no le-labO le-lab atualemente utiliza diferentes níveis de log "DEBUG", "INFO", "WARNING" em cada um de seus arquivos, dificultando a alteração do mesmo. Essa tarefa visa centralizar em um único local a definição dessa constante.O le-lab atualemente utiliza diferentes níveis de log "DEBUG", "INFO", "WARNING" em cada um de seus arquivos, dificultando a alteração do mesmo. Essa tarefa visa centralizar em um único local a definição dessa constante.stable-6.1.1-7GabrielGabrielhttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/467Criar diagrama de execução para o le-lab2018-12-06T12:38:24ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brCriar diagrama de execução para o le-labDada a complexidade do le-lab, seria útil ter no README alguns diagramas descrevendo o fluxo de mensagens no programa. Ao menos um para o processo de *advertising* de um serviço e outro para a requisição de variáveis remotas.Dada a complexidade do le-lab, seria útil ter no README alguns diagramas descrevendo o fluxo de mensagens no programa. Ao menos um para o processo de *advertising* de um serviço e outro para a requisição de variáveis remotas.v6.2.1-2Guilherme Becker AggeGuilherme Becker Aggehttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/460Melhorar tratamento de erros no le-lab2018-11-09T13:29:10ZDavisson Henrique PaulinoMelhorar tratamento de erros no le-lab* Analisar o código do le-lab verificando possíveis erros, o que eles efetariam e trata-los, caso necessário.
* Algumas funções tratam exception e retornam booleanos, porém não é verificado no nível acima e o status de erro não é propag...* Analisar o código do le-lab verificando possíveis erros, o que eles efetariam e trata-los, caso necessário.
* Algumas funções tratam exception e retornam booleanos, porém não é verificado no nível acima e o status de erro não é propagado
* Me parece uma boa prática não usar booleano em caso de erro, mas sim Exceptions, pois elas se propagam nos diversos níveis da pilha, não precisando cada nível fazer isso
* Um caso onde isso acontece é:
Arquivo: `le-lab`
```python
arguments = parser.parse_args()
if arguments.services:
if services.parse_service_arguments(arguments):
exit(0)
else:
exit(1)
if arguments.create:
if parse_creation_arguments(arguments):
exit()
else:
exit(1)
```
Se você descer na pilha de chamada das funções `services.parse_service_arguments(arguments)` e `parse_creation_arguments(arguments)`, perceberá que os erro não chega no topostable-6.1.1-7Davisson Henrique PaulinoDavisson Henrique Paulinohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/457Estudar possibilidade de setar proxy na rede inteira2018-04-02T13:35:28ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brEstudar possibilidade de setar proxy na rede inteiraAlguns usuários estão pedindo no fórum a possibilidade de configurar um proxy a nível de sistema em todos os computadores da rede. Podemos estudar uma solução para facilitar a vida deles, quem sabe utilizando o le-lab e colocando a confi...Alguns usuários estão pedindo no fórum a possibilidade de configurar um proxy a nível de sistema em todos os computadores da rede. Podemos estudar uma solução para facilitar a vida deles, quem sabe utilizando o le-lab e colocando a configuração no painel de controle.
Uma sugestão de como fazer isso pode ser vista aqui: https://forum.c3sl.ufpr.br/t/como-manter-a-configuracao-de-proxy-para-usuario-aluno/429Davisson Henrique PaulinoDavisson Henrique Paulinohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/456Melhorar controle de exceção no arquivo package/le-lab2018-03-15T12:52:37ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brMelhorar controle de exceção no arquivo package/le-labObservei esse [commit](https://gitlab.c3sl.ufpr.br/le6/le-lab/merge_requests/31/diffs?commit_id=12c19b6f0e8e7a644eda79d3da597e9d92108541) e sugiro uma mudança pra reduzir o número de linhas e melhorar a legibilidade.
Veja no [manual](ht...Observei esse [commit](https://gitlab.c3sl.ufpr.br/le6/le-lab/merge_requests/31/diffs?commit_id=12c19b6f0e8e7a644eda79d3da597e9d92108541) e sugiro uma mudança pra reduzir o número de linhas e melhorar a legibilidade.
Veja no [manual](https://docs.python.org/3/tutorial/errors.html) do python que você pode colocar todos os comandos no `try` e tratar as exceções de forma independente mais abaixo. Ficaria então algo assim:
```python
exit_code = 1
try:
self.close_all_services()
self._dbus.stop()
self._dbus.stop_signal_listener()
except EXCECAO_1:
logging.error("Error while trying to close all services")
except EXCECAO_2:
logging.error("Error while trying to stop dbus")
except EXCECAO_3:
logging.error("Error while trying to stop signal listener")
....
except:
logging.error("Alguma outra exceção maluca ocorreu")
else:
exit_code = 0 # isso é excutado se nenhuma exceção ocorrer
```
Precisar entender um pouco mais sobre as exceções de cada função para saber o que colocar em EXCECAO_X, mas ficaria bem mais elegante.https://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/453O serviço do le-lab e a atualização de pacotes parece estar inconsistente2018-04-25T12:15:19ZDavisson Henrique PaulinoO serviço do le-lab e a atualização de pacotes parece estar inconsistente* Ao fazer dist-upgrade da versão da iso de 2017-12-22 para a próxima estáva dando o seguinte erro:[erro_le_lab.ppm](/uploads/8fa70e0fcbd77c0389607d2d35e4a562/erro_le_lab.ppm)
* Isso acontecia porque quando o le-lab carregava as suas lis...* Ao fazer dist-upgrade da versão da iso de 2017-12-22 para a próxima estáva dando o seguinte erro:[erro_le_lab.ppm](/uploads/8fa70e0fcbd77c0389607d2d35e4a562/erro_le_lab.ppm)
* Isso acontecia porque quando o le-lab carregava as suas listas de serviços o arquivo `disableFamilyShield.dpkg-new` existia, porém em outro momento(provavelmente ao parar o le-lab) ele não existia mais. Ver #451
* Mas quando o pacote le-parental-control é atualizado não acontece conflito em arquivo nenhum. Então o dpkg pode estar gerando o `disableFamilyShield.dpkg-new` apenas de forma temporária e o le-lab está sendo inicializado nesse meio tempostable-6.1.1-3André MachadoAndré Machadohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/452Vários processos gerados ao parar le-lab com erro2018-03-14T15:18:19ZDavisson Henrique PaulinoVários processos gerados ao parar le-lab com erro* Quando acontece algum erro ao parar o le-lab ficam vários processos rodando em parelelo do próprio le-lab e este não funciona como deveria
* Para ver os vários processos: `ps -aux | grep le-lab`
* Quando o le-lab está rodando sozinho, ...* Quando acontece algum erro ao parar o le-lab ficam vários processos rodando em parelelo do próprio le-lab e este não funciona como deveria
* Para ver os vários processos: `ps -aux | grep le-lab`
* Quando o le-lab está rodando sozinho, sem nenhum problema ele cria 2 processos( talvez isso também seja um problema, vale a pena descobrir porque isso acontece)André MachadoAndré Machadohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/451Fazer le-lab não quebrar quando arquivos de serviços forem deletados2018-03-15T12:22:25ZDavisson Henrique PaulinoFazer le-lab não quebrar quando arquivos de serviços forem deletados* Os serviços que usam o le-lab colocam os seus arquivos nos diretórios `/etc/le-lab/services/` e `/etc/le-lab/scripts/`
* Ao inicializar o le-lab ele cria as suas **várias** listas de serviços com base nesses arquivos, se eles não exist...* Os serviços que usam o le-lab colocam os seus arquivos nos diretórios `/etc/le-lab/services/` e `/etc/le-lab/scripts/`
* Ao inicializar o le-lab ele cria as suas **várias** listas de serviços com base nesses arquivos, se eles não existirem mais quando o le-lab para(`systemctl stop le-lab`) o serviço quebra
* Atualmente foi feito um workaround para quando não dar problema com os arquivos `*dpg-*` que são gerados com atualização de pacotesDavisson Henrique PaulinoDavisson Henrique Paulinohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/449Corrigir warnings do lintian no le-lab2018-03-16T13:40:23ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brCorrigir warnings do lintian no le-lab```
W: le-lab source: out-of-date-standards-version 3.9.7 (current is 3.9.8)
W: le-lab: maintainer-script-calls-systemctl postinst:76
W: le-lab: maintainer-script-calls-systemctl postinst:77
W: le-lab: maintainer-script-calls-systemctl p...```
W: le-lab source: out-of-date-standards-version 3.9.7 (current is 3.9.8)
W: le-lab: maintainer-script-calls-systemctl postinst:76
W: le-lab: maintainer-script-calls-systemctl postinst:77
W: le-lab: maintainer-script-calls-systemctl postinst:79
```André MachadoAndré Machadohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/447Assim que inicia uma instalação nova do LE6 habilitar o le-parental-control n...2018-11-26T13:02:32ZDavisson Henrique PaulinoAssim que inicia uma instalação nova do LE6 habilitar o le-parental-control na rede não habilita nas outras máquinas da rede* Reniciar o le-lab nos clientes conserta o erro* Reniciar o le-lab nos clientes conserta o errov6.2.1-3Davisson Henrique PaulinoDavisson Henrique Paulinohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/427Implementar serviço de seleção de servidor no le-lab2018-09-20T14:26:53ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brImplementar serviço de seleção de servidor no le-labOs serviços anunciados através do le-lab provocam a execução de um script nas máquinas clientes que decidem o que fazer com a informação. Atualmente, quando mais do que uma máquina anuncia um mesmo serviço, os clientes escolhem a última ...Os serviços anunciados através do le-lab provocam a execução de um script nas máquinas clientes que decidem o que fazer com a informação. Atualmente, quando mais do que uma máquina anuncia um mesmo serviço, os clientes escolhem a última máquina como servidor (le-epoptes, le-parental-control).
Para implementação do apt-cacher (#291) todas as máquinas são potenciais servidores. Porém, na prática somente uma delas deve ser, então precisamos de algum mecanismo de votação/seleção determinístico para que todas as máquinas escolham o mesmo servidor.
Em resumo: precisamos implementar no le-lab um mecanismo para facilitar a **seleção de servidores** através de algum **critério de seleção**.
O le-lab já possui:
- Uma função para listar quais computadores da rede estão oferecendo um determinado serviço;
- Uma função para consultar o valor de um atributo X em um computador Y;
O que precisa ser implementado:
- Uma função para consultar o valor de um atributo X em todos os computadores;
- Uma função para comparar atributos segundo algum critério;
Exemplo de atributo: timestamp do horário em que a máquina foi ligada.
Exemplo de função de critério: máquina com *timestamp mais antigo* será o servidor.
Com a implementação básica das funções listadas acima os clientes já conseguiriam implementar a seleção de servidor com dois `for`, um para descobrir os servidores e outro os atributos. Os clientes precisariam executar essa função com alguma frequência, visto que os servidores podem cair. Essa pode ser a primeira etapa dessa tarefa. Em um outro momento seria interessante transferir esse código para dentro do le-lab e ele avisaria os clientes quando algo mudou.legtonlegtonhttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/377Revisar warnings na geração dos pacotes.2018-02-07T12:26:07ZAlessandro EliasRevisar warnings na geração dos pacotes.Warnings no build do pacote, warnings comuns:
Zerar todas as warnings.
>>>
E: le-control-panel changes: changed-by-name-missing <rscasfilho@fenrir>
E: le-control-panel changes: changed-by-address-malformed <rscasfilho@fenrir>
W: le-c...Warnings no build do pacote, warnings comuns:
Zerar todas as warnings.
>>>
E: le-control-panel changes: changed-by-name-missing <rscasfilho@fenrir>
E: le-control-panel changes: changed-by-address-malformed <rscasfilho@fenrir>
W: le-control-panel source: maintainer-script-lacks-debhelper-token debian/postinst
W: le-control-panel source: maintainer-script-lacks-debhelper-token debian/prerm
W: le-control-panel source: package-needs-versioned-debhelper-build-depends 10
W: le-control-panel source: extra-whitespace-around-name-in-changelog-trailer
W: le-control-panel source: changelog-should-mention-nmu
W: le-control-panel source: source-nmu-has-incorrect-version-number 0.0.23
W: le-control-panel source: out-of-date-standards-version 3.9.7 (current is 3.9.8)
W: le-control-panel: syntax-error-in-debian-changelog line 109 "found start of entry where expected more change data or trailer"
W: le-control-panel: syntax-error-in-debian-changelog line 115 "found start of entry where expected more change data or trailer"
W: le-control-panel: syntax-error-in-debian-changelog line 121 "found start of entry where expected more change data or trailer"
W: le-control-panel: syntax-error-in-debian-changelog line 127 "found start of entry where expected more change data or trailer"
W: le-control-panel: syntax-error-in-debian-changelog line 133 "found start of entry where expected more change data or trailer"
W: le-control-panel: wrong-bug-number-in-closes l151:#XXXXXX
E: le-control-panel: debian-changelog-file-contains-invalid-email-address rscasfilho@fenrir
E: le-control-panel: debian-changelog-file-contains-invalid-email-address rscasfilho@fenrir
E: le-control-panel: debian-changelog-file-contains-invalid-email-address rscasfilho@fenrir
E: le-control-panel: debian-changelog-file-contains-invalid-email-address rscasfilho@fenrir
E: le-control-panel: debian-changelog-file-contains-invalid-email-address rscasfilho@fenrir
W: le-control-panel: copyright-without-copyright-notice
W: le-control-panel: description-synopsis-starts-with-article
E: le-control-panel: extended-description-is-empty
W: le-control-panel: script-with-language-extension usr/bin/lcpmonitor.sh
W: le-control-panel: zero-byte-file-in-doc-directory usr/share/doc/le-control-panel/copyright
W: le-control-panel: binary-without-manpage usr/bin/lcpmonitor.sh
W: le-control-panel: binary-without-manpage usr/bin/le-control-panel
W: le-control-panel: binary-without-manpage usr/bin/le-control-panel.glade
W: le-control-panel: executable-not-elf-or-script usr/bin/le-control-panel.glade
W: le-control-panel: maintainer-script-ignores-errors postinst
W: le-control-panel: maintainer-script-ignores-errors prerm
>>>
As mensagens acima são somente uma referência, revisar todos os pacotes.https://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/368Ao reinciar serviço do le-lab o socket não consegue ser vinculado(bind)2017-12-22T12:08:01ZDavisson Henrique PaulinoAo reinciar serviço do le-lab o socket não consegue ser vinculado(bind)Davisson Henrique PaulinoDavisson Henrique Paulinohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/291Utilizar o apt-cacher-ng para fazer cache de pacotes debian2018-09-20T14:47:25ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brUtilizar o apt-cacher-ng para fazer cache de pacotes debianCom o intuito de reduzir o consumo de banda no processo de atualização dos computadores, podemos utilizar o apt-cacher-ng. Com ele, ao executar um `apt-get dist-upgrade`, as máquinas vão instruir um servidor a baixar os pacotes e copiá-l...Com o intuito de reduzir o consumo de banda no processo de atualização dos computadores, podemos utilizar o apt-cacher-ng. Com ele, ao executar um `apt-get dist-upgrade`, as máquinas vão instruir um servidor a baixar os pacotes e copiá-los de lá, ao invés de todas fazerem o download de forma independente.
O servidor do apt-cacher-ng deve ser decidido por votação, através do le-lab. As máquinas devem ser capazes de atingir um consenso quanto ao servidor, escolhendo o computador ligado por mais tempo.
A solução dessa tarefa pode implicar em um estudo de economia de banco e ser publicado no EVINCE 2018.Rafael S CastilhoRafael S Castilhohttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/278le-lab: Implementar melhoramentos na interação com a interface le-lab2017-09-26T23:10:58ZLevi Gomesle-lab: Implementar melhoramentos na interação com a interface le-labO le-lab no estado atual requer o uso do dbus para interagir com as suas funções externamente. Para facilitar o uso com a interface e tambem deixá-la mais genérica, será feito uma interface de linha de comando para acessar as funções do ...O le-lab no estado atual requer o uso do dbus para interagir com as suas funções externamente. Para facilitar o uso com a interface e tambem deixá-la mais genérica, será feito uma interface de linha de comando para acessar as funções do le-lab, e tambem uma biblioteca em python que abstrai o acesso às funções do le-lab.
Outro melhoramento a ser feito, é remover a necessidade dos serviços implementando o le-lab adicionarem um arquivo de serviço do avahi. O le-lab pode gerar automaticamente um arquivo de serviço com as configurações padrão usando apenas o nome do serviço.
Lista de tarefas:
* [x] Adicionar biblioteca 'services.py' que implementa uma interface simplificada de acesso às funções do le-lab
* [x] Criar interface via linha de comando pra acessar as funções criadas no 'services.py'
* [x] Alterar o anúncio de serviços para gerar o arquivo de configuração automaticamente
* [x] Atualizar le-epoptes para usar a nova interface
* [x] Atualizar README com as modificações feitasbeta+12Levi GomesLevi Gomeshttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/230Adicionar job no .gitlab-ci.yml dos pacotes para publicar pacotes no repositó...2017-10-11T13:43:05ZDiego Giovane Pasqualindpasqualin@inf.ufpr.brAdicionar job no .gitlab-ci.yml dos pacotes para publicar pacotes no repositório stableSerão dois novos jobs no .gitlab-ci.yml:
- build_for_stable: Esse job será igual ao atual `build`, porém ele deve antes substituir o valor `testing` por `stable` no arquivo `package/debian/changelog` em todas as entradas.
- deploy_to_p...Serão dois novos jobs no .gitlab-ci.yml:
- build_for_stable: Esse job será igual ao atual `build`, porém ele deve antes substituir o valor `testing` por `stable` no arquivo `package/debian/changelog` em todas as entradas.
- deploy_to_production: Esse job extra deve ser manual, ou seja, o administrador do repositório git deve clicar em um botão no gitlab para que ele seja publicado no stable do repositório debian (veja [manual do gitlab-ci](https://gitlab.c3sl.ufpr.br/help/ci/pipelines.md). Ele irá fazer o deploy dos artefatos gerados no `build_for_stable`, rodando o mesmo comando do atual job de nome `deploy` (alterando, portanto, apenas o `dependencies`.
Outras mudanças necessárias:
- Substituir nome do job `build` para `build_for_testing` (lembrar de ajustar campo `dependencies` nos jobs correspondentes).
- Substituir nome do job `deploy` para `deploy_to_testing`.
- Como vai existir repetição de código em `build_for_testing` e `build_for_stable`, considerar a criação de um script na raiz do repositório com o código abaixo (pode ser levemente diferente para cada repositório):
```bash
LINE=$(head -n 1 package/debian/changelog)
PACKAGE=$(echo $LINE | cut -d' ' -f1)
VERSION=$(echo $LINE | cut -d' ' -f2 | grep -o -E '[0-9]*\.[0-9]*\.[0-9]*')
tar --exclude=debian -czf ${PACKAGE}_${VERSION}.orig.tar.gz package/*
cd package
debuild -us -uc
cd ../
mkdir build/
mv ${PACKAGE}* build/
```
Efetuar alterações acima mencionadas em todos os pacotes do LE e marcar abaixo quando pronto:
* [x] le-autoupgrade
* [x] le-all
* [x] le-live-all
* [x] le-interface
* [x] le-user-apps
* [x] le-sys-apps
* [x] le-conf
* [x] le-lab
* [x] le-epoptes
* [x] ubiquity
* [x] le-edubar
* [x] le6-gtk-theme
* [x] le-control-panel
* [x] dash-to-dock
* [x] ubiquity-slideshow-le
Para cada pacote, crie um branch `issue/230` e solicite merge request para o `master`, mencionando essa tarefa no commit (exemplo: `SCRUM#230: add job on .gitlab-ci.yml to deploy package to stable repository`.stableLuan Varaschim WelterLuan Varaschim Welterhttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/220le-lab: Resolver warnings do CI no pacote2017-08-23T16:16:03ZLevi Gomesle-lab: Resolver warnings do CI no pacoteLista de warnings para resolver:
* [x] changelog-should-mention-nmu : Foi porque o changelog de versões antigas foi modificado, provavelmente?
* [x] out-of-date-standards-version : A atual é 3.9.8. Ver se é possível atualizar e se é nec...Lista de warnings para resolver:
* [x] changelog-should-mention-nmu : Foi porque o changelog de versões antigas foi modificado, provavelmente?
* [x] out-of-date-standards-version : A atual é 3.9.8. Ver se é possível atualizar e se é necessário fazer alguma modificação no pacote.
* [x] init.d-script-not-marked-as-conffile etc/init.d/le-lab : Ver se tem como remover o dh_installinit. Ele não causa conflito, de qualquer maneira. Pode ser mais conveniente deixar para compatibilidade.
* [x] binary-without-manpage : Fazer manpage
* [x] bad-distribution-in-changes-file : A gente usa 'testing' como alvo das versões, que não é reconhecido.
* [x] missing-build-dependency-for-dh-addon: A dependência foi removida porque não estava sendo necessária, então fica a dúvida se é sequer necessário usar dh-python no pacote pra ter empacotamento python.beta+9Levi GomesLevi Gomeshttps://gitlab.c3sl.ufpr.br/le6/SCRUM/-/issues/199le-lab : Mover arquivo utils.py para a pasta do python2017-07-24T12:17:24ZLevi Gomesle-lab : Mover arquivo utils.py para a pasta do pythonO arquivo utils.py é uma biblioteca de funções de uso geral pro le-lab e aplicativos que estejam implementando-o. Atualmente, essa biblioteca está na pasta /etc/le-lab e os programas que chamam ela adicionam esse caminho para o sys.
Ser...O arquivo utils.py é uma biblioteca de funções de uso geral pro le-lab e aplicativos que estejam implementando-o. Atualmente, essa biblioteca está na pasta /etc/le-lab e os programas que chamam ela adicionam esse caminho para o sys.
Seria mais prático colocar o arquivo numa pasta de bibliotecas do le-lab na pasta do python, para essas bibliotecas poderem ser importadas diretamente pelo caminho padrão do python.Levi GomesLevi Gomes