emotionweb 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. emotionweb/__init__.py +1 -0
  2. emotionweb/generator.py +77 -0
  3. emotionweb/themes.py +0 -0
  4. emotionweb-0.1.0.dist-info/METADATA +0 -0
  5. emotionweb-0.1.0.dist-info/RECORD +54 -0
  6. emotionweb-0.1.0.dist-info/WHEEL +5 -0
  7. emotionweb-0.1.0.dist-info/top_level.txt +2 -0
  8. webengine/__init__.py +0 -0
  9. webengine/core/__init__.py +0 -0
  10. webengine/core/asgi.py +16 -0
  11. webengine/core/settings.py +128 -0
  12. webengine/core/urls.py +14 -0
  13. webengine/core/wsgi.py +16 -0
  14. webengine/manage.py +22 -0
  15. webengine/static/gifs/gif1.gif +0 -0
  16. webengine/static/gifs/gif2.gif +0 -0
  17. webengine/static/gifs/gif3.gif +0 -0
  18. webengine/static/gifs/gif4.gif +0 -0
  19. webengine/static/gifs/gif5.gif +0 -0
  20. webengine/static/gifs/gitf6.gif +0 -0
  21. webengine/static/gifs/kiss.jpg.mp4 +0 -0
  22. webengine/static/gifs/pleasese.jpg.mp4 +0 -0
  23. webengine/static/uploads/img1.jpeg +0 -0
  24. webengine/static/uploads/img1.jpg +0 -0
  25. webengine/static/uploads/img2.jpeg +0 -0
  26. webengine/static/uploads/img2.jpg +0 -0
  27. webengine/static/uploads/img3.jpeg +0 -0
  28. webengine/static/uploads/img3.jpg +0 -0
  29. webengine/static/uploads/img4.jpeg +0 -0
  30. webengine/static/uploads/img4.jpg +0 -0
  31. webengine/static/uploads/img5.jpeg +0 -0
  32. webengine/static/uploads/img5.jpg +0 -0
  33. webengine/static/uploads/img6.jpeg +0 -0
  34. webengine/static/uploads/img6.jpg +0 -0
  35. webengine/static/uploads/img7.jpeg +0 -0
  36. webengine/static/uploads/img7.jpg +0 -0
  37. webengine/static/uploads/img8.jpeg +0 -0
  38. webengine/static/uploads/img8.jpg +0 -0
  39. webengine/surprise/__init__.py +0 -0
  40. webengine/surprise/admin.py +3 -0
  41. webengine/surprise/apps.py +6 -0
  42. webengine/surprise/migrations/__init__.py +0 -0
  43. webengine/surprise/models.py +3 -0
  44. webengine/surprise/tests.py +3 -0
  45. webengine/surprise/urls.py +6 -0
  46. webengine/surprise/views.py +116 -0
  47. webengine/templates/anniversary.html +886 -0
  48. webengine/templates/birthday.html +1005 -0
  49. webengine/templates/farewell.html +1 -0
  50. webengine/templates/index.html +11 -0
  51. webengine/templates/love.html +571 -0
  52. webengine/templates/loveletter.html +605 -0
  53. webengine/templates/sorry.html +513 -0
  54. webengine/templates/teachers_day.html +1 -0
emotionweb/__init__.py ADDED
@@ -0,0 +1 @@
1
+ from .generator import Surprise
@@ -0,0 +1,77 @@
1
+ import json
2
+ import webbrowser
3
+ import shutil
4
+ import os
5
+
6
+ class Surprise:
7
+
8
+ def __init__(
9
+ self,
10
+ type,
11
+ name,
12
+ message,
13
+ images,
14
+ caption,
15
+ ):
16
+ self.type = type
17
+ self.name = name
18
+ self.message = message
19
+ self.images = images
20
+ self.caption= caption
21
+
22
+ def generate(self):
23
+
24
+ upload_folder = (
25
+ "webengine/static/uploads"
26
+ )
27
+
28
+ os.makedirs(
29
+ upload_folder,
30
+ exist_ok=True
31
+ )
32
+
33
+ copied = []
34
+
35
+ for i,image in enumerate(self.images):
36
+
37
+ ext = image.split(".")[-1]
38
+
39
+ new_name = f"img{i+1}.{ext}"
40
+
41
+ shutil.copy(
42
+ image,
43
+ f"{upload_folder}/{new_name}"
44
+ )
45
+
46
+ copied.append(
47
+ new_name
48
+ )
49
+
50
+ data = {
51
+ "type": self.type,
52
+ "name":self.name,
53
+
54
+ "message":self.message,
55
+
56
+ "images":copied,
57
+ "caption":self.caption,
58
+ }
59
+
60
+ with open(
61
+ "data.json",
62
+ "w"
63
+ ) as file:
64
+
65
+ json.dump(
66
+ data,
67
+ file,
68
+ indent=4
69
+ )
70
+
71
+ webbrowser.open(
72
+ "http://127.0.0.1:2039"
73
+ )
74
+
75
+ print(
76
+ "Website generated successfully!"
77
+ )
emotionweb/themes.py ADDED
File without changes
Binary file
@@ -0,0 +1,54 @@
1
+ emotionweb/__init__.py,sha256=KAv0T5K5TM1mAVHSudNmpRGJ5ENBinOCwJTF8wojhLs,32
2
+ emotionweb/generator.py,sha256=sPoDMPyZ1pscEC3yG26JoqGxgf4oHx4HLHQAZhfTSeg,1365
3
+ emotionweb/themes.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ webengine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ webengine/manage.py,sha256=mRoPMA6v31P8XX7oD48N-nJx15M-gk5vX3MRYfCIdus,661
6
+ webengine/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ webengine/core/asgi.py,sha256=T4nFyUIYhFogboNgWchOjCBzieimHC7xBxBS4UHPwhk,385
8
+ webengine/core/settings.py,sha256=J8RHDansnmXr5rkTl7lLAHJM83TJEdMhOSd_I6V26hY,3304
9
+ webengine/core/urls.py,sha256=8QtFhmaDleeeH2yOag_RsF4myUDbPJHs50kGEYcH874,341
10
+ webengine/core/wsgi.py,sha256=6KsdThodBrbuYzr8eDvnCdeoJSj6xf_T9-f5ATjqUns,385
11
+ webengine/static/gifs/gif1.gif,sha256=59_fNJBMfLrsUvZi57DhXjNOE3t5dTpfMlyAuFRyuDM,418317
12
+ webengine/static/gifs/gif2.gif,sha256=sPlgsENp-MA_fhaDqUJnJXVUlBI5ELphP5muCerbCDQ,118360
13
+ webengine/static/gifs/gif3.gif,sha256=EsRI0BjoyY5_3yUcwkqGt-mb5P3JcLfYLNzDAUzG4UQ,233672
14
+ webengine/static/gifs/gif4.gif,sha256=rr3FYbjGIS7vgSZBLLb1E2Ih-8jSNxUTWEkL5FeG4NY,2164873
15
+ webengine/static/gifs/gif5.gif,sha256=SkSjt8v_joUhfHRqFQY1-WWlfXfcxhhRryZ-_HZ6ESI,185126
16
+ webengine/static/gifs/gitf6.gif,sha256=sO4nV0Sl2TJGnYzgtVqpjBQVRJZR1FRgRTWW0XOrBVU,572882
17
+ webengine/static/gifs/kiss.jpg.mp4,sha256=fuQ-iS8sX6_0GNOh0PTGrB1TfmZT2J-9AvX18xfCh0g,208115
18
+ webengine/static/gifs/pleasese.jpg.mp4,sha256=HVNFRWNtpsYAqgHinMGjKOMo4dWWir6OiDe70hhw7Sc,36611
19
+ webengine/static/uploads/img1.jpeg,sha256=19jIvvgbh9hinS3PV2a94aHJxCySTAmorcOgo8gINzs,64816
20
+ webengine/static/uploads/img1.jpg,sha256=wn4oeUujBsyhLyENGIW3HMRr6-m3JjDAqyPXKDEtqkU,2631624
21
+ webengine/static/uploads/img2.jpeg,sha256=7912SqKWZTOAE9T7nq09SlfvV4QV44t9H4ChlPm8a2w,56304
22
+ webengine/static/uploads/img2.jpg,sha256=xbPevuZEnnd-79MbR4q4lwfV1L4SEutyzLZboN_fDLA,1917260
23
+ webengine/static/uploads/img3.jpeg,sha256=19jIvvgbh9hinS3PV2a94aHJxCySTAmorcOgo8gINzs,64816
24
+ webengine/static/uploads/img3.jpg,sha256=FnTCbNGeo0JFqa58rHwxyFszGQLzFPEWu8vQ8CSZ5yU,1428812
25
+ webengine/static/uploads/img4.jpeg,sha256=7912SqKWZTOAE9T7nq09SlfvV4QV44t9H4ChlPm8a2w,56304
26
+ webengine/static/uploads/img4.jpg,sha256=LyqagIeQAMDpyFuUYxxip3R1rVQHXXI50dQBoddY9os,715087
27
+ webengine/static/uploads/img5.jpeg,sha256=19jIvvgbh9hinS3PV2a94aHJxCySTAmorcOgo8gINzs,64816
28
+ webengine/static/uploads/img5.jpg,sha256=wn4oeUujBsyhLyENGIW3HMRr6-m3JjDAqyPXKDEtqkU,2631624
29
+ webengine/static/uploads/img6.jpeg,sha256=7912SqKWZTOAE9T7nq09SlfvV4QV44t9H4ChlPm8a2w,56304
30
+ webengine/static/uploads/img6.jpg,sha256=xbPevuZEnnd-79MbR4q4lwfV1L4SEutyzLZboN_fDLA,1917260
31
+ webengine/static/uploads/img7.jpeg,sha256=7912SqKWZTOAE9T7nq09SlfvV4QV44t9H4ChlPm8a2w,56304
32
+ webengine/static/uploads/img7.jpg,sha256=FnTCbNGeo0JFqa58rHwxyFszGQLzFPEWu8vQ8CSZ5yU,1428812
33
+ webengine/static/uploads/img8.jpeg,sha256=19jIvvgbh9hinS3PV2a94aHJxCySTAmorcOgo8gINzs,64816
34
+ webengine/static/uploads/img8.jpg,sha256=LyqagIeQAMDpyFuUYxxip3R1rVQHXXI50dQBoddY9os,715087
35
+ webengine/surprise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ webengine/surprise/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
37
+ webengine/surprise/apps.py,sha256=5H39sjEI2veaNRhw8iRl9Eq-5i9h9SlKVCM9Nmt_dWg,148
38
+ webengine/surprise/models.py,sha256=Vjc0p2XbAPgE6HyTF6vll98A4eDhA5AvaQqsc4kQ9AQ,57
39
+ webengine/surprise/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
40
+ webengine/surprise/urls.py,sha256=F74A1Urkh35G70qWWAgJCPfotAePGNpc-Zlx1YeDHac,115
41
+ webengine/surprise/views.py,sha256=RXXdV0t1rP4Z80DrR_ZrxH6G9E41-IDhuXJIDqda478,1761
42
+ webengine/surprise/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ webengine/templates/anniversary.html,sha256=OXA4w5KbSeF19ed3FJ78vLKl0uL0DRlHLTmrK2aadks,8389
44
+ webengine/templates/birthday.html,sha256=N0VYIhUQmy0kF8K490pnN53bzYAYcEO0t1mwT2x2mIU,8539
45
+ webengine/templates/farewell.html,sha256=cRRStbUv4Y8VtythRB7dHO7GF9HlieGh7VBVtLAkdT0,28
46
+ webengine/templates/index.html,sha256=Pjev95so5IngbHQlF_CWtMeQlMhUO9fs7OGDJdK7ph8,135
47
+ webengine/templates/love.html,sha256=1ooe9yyFQxT1hnryMc42u1CFoCL14AcnikPsK6INQG0,5557
48
+ webengine/templates/loveletter.html,sha256=QEIxjEs3j2xJhHVbRO6G6HuesH7D8zEZAOTcJwfxuPI,5742
49
+ webengine/templates/sorry.html,sha256=xLeDbwTa1Jbi2ZikYW4LWsFACAbxKMlimwpGp8yS_3E,4673
50
+ webengine/templates/teachers_day.html,sha256=HgGTNnQqZqWoLoeRknSO52DHAOaH4m7GsYvmp1LS50Y,37
51
+ emotionweb-0.1.0.dist-info/METADATA,sha256=VuEeiPlpAIKksDkXUGsJHJ1N5I0Wgp9SX_4q2vraFvQ,540
52
+ emotionweb-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
53
+ emotionweb-0.1.0.dist-info/top_level.txt,sha256=et6YMnstYRx9_bAbINllZ9H-7f-K_dq54eSKH64BKmk,21
54
+ emotionweb-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ emotionweb
2
+ webengine
webengine/__init__.py ADDED
File without changes
File without changes
webengine/core/asgi.py ADDED
@@ -0,0 +1,16 @@
1
+ """
2
+ ASGI config for core project.
3
+
4
+ It exposes the ASGI callable as a module-level variable named ``application``.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/
8
+ """
9
+
10
+ import os
11
+
12
+ from django.core.asgi import get_asgi_application
13
+
14
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
15
+
16
+ application = get_asgi_application()
@@ -0,0 +1,128 @@
1
+ """
2
+ Django settings for core project.
3
+
4
+ Generated by 'django-admin startproject' using Django 4.2.30.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.2/topics/settings/
8
+
9
+ For the full list of settings and their values, see
10
+ https://docs.djangoproject.com/en/4.2/ref/settings/
11
+ """
12
+
13
+ from pathlib import Path
14
+
15
+ # Build paths inside the project like this: BASE_DIR / 'subdir'.
16
+ BASE_DIR = Path(__file__).resolve().parent.parent
17
+
18
+
19
+ # Quick-start development settings - unsuitable for production
20
+ # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
21
+
22
+ # SECURITY WARNING: keep the secret key used in production secret!
23
+ SECRET_KEY = 'django-insecure-u0egx&c12l#i!ny4p_y#(h34u*s=xx@vn6zj*z%4^jn24($-7l'
24
+
25
+ # SECURITY WARNING: don't run with debug turned on in production!
26
+ DEBUG = True
27
+
28
+ ALLOWED_HOSTS = []
29
+
30
+
31
+ # Application definition
32
+
33
+ INSTALLED_APPS = [
34
+ 'django.contrib.admin',
35
+ 'django.contrib.auth',
36
+ 'django.contrib.contenttypes',
37
+ 'django.contrib.sessions',
38
+ 'django.contrib.messages',
39
+ 'django.contrib.staticfiles',
40
+ 'surprise',
41
+ ]
42
+
43
+ MIDDLEWARE = [
44
+ 'django.middleware.security.SecurityMiddleware',
45
+ 'django.contrib.sessions.middleware.SessionMiddleware',
46
+ 'django.middleware.common.CommonMiddleware',
47
+ 'django.middleware.csrf.CsrfViewMiddleware',
48
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
49
+ 'django.contrib.messages.middleware.MessageMiddleware',
50
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
51
+ ]
52
+
53
+ ROOT_URLCONF = 'core.urls'
54
+
55
+ TEMPLATES = [
56
+ {
57
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
58
+ 'DIRS': [BASE_DIR / "templates"],
59
+ 'APP_DIRS': True,
60
+ 'OPTIONS': {
61
+ 'context_processors': [
62
+ 'django.template.context_processors.debug',
63
+ 'django.template.context_processors.request',
64
+ 'django.contrib.auth.context_processors.auth',
65
+ 'django.contrib.messages.context_processors.messages',
66
+ ],
67
+ },
68
+ },
69
+ ]
70
+
71
+ WSGI_APPLICATION = 'core.wsgi.application'
72
+
73
+
74
+ # Database
75
+ # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
76
+
77
+ DATABASES = {
78
+ 'default': {
79
+ 'ENGINE': 'django.db.backends.sqlite3',
80
+ 'NAME': BASE_DIR / 'db.sqlite3',
81
+ }
82
+ }
83
+
84
+
85
+ # Password validation
86
+ # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
87
+
88
+ AUTH_PASSWORD_VALIDATORS = [
89
+ {
90
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
91
+ },
92
+ {
93
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
94
+ },
95
+ {
96
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
97
+ },
98
+ {
99
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
100
+ },
101
+ ]
102
+
103
+
104
+ # Internationalization
105
+ # https://docs.djangoproject.com/en/4.2/topics/i18n/
106
+
107
+ LANGUAGE_CODE = 'en-us'
108
+
109
+ TIME_ZONE = 'UTC'
110
+
111
+ USE_I18N = True
112
+
113
+ USE_TZ = True
114
+
115
+
116
+ # Static files (CSS, JavaScript, Images)
117
+ # https://docs.djangoproject.com/en/4.2/howto/static-files/
118
+
119
+ # Default primary key field type
120
+ # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
121
+
122
+ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
123
+
124
+ STATIC_URL = "/static/"
125
+
126
+ STATICFILES_DIRS = [
127
+ BASE_DIR / "static",
128
+ ]
webengine/core/urls.py ADDED
@@ -0,0 +1,14 @@
1
+ from django.contrib import admin
2
+ from django.urls import path, include
3
+ from django.conf import settings
4
+ from django.conf.urls.static import static
5
+
6
+ urlpatterns = [
7
+ path("admin/", admin.site.urls),
8
+ path("", include("surprise.urls")),
9
+ ]
10
+
11
+ urlpatterns += static(
12
+ settings.STATIC_URL,
13
+ document_root=settings.STATICFILES_DIRS[0]
14
+ )
webengine/core/wsgi.py ADDED
@@ -0,0 +1,16 @@
1
+ """
2
+ WSGI config for core project.
3
+
4
+ It exposes the WSGI callable as a module-level variable named ``application``.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/
8
+ """
9
+
10
+ import os
11
+
12
+ from django.core.wsgi import get_wsgi_application
13
+
14
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
15
+
16
+ application = get_wsgi_application()
webengine/manage.py ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env python3
2
+ """Django's command-line utility for administrative tasks."""
3
+ import os
4
+ import sys
5
+
6
+
7
+ def main():
8
+ """Run administrative tasks."""
9
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
10
+ try:
11
+ from django.core.management import execute_from_command_line
12
+ except ImportError as exc:
13
+ raise ImportError(
14
+ "Couldn't import Django. Are you sure it's installed and "
15
+ "available on your PYTHONPATH environment variable? Did you "
16
+ "forget to activate a virtual environment?"
17
+ ) from exc
18
+ execute_from_command_line(sys.argv)
19
+
20
+
21
+ if __name__ == '__main__':
22
+ main()
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
File without changes
@@ -0,0 +1,3 @@
1
+ from django.contrib import admin
2
+
3
+ # Register your models here.
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class SurpriseConfig(AppConfig):
5
+ default_auto_field = 'django.db.models.BigAutoField'
6
+ name = 'surprise'
File without changes
@@ -0,0 +1,3 @@
1
+ from django.db import models
2
+
3
+ # Create your models here.
@@ -0,0 +1,3 @@
1
+ from django.test import TestCase
2
+
3
+ # Create your tests here.
@@ -0,0 +1,6 @@
1
+ from django.urls import path
2
+ from . import views
3
+
4
+ urlpatterns = [
5
+ path("", views.surprise, name="surprise"),
6
+ ]
@@ -0,0 +1,116 @@
1
+ import json
2
+ from django.shortcuts import render
3
+
4
+ def surprise(request):
5
+
6
+ with open("../data.json", "r") as file:
7
+
8
+ data = json.load(file)
9
+
10
+ if data.get("type") == "love":
11
+
12
+ return render(
13
+
14
+ request,
15
+
16
+ "love.html",
17
+
18
+ {
19
+
20
+ "name": data["name"],
21
+
22
+ "message": data["message"],
23
+
24
+ "images": data["images"],
25
+
26
+ "caption": data["caption"]
27
+
28
+ }
29
+
30
+ )
31
+
32
+ elif data.get("type") == "birthday":
33
+
34
+ return render(
35
+
36
+ request,
37
+
38
+ "birthday.html",
39
+
40
+ {
41
+
42
+ "name": data["name"],
43
+
44
+ "message": data["message"],
45
+
46
+ "images": data["images"],
47
+
48
+ "caption": data["caption"]
49
+
50
+ }
51
+
52
+ )
53
+ elif data["type"] == "anniversary":
54
+
55
+ return render(
56
+
57
+ request,
58
+
59
+ "anniversary.html",
60
+
61
+ {
62
+
63
+ "name": data["name"],
64
+
65
+ "message": data["message"],
66
+
67
+ "images": data["images"],
68
+
69
+ "caption": data["caption"]
70
+
71
+ }
72
+ )
73
+ elif data["type"] == "loveletter":
74
+
75
+ return render(
76
+ request,
77
+ "loveletter.html",
78
+ {
79
+ "name": data["name"],
80
+
81
+ "message": data["message"],
82
+
83
+ "images": data["images"],
84
+ }
85
+ )
86
+ elif data["type"] == "apology":
87
+
88
+ return render(
89
+
90
+ request,
91
+
92
+ "sorry.html",
93
+
94
+
95
+ )
96
+ else:
97
+
98
+ return render(
99
+
100
+ request,
101
+
102
+ "love.html",
103
+
104
+ {
105
+
106
+ "name": data["name"],
107
+
108
+ "message": data["message"],
109
+
110
+ "images": data["images"],
111
+
112
+ "caption": data["caption"]
113
+
114
+ }
115
+
116
+ )