-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Switch to pathlib and implement annotations #80
Switch to pathlib and implement annotations #80
Conversation
d80f8ee
to
1fc29e6
Compare
Newline argument was added to write_text in Python 3.10
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai lu en diagonale et pinaillé sur quelques trucs. Par ailleurs il faudrait sans doute ajouter mypy en intégration continue maintenant qu'il y a des annotations de type.
kalamine/cli_xkb.py
Outdated
|
||
if __name__ == "__main__": | ||
cli() | ||
cli() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cette ligne dupliquée est une typo, n'est-ce pas ?
|
||
import click |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Même commentaire que plus haut.
|
||
import click |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Même commentaire que plus haut.
|
||
import click |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je trouve un peu étrange d'importer click dans un fichier qui n'est pas le client en ligne de commande. Je vois que c'est utilisé pour avoir click.echo
. Pourquoi ne pas utiliser le module logging
de la bibliothèque standard Python plutôt ?
elif line.startswith("// LAFAYETTE::"): # obsolete marker | ||
return "lafayette" | ||
return None | ||
def is_new_symbol_mark(line: str) -> Union[str, None]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pourquoi utiliser Union[str, None]
plutôt que Optional[str]
? Par ailleurs je trouve le nom de cette fonction un peu contre-intuitif. Vu le nom j'attendrais bool
comme type de retour.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je confirme, le nom est totalement idiot. Je ne me souviens même plus pourquoi ça s’appelle comme ça.
@@ -351,8 +348,10 @@ def _fill_template(self, template, rows, layer_number): | |||
|
|||
return template | |||
|
|||
def _get_geometry(self, layers=[Layer.BASE]): | |||
def _get_geometry(self, layers: Union[List[Layer], None] = None) -> str: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pourquoi Union[List[Layer], None]
plutôt que Optional[List[Layer]]
?
"""`geometry` view of the requested layers.""" | ||
if layers is None: | ||
layers = [Layer.BASE] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Est-ce vraiment ce qu'on veut ou bien layers = layers or [Layer.BASE]
serait mieux ? La différence principale vient du cas où layers
est []
.
kalamine/cli.py
Outdated
"""Convert TOML/YAML descriptions into OS-specific keyboard drivers.""" | ||
|
||
for input_file in layout_descriptors: | ||
layout = KeyboardLayout(input_file) | ||
|
||
# default: build all in the `dist` subdirectory | ||
if out == "all": | ||
make_all(layout, "dist") | ||
make_all(layout, Path(__file__).parent.parent / "dist") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ce changement a l'air d'aller au-delà de l'utilisation de pathlib et des annotations. Je n'ai pas vérifié ce qu'il fait.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merci du heads-up. En fait on ne veut pas de cette ligne.
C’est bourrin mais par défaut, kalamine génère tous les pilotes dans un sous-répertoire dist
du répertoire courant. Ça mériterait certainement une option (e.g. --output-dir
), mais on ne veut pas générer les fichiers dans le dossier de kalamine.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merci pour le boulot, j’apprends plein de choses ! Le seul point qui m’apparaisse bloquant c’est l’histoire du répertoire de sortie dist
.
Je n’ai pas d’avis pour click
(même si le commentaire de Patrick me parle). Je ne savais même pas qu’il pouvait faire ça.
Si on peut utiliser Optional
j’avoue que ça me parle plus que Union[*, None]
, mais c’est vous les spécialistes.
kalamine/cli.py
Outdated
"""Convert TOML/YAML descriptions into OS-specific keyboard drivers.""" | ||
|
||
for input_file in layout_descriptors: | ||
layout = KeyboardLayout(input_file) | ||
|
||
# default: build all in the `dist` subdirectory | ||
if out == "all": | ||
make_all(layout, "dist") | ||
make_all(layout, Path(__file__).parent.parent / "dist") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merci du heads-up. En fait on ne veut pas de cette ligne.
C’est bourrin mais par défaut, kalamine génère tous les pilotes dans un sous-répertoire dist
du répertoire courant. Ça mériterait certainement une option (e.g. --output-dir
), mais on ne veut pas générer les fichiers dans le dossier de kalamine.
""".format( | ||
layer_name or layout_layer, | ||
"\n".join(getattr(get_layout(layout_name), layout_layer)), | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(Chipotage…)
Là j’avoue que j’avais fait à coups de +=
pare que je n’avais rien trouvé qui fonctionne sans péter l’indentation — ce qui, sur mon environnement de boulot, pète le repliement de code. Il y a peut-être une ruse de dedent
qu’on pourrait utiliser ici ?
finally: | ||
temp_file.close() | ||
temp_file.write(layout.xkb) | ||
os.system(f"xkbcomp -w0 {temp_file.name} $DISPLAY") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J’en conclus donc qu’il n’y a pas besoin de fermer un fichier temporaire ? Le système s’en débarrasse de toute façon ?
kalamine/layout.py
Outdated
return any( | ||
self.layers[layer_index][layer_id] == char | ||
for layer_id in self.layers[layer_index] | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Joli. :-)
Je crois que layer_index
est de type Layer
.
kalamine/layout.py
Outdated
self.dead_keys[dk_id]["base"] = used_base | ||
self.dead_keys[dk_id]["alt"] = used_alt | ||
dk_dict["base"] = used_base | ||
dk_dict["alt"] = used_alt |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bêtement, toute cette boucle for
pète dans le refacto et va donc disparaître. Mais pour ma compréhension : pourquoi le nom unknown_element
? Ici l’idée était de parcourir un tableau de caractères (base
), donc on sait assez précisément ce que l’élément contient, non ?
(Je note le coup du enumerate
, j’adore.)
kalamine/template.py
Outdated
deadkeys[index]["\u0020"] = dk["alt_space"] | ||
deadkeys[index]["\u00a0"] = dk["alt_space"] | ||
deadkeys[index]["\u202f"] = dk["alt_space"] | ||
if index == ODK_ID: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je profite d’avoir des gens expérimentés pour essayer de progresser…
Ici j’ai utilisé id
parce que la clé du dictionnaire est un identifiant de touche morte (e.g. **
, *^
, *'
, etc.) et non un indice. Mais je fais peut-être une erreur de sémantique ?
(Tout ce code étant au cœur du refacto, il va sauter de toute façon.)
elif line.startswith("// LAFAYETTE::"): # obsolete marker | ||
return "lafayette" | ||
return None | ||
def is_new_symbol_mark(line: str) -> Union[str, None]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je confirme, le nom est totalement idiot. Je ne me souviens même plus pourquoi ça s’appelle comme ça.
let’s merge this first and think about it later
kalamine/layout.py
Outdated
@@ -213,7 +209,7 @@ def __init__(self, filepath): | |||
def _parse_dead_keys(self, spc): | |||
"""Build a deadkey dict.""" | |||
|
|||
def layout_has_char(char): | |||
def (char: str) -> bool: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
j’ai bêtement fait sauter le nom de la fonction en rebasant depuis le navigateur… boulet…
fixing a typo I did while rebasing in the web interface
fix a quick typo
str/Path mismatch
fix a rebasing mistake
This PR use pathlib instead of os + os.path.
Some type hint were added to functions.