my-cloud-devops-consulting 5.7.9__tar.gz → 5.9.9__tar.gz

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 (32) hide show
  1. {my_cloud_devops_consulting-5.7.9/my_cloud_devops_consulting.egg-info → my_cloud_devops_consulting-5.9.9}/PKG-INFO +8 -1
  2. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/README.md +8 -1
  3. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/app.py +3 -3
  4. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9/my_cloud_devops_consulting.egg-info}/PKG-INFO +8 -1
  5. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/setup.py +1 -1
  6. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/css/contact-form.css +84 -52
  7. my_cloud_devops_consulting-5.9.9/static/js/main.js +74 -0
  8. my_cloud_devops_consulting-5.7.9/static/js/main.js +0 -74
  9. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/MANIFEST.in +0 -0
  10. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/my_cloud_devops_consulting.egg-info/SOURCES.txt +0 -0
  11. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/my_cloud_devops_consulting.egg-info/dependency_links.txt +0 -0
  12. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/my_cloud_devops_consulting.egg-info/requires.txt +0 -0
  13. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/my_cloud_devops_consulting.egg-info/top_level.txt +0 -0
  14. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/setup.cfg +0 -0
  15. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/css/index.css +0 -0
  16. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/css/login.css +0 -0
  17. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/css/main.css +0 -0
  18. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/css/register.css +0 -0
  19. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/css/services.css +0 -0
  20. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/images/image.jpg +0 -0
  21. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/js/index.js +0 -0
  22. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/js/login.js +0 -0
  23. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/js/register.js +0 -0
  24. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/static/js/services.js +0 -0
  25. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/base.html +0 -0
  26. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/contact-form.html +0 -0
  27. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/index.html +0 -0
  28. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/login.html +0 -0
  29. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/private-videos.html +0 -0
  30. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/register.html +0 -0
  31. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/templates/services.html +0 -0
  32. {my_cloud_devops_consulting-5.7.9 → my_cloud_devops_consulting-5.9.9}/tests/test_unit_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: my-cloud-devops-consulting
3
- Version: 5.7.9
3
+ Version: 5.9.9
4
4
  Summary: This is my consulting website for Cloud & DevOps services.
5
5
  Home-page: https://github.com/Betrand1999/project-root
6
6
  Author: Betrand Mutagha
@@ -34,9 +34,16 @@ sudo docker run --privileged -d \
34
34
  rancher/rancher
35
35
 
36
36
  # docker volume prune -f
37
+ # untainn the node
38
+ kubectl taint nodes local-node node.kubernetes.io/disk-pressure:NoSchedule-
39
+
37
40
 
38
41
 
39
42
  /etc/apache2/sites-available/000-default.conf
40
43
  sudo systemctl restart apache2
41
44
  update docker file for container port
42
45
  update your python app port
46
+
47
+
48
+ #
49
+ docker rmi -f $(docker images betrand1997/my-static-websites -q)
@@ -7,9 +7,16 @@ sudo docker run --privileged -d \
7
7
  rancher/rancher
8
8
 
9
9
  # docker volume prune -f
10
+ # untainn the node
11
+ kubectl taint nodes local-node node.kubernetes.io/disk-pressure:NoSchedule-
12
+
10
13
 
11
14
 
12
15
  /etc/apache2/sites-available/000-default.conf
13
16
  sudo systemctl restart apache2
14
17
  update docker file for container port
15
- update your python app port
18
+ update your python app port
19
+
20
+
21
+ #
22
+ docker rmi -f $(docker images betrand1997/my-static-websites -q)
@@ -6,7 +6,7 @@ from bson.objectid import ObjectId
6
6
 
7
7
  import os
8
8
  from flask_login import LoginManager,login_user,UserMixin,login_required,logout_user,current_user
9
- from settings import SECRET_KEY,MONGO_URI, EMAIL_USER
9
+ from settings import SECRET_KEY,MONGO_URI, EMAIL_USER, MONGO_PASSWORD, MONGO_USERNAME
10
10
  from utils import send_email, get_videos
11
11
  app = Flask(__name__)
12
12
  app.secret_key = SECRET_KEY # Secure your secret key with an environment variable
@@ -14,8 +14,8 @@ login_manager = LoginManager()
14
14
 
15
15
  login_manager.init_app(app)
16
16
 
17
-
18
- client = MongoClient(MONGO_URI)
17
+ decoded_mongo_url = f"mongodb+srv://{quote_plus(MONGO_USERNAME)}:{quote_plus(MONGO_PASSWORD)}@cluster.7plpy.mongodb.net/my-database?retryWrites=true&w=majority"
18
+ client = MongoClient(decoded_mongo_url)
19
19
  db = client['my-database'] # Specify your database as shown in the MongoDB Atlas interface
20
20
  users_collection = db['inventory_collection'] # Collection for storing user data
21
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: my-cloud-devops-consulting
3
- Version: 5.7.9
3
+ Version: 5.9.9
4
4
  Summary: This is my consulting website for Cloud & DevOps services.
5
5
  Home-page: https://github.com/Betrand1999/project-root
6
6
  Author: Betrand Mutagha
@@ -34,9 +34,16 @@ sudo docker run --privileged -d \
34
34
  rancher/rancher
35
35
 
36
36
  # docker volume prune -f
37
+ # untainn the node
38
+ kubectl taint nodes local-node node.kubernetes.io/disk-pressure:NoSchedule-
39
+
37
40
 
38
41
 
39
42
  /etc/apache2/sites-available/000-default.conf
40
43
  sudo systemctl restart apache2
41
44
  update docker file for container port
42
45
  update your python app port
46
+
47
+
48
+ #
49
+ docker rmi -f $(docker images betrand1997/my-static-websites -q)
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='my-cloud-devops-consulting',
5
- version='5.7.9',
5
+ version='5.9.9',
6
6
  author='Betrand Mutagha',
7
7
  author_email='mmutagha@gmail.com',
8
8
  description='This is my consulting website for Cloud & DevOps services.',
@@ -1,15 +1,12 @@
1
- /* General Styling for the Contact Form Page */
1
+ /* General Styling */
2
2
  body {
3
- background: linear-gradient(
4
- to right,
5
- #e3f2fd,
6
- #bbdefb
7
- ); /* Subtle gradient background for a modern touch */
8
- font-family: "Roboto", Arial, sans-serif; /* Updated font for a cleaner look */
3
+ background: linear-gradient(to right, #e3f2fd, #bbdefb);
4
+ font-family: "Roboto", Arial, sans-serif;
9
5
  color: #333;
10
6
  margin: 0;
11
7
  padding: 0;
12
8
  animation: backgroundMove 10s infinite alternate;
9
+ background-size: 200% 100%;
13
10
  }
14
11
 
15
12
  @keyframes backgroundMove {
@@ -23,75 +20,81 @@ body {
23
20
 
24
21
  /* Header Styling */
25
22
  header {
26
- background: #13ca4d; /* Slightly darker blue for better contrast */
23
+ background: #13ca4d;
27
24
  color: #fff;
28
- padding: 60px;
25
+ padding: 60px 20px;
29
26
  text-align: center;
30
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
27
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
31
28
  animation: fadeInDown 1.5s ease-in-out;
32
29
  }
33
30
 
34
31
  header h1 {
35
32
  margin: 0;
36
- font-size: 2em;
33
+ font-size: 2.5em;
34
+ letter-spacing: 1px;
37
35
  }
38
36
 
39
37
  nav ul {
40
38
  list-style: none;
41
39
  padding: 0;
42
- margin: 10px 0;
43
- text-align: center;
40
+ margin-top: 15px;
44
41
  }
45
42
 
46
43
  nav ul li {
47
44
  display: inline-block;
48
- margin: 0 10px;
45
+ margin: 0 12px;
49
46
  }
50
47
 
51
48
  nav ul li a {
52
49
  color: #fff;
53
50
  text-decoration: none;
54
- padding: 8px 15px;
55
- border-radius: 5px;
56
- transition: background 0.3s ease, transform 0.2s ease;
51
+ padding: 10px 18px;
52
+ border-radius: 25px;
53
+ transition: all 0.3s ease;
54
+ background: rgba(255, 255, 255, 0.15);
57
55
  }
58
56
 
59
57
  nav ul li a:hover {
60
- background: rgba(255, 255, 255, 0.3);
58
+ background: #fff;
59
+ color: #13ca4d;
61
60
  transform: scale(1.05);
62
61
  }
63
62
 
64
- /* Form Styling */
63
+ /* Main Form Area */
65
64
  main {
66
- padding: 40px;
65
+ padding: 40px 20px;
67
66
  animation: fadeInUp 1.5s ease-in-out;
68
67
  }
69
68
 
70
69
  h2 {
71
70
  text-align: center;
72
71
  color: #1976d2;
73
- margin-bottom: 20px;
72
+ margin-bottom: 30px;
73
+ font-size: 2rem;
74
74
  }
75
75
 
76
76
  form {
77
- max-width: 600px;
77
+ max-width: 700px;
78
78
  margin: 0 auto;
79
- padding: 30px;
80
- background: #fff;
81
- border: 1px solid #ddd;
82
- border-radius: 8px;
83
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
79
+ padding: 35px;
80
+ background: #ffffffda;
81
+ border: 1px solid #e0e0e0;
82
+ border-radius: 10px;
83
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
84
84
  animation: slideIn 1.5s ease-in-out;
85
85
  }
86
86
 
87
+ /* Form Fields */
87
88
  .form-group {
88
- margin-bottom: 20px;
89
+ position: relative;
90
+ margin-bottom: 25px;
89
91
  }
90
92
 
91
93
  label {
92
94
  display: block;
93
- margin-bottom: 8px;
94
- font-weight: bold;
95
+ margin-bottom: 10px;
96
+ font-weight: 600;
97
+ font-size: 0.95rem;
95
98
  }
96
99
 
97
100
  input[type="text"],
@@ -102,38 +105,46 @@ input[type="file"],
102
105
  textarea,
103
106
  select {
104
107
  width: 100%;
105
- padding: 12px;
108
+ padding: 14px 16px;
106
109
  border: 1px solid #ccc;
107
- border-radius: 5px;
108
- margin-top: 5px;
109
- transition: border-color 0.3s ease;
110
+ border-radius: 6px;
110
111
  font-size: 16px;
112
+ background-color: #fafafa;
113
+ transition: all 0.3s ease;
114
+ outline: none;
115
+ }
116
+
117
+ textarea {
118
+ resize: vertical;
119
+ min-height: 100px;
111
120
  }
112
121
 
113
- input[type="text"]:focus,
114
- input[type="email"]:focus,
115
- input[type="tel"]:focus,
116
- input[type="datetime-local"]:focus,
122
+ input:focus,
117
123
  textarea:focus,
118
124
  select:focus {
119
125
  border-color: hsl(151, 79%, 46%);
120
- box-shadow: 0 0 5px rgba(25, 118, 210, 0.3);
126
+ box-shadow: 0 0 6px rgba(25, 118, 210, 0.3);
127
+ background-color: #fff;
121
128
  }
122
129
 
130
+ /* Submit Button */
123
131
  input[type="submit"] {
124
132
  background: hsl(117, 79%, 46%);
125
133
  color: white;
126
- padding: 12px 20px;
134
+ padding: 14px 24px;
127
135
  border: none;
128
- border-radius: 5px;
136
+ border-radius: 50px;
137
+ font-size: 17px;
138
+ font-weight: 500;
129
139
  cursor: pointer;
130
- transition: background 0.3s ease, transform 0.2s;
131
- font-size: 16px;
140
+ transition: all 0.3s ease;
141
+ display: block;
142
+ margin: 0 auto;
132
143
  }
133
144
 
134
145
  input[type="submit"]:hover {
135
- background: hsl(118, 79%, 32%);
136
- transform: translateY(-2px);
146
+ background: hsl(118, 79%, 36%);
147
+ transform: translateY(-2px) scale(1.02);
137
148
  }
138
149
 
139
150
  input[type="submit"]:active {
@@ -144,10 +155,10 @@ input[type="submit"]:active {
144
155
  /* Footer Styling */
145
156
  footer {
146
157
  text-align: center;
147
- padding: 15px;
158
+ padding: 18px;
148
159
  background: #18b74d;
149
160
  color: #fff;
150
- margin-top: 40px;
161
+ margin-top: 50px;
151
162
  animation: fadeIn 2.5s ease-in-out;
152
163
  box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.1);
153
164
  }
@@ -155,14 +166,15 @@ footer {
155
166
  footer a {
156
167
  color: #ffe082;
157
168
  text-decoration: none;
158
- transition: color 0.3s ease;
169
+ font-weight: 500;
159
170
  }
160
171
 
161
172
  footer a:hover {
162
- color: #fff;
173
+ color: #ffffff;
174
+ text-decoration: underline;
163
175
  }
164
176
 
165
- /* Keyframe Animations */
177
+ /* Animations */
166
178
  @keyframes fadeIn {
167
179
  from {
168
180
  opacity: 0;
@@ -175,7 +187,7 @@ footer a:hover {
175
187
  @keyframes fadeInDown {
176
188
  from {
177
189
  opacity: 0;
178
- transform: translateY(-20px);
190
+ transform: translateY(-30px);
179
191
  }
180
192
  to {
181
193
  opacity: 1;
@@ -186,7 +198,7 @@ footer a:hover {
186
198
  @keyframes fadeInUp {
187
199
  from {
188
200
  opacity: 0;
189
- transform: translateY(20px);
201
+ transform: translateY(30px);
190
202
  }
191
203
  to {
192
204
  opacity: 1;
@@ -204,3 +216,23 @@ footer a:hover {
204
216
  transform: translateX(0);
205
217
  }
206
218
  }
219
+
220
+ /* Responsive Design */
221
+ @media (max-width: 768px) {
222
+ header h1 {
223
+ font-size: 1.8em;
224
+ }
225
+
226
+ nav ul li {
227
+ display: block;
228
+ margin: 8px 0;
229
+ }
230
+
231
+ form {
232
+ padding: 20px;
233
+ }
234
+
235
+ input[type="submit"] {
236
+ width: 100%;
237
+ }
238
+ }
@@ -0,0 +1,74 @@
1
+ document.addEventListener("DOMContentLoaded", () => {
2
+ // Smooth scrolling for all internal links
3
+ const smoothScrollLinks = document.querySelectorAll("a[href^='#']");
4
+ smoothScrollLinks.forEach(link => {
5
+ link.addEventListener("click", (event) => {
6
+ event.preventDefault();
7
+ const targetId = link.getAttribute("href").substring(1);
8
+ const targetElement = document.getElementById(targetId);
9
+ if (targetElement) {
10
+ targetElement.scrollIntoView({ behavior: "smooth" });
11
+ }
12
+ });
13
+ });
14
+
15
+ // Back to top button functionality
16
+ const backToTopButton = document.createElement("button");
17
+ backToTopButton.innerText = "↑ Top";
18
+ backToTopButton.className = "scroll-to-top";
19
+ document.body.appendChild(backToTopButton);
20
+
21
+ backToTopButton.style.display = "none";
22
+ backToTopButton.addEventListener("click", () => {
23
+ window.scrollTo({ top: 0, behavior: "smooth" });
24
+ });
25
+
26
+ window.addEventListener("scroll", () => {
27
+ backToTopButton.style.display = window.pageYOffset > 300 ? "block" : "none";
28
+ });
29
+
30
+ // Modular function to reveal elements on scroll
31
+ const revealOnScroll = () => {
32
+ const sections = document.querySelectorAll("section");
33
+ const viewportHeight = window.innerHeight;
34
+ sections.forEach(section => {
35
+ const sectionTop = section.getBoundingClientRect().top;
36
+ if (sectionTop < viewportHeight - 100) {
37
+ section.classList.add("visible");
38
+ }
39
+ });
40
+ };
41
+ window.addEventListener("scroll", revealOnScroll);
42
+
43
+ // Inject dynamic styles for section reveal effect
44
+ const styleSheet = document.createElement("style");
45
+ // styleSheet.type = "text/css"; // Deprecated, no longer needed
46
+ styleSheet.innerText = `
47
+ section {
48
+ opacity: 0;
49
+ transform: translateY(20px);
50
+ transition: opacity 0.5s ease, transform 0.5s ease;
51
+ }
52
+ section.visible {
53
+ opacity: 1;
54
+ transform: translateY(0);
55
+ }
56
+ .scroll-to-top {
57
+ position: fixed;
58
+ bottom: 20px;
59
+ right: 20px;
60
+ padding: 10px 15px;
61
+ background: #007bff;
62
+ color: white;
63
+ border: none;
64
+ border-radius: 5px;
65
+ display: none;
66
+ cursor: pointer;
67
+ }
68
+ .scroll-to-top:hover {
69
+ background: #0056b3;
70
+ }
71
+ `;
72
+ document.head.appendChild(styleSheet);
73
+ });
74
+
@@ -1,74 +0,0 @@
1
- // document.addEventListener("DOMContentLoaded", () => {
2
- // // Smooth scrolling for all internal links
3
- // const smoothScrollLinks = document.querySelectorAll("a[href^='#']");
4
- // smoothScrollLinks.forEach(link => {
5
- // link.addEventListener("click", (event) => {
6
- // event.preventDefault();
7
- // const targetId = link.getAttribute("href").substring(1);
8
- // const targetElement = document.getElementById(targetId);
9
- // if (targetElement) {
10
- // targetElement.scrollIntoView({ behavior: "smooth" });
11
- // }
12
- // });
13
- // });
14
-
15
- // // Back to top button functionality
16
- // const backToTopButton = document.createElement("button");
17
- // backToTopButton.innerText = "↑ Top";
18
- // backToTopButton.className = "scroll-to-top";
19
- // document.body.appendChild(backToTopButton);
20
-
21
- // backToTopButton.style.display = "none";
22
- // backToTopButton.addEventListener("click", () => {
23
- // window.scrollTo({ top: 0, behavior: "smooth" });
24
- // });
25
-
26
- // window.addEventListener("scroll", () => {
27
- // backToTopButton.style.display = window.pageYOffset > 300 ? "block" : "none";
28
- // });
29
-
30
- // // Modular function to reveal elements on scroll
31
- // const revealOnScroll = () => {
32
- // const sections = document.querySelectorAll("section");
33
- // const viewportHeight = window.innerHeight;
34
- // sections.forEach(section => {
35
- // const sectionTop = section.getBoundingClientRect().top;
36
- // if (sectionTop < viewportHeight - 100) {
37
- // section.classList.add("visible");
38
- // }
39
- // });
40
- // };
41
- // window.addEventListener("scroll", revealOnScroll);
42
-
43
- // // Inject dynamic styles for section reveal effect
44
- // const styleSheet = document.createElement("style");
45
- // // styleSheet.type = "text/css"; // Deprecated, no longer needed
46
- // styleSheet.innerText = `
47
- // section {
48
- // opacity: 0;
49
- // transform: translateY(20px);
50
- // transition: opacity 0.5s ease, transform 0.5s ease;
51
- // }
52
- // section.visible {
53
- // opacity: 1;
54
- // transform: translateY(0);
55
- // }
56
- // .scroll-to-top {
57
- // position: fixed;
58
- // bottom: 20px;
59
- // right: 20px;
60
- // padding: 10px 15px;
61
- // background: #007bff;
62
- // color: white;
63
- // border: none;
64
- // border-radius: 5px;
65
- // display: none;
66
- // cursor: pointer;
67
- // }
68
- // .scroll-to-top:hover {
69
- // background: #0056b3;
70
- // }
71
- // `;
72
- // document.head.appendChild(styleSheet);
73
- // });
74
-