Classe Message
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
La classe Message est utilisée pour définir des messages en vue d'une transmission efficace sur un réseau ou un espace de traitement. Les messages sont définis à l'aide de classes de champs.
La classe Message
est fournie par le module protorpc.messages
.
Présentation
Les messages sont plus restreints que les classes normales dans la mesure où ils ne peuvent contenir que des attributs de champs et autres définitions Message et Enum.
Ces restrictions sont en place, car la structure de la classe Message elle-même est destinée à être transmise sur un réseau ou un espace de traitement et à être utilisée directement par les clients, voire par d'autres serveurs.
Ainsi, les méthodes et attributs non définis dans des champs ne peuvent pas être transmis avec des informations de structure, ce qui crée des écarts entre les différents langages et implémentations.
Initialisation et validation
Un objet Message est considéré comme étant initialisé s'il a tous les champs requis et que les messages imbriqués sont également initialisés.
L'appel de "check_initialized" génère une erreur ValidationError si le message n'est pas initialisé. "is_initialized" renvoie une valeur booléenne indiquant si le message est valide.
Le protocole Google RPC valide automatiquement les objets Message lors de leur création et de leur remplissage.
Votre application peut valider la compatibilité d'une valeur donnée avec un champ auquel elle est attribuée à l'aide de la méthode validate () de l'instance de champ. Lorsqu'elle est utilisée sur un message, cette méthode vérifie que toutes les valeurs d'un message et ses sous-messages sont correctes. L'attribution d'une valeur non valide à un champ génère une erreur ValidationError.
L'exemple suivant crée et initialise des objets Message dans une application fictive conçue pour les opérations de bourse.
from protorpc import messages
# Trade type.
class TradeType(messages.Enum):
BUY = 1
SELL = 2
SHORT = 3
CALL = 4
class Lot(messages.Message):
price = messages.IntegerField(1, required=True)
quantity = messages.IntegerField(2, required=True)
class Order(messages.Message):
symbol = messages.StringField(1, required=True)
total_quantity = messages.IntegerField(2, required=True)
trade_type = messages.EnumField(TradeType, 3, required=True)
lots = messages.MessageField(Lot, 4, repeated=True)
limit = messages.IntegerField(5)
order = Order(symbol='GOOG',
total_quantity=10,
trade_type=TradeType.BUY)
lot1 = Lot(price=304,
quantity=7)
lot2 = Lot(price=305,
quantity=3)
order.lots = [lot1, lot2]
# Now object is initialized!
order.check_initialized()
Constructeur
Le constructeur de la classe Message est défini comme suit :
- class Message(**kwargs)
-
Initialisez l'état des messages internes.
Une application initialise un message via le constructeur en transmettant des arguments de mot clé correspondant aux classes de champs. Exemple :
class Date(Message)
day = IntegerField(1)
month = IntegerField(2)
year = IntegerField(3)
Une fois le champ de classe défini, vous pouvez appeler de manière concise les valeurs de champs. Les deux appels suivants sont équivalents :
date = Date(day=6, month=6, year=1911)
Est équivalent à :
date = Date()
date.day = 6
date.month = 6
date.year = 1911
Méthodes des classes
La classe Message fournit les méthodes de classe suivantes :
- all_fields()
- Récupère tous les objets de définition de champ. Renvoie un itérateur sur toutes les valeurs dans un ordre arbitraire.
- field_by_name(name)
- Récupère les champs par nom. Renvoie un objet Field associé au nom.
- Génère une erreur KeyError si aucun champ portant ce nom n'est trouvé.
- field_by_number(number)
- Récupère un champ par numéro. Renvoie l'objet Field associé à ce numéro.
- Génère une erreur KeyError si aucun champ portant ce numéro n'est trouvé.
Méthodes des instances
Les instances Message utilisent les méthodes suivantes :
- check_initialized()
- Vérifie que tous les champs obligatoires sont initialisés.
- Génère une erreur ValidationError si l'objet Message n'est pas initialisé.
- get_assigned_value(name)
- Récupère la valeur attribuée à un attribut. Si la valeur n'est pas définie, renvoie None.
- Arguments :
- name
- Nom de l'attribut à récupérer.
Renvoie la valeur attribuée à un attribut ou None si l'attribut n'a pas de valeur attribuée.
- is_initialized(name)
- Récupère l'état d'initialisation de l'objet Message. Renvoie
True
si le message est correct, sinon False
.
- reset(name)
- Réinitialise la valeur attribuée à un champ, ce qui rétablit la valeur par défaut ou, en cas d'absence de valeur par défaut, la définit sur "None".
- Arguments :
- name
- Nom du champ à redéfinir.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[[["\u003cp\u003eThe \u003ccode\u003eMessage\u003c/code\u003e class defines structured messages for efficient data transmission across networks or processes, using field attributes, other \u003ccode\u003eMessage\u003c/code\u003e definitions, and \u003ccode\u003eEnum\u003c/code\u003e types.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eMessage\u003c/code\u003e objects must have all required fields populated and nested messages initialized to be considered valid, which can be checked with \u003ccode\u003echeck_initialized\u003c/code\u003e or \u003ccode\u003eis_initialized\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eMessage\u003c/code\u003e objects are validated upon creation and population, and assigning an invalid value will raise a \u003ccode\u003eValidationError\u003c/code\u003e, while the \u003ccode\u003evalidate()\u003c/code\u003e method can check value compatibility with a field.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eMessage\u003c/code\u003e constructor accepts keyword arguments corresponding to field classes, and values can be assigned directly during object creation or afterward, with the constructor supporting both methods.\u003c/p\u003e\n"],["\u003cp\u003eThe Message class offers class methods like \u003ccode\u003eall_fields\u003c/code\u003e, \u003ccode\u003efield_by_name\u003c/code\u003e, \u003ccode\u003efield_by_number\u003c/code\u003e to access field information, and instance methods such as \u003ccode\u003eget_assigned_value\u003c/code\u003e, and \u003ccode\u003ereset\u003c/code\u003e for handling field values.\u003c/p\u003e\n"]]],[],null,["# The Message Class\n\nThe Message class is used to define messages for efficient transmission across network or process space. Messages are defined using [field classes](/appengine/docs/legacy/standard/python/tools/protorpc/messages/fieldclasses).\n\n`Message` is provided by the `protorpc.messages` module.\n\nIntroduction\n------------\n\nMessages are more restricted than normal classes in that they may only contain field attributes and other Message and Enum definitions.\nThese restrictions are in place because the structure of the Message class itself is intended to be transmitted across network or process space and used directly by clients or even other servers.\nAs such, methods and non-field attributes cannot be transmitted with structural information, which causes discrepancies between different languages and implementations.\n\n### Initialization and Validation\n\nA Message object is considered to be initialized if it has all required fields and any nested messages are also initialized.\n\nCalling 'check_initialized' will raise a ValidationError if it is not initialized; 'is_initialized' returns a boolean value indicating if it is valid.\n\nGoogle Protocol RPC validates Message objects automatically when they are created and populated.\nYour application can validate whether a given value is compatible with a field that it is assigned to using the Field instance's [validate()](/appengine/docs/legacy/standard/python/tools/protorpc/messages/fieldclass#validate) method. When used on a message, this method checks that all values of a message and its sub-messages are valid. Assigning an invalid value to a field raises a [ValidationError](/appengine/docs/legacy/standard/python/tools/protorpc/messages/exceptions#ValidationError).\n\nThe following example creates and initializes Message objects in a fictitious stock trading application. \n\n```python\nfrom protorpc import messages\n\n# Trade type.\nclass TradeType(messages.Enum):\n BUY = 1\n SELL = 2\n SHORT = 3\n CALL = 4\n\nclass Lot(messages.Message):\n price = messages.IntegerField(1, required=True)\n quantity = messages.IntegerField(2, required=True)\n\nclass Order(messages.Message):\n symbol = messages.StringField(1, required=True)\n total_quantity = messages.IntegerField(2, required=True)\n trade_type = messages.EnumField(TradeType, 3, required=True)\n lots = messages.MessageField(Lot, 4, repeated=True)\n limit = messages.IntegerField(5)\n\norder = Order(symbol='GOOG',\n total_quantity=10,\n trade_type=TradeType.BUY)\n\nlot1 = Lot(price=304,\n quantity=7)\n\nlot2 = Lot(price=305,\n quantity=3)\n\norder.lots = [lot1, lot2]\n\n# Now object is initialized!\norder.check_initialized()\n```\n\nConstructor\n-----------\n\nThe constructor of the Message class is defined as follows:\n\nclass Message(\\*\\*kwargs)\n\n: Initialize the internal messages state.\n\n An application initializes a message via the constructor by passing in keyword arguments corresponding to [field classes](/appengine/docs/legacy/standard/python/tools/protorpc/messages/fieldclasses). For example: \n\n ```python\n class Date(Message)\n day = IntegerField(1)\n month = IntegerField(2)\n year = IntegerField(3)\n ```\n\n After defining the class field, you can concisely invoke field values. The following two invocations are equivalent: \n\n ```python\n date = Date(day=6, month=6, year=1911)\n ```\n\n Is equivalent to: \n\n ```python\n date = Date()\n date.day = 6\n date.month = 6\n date.year = 1911\n ```\n\nClass Methods\n-------------\n\nThe Message class provides the following class methods:\n\nall_fields()\n: Gets all field definition objects. Returns an iterator over all values in arbitrary order.\n\nfield_by_name(name)\n: Gets fields by name. Returns a Field object associated with the name.\n: Raises a [KeyError](http://wiki.python.org/moin/KeyError) if no field by that name is found.\n\nfield_by_number(number)\n: Gets a field by number. Returns the field object associated with that number.\n: Raises a [KeyError](http://wiki.python.org/moin/KeyError) if no field by that number is found.\n\nInstance Methods\n----------------\n\nMessage instances have the following methods:\n\ncheck_initialized()\n: Checks that all required fields are initialized.\n: Raises a [ValidationError](/appengine/docs/legacy/standard/python/tools/protorpc/messages/exceptions#ValidationError) if the Message object is not initialized.\n\nget_assigned_value(name)\n: Gets the assigned value of an attribute. If the value is unset, returns None.\n: Arguments:\n\n name\n : Name of the attribute to get.\n\n Returns the assigned value of an attribute, or None if the attribute has no assigned value.\n\nis_initialized(name)\n: Gets the initialization status for the Message object. Returns `True` if the message is valid, else `False`.\n\nreset(name)\n: Resets the assigned value for a field, which re-establishes the default value or, if there is no default value, None.\n: Arguments:\n\n name\n : Name of the field to reset."]]