[PYTHON] Ich dachte, ich könnte einen netten Gitignore-Editor machen, also habe ich vorerst versucht, so etwas wie MVP zu machen

Ki: Ein kleines Problem mit .gitignore

Der Anfang davon

Eine der häufigsten Aufgaben nach dem "Initial Commit" eines Projekts ist das Erstellen eines netten "Gitignore" aus gitignore.io, oder? [^ 1] [^ 2]

** Gibt es? ** ** **

.Gitignore ändert sich im Laufe der Zeit ...

Es ist kein Problem, wenn es so betrieben werden kann, wie es am Anfang ist.

  1. Oh, ich möchte auch Ignorieren für diese Umgebung hinzufügen
  2. Es scheint, dass ein kleines spezielles Ignorieren erforderlich sein wird

Das kann herauskommen.

** Es wird herauskommen. ** ** **

In Fall (1) müssen Sie möglicherweise erneut zu gitignore.io gehen und es neu generieren.

Im Fall von (2) muss ich es irgendwo in die vorlagengenerierte .gitignore schreiben. In diesem Fall kann es bei jeder Reaktion auf (1) zu Problemen kommen. Vielleicht

Akzeptanz: Grobe Ideen und MVP-ähnlich

Idee

Also dachte ich, ich könnte so etwas wie "einen Editor erstellen, der beim Bearbeiten von" .gitignore "einfach" Sprachname "und" Sprache ignorieren "auf nette Weise schreibt." Ist die Benutzeroberfläche nicht wie Lazygit cool?

こんなの

Wenn Sie dies tun können, ist es praktisch, alle Muster einzugeben, die Sie bei der Ableitung ignorieren möchten.

Derzeit kann ich jedoch keine Editoren in diesem Format erstellen.

Versuchen Sie, so etwas (= MVP?) Ohne Probleme zu machen

Ich habe eine supereinfache Implementierung wie MVP ausprobiert. Hier => vigi = vi gitignore

Wenn Sie den Befehl vigi ausführen,


# ~~~~~~

Öffnen Sie eine solche Datei mit vim und

.idea

# ~~~~~~
python
virtualenv

Wenn Sie so bearbeiten und vim beenden,

.idea

# ~~~~~~

# https://www.gitignore.io/api/python,Inhalt von virtualenv

In einem solchen Zustand wird ein .gitignore erstellt.

Übrigens, wenn Sie den Befehl vigi in diesem Zustand ausführen, ist der Teil gitignore.io nur eine Information für die Sprache. Einfach zu bearbeiten ... denke ich.

Tran: Der Inhalt sieht so aus

Ein Stil, der eine temporäre Datei mit dem Namen ".gi" erstellt, bearbeitet und beim Speichern in ".gitignore" konvertiert.

import subprocess
from pathlib import Path
from subprocess import CalledProcessError, PIPE

def main():
    gi_path = Path.cwd() / '.gi'
    gitignore_path = Path.cwd() / '.gitignore'
    try:
        # Convert from ``.gitignore`` to ``.gi``
        if gitignore_path.exists():
            encode_gitignore(gitignore_path, gi_path)
        else:
            with gi_path.open('w') as fp:
                fp.write(dedent(gi_template).strip())
        # Spawn vim
        vim_args = ['/usr/bin/vim', str(gi_path)]
        vim_proc = subprocess.run(vim_args, check=True)
        # Convert from ``.gi`` to ``.gitignore``
        decode_gitignore(gi_path, gitignore_path)
    except CalledProcessError:
        pass
    finally:
        # Remove ``.gi``
        gi_path.unlink()

Rufen Sie vim an

Ein grober Stil, der "vim" mit "subprocess.run" aufruft und in Ordnung ist, wenn keine "CalledProcessError" -Ausnahmen vorhanden sind. Es ist einfach und gut.

Verlasse .gi nicht

Ich benutze try ~ finally und werfe schließlich die .gi-Datei weg. Wenn ein Fehler auftritt, wird .gitignore nicht bearbeitet, daher ist es umweltfreundlich.

Machen Sie .gitignore basierend auf dem Material

Die .gi-Datei befindet sich zu diesem Zeitpunkt normalerweise im Dateisystem, sodass Sie sie wie eine normale Datei öffnen möchten. Stellen Sie dann die Informationen auf der Sprachseite zusammen und geben Sie sie an gitignore.io weiter. Nur wenn der HTTP-Status 404 ist, wird die Antwort wie gewohnt gespeichert. Dies liegt daran, dass alle Fälle, die "Informationen enthalten, die im Master nicht vorhanden sind", 404 zu sein scheinen. Es ist das einzige, was man als ein wenig Einfallsreichtum bezeichnen kann.

def decode_gitignore(src, dest):
    custom = []
    online = []
    with src.open() as fp:
        # .Öffnen Sie die GI-Datei und trennen Sie die Vorder- und Rückseite der Begrenzung usw.
    if online:
        url = f'https://www.gitignore.io/api/{",".join(online)}'
        req = Request(url, None, headers={'User-Agent': 'vigi'})
        try:
            resp = urlopen(req)
            custom.append(resp.read().decode())
        except HTTPError as err:
            if err.code == 404:
                custom.append(resp.read().decode())
            raise err
    with dest.open('w') as fp:
        fp.write('\n'.join(custom))

Fazit: Benutzerfreundlichkeit

Basierend auf diesem Befehl wurde vorerst der .gitignore im vigi-Projekt erstellt.

Ich halte es für einen Vorteil, dass die Anzahl der zum Zeitpunkt der Bearbeitung angezeigten Zeilen erheblich reduziert wird. In diesem Sinne hat er seine Arbeit als MVP richtig gemacht.

Ich weiß jedoch nicht, welche Art von Muster im Sprachmaster enthalten ist, bis ich die Konvertierung in ".gitignore" abgeschlossen habe. Wenn ich es etwas weiterentwickeln wollte, musste ich den Sprachmeister richtig aus den Musterkandidaten herausziehen. Ich weiß nicht, ob es wirklich gut ist. ~~ Vielleicht ist es für das Training in einer Sprache geeignet? ~~

[^ 1]: Es gibt eine Projektvorlage, aber bitte vergessen Sie sie. [^ 2]: Sie können es mit "Dotfiles" verwalten, aber bitte vergessen Sie dies auch

Recommended Posts

Ich dachte, ich könnte einen netten Gitignore-Editor machen, also habe ich vorerst versucht, so etwas wie MVP zu machen
[Hi Py (Teil 1)] Ich möchte vorerst etwas machen, also setze zuerst ein Ziel.
Ich möchte vorerst eine Docker-Datei erstellen.
Machen Sie vorerst ein Histogramm (matplotlib)
Ich möchte vorerst Selen bewegen [für Mac]
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich möchte etwas Schönes sehen, also habe ich versucht, die Funktion zu visualisieren, die zum Benchmarking der Optimierungsfunktion verwendet wird.
Der Java-Programmierer versuchte (vorerst), die Sprache Go zu berühren.
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Vorerst möchte ich jede Datei mit ffmpeg konvertieren !!
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich habe eine Funktion erstellt, um zu überprüfen, ob der Webhook vorerst in Lambda empfangen wird
Ich habe zum ersten Mal Tensorflow ausprobiert
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ①
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ②
Ich habe eine Web-API erstellt
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
Ich wollte das Suchmodul von Ansible2 verwenden, aber es hat einige Zeit gedauert, machen Sie sich also eine Notiz
Ich habe versucht, das 3D-Modell zu bewegen, indem ich so etwas wie eine Bewegungserfassung mit nur einem Notebook-PC + einer Webkamera durchgeführt habe
Ich möchte gleichzeitig einen Musik-Player erstellen und Musik ablegen
Ich habe Sipeed Lichee Zero gekauft und es vorerst eingerichtet
Ich habe vorerst mit Floydhub gespielt
Ich habe zum ersten Mal versucht, Python zu programmieren.
Ich habe versucht, KI für Smash Bra zu machen
Ich habe Mind Meld zum ersten Mal ausprobiert
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, OneHotEncoder zu erstellen, der häufig für die Datenanalyse verwendet wird, damit er den juckenden Ort erreicht.
Ich werde versuchen, die Links zusammenzufassen, die vorerst nützlich erscheinen
Ich möchte zum ersten Mal eine Django-Studie zur Mittagsdatenbank [EP1] erstellen
Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht
Es ist Katzentag, also habe ich versucht, etwas zu machen, das sich in katzenähnliche Wörter übersetzt.
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Flow Memo, um LOCUST vorerst zu verschieben
Molekulardynamiksimulation vorerst versuchen
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Versuchen Sie vorerst, Arch Linux zu installieren.
Neben Excel jupyter Notebook vorerst
AI Gaming Ich habe es zum ersten Mal versucht
Ich habe versucht, eine Funktion zu erstellen, um zu beurteilen, ob die wichtigsten Aktien der Welt Sommerzeit mit Python sind
"Stoppen Sie das Festschreiben japanischer Dateien für Git auf Mac> <" Vorerst habe ich ein Skript geschrieben, um nach inkompatiblen japanischen Dateien unter Mac und Linux zu suchen.
Ich habe versucht, das Masami-Broadcast-Video wie IPPON Grand Prix (OpenCV: Python-Version) zu machen.
Ich möchte vorerst Ubuntus Desktop-Umgebung auf Android verwenden (UserLAnd-Version)
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
Ich bin gestolpert, als ich versucht habe, Basemap zu installieren, also ein Memorandum
Ich habe die Google Cloud Vision-API zum ersten Mal ausprobiert
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können
Ich habe zum ersten Mal versucht, mit DynamoDB und Step Functions eine serverlose Stapelverarbeitung zu erstellen
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert