Maison >développement back-end >Tutoriel Python >Obtenez une meilleure saisie semi-automatique pour Faker lors de l'utilisation de 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.
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!