Author conqp
Recipients conqp
Date 2020-09-16.08:46:53
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1600246013.94.0.808986319549.issue41795@roundup.psfhosted.org>
In-reply-to
Content
I often write factory (deserialization) methods for ORM models for web application backends that produce a number of records (ORM model instances) of itself and related database tables:

    @classmethod
    def from_json(cls, json):
        """Yields records from a JSON-ish dict."""
        modules = json.pop('modules', None) or ()
        order = super().from_json(json)
        yield order

        for module in modules:
            yield OrderedModule(order=order, module=Module(module))

This yields the main record "order" and related records from OrderedModules, which have a foreign key to Order.
Thusly I can save all records by:

    for record in Order.from_json(json):
        record.save()

Since I have several of those deserialization functions for multiple tables in multiple databases, it'd be nice to reduce the amount of code with some extra syntactic sugar, like:

    @classmethod
    def from_json(cls, json):
        """Yields records from a JSON-ish dict."""
        modules = json.pop('modules', None) or ()
        yield order = super().from_json(json)  # Assignment via "="

        for module in modules:
            yield OrderedModule(order=order, module=Module(module))

or:

    @classmethod
    def from_json(cls, json):
        """Yields records from a JSON-ish dict."""
        modules = json.pop('modules', None) or ()
        yield order := super().from_json(json)  # Assignment via ":="

        for module in modules:
            yield OrderedModule(order=order, module=Module(module))

I therefor propose to allow assignment of names in generator-like yield statements as described above.
History
Date User Action Args
2020-09-16 08:46:53conqpsetrecipients: + conqp
2020-09-16 08:46:53conqpsetmessageid: <1600246013.94.0.808986319549.issue41795@roundup.psfhosted.org>
2020-09-16 08:46:53conqplinkissue41795 messages
2020-09-16 08:46:53conqpcreate