„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Erhalten Sie eine bessere automatische Vervollständigung für Faker, wenn Sie „factory_boy“ verwenden

Erhalten Sie eine bessere automatische Vervollständigung für Faker, wenn Sie „factory_boy“ verwenden

Veröffentlicht am 07.08.2024
Durchsuche:243

Get better autocomplete for Faker when using factory_boy

Bevor die automatische Vervollständigung durch Sprachserver allgegenwärtig war, spielte es keine Rolle, ob der Code so geschrieben war, dass die automatische Vervollständigung einfach war. Beliebte Texteditoren wie Sublime waren nicht in der Lage, den Code ausreichend zu verstehen, um sinnvolle Vorschläge zu liefern. Programmierer haben entweder die Befehle ihrer Abhängigkeiten auswendig gelernt oder auf die Dokumentation verwiesen.

Im Jahr 2024 ist Autovervollständigung allgegenwärtig, aber unsere Pakete haben es nicht unbedingt einfacher gemacht. Nehmen Sie dieses Beispiel aus der Dokumentation von Factory Boy:

import factory
from datetime import datetime
from .models import User

class UserFactory(factory.Factory):
    class Meta:
        model = User

    arrival = factory.Faker(
        'date_between_dates',
        date_start=datetime.date(2020, 1, 1),
        date_end=datetime.date(2020, 5, 31),
    )

Das Arrival-Attribut ruft die date_between_dates()-Methode von Faker auf. Leider sagt Ihnen „factory.Faker()“ nicht, welche Faker-Methoden verfügbar sind, und es sagt Ihnen nicht, welche Parameter eine Faker-Methode akzeptiert, sobald Sie eine ausgewählt haben. Dieser Code verringert die Vorteile, die Sprachserver bieten.

Autovervollständigungsfälscher in Fabriken

Sie können eine automatische Vervollständigung erhalten, während Sie Faker mit „factory_boy“ verwenden, indem Sie einen Faker-Aufruf in „factory.LazyFunction()“ einbinden:

import factory
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(factory.Factory):
    class Meta:
        model = User

    arrival = factory.LazyFunction(lambda: fake.date_between_dates(
        date_start=datetime.date(2020, 1, 1),
        date_end=datetime.date(2020, 5, 31),
    ))

Funktionen, die an Factory.LazyFunction() übergeben werden, werten aus, wenn die Factory eine Instanz erstellt. Wir verpacken unseren Faker-Aufruf in ein Lambda, damit wir ihm Argumente liefern können. Und Ihr Sprachserver kann Ihnen zeigen, welche Parameter fake.date_between_dates() akzeptiert.

Der Einrichtungsaufwand ist geringer, wenn die Faker-Funktion keine Argumente benötigt. So können Sie „factory.LazyFunction()“ mit den Methoden „first_name()“ und „last_name()“ von Faker verwenden:

import factory
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(factory.Factory):
    class Meta:
        model = User

    first_name = factory.LazyFunction(fake.first_name)
    last_name = factory.LazyFunction(fake.last_name)

Der resultierende Code ist etwas länger, als er wäre, wenn wir „factory.Faker()“ verwendet hätten, aber die Unterstützung durch den Sprachserver ist es mir wert. Ohne sie müsste ich möglicherweise ständig die Dokumentation überprüfen.

Wenn es zu viel zum Tippen ist, können Sie es jederzeit auf etwas Kürzeres umstellen:

from factory import Factory, LazyFunction as LazyFn
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(Factory):
    class Meta:
        model = User

    first_name = LazyFn(fake.first_name)
    last_name = LazyFn(fake.last_name)
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/tylerlwsmith/get-better-autocomplete-for-faker-when-using-factoryboy-kki?1 Bei Verstößen wenden Sie sich zum Löschen bitte an [email protected] Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3