danielgtaylor / danielgtaylor/python-betterproto
Dictionary representation improvement?
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 1.8k
- Forks
- 234
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
Is there a better way to represent this dictionary into a Struct()? (Currently using 2.0.0b3)
capability_dict = {"@context": "https://w3id.org/security/v2",
"target": "urn:trinsic:wallets:noop",
"proof": {
"created": datetime.datetime.now()
}
}
The following does work, but seems pretty kludgy:
proof = Struct()
proof.fields["created"] = Value(string_value=str(datetime.datetime.now()))
capability = Struct()
capability.fields["@context"] = Value(string_value="https://w3id.org/security/v2")
capability.fields["target"] = Value(string_value="urn:trinsic:wallets:noop")
capability.fields["proof"] = Value(struct_value=proof)
- It seems to me that we could/should at least have a
Struct.from_dictionary(obj: dict)method. I'd be happy to write this if it doesn't exist. Struct.from_dict()does NOT work for this, tested.
Example code of what I'm thinking:
def value_to_proto_value(obj: Any) -> Value:
value = Value()
if isinstance(obj, str) or isinstance(obj, datetime.datetime):
value = Value(string_value=str(obj))
elif isinstance(obj, int) or isinstance(obj, float):
value = Value(number_value=float(obj))
elif isinstance(obj, bool):
value = Value(bool_value=obj)
elif isinstance(obj, dict):
value = Value(struct_value=dictionary_to_struct(obj))
elif isinstance(obj, list):
value = Value(list_value=list_to_proto_list(obj))
return value
def list_to_proto_list(obj: List) -> ListValue:
return ListValue(values=[value_to_proto_value(item) for item in obj])
def dictionary_to_struct(obj: Dict[str, Any]) -> Struct:
return Struct(fields=dict([(k, value_to_proto_value(v)) for k, v in obj.items()]))
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par localiser les définitions de Struct, Value et ListValue et examinez pourquoi Struct.from_dict() ne gère pas le dictionnaire imbriqué présenté. Confirmez le comportement de conversion prévu pour les dictionnaires imbriqués, les listes, les chaînes, les nombres, les booléens et les valeurs datetime. Le travail est considéré comme terminé lorsqu’une API ergonomique est définie d’un commun accord et que la représentation d’exemple est couverte.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- developer-experience
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 30/100