"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Obtenez une meilleure saisie semi-automatique pour Faker lors de l'utilisation de factory_boy

Obtenez une meilleure saisie semi-automatique pour Faker lors de l'utilisation de factory_boy

Publié le 2024-08-07
Parcourir:985

Get better autocomplete for Faker when using factory_boy

Avant que la saisie semi-automatique alimentée par un serveur de langage ne soit omniprésente, peu importe si le code était écrit de manière à faciliter la saisie semi-automatique. Les éditeurs de texte populaires comme Sublime n'étaient pas en mesure de comprendre suffisamment le code pour fournir des suggestions significatives. Les programmeurs ont soit mémorisé les commandes de leurs dépendances, soit référencé la documentation.

En 2024, la saisie semi-automatique est partout, mais nos packages n'ont pas nécessairement facilité son travail. Prenons cet exemple tiré de la documentation de 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),
    )

L'attribut d'arrivée appelle la méthode date_between_dates() de Faker. Malheureusement, factory.Faker() ne vous indique pas quelles méthodes Faker sont disponibles, et elle ne vous dira pas quels paramètres une méthode Faker accepte une fois que vous en avez sélectionné une. Ce code atténue les avantages offerts par les serveurs de langue.

Faker à saisie semi-automatique dans les usines

Vous pouvez obtenir la saisie semi-automatique lors de l'utilisation de Faker avec factory_boy en encapsulant un appel Faker dans factory.LazyFunction() :

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),
    ))

Les fonctions transmises à factory.LazyFunction() sont évaluées lorsque l'usine crée une instance. Nous enveloppons notre faux appel dans un lambda afin de pouvoir lui fournir des arguments. Et votre serveur de langue peut vous montrer quels paramètres fake.date_between_dates() accepte.

Il y a moins de configuration lorsque la fonction de falsification n'a besoin d'aucun argument. Voici comment utiliser factory.LazyFunction() avec les méthodes first_name() et last_name() de Faker :

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)

Le code résultant est un peu plus long qu'il ne le serait si nous avions utilisé factory.Faker(), mais l'assistance du serveur de langue en vaut la peine. Sans cela, je devrais peut-être vérifier constamment la documentation.

Si c'est trop long à saisir, vous pouvez toujours lui donner un alias plus court :

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)
Déclaration de sortie Cet article est reproduit sur : https://dev.to/tylerlwsmith/get-better-autocomplete-for-faker-when-using-factoryboy-kki?1 En cas de violation, veuillez contacter [email protected] pour supprimer il
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3