Skip to content

ActivityStream Vocabulary Activities

vultron.as_vocab.base.objects.activities

vultron.as_vocab.base.objects.activities.base

file: base author: adh created_at: 2/15/23 9:32 AM

as_Activity dataclass

Bases: as_Object

https://www.w3.org/TR/activitystreams-vocabulary/#dfn-activity An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that an Activity is not a representation of a currently executing process, but rather a statement about that process. For example, a person walking down the street is not an Activity unless they are posting a picture of themselves walking down the street. The Activity in that case would be the posting of the picture, not the person walking down the street.

Source code in vultron/as_vocab/base/objects/activities/base.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@dataclass_json
@dataclass
class as_Activity(as_Object):
    """https://www.w3.org/TR/activitystreams-vocabulary/#dfn-activity
    An Activity is a subtype of Object that describes some form of action that may happen, is
    currently happening, or has already happened. The Activity type itself serves as an abstract
    base type for all types of activities. It is important to note that an Activity is not a
    representation of a currently executing process, but rather a statement about that process.
    For example, a person walking down the street is not an Activity unless they are posting a
    picture of themselves walking down the street. The Activity in that case would be the posting
    of the picture, not the person walking down the street.
    """

    actor: as_Object | as_Link | str = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    target: Optional[as_Object | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    origin: Optional[as_Object | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    instrument: Optional[as_Object | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    result: Optional[as_Object | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )

    def description(self):
        raise NotImplementedError

vultron.as_vocab.base.objects.activities.transitive

file: activities author: adh created_at: 12/8/22 4:01 PM

as_Accept dataclass

Bases: as_TransitiveActivity

The actor accepts the object. The target property can be used in certain circumstances to indicate the context into which the object has been accepted.

Source code in vultron/as_vocab/base/objects/activities/transitive.py
234
235
236
237
238
239
240
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Accept(as_TransitiveActivity):
    """The actor accepts the object. The target property can be used in certain circumstances to indicate the context into
    which the object has been accepted.
    """

as_Add dataclass

Bases: as_TransitiveActivity

The actor is adding the object to the target. If the target is not specified, it must be determined by context. The origin indicates the context from which the object originated. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-add

Source code in vultron/as_vocab/base/objects/activities/transitive.py
167
168
169
170
171
172
173
174
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Add(as_TransitiveActivity):
    """The actor is adding the object to the target. If the target is not specified, it must be determined by context.
    The origin indicates the context from which the object originated.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-add>
    """

as_Announce dataclass

Bases: as_TransitiveActivity

The actor is calling the target's attention to the object. The origin typically has no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-announce

Source code in vultron/as_vocab/base/objects/activities/transitive.py
213
214
215
216
217
218
219
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Announce(as_TransitiveActivity):
    """The actor is calling the target's attention to the object. The origin typically has no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-announce>
    """

as_Block dataclass

Bases: as_Ignore

The actor is blocking the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-block

Source code in vultron/as_vocab/base/objects/activities/transitive.py
82
83
84
85
86
87
88
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Block(as_Ignore):
    """The actor is blocking the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-block>
    """

as_Create dataclass

Bases: as_TransitiveActivity

The actor is creating the object. If specified, the origin indicates the context from which the object originated. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-create

Source code in vultron/as_vocab/base/objects/activities/transitive.py
137
138
139
140
141
142
143
144
145
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Create(as_TransitiveActivity):
    """The actor is creating the object. If specified, the origin indicates the context from which the object originated.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-create>
    """

    pass

as_Delete dataclass

Bases: as_TransitiveActivity

The actor is deleting the object. If specified, the origin indicates the context from which the object was deleted. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-delete

Source code in vultron/as_vocab/base/objects/activities/transitive.py
148
149
150
151
152
153
154
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Delete(as_TransitiveActivity):
    """The actor is deleting the object. If specified, the origin indicates the context from which the object was deleted.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-delete>
    """

as_Dislike dataclass

Bases: as_TransitiveActivity

The actor dislikes the object. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-dislike

Source code in vultron/as_vocab/base/objects/activities/transitive.py
261
262
263
264
265
266
267
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Dislike(as_TransitiveActivity):
    """The actor dislikes the object.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-dislike>
    """

as_Flag dataclass

Bases: as_TransitiveActivity

The actor is flagging the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-flag

Source code in vultron/as_vocab/base/objects/activities/transitive.py
110
111
112
113
114
115
116
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Flag(as_TransitiveActivity):
    """The actor is flagging the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-flag>
    """

as_Follow dataclass

Bases: as_TransitiveActivity

The actor is "following" the object. Following is defined in the sense commonly used in Social systems in which the actor is interested in any activity performed by or on the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-follow

Source code in vultron/as_vocab/base/objects/activities/transitive.py
222
223
224
225
226
227
228
229
230
231
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Follow(as_TransitiveActivity):
    """The actor is "following" the object.
    Following is defined in the sense commonly used in Social systems in which the actor is interested in any activity
    performed by or on the object.
    The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-follow>
    """

as_Ignore dataclass

Bases: as_TransitiveActivity

The actor is ignoring the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-ignore

Source code in vultron/as_vocab/base/objects/activities/transitive.py
73
74
75
76
77
78
79
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Ignore(as_TransitiveActivity):
    """The actor is ignoring the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-ignore>
    """

as_Invite dataclass

Bases: as_Offer

The actor is requesting that the target accept the object. The origin indicates the context from which the object originated. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-invite

Source code in vultron/as_vocab/base/objects/activities/transitive.py
101
102
103
104
105
106
107
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Invite(as_Offer):
    """The actor is requesting that the target accept the object. The origin indicates the context from which the object originated.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-invite>
    """

as_Join dataclass

Bases: as_TransitiveActivity

The actor has joined the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-join

Source code in vultron/as_vocab/base/objects/activities/transitive.py
177
178
179
180
181
182
183
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Join(as_TransitiveActivity):
    """The actor has joined the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-join>
    """

as_Leave dataclass

Bases: as_TransitiveActivity

The actor has left the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-leave

Source code in vultron/as_vocab/base/objects/activities/transitive.py
204
205
206
207
208
209
210
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Leave(as_TransitiveActivity):
    """The actor has left the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-leave>
    """

as_Like dataclass

Bases: as_TransitiveActivity

The actor likes, recommends or endorses the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-like

Source code in vultron/as_vocab/base/objects/activities/transitive.py
64
65
66
67
68
69
70
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Like(as_TransitiveActivity):
    """The actor likes, recommends or endorses the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-like>
    """

as_Listen dataclass

Bases: as_TransitiveActivity

The actor has listened to the object. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-listen

Source code in vultron/as_vocab/base/objects/activities/transitive.py
195
196
197
198
199
200
201
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Listen(as_TransitiveActivity):
    """The actor has listened to the object.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-listen>
    """

as_Move dataclass

Bases: as_TransitiveActivity

The actor is moving the object from the origin to the target. If the origin or target are not specified, either can be determined by context. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-move

Source code in vultron/as_vocab/base/objects/activities/transitive.py
157
158
159
160
161
162
163
164
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Move(as_TransitiveActivity):
    """The actor is moving the object from the origin to the target.
    If the origin or target are not specified, either can be determined by context.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-move>
    """

as_Offer dataclass

Bases: as_TransitiveActivity

The actor is offering the object. If specified, the origin indicates the context from which the object originated. The target indicates the entity to which the object is being offered. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-offer

Source code in vultron/as_vocab/base/objects/activities/transitive.py
91
92
93
94
95
96
97
98
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Offer(as_TransitiveActivity):
    """The actor is offering the object. If specified, the origin indicates the context from which the object originated.
    The target indicates the entity to which the object is being offered.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-offer>
    """

as_Read dataclass

Bases: as_TransitiveActivity

The actor has read the object. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-read

Source code in vultron/as_vocab/base/objects/activities/transitive.py
289
290
291
292
293
294
295
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Read(as_TransitiveActivity):
    """The actor has read the object.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-read>
    """

as_Reject dataclass

Bases: as_TransitiveActivity

The actor rejects the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-reject

Source code in vultron/as_vocab/base/objects/activities/transitive.py
270
271
272
273
274
275
276
277
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Reject(as_TransitiveActivity):
    """The actor rejects the object.
    The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-reject>
    """

as_Remove dataclass

Bases: as_TransitiveActivity

The actor removes the object from the target. If specified, the origin indicates the context from which the object originated. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-remove

Source code in vultron/as_vocab/base/objects/activities/transitive.py
119
120
121
122
123
124
125
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Remove(as_TransitiveActivity):
    """The actor removes the object from the target. If specified, the origin indicates the context from which the object originated.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-remove>
    """

as_TentativeAccept dataclass

Bases: as_Accept

The actor tentatively accepts the object. A specialization of Accept indicating that the acceptance is tentative.

Source code in vultron/as_vocab/base/objects/activities/transitive.py
243
244
245
246
247
248
249
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_TentativeAccept(as_Accept):
    """The actor tentatively accepts the object.
    A specialization of Accept indicating that the acceptance is tentative.
    """

as_TentativeReject dataclass

Bases: as_Reject

A specialization of Reject indicating that the rejection is tentative. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tentativereject

Source code in vultron/as_vocab/base/objects/activities/transitive.py
280
281
282
283
284
285
286
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_TentativeReject(as_Reject):
    """A specialization of Reject indicating that the rejection is tentative.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tentativereject>
    """

as_TransitiveActivity dataclass

Bases: as_Activity

A transitive activity is an activity that has an object. ActivityPub doesn't define transitive activities separately from activities, but we do it here for convenience. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-activity

Source code in vultron/as_vocab/base/objects/activities/transitive.py
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_TransitiveActivity(Activity):
    """A transitive activity is an activity that has an object.
    ActivityPub doesn't define transitive activities separately from activities, but we do it here for convenience.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-activity>
    """

    as_object: Optional[as_Object | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

    def __post_init__(self):
        super().__post_init__()
        if self.name is None:
            parts = [
                name_of(self.actor),
                self.as_type,
            ]
            if self.as_object is not None:
                parts.append(name_of(self.as_object))
            if self.origin is not None:
                parts.extend(("from", self.origin))
            if self.target is not None:
                parts.extend(("to", self.target))
            if self.instrument is not None:
                parts.extend(("using", self.instrument))
            self.name = " ".join([str(part) for part in parts])

as_Undo dataclass

Bases: as_TransitiveActivity

The actor is undoing the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-undo

Source code in vultron/as_vocab/base/objects/activities/transitive.py
128
129
130
131
132
133
134
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Undo(as_TransitiveActivity):
    """The actor is undoing the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-undo>
    """

as_Update dataclass

Bases: as_TransitiveActivity

The actor has updated the object. The target and origin typically have no defined meaning. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-update

Source code in vultron/as_vocab/base/objects/activities/transitive.py
186
187
188
189
190
191
192
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Update(as_TransitiveActivity):
    """The actor has updated the object. The target and origin typically have no defined meaning.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-update>
    """

as_View dataclass

Bases: as_TransitiveActivity

The actor has viewed the object. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-view

Source code in vultron/as_vocab/base/objects/activities/transitive.py
252
253
254
255
256
257
258
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_View(as_TransitiveActivity):
    """The actor has viewed the object.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-view>
    """

vultron.as_vocab.base.objects.activities.intransitive

file: intransitive author: adh created_at: 12/8/22 4:04 PM

as_Arrive dataclass

Bases: as_IntransitiveActivity

The actor arrives at the target. The origin can be used to specify the previous location from which the actor arrived. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-arrive

Source code in vultron/as_vocab/base/objects/activities/intransitive.py
57
58
59
60
61
62
63
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Arrive(as_IntransitiveActivity):
    """The actor arrives at the target. The origin can be used to specify the previous location from which the actor arrived.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-arrive>
    """

as_IntransitiveActivity dataclass

Bases: as_Activity

Base class for all ActivityPub intransitive activities. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#intransitiveactivity

Source code in vultron/as_vocab/base/objects/activities/intransitive.py
34
35
36
37
38
39
40
41
42
43
44
45
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_IntransitiveActivity(Activity):
    """Base class for all ActivityPub intransitive activities.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#intransitiveactivity>
    """

    def description(self):
        return (
            f"{self.actor} {self.as_type} to {self.target} with {self.result}"
        )

as_Question dataclass

Bases: as_IntransitiveActivity

The actor poses a question to the target. The origin can be used to specify the context from which the question was posed. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-question

Source code in vultron/as_vocab/base/objects/activities/intransitive.py
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Question(as_IntransitiveActivity):
    """The actor poses a question to the target. The origin can be used to specify the context from which the question was posed.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-question>
    """

    anyOf: Optional[as_Object | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    oneOf: Optional[as_Object | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    closed: Optional[Union[as_Object, as_Link, datetime, bool]] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )

as_Travel dataclass

Bases: as_IntransitiveActivity

The actor travels from the origin to the target. See definition in ActivityStreams Vocabulary https://www.w3.org/TR/activitystreams-vocabulary/#dfn-travel

Source code in vultron/as_vocab/base/objects/activities/intransitive.py
48
49
50
51
52
53
54
@activitystreams_activity
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class as_Travel(as_IntransitiveActivity):
    """The actor travels from the origin to the target.
    See definition in ActivityStreams Vocabulary <https://www.w3.org/TR/activitystreams-vocabulary/#dfn-travel>
    """