checkmate5 4.1.0.dev17__tar.gz → 4.1.0.dev20__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 (131) hide show
  1. {checkmate5-4.1.0.dev17/checkmate5.egg-info → checkmate5-4.1.0.dev20}/PKG-INFO +1 -11
  2. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/README.md +0 -10
  3. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/backend.py +0 -48
  4. checkmate5-4.1.0.dev20/checkmate/lib/models.py +234 -0
  5. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20/checkmate5.egg-info}/PKG-INFO +1 -11
  6. checkmate5-4.1.0.dev17/checkmate/lib/models.py +0 -518
  7. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/.github/workflows/auto-tag.yml +0 -0
  8. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/.github/workflows/publish-to-pypi.yml +0 -0
  9. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/CHANGELOG.txt +0 -0
  10. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/LICENSE.txt +0 -0
  11. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/MANIFEST.in +0 -0
  12. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/Pipfile +0 -0
  13. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/__init__.py +0 -0
  14. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/__main__.py +0 -0
  15. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/__init__.py +0 -0
  16. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/__init__.py +0 -0
  17. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/all/gptanalyzer/__init__.py +0 -0
  18. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/all/gptanalyzer/analyzer.py +0 -0
  19. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/all/gptanalyzer/issues_data.py +0 -0
  20. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/all/gptanalyzer/setup.py +0 -0
  21. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/cve/__init__.py +0 -0
  22. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/cve/text4shell/__init__.py +0 -0
  23. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/cve/text4shell/analyzer.py +0 -0
  24. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/cve/text4shell/issues_data.py +0 -0
  25. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/cve/text4shell/setup.py +0 -0
  26. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/__init__.py +0 -0
  27. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/commands/__init__.py +0 -0
  28. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/commands/analyze.py +0 -0
  29. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/commands/base.py +0 -0
  30. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/commands/diff.py +0 -0
  31. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/commands/init.py +0 -0
  32. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/commands/update_stats.py +0 -0
  33. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/hooks/__init__.py +0 -0
  34. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/hooks/project.py +0 -0
  35. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/lib/__init__.py +0 -0
  36. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/lib/repository.py +0 -0
  37. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/lib/repository_pygit2.py +0 -0
  38. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/lib/ssh +0 -0
  39. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/models.py +0 -0
  40. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/git/setup.py +0 -0
  41. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/golang/__init__.py +0 -0
  42. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/golang/gostaticcheck/__init__.py +0 -0
  43. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/golang/gostaticcheck/analyzer.py +0 -0
  44. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/golang/gostaticcheck/issues_data.py +0 -0
  45. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/golang/gostaticcheck/setup.py +0 -0
  46. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/__init__.py +0 -0
  47. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/kubescape/__init__.py +0 -0
  48. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/kubescape/analyzer.py +0 -0
  49. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/kubescape/issues_data.py +0 -0
  50. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/kubescape/setup.py +0 -0
  51. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/tfsec/__init__.py +0 -0
  52. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/tfsec/analyzer.py +0 -0
  53. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/tfsec/issues_data.py +0 -0
  54. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/iac/tfsec/setup.py +0 -0
  55. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/java/__init__.py +0 -0
  56. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/java/semgrepjava/__init__.py +0 -0
  57. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/java/semgrepjava/analyzer.py +0 -0
  58. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/java/semgrepjava/issues_data.py +0 -0
  59. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/java/semgrepjava/setup.py +0 -0
  60. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/javascript/__init__.py +0 -0
  61. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/javascript/semgrepeslint/__init__.py +0 -0
  62. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/javascript/semgrepeslint/analyzer.py +0 -0
  63. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/javascript/semgrepeslint/issues_data.py +0 -0
  64. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/javascript/semgrepeslint/setup.py +0 -0
  65. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/perl/__init__.py +0 -0
  66. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/perl/graudit/__init__.py +0 -0
  67. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/perl/graudit/analyzer.py +0 -0
  68. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/perl/graudit/issues_data.py +0 -0
  69. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/perl/graudit/setup.py +0 -0
  70. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/python/__init__.py +0 -0
  71. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/python/bandit/__init__.py +0 -0
  72. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/python/bandit/analyzer.py +0 -0
  73. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/python/bandit/issues_data.py +0 -0
  74. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/python/bandit/setup.py +0 -0
  75. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/ruby/__init__.py +0 -0
  76. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/ruby/brakeman/__init__.py +0 -0
  77. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/ruby/brakeman/analyzer.py +0 -0
  78. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/ruby/brakeman/issues_data.py +0 -0
  79. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/contrib/plugins/ruby/brakeman/setup.py +0 -0
  80. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/exceptions.py +0 -0
  81. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/helpers/__init__.py +0 -0
  82. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/helpers/facts.py +0 -0
  83. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/helpers/hashing.py +0 -0
  84. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/helpers/issue.py +0 -0
  85. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/helpers/settings.py +0 -0
  86. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/__init__.py +0 -0
  87. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/analysis/__init__.py +0 -0
  88. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/analysis/base.py +0 -0
  89. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/code/__init__.py +0 -0
  90. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/code/environment.py +0 -0
  91. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/stats/__init__.py +0 -0
  92. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/stats/helpers.py +0 -0
  93. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/lib/stats/mapreduce.py +0 -0
  94. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/__init__.py +0 -0
  95. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/__init__.py +0 -0
  96. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/alembic.py +0 -0
  97. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/analyze.py +0 -0
  98. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/analyzers.py +0 -0
  99. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/base.py +0 -0
  100. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/compare.py +0 -0
  101. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/export.py +0 -0
  102. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/info.py +0 -0
  103. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/init.py +0 -0
  104. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/issues.py +0 -0
  105. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/props/__init__.py +0 -0
  106. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/props/delete.py +0 -0
  107. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/props/get.py +0 -0
  108. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/props/set.py +0 -0
  109. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/reset.py +0 -0
  110. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/shell.py +0 -0
  111. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/snapshots.py +0 -0
  112. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/stats.py +0 -0
  113. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/summary.py +0 -0
  114. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/sync.py +0 -0
  115. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/trend.py +0 -0
  116. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/commands/watch.py +0 -0
  117. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/decorators.py +0 -0
  118. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/management/helpers.py +0 -0
  119. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/scripts/__init__.py +0 -0
  120. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/scripts/manage.py +0 -0
  121. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/settings/__init__.py +0 -0
  122. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/settings/base.py +0 -0
  123. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate/settings/defaults.py +0 -0
  124. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate5.egg-info/SOURCES.txt +0 -0
  125. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate5.egg-info/dependency_links.txt +0 -0
  126. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate5.egg-info/entry_points.txt +0 -0
  127. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate5.egg-info/requires.txt +0 -0
  128. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/checkmate5.egg-info/top_level.txt +0 -0
  129. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/exceptions.py +0 -0
  130. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/pyproject.toml +0 -0
  131. {checkmate5-4.1.0.dev17 → checkmate5-4.1.0.dev20}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: checkmate5
3
- Version: 4.1.0.dev17
3
+ Version: 4.1.0.dev20
4
4
  Summary: A meta-code checker written in Python.
5
5
  Author: Andreas Dewes
6
6
  License: AGPL-3.0
@@ -13,16 +13,6 @@ Requires-Dist: blitzdb5
13
13
  Requires-Dist: pyyaml
14
14
  Requires-Dist: sqlalchemy
15
15
 
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
16
  # Welcome to Checkmate!
27
17
 
28
18
 
@@ -1,13 +1,3 @@
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
1
  # Welcome to Checkmate!
12
2
 
13
3
 
@@ -1,4 +1,3 @@
1
- from blitzdb import FileBackend as BlitzDBFileBackend
2
1
  from blitzdb.backends.sql import Backend as BlitzDBSQLBackend
3
2
  from typing import Any, Optional, Dict
4
3
  import logging
@@ -6,53 +5,6 @@ from contextlib import contextmanager
6
5
 
7
6
  logger = logging.getLogger(__name__)
8
7
 
9
- class FileBackend(BlitzDBFileBackend):
10
- def __init__(self, path: str) -> None:
11
- """Initialize FileBackend with specified path.
12
-
13
- Args:
14
- path: Path to store the database files
15
-
16
- Raises:
17
- ValueError: If path is invalid
18
- """
19
- logger.debug(f"Initializing FileBackend with path: {path}")
20
- super().__init__(path)
21
- self.path = path
22
-
23
- def test_connection(self) -> bool:
24
- """Test the file access.
25
-
26
- Returns:
27
- bool: True if file access is successful
28
-
29
- Raises:
30
- ConnectionError: If file access test fails
31
- """
32
- try:
33
- self.begin()
34
- self.commit()
35
- logger.info("File access test successful")
36
- return True
37
- except Exception as e:
38
- logger.error(f"File access test failed: {str(e)}")
39
- raise ConnectionError(f"File access test failed: {str(e)}")
40
-
41
- @contextmanager
42
- def session(self):
43
- """Context manager for file operations.
44
-
45
- Yields:
46
- FileBackend: Self with active session
47
- """
48
- try:
49
- self.begin()
50
- yield self
51
- self.commit()
52
- except Exception as e:
53
- logger.error(f"Session error: {str(e)}")
54
- self.rollback()
55
- raise
56
8
 
57
9
  class SQLBackend(BlitzDBSQLBackend):
58
10
  def __init__(self, connection: Any) -> None:
@@ -0,0 +1,234 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from blitzdb import Document
4
+ from blitzdb.fields import (BooleanField,
5
+ CharField,
6
+ DateTimeField,
7
+ ForeignKeyField,
8
+ ManyToManyField,
9
+ TextField,
10
+ EnumField,
11
+ IntegerField)
12
+
13
+ import os
14
+ import uuid
15
+ import time
16
+ import datetime
17
+ import logging
18
+ import traceback
19
+
20
+ from checkmate.helpers.hashing import Hasher
21
+ from checkmate.lib.stats.helpers import directory_splitter
22
+ from checkmate.lib.analysis import AnalyzerSettingsError
23
+ from checkmate.helpers.issue import IssuesMapReducer
24
+
25
+ try:
26
+ from sqlalchemy.sql import (select,
27
+ insert,
28
+ func,
29
+ and_,
30
+ expression,
31
+ exists)
32
+ except ImportError:
33
+ pass
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ class BaseDocument(Document):
38
+
39
+ __abstract__ = True
40
+
41
+ created_at = DateTimeField(auto_now_add=True, indexed=True)
42
+ updated_at = DateTimeField(auto_now=True, indexed=True)
43
+
44
+ def before_save(self):
45
+ if not 'created_at' in self:
46
+ self.created_at = datetime.datetime.now()
47
+ self.updated_at = datetime.datetime.now()
48
+
49
+ def before_update(self, set_fields, unset_fields):
50
+ self.updated_at = datetime.datetime.now()
51
+ set_fields['updated_at'] = self.updated_at
52
+
53
+ class IssueCategory(BaseDocument):
54
+
55
+ name = CharField(indexed=True, unique=True, length=50)
56
+
57
+ class IssueClass(BaseDocument):
58
+
59
+ class Severity:
60
+ critical = 1
61
+ potential_bug = 2
62
+ minor = 3
63
+ recommendation = 4
64
+
65
+ hash = CharField(indexed=True, length=64)
66
+ title = CharField(indexed=True, length=100)
67
+ analyzer = CharField(indexed=True, length=50)
68
+ language = CharField(indexed=True, length=50)
69
+ code = CharField(indexed=True, length=50)
70
+ description = TextField(indexed=False)
71
+
72
+ occurrence_description = CharField(indexed=True, length=2000)
73
+
74
+ severity = IntegerField(indexed=True)
75
+ categories = ManyToManyField('IssueCategory')
76
+
77
+ class Meta(BaseDocument.Meta):
78
+ unique_together = (('code', 'analyzer'),)
79
+
80
+ class IssueOccurrence(BaseDocument):
81
+
82
+ hash = CharField(indexed=True, length=64)
83
+ file_revision = ForeignKeyField(
84
+ 'FileRevision', backref='issue_occurrences')
85
+ issue = ForeignKeyField('Issue', backref='issue_occurrences')
86
+ from_row = IntegerField()
87
+ to_row = IntegerField()
88
+ from_column = IntegerField()
89
+ to_column = IntegerField()
90
+ sequence = IntegerField(default=0)
91
+
92
+ class Issue(BaseDocument):
93
+
94
+ class IgnoreReason:
95
+ not_specified = 0
96
+ not_relevant = 1
97
+ false_positive = 2
98
+
99
+ hash = CharField(indexed=True, length=64)
100
+ configuration = CharField(indexed=True, length=64)
101
+ project = ForeignKeyField('Project', backref='issues', nullable=False)
102
+ analyzer = CharField(indexed=True, length=100, nullable=False)
103
+ code = CharField(indexed=True, length=100, nullable=False)
104
+ fingerprint = CharField(indexed=True, length=255, nullable=False)
105
+
106
+ ignore = BooleanField(indexed=True, default=False, nullable=False)
107
+ ignore_reason = IntegerField(indexed=True, nullable=True)
108
+ ignore_comment = CharField(indexed=False, length=255, nullable=True)
109
+
110
+ class Meta(Document.Meta):
111
+ unique_together = [('project', 'fingerprint', 'analyzer', 'code')]
112
+ dbref_includes = ['code', 'analyzer']
113
+
114
+ class MockFileRevision(BaseDocument):
115
+
116
+ __abstract__ = True
117
+
118
+ def get_file_content(self):
119
+ return self.code
120
+
121
+ class FileRevision(BaseDocument):
122
+
123
+ hash = CharField(indexed=True, length=64)
124
+ configuration = CharField(indexed=True, length=64)
125
+ project = ForeignKeyField('Project')
126
+ path = CharField(indexed=True, length=2000)
127
+ language = CharField(indexed=True, length=50)
128
+ sha = CharField(indexed=True, length=64)
129
+ dependencies = ManyToManyField(
130
+ 'FileRevision', backref='dependent_file_revisions')
131
+
132
+ class Meta(Document.Meta):
133
+ collection = "filerevision"
134
+
135
+ def get_file_content(self):
136
+ if hasattr(self, '_file_content'):
137
+ if callable(self._file_content):
138
+ return self._file_content()
139
+ return self._file_content
140
+ raise NotImplementedError
141
+
142
+ class Diff(BaseDocument):
143
+
144
+ hash = CharField(indexed=True, length=64)
145
+ configuration = CharField(indexed=True, length=64)
146
+ project = ForeignKeyField('Project', backref='diffs')
147
+ snapshot_a = ForeignKeyField('Snapshot', backref='diffs_a')
148
+ snapshot_b = ForeignKeyField('Snapshot', backref='diffs_b')
149
+
150
+ def summarize_issues(self, include_filename=False, ignore=False):
151
+ # Placeholder for non-FileBackend summarization
152
+ return {
153
+ "added": [],
154
+ "fixed": []
155
+ }
156
+
157
+ class DiffIssueOccurrence(BaseDocument):
158
+
159
+ hash = CharField(indexed=True, length=64)
160
+ configuration = CharField(indexed=True, length=64)
161
+ diff = ForeignKeyField('Diff', backref='issue_occurrences')
162
+ issue_occurrence = ForeignKeyField(
163
+ 'IssueOccurrence', backref='diff_issue_occurrences')
164
+ key = EnumField(enums=('added', 'fixed'))
165
+
166
+ class DiffFileRevision(BaseDocument):
167
+
168
+ hash = CharField(indexed=True, length=64)
169
+ configuration = CharField(indexed=True, length=64)
170
+ diff = ForeignKeyField('Diff', backref='file_revisions')
171
+ file_revision = ForeignKeyField('FileRevision', backref='diffs')
172
+ key = EnumField(enums=('added', 'deleted', 'modified'))
173
+
174
+ class Snapshot(BaseDocument):
175
+
176
+ hash = CharField(indexed=True, length=64)
177
+ configuration = CharField(indexed=True, length=64)
178
+ project = ForeignKeyField('Project')
179
+ file_revisions = ManyToManyField('FileRevision', backref='snapshots')
180
+ analyzed = BooleanField(indexed=True)
181
+
182
+ class Meta(Document.Meta):
183
+ pass
184
+
185
+ def summarize_issues(self, include_filename=False, ignore=False):
186
+ # Placeholder for non-FileBackend summarization
187
+ return {
188
+ "issues": []
189
+ }
190
+
191
+ class ProjectIssueClass(BaseDocument):
192
+
193
+ project = ForeignKeyField('Project', backref='project_issue_classes')
194
+ issue_class = ForeignKeyField(
195
+ 'IssueClass', backref='project_issue_classes')
196
+ enabled = BooleanField(default=True)
197
+
198
+ class Meta(BaseDocument.Meta):
199
+ unique_together = (('project', 'issue_class'),)
200
+
201
+ class Project(BaseDocument):
202
+
203
+ IssueClass = IssueClass
204
+ project_id = IntegerField(indexed=True, unique=True)
205
+
206
+ configuration = CharField(indexed=True, length=64)
207
+
208
+ class Meta(Document.Meta):
209
+ collection = "project"
210
+
211
+ @property
212
+ def settings(self):
213
+ return self.get('settings', {})
214
+
215
+ def get_issue_classes(self, backend=None, enabled=True, sort=None, **kwargs):
216
+ # Simplified logic without FileBackend
217
+ query = {'project_issue_classes.project': self}
218
+ if enabled is not None:
219
+ query['project_issue_classes.enabled'] = enabled
220
+
221
+ issue_classes = [] # Replace with backend-independent logic
222
+
223
+ return issue_classes
224
+
225
+ def get_issues_data(self, backend=None, extra_fields=None):
226
+
227
+ if extra_fields is None:
228
+ extra_fields = []
229
+
230
+ grouped_issue_data = {}
231
+
232
+ # Simplified placeholder logic for issues data retrieval
233
+ return grouped_issue_data
234
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: checkmate5
3
- Version: 4.1.0.dev17
3
+ Version: 4.1.0.dev20
4
4
  Summary: A meta-code checker written in Python.
5
5
  Author: Andreas Dewes
6
6
  License: AGPL-3.0
@@ -13,16 +13,6 @@ Requires-Dist: blitzdb5
13
13
  Requires-Dist: pyyaml
14
14
  Requires-Dist: sqlalchemy
15
15
 
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
16
  # Welcome to Checkmate!
27
17
 
28
18