db-drift 1.0.0__tar.gz → 1.1.0__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 (45) hide show
  1. {db_drift-1.0.0 → db_drift-1.1.0}/.github/SECURITY.md +4 -2
  2. {db_drift-1.0.0 → db_drift-1.1.0}/.github/workflows/ci.yml +2 -2
  3. {db_drift-1.0.0 → db_drift-1.1.0}/.github/workflows/release.yml +3 -3
  4. db_drift-1.1.0/CHANGELOG.md +11 -0
  5. {db_drift-1.0.0 → db_drift-1.1.0}/PKG-INFO +4 -4
  6. db_drift-1.1.0/docs/error-handling.md +112 -0
  7. db_drift-1.1.0/docs/favicon.png +0 -0
  8. db_drift-1.1.0/examples/example_diff_report.html +414 -0
  9. {db_drift-1.0.0 → db_drift-1.1.0}/pyproject.toml +7 -7
  10. db_drift-1.1.0/ruff.toml +101 -0
  11. db_drift-1.1.0/src/db_drift/__init__.py +1 -0
  12. db_drift-1.1.0/src/db_drift/__main__.py +103 -0
  13. db_drift-1.1.0/src/db_drift/cli/cli.py +35 -0
  14. db_drift-1.1.0/src/db_drift/cli/utils.py +9 -0
  15. db_drift-1.1.0/src/db_drift/utils/custom_logging.py +52 -0
  16. db_drift-1.1.0/src/db_drift/utils/exceptions/__init__.py +36 -0
  17. db_drift-1.1.0/src/db_drift/utils/exceptions/base.py +49 -0
  18. db_drift-1.1.0/src/db_drift/utils/exceptions/cli.py +68 -0
  19. db_drift-1.1.0/src/db_drift/utils/exceptions/config.py +117 -0
  20. db_drift-1.1.0/src/db_drift/utils/exceptions/database.py +153 -0
  21. db_drift-1.1.0/src/db_drift/utils/exceptions/formatting.py +175 -0
  22. db_drift-1.1.0/src/db_drift/utils/exceptions/status_codes.py +15 -0
  23. db_drift-1.1.0/tests/cli/__init__.py +1 -0
  24. db_drift-1.1.0/tests/cli/test_version.py +106 -0
  25. db_drift-1.1.0/tests/exceptions/__init__.py +1 -0
  26. db_drift-1.1.0/tests/exceptions/test_exceptions.py +198 -0
  27. {db_drift-1.0.0 → db_drift-1.1.0/tests}/ruff.toml +1 -0
  28. db_drift-1.1.0/uv.lock +1617 -0
  29. db_drift-1.0.0/CHANGELOG.md +0 -8
  30. db_drift-1.0.0/src/db_drift/__init__.py +0 -2
  31. db_drift-1.0.0/uv.lock +0 -1169
  32. {db_drift-1.0.0 → db_drift-1.1.0}/.github/FUNDING.yml +0 -0
  33. {db_drift-1.0.0 → db_drift-1.1.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  34. {db_drift-1.0.0 → db_drift-1.1.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  35. {db_drift-1.0.0 → db_drift-1.1.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  36. {db_drift-1.0.0 → db_drift-1.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  37. {db_drift-1.0.0 → db_drift-1.1.0}/.github/dependabot.yml +0 -0
  38. {db_drift-1.0.0 → db_drift-1.1.0}/.gitignore +0 -0
  39. {db_drift-1.0.0 → db_drift-1.1.0}/.python-version +0 -0
  40. {db_drift-1.0.0 → db_drift-1.1.0}/CODE_OF_CONDUCT.md +0 -0
  41. {db_drift-1.0.0 → db_drift-1.1.0}/CONTRIBUTING.md +0 -0
  42. {db_drift-1.0.0 → db_drift-1.1.0}/LICENSE +0 -0
  43. {db_drift-1.0.0 → db_drift-1.1.0}/README.md +0 -0
  44. /db_drift-1.0.0/examples/.gitkeep → /db_drift-1.1.0/src/db_drift/cli/__init__.py +0 -0
  45. /db_drift-1.0.0/tests/.gitkeep → /db_drift-1.1.0/src/db_drift/utils/__init__.py +0 -0
@@ -1,12 +1,14 @@
1
1
  # Security Policy
2
2
 
3
- ## Supported Versions
3
+ This project is still under active development, in a very early stage, the releases are not stable yet, and we are not ready to support security issues at this time. However, we take security seriously and will update this policy as the project matures.
4
+
5
+ <!-- ## Supported Versions
4
6
 
5
7
  We actively support the following versions of db-drift:
6
8
 
7
9
  | Version | Supported |
8
10
  | ------- | ------------------ |
9
- | 0.x.x | :white_check_mark: |
11
+ | 1.x.x | :white_check_mark: | -->
10
12
 
11
13
  ## Reporting a Vulnerability
12
14
 
@@ -12,10 +12,10 @@ jobs:
12
12
  python-version: ["3.13"]
13
13
 
14
14
  steps:
15
- - uses: actions/checkout@v4
15
+ - uses: actions/checkout@v5
16
16
 
17
17
  - name: Set up Python
18
- uses: actions/setup-python@v5
18
+ uses: actions/setup-python@v6
19
19
 
20
20
  - name: Install uv
21
21
  uses: astral-sh/setup-uv@v6
@@ -18,13 +18,13 @@ jobs:
18
18
 
19
19
  steps:
20
20
  - name: Checkout
21
- uses: actions/checkout@v4
21
+ uses: actions/checkout@v5
22
22
  with:
23
23
  fetch-depth: 0
24
24
  token: ${{ secrets.GITHUB_TOKEN }}
25
25
 
26
26
  - name: Set up Python
27
- uses: actions/setup-python@v5
27
+ uses: actions/setup-python@v6
28
28
  with:
29
29
  python-version: '3.13'
30
30
 
@@ -37,7 +37,7 @@ jobs:
37
37
 
38
38
  - name: Python Semantic Release
39
39
  id: release
40
- uses: python-semantic-release/python-semantic-release@v10.3.0
40
+ uses: python-semantic-release/python-semantic-release@v10.4.1
41
41
  with:
42
42
  github_token: ${{ secrets.GITHUB_TOKEN }}
43
43
 
@@ -0,0 +1,11 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
+ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
+
8
+ <!-- insertion marker -->
9
+ ## [v1.0.0](https://github.com/dyka3773/db-drift/releases/tag/v1.0.0) - 2025-08-04
10
+
11
+ <small>[Compare with first commit](https://github.com/dyka3773/db-drift/compare/4741274c923649ec7b499260bc11141a04b5d000...v1.0.0)</small>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: db-drift
3
- Version: 1.0.0
3
+ Version: 1.1.0
4
4
  Summary: A command line tool to visualize the differences between two DB states.
5
5
  Project-URL: source, https://github.com/dyka3773/db-drift
6
6
  Author-email: Hercules Konsoulas <dyka3773@gmail.com>
@@ -17,13 +17,13 @@ Classifier: Topic :: Software Development :: Build Tools
17
17
  Classifier: Topic :: Software Development :: Version Control
18
18
  Classifier: Topic :: Utilities
19
19
  Classifier: Typing :: Typed
20
- Requires-Python: >=3.13
20
+ Requires-Python: >=3.10
21
21
  Requires-Dist: oracledb>=3.3.0
22
22
  Requires-Dist: psycopg[binary]>=3.2.9
23
23
  Requires-Dist: pymysql>=1.1.1
24
24
  Requires-Dist: python-dotenv>=1.1.1
25
- Requires-Dist: pyyaml>=6.0.2
26
- Requires-Dist: sqlmodel>=0.0.24
25
+ Requires-Dist: pyyaml>=6.0.3
26
+ Requires-Dist: sqlmodel>=0.0.25
27
27
  Requires-Dist: sshtunnel>=0.4.0
28
28
  Description-Content-Type: text/markdown
29
29
 
@@ -0,0 +1,112 @@
1
+ <!-- omit in toc -->
2
+ # Exception Handling and Error Codes
3
+
4
+ This document describes the exception handling system and error codes used in db-drift.
5
+
6
+ <!-- omit in toc -->
7
+ ## Table of Contents
8
+ - [Error Code Standards](#error-code-standards)
9
+ - [Standard Exit Codes](#standard-exit-codes)
10
+ - [Exception Hierarchy](#exception-hierarchy)
11
+ - [Base Exceptions](#base-exceptions)
12
+ - [CLI Exceptions](#cli-exceptions)
13
+ - [Database Exceptions](#database-exceptions)
14
+ - [Configuration Exceptions](#configuration-exceptions)
15
+ - [Debug Mode](#debug-mode)
16
+ - [Error Handling Best Practices](#error-handling-best-practices)
17
+ - [For Developers](#for-developers)
18
+ - [For Users](#for-users)
19
+
20
+
21
+ ## Error Code Standards
22
+
23
+ db-drift follows Unix-style exit codes and BSD sysexits.h standards for consistency. All exit codes are defined in the `ExitCode` enum located in `src/db_drift/utils/exceptions/status_codes.py`.
24
+
25
+ ### Standard Exit Codes
26
+
27
+ | Exit Code | Constant | Description | Exception Type |
28
+ |-----------|----------|-------------|----------------|
29
+ | 0 | `ExitCode.SUCCESS` | Success | - |
30
+ | 1 | `ExitCode.GENERAL_ERROR` | General error | `DbDriftSystemError`, unexpected errors |
31
+ | 2 | `ExitCode.USAGE_ERROR` | CLI usage error | `CliError`, `CliArgumentError`, `CliUsageError` |
32
+ | 65 | `ExitCode.DATA_ERROR` | Data format error | `DatabaseSchemaError` |
33
+ | 66 | `ExitCode.NO_INPUT` | Cannot open input file | File not found errors |
34
+ | 69 | `ExitCode.UNAVAILABLE` | Service unavailable | Database connection failures |
35
+ | 70 | `ExitCode.SOFTWARE_ERROR` | Internal software error | `DatabaseQueryError` |
36
+ | 77 | `ExitCode.NO_PERMISSION` | Permission denied | File/directory permission errors |
37
+ | 78 | `ExitCode.CONFIG_ERROR` | Configuration error | `ConfigError`, `MissingConfigError` |
38
+ | 130 | `ExitCode.SIGINT` | User interruption | Ctrl+C (SIGINT) |
39
+
40
+ ## Exception Hierarchy
41
+
42
+ ### Base Exceptions
43
+
44
+ - `DbDriftError`: Base class for all application exceptions
45
+ - `DbDriftUserError`: User-caused errors (exit code 2)
46
+ - `DbDriftSystemError`: System-level errors (exit code 1)
47
+ - `DbDriftInterruptError`: User interruption (exit code 130)
48
+
49
+ ### CLI Exceptions
50
+
51
+ - `CliError`: Base CLI exception (exit code 2)
52
+ - `CliArgumentError`: Invalid command-line arguments
53
+ - `CliUsageError`: Incorrect usage patterns
54
+ - `CliConfigError`: CLI configuration issues
55
+
56
+ ### Database Exceptions
57
+
58
+ - `DatabaseError`: Base database exception (exit code 1)
59
+ - `DatabaseConnectionError`: Connection failures
60
+ - `DatabaseQueryError`: Query execution errors
61
+ - `DatabaseSchemaError`: Schema-related errors
62
+ - `DatabaseAuthenticationError`: Authentication failures
63
+ - `DatabaseTimeoutError`: Operation timeouts
64
+
65
+ ### Configuration Exceptions
66
+
67
+ - `ConfigError`: Base configuration exception (exit code 2)
68
+ - `MissingConfigError`: Missing required configuration
69
+ - `ConfigValidationError`: Invalid configuration values
70
+ - `ConfigFormatError`: Configuration file format errors
71
+
72
+ ## Debug Mode
73
+
74
+ Set the environment variable `DB_DRIFT_DEBUG=1` to enable debug mode:
75
+
76
+ - Shows full Python tracebacks
77
+ - Provides detailed error information
78
+ - Useful for development and troubleshooting
79
+
80
+ Example:
81
+ ```bash
82
+ DB_DRIFT_DEBUG=1 db-drift --source db1 --target db2
83
+ ```
84
+
85
+ ## Error Handling Best Practices
86
+
87
+ ### For Developers
88
+
89
+ 1. **Use specific exceptions**: Choose the most specific exception type
90
+ 2. **Provide helpful messages**: Include context and suggestions
91
+ 3. **Set appropriate exit codes**: Follow the standard codes above
92
+ 4. **Log errors properly**: Use `logger.exception()` for caught exceptions
93
+
94
+ Example:
95
+ ```python
96
+ try:
97
+ connect_to_database(connection_string)
98
+ except ConnectionError as e:
99
+ raise DatabaseConnectionError(
100
+ f"Failed to connect to {host}:{port}",
101
+ host=host,
102
+ port=port,
103
+ database=database_name
104
+ ) from e
105
+ ```
106
+
107
+ ### For Users
108
+
109
+ 1. **Check exit codes**: Use `echo $?` (Unix) or `echo %ERRORLEVEL%` (Windows)
110
+ 2. **Enable debug mode**: Set `DB_DRIFT_DEBUG=1` for detailed errors
111
+ 3. **Read suggestions**: Error messages often include helpful suggestions
112
+ 4. **Check logs**: Detailed logs are written to `.logs/db-drift.log`
Binary file
@@ -0,0 +1,414 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+
9
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css" rel="stylesheet"
10
+ integrity="sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp" crossorigin="anonymous">
11
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/js/bootstrap.bundle.min.js"
12
+ integrity="sha384-qKXV1j0HvMUeCBQ+QVp7JcfGl760yU08IQ+GpUo5hlbpg51QRiuqHAJz8+BrxE/N" crossorigin="anonymous">
13
+ </script>
14
+ <style type="text/css">
15
+ table {
16
+ /* This will make every table use its full width*/
17
+ margin: auto;
18
+ width: 100% !important;
19
+ }
20
+
21
+ .col {
22
+ /* This will vertically align all the columns */
23
+ vertical-align: middle !important;
24
+ }
25
+
26
+ th[colspan="2"],
27
+ td[colspan="2"] {
28
+ /* This will horizontally align the key columns like:
29
+ - The table headers
30
+ - Special cases like "REMOVED" and "NOT PRESENT" when referring to an object
31
+ */
32
+ text-align: center;
33
+ }
34
+
35
+ td>table {
36
+ /* This will make the tables inside the columns use their full size */
37
+ width: 100% !important;
38
+ height: 100% !important;
39
+ }
40
+
41
+ td>table>tbody>tr>td {
42
+ /* This will make the columns that are inside tables that are inside columns have a small padding*/
43
+ padding: 0.4rem !important;
44
+ }
45
+
46
+ td:has(> table) {
47
+ /* This will make the columns have a table inside them have no padding
48
+ This enables us to use the table's colours in whole size of the column */
49
+ padding: 0 !important;
50
+ }
51
+
52
+ th {
53
+ /* This will make the table headers occupy 50% of the table each */
54
+ width: 50%;
55
+ }
56
+ </style>
57
+
58
+ <title>DB Diff Report</title>
59
+ </head>
60
+
61
+ <body>
62
+ <header class="navbar navbar-light bg-light">
63
+ <div class="container-fluid">
64
+ <a class="navbar-brand" href="#">
65
+ Database Differences Report
66
+ </a>
67
+ </div>
68
+ </header>
69
+
70
+ <main class="container">
71
+
72
+ <div class="table-responsive">
73
+ <table class="table table-bordered caption-top">
74
+ <caption class="caption-top">
75
+ <h5>TABLES</h5>
76
+ </caption>
77
+ <thead>
78
+ <tr>
79
+ <th class="col" colspan="2">
80
+ <h5>Version: v1.0.0</h5>
81
+ </th>
82
+ <th class="col" colspan="2">
83
+ <h5>Version: v1.1.0</h5>
84
+ </th>
85
+ </tr>
86
+ </thead>
87
+ <tbody>
88
+
89
+
90
+ <tr>
91
+ <td class="col bg-danger-subtle" colspan="2" style="text-align:center">TABLE_1</td>
92
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
93
+ </tr>
94
+ <tr>
95
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE_2</td>
96
+ <td class="col bg-danger-subtle">
97
+ <table class="table-borderless">
98
+ <tr>
99
+ <td class="col">
100
+ COL1: TIMESTAMP(6)
101
+ </td>
102
+ </tr>
103
+ <tr>
104
+ <td class="col">
105
+ COL2: VARCHAR2
106
+ </td>
107
+ </tr>
108
+ <tr>
109
+ <td class="col">
110
+ COL3: VARCHAR2
111
+ </td>
112
+ </tr>
113
+ <tr>
114
+ <td class="col">
115
+ COL4: NUMBER
116
+ </td>
117
+ </tr>
118
+ <tr>
119
+ <td class="col">
120
+ COL5: VARCHAR2
121
+ </td>
122
+ </tr>
123
+ <tr>
124
+ <td class="col">
125
+ COL6: NUMBER
126
+ </td>
127
+ </tr>
128
+ <tr>
129
+ <td class="col">
130
+ COL7: VARCHAR2
131
+ </td>
132
+ </tr>
133
+ <tr>
134
+ <td class="col">
135
+ COL8: NUMBER
136
+ </td>
137
+ </tr>
138
+ <tr>
139
+ <td class="col">
140
+ COL9: NUMBER
141
+ </td>
142
+ </tr>
143
+ </table>
144
+ </td>
145
+ <td class="col" colspan="2">PROPERTIES WERE REMOVED</td>
146
+ </tr>
147
+ <tr>
148
+ <td class="col" style="text-align:center">TABLE_3</td>
149
+ <td class="col bg-warning-subtle">
150
+ <table class="table-borderless">
151
+ <tr>
152
+ <td class="col
153
+ bg-warning-subtle
154
+ ">
155
+ <span class="badge bg-dark-subtle text-dark rounded-pill">documentation</span>
156
+ This is the previous documentation for TABLE_3.
157
+ </td>
158
+ </tr>
159
+ </table>
160
+ </td>
161
+ <td class="col" style="text-align:center">TABLE_3</td>
162
+ <td class="col">
163
+ <table class="table-borderless">
164
+ <tr>
165
+ <td class="col
166
+ bg-warning-subtle
167
+ ">
168
+ <span class="badge bg-dark-subtle text-dark rounded-pill">documentation</span>
169
+ This is the new documentation for TABLE_3.
170
+ </td>
171
+ </tr>
172
+ </table>
173
+ </td>
174
+ </tr>
175
+
176
+
177
+ </tbody>
178
+ </table>
179
+ </div>
180
+
181
+ <div class="table-responsive">
182
+ <table class="table table-bordered caption-top">
183
+ <caption class="caption-top">
184
+ <h5>INDEXES</h5>
185
+ </caption>
186
+ <thead>
187
+ <tr>
188
+ <th class="col" colspan="2">
189
+ <h5>Version: v1.0.0</h5>
190
+ </th>
191
+ <th class="col" colspan="2">
192
+ <h5>Version: v1.1.0</h5>
193
+ </th>
194
+ </tr>
195
+ </thead>
196
+ <tbody>
197
+
198
+
199
+ <tr>
200
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE_1_PK</td>
201
+ <td class="col bg-danger-subtle">
202
+ <table class="table-borderless">
203
+ <tr>
204
+ <td class="col">
205
+ table: TABLE_1, columns: [COL1], uniqueness: UNIQUE, prefix_length:
206
+ None, tablespace: SOME_TABLESPACE
207
+ </td>
208
+ </tr>
209
+ </table>
210
+ </td>
211
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
212
+ </tr>
213
+ <tr>
214
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE4_COL1_UK</td>
215
+ <td class="col bg-danger-subtle">
216
+ <table class="table-borderless">
217
+ <tr>
218
+ <td class="col">
219
+ table: TABLE_4, columns: [COL1], uniqueness: UNIQUE, prefix_length: None,
220
+ tablespace: SOME_TABLESPACE
221
+ </td>
222
+ </tr>
223
+ </table>
224
+ </td>
225
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
226
+ </tr>
227
+ <tr>
228
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE4_COL2_IDX</td>
229
+ <td class="col bg-danger-subtle">
230
+ <table class="table-borderless">
231
+ <tr>
232
+ <td class="col">
233
+ table: TABLE_4, columns: [COL2], uniqueness: NONUNIQUE, prefix_length:
234
+ None, tablespace: SOME_TABLESPACE
235
+ </td>
236
+ </tr>
237
+ </table>
238
+ </td>
239
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
240
+ </tr>
241
+ <tr>
242
+ <td class="col bg-light" colspan="2">OBJECT NOT PRESENT</td>
243
+ <td class="col bg-success-subtle" style="text-align:center">TABLE5_IDX</td>
244
+ <td class="col bg-success-subtle">
245
+ <table class="table-borderless">
246
+ <tr>
247
+ <td class="col">
248
+ table: TABLE_5, columns: [COL1], uniqueness: NONUNIQUE,
249
+ prefix_length: None, tablespace: None
250
+ </td>
251
+ </tr>
252
+ </table>
253
+ </td>
254
+ </tr>
255
+
256
+
257
+ </tbody>
258
+ </table>
259
+ </div>
260
+
261
+ <div class="table-responsive">
262
+ <table class="table table-bordered caption-top">
263
+ <caption class="caption-top">
264
+ <h5>CONSTRAINTS</h5>
265
+ </caption>
266
+ <thead>
267
+ <tr>
268
+ <th class="col" colspan="2">
269
+ <h5>Version: v1.0.0</h5>
270
+ </th>
271
+ <th class="col" colspan="2">
272
+ <h5>Version: v1.1.0</h5>
273
+ </th>
274
+ </tr>
275
+ </thead>
276
+ <tbody>
277
+
278
+
279
+ <tr>
280
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE_1_FK</td>
281
+ <td class="col bg-danger-subtle">
282
+ <table class="table-borderless">
283
+ <tr>
284
+ <td class="col">
285
+ table: TABLE_1, type: REFERENTIAL INTEGRITY (FOREIGN KEY), rule: NO
286
+ ACTION
287
+ </td>
288
+ </tr>
289
+ </table>
290
+ </td>
291
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
292
+ </tr>
293
+ <tr>
294
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE_1_PK</td>
295
+ <td class="col bg-danger-subtle">
296
+ <table class="table-borderless">
297
+ <tr>
298
+ <td class="col">
299
+ table: TABLE_1, columns: [COL2], type: PRIMARY KEY
300
+ </td>
301
+ </tr>
302
+ </table>
303
+ </td>
304
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
305
+ </tr>
306
+ <tr>
307
+ <td class="col bg-danger-subtle" style="text-align:center">TABLE4_FK</td>
308
+ <td class="col bg-danger-subtle">
309
+ <table class="table-borderless">
310
+ <tr>
311
+ <td class="col">
312
+ table: TABLE_4, type: REFERENTIAL INTEGRITY (FOREIGN KEY), rule: NO ACTION
313
+ </td>
314
+ </tr>
315
+ </table>
316
+ </td>
317
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
318
+ </tr>
319
+
320
+
321
+ </tbody>
322
+ </table>
323
+ </div>
324
+
325
+ <div class="table-responsive">
326
+ <table class="table table-bordered caption-top">
327
+ <caption class="caption-top">
328
+ <h5>PACKAGES</h5>
329
+ </caption>
330
+ <thead>
331
+ <tr>
332
+ <th class="col" colspan="2">
333
+ <h5>Version: v1.0.0</h5>
334
+ </th>
335
+ <th class="col" colspan="2">
336
+ <h5>Version: v1.1.0</h5>
337
+ </th>
338
+ </tr>
339
+ </thead>
340
+ <tbody>
341
+
342
+
343
+ <tr>
344
+ <td class="col" colspan="2">PKG_1</td>
345
+ <td class="col" style="text-align:center">PKG_1</td>
346
+ <td class="col bg-warning-subtle">Package Body and Definition has been changed</td>
347
+ </tr>
348
+
349
+
350
+ </tbody>
351
+ </table>
352
+ </div>
353
+
354
+ <div class="table-responsive">
355
+ <table class="table table-bordered caption-top">
356
+ <caption class="caption-top">
357
+ <h5>JOBS</h5>
358
+ </caption>
359
+ <thead>
360
+ <tr>
361
+ <th class="col" colspan="2">
362
+ <h5>Version: v1.0.0</h5>
363
+ </th>
364
+ <th class="col" colspan="2">
365
+ <h5>Version: v1.1.0</h5>
366
+ </th>
367
+ </tr>
368
+ </thead>
369
+ <tbody>
370
+
371
+
372
+ <tr>
373
+ <td class="col bg-danger-subtle" style="text-align:center">JOB_1</td>
374
+ <td class="col bg-danger-subtle">
375
+ <table class="table-borderless">
376
+ <tr>
377
+ <td class="col">
378
+ action: JOB_1_SP, interval: FREQ=HOURLY
379
+ </td>
380
+ </tr>
381
+ </table>
382
+ </td>
383
+ <td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
384
+ </tr>
385
+ <tr>
386
+ <td class="col bg-light" colspan="2">OBJECT NOT PRESENT</td>
387
+ <td class="col bg-success-subtle" style="text-align:center">JOB_2</td>
388
+ <td class="col bg-success-subtle">
389
+ <table class="table-borderless">
390
+ <tr>
391
+ <td class="col">
392
+ <span class="badge bg-dark-subtle text-dark rounded-pill">documentation</span> a
393
+ job that schedules a daily sync of an index in TABLE_5
394
+ </td>
395
+ </tr>
396
+ <tr>
397
+ <td class="col">
398
+ action: PKG_1.JOB_2_SP, interval:
399
+ FREQ=DAILY;BYHOUR=4;BYMINUTE=0;BYSECOND=0
400
+ </td>
401
+ </tr>
402
+ </table>
403
+ </td>
404
+ </tr>
405
+
406
+
407
+ </tbody>
408
+ </table>
409
+ </div>
410
+
411
+ </main>
412
+ </body>
413
+
414
+ </html>
@@ -1,12 +1,12 @@
1
1
  [project]
2
2
  name = "db-drift"
3
- version = "1.0.0"
3
+ version = "1.1.0"
4
4
  description = "A command line tool to visualize the differences between two DB states."
5
5
  readme = "README.md"
6
6
  authors = [
7
7
  { name = "Hercules Konsoulas", email = "dyka3773@gmail.com" }
8
8
  ]
9
- requires-python = ">=3.13"
9
+ requires-python = ">=3.10"
10
10
  license = "MIT"
11
11
  keywords = [
12
12
  "db-drift",
@@ -33,8 +33,8 @@ dependencies = [
33
33
  "psycopg[binary]>=3.2.9",
34
34
  "pymysql>=1.1.1",
35
35
  "python-dotenv>=1.1.1",
36
- "pyyaml>=6.0.2",
37
- "sqlmodel>=0.0.24",
36
+ "pyyaml>=6.0.3",
37
+ "sqlmodel>=0.0.25",
38
38
  "sshtunnel>=0.4.0",
39
39
  ]
40
40
 
@@ -47,10 +47,10 @@ db-drift = "db_drift:main"
47
47
  [dependency-groups]
48
48
  dev = [
49
49
  "build>=1.3.0",
50
- "git-changelog>=2.5.3",
50
+ "git-changelog==2.6.3",
51
51
  "pytest>=8.4.1",
52
- "python-semantic-release>=10.3.0",
53
- "tox>=4.28.4",
52
+ "python-semantic-release==10.4.1",
53
+ "tox==4.30.3",
54
54
  "twine>=6.1.0",
55
55
  ]
56
56