Maison >développement back-end >Tutoriel Python >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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBoriginal
2024-07-27 14:42:33864parcourir

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 forcément 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() évaluent le moment où 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 faker 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 à taper, vous pouvez toujours l'alias en quelque chose de 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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn