devsecops-radar 0.3.4__tar.gz → 0.3.6__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 (60) hide show
  1. {devsecops_radar-0.3.4/devsecops_radar.egg-info → devsecops_radar-0.3.6}/PKG-INFO +1 -1
  2. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/models.py +6 -5
  3. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/reporting.py +1 -1
  4. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6/devsecops_radar.egg-info}/PKG-INFO +1 -1
  5. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/pyproject.toml +1 -1
  6. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/tests/test_api.py +8 -0
  7. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/tests/test_cli.py +2 -1
  8. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/LICENSE +0 -0
  9. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/MANIFEST.in +0 -0
  10. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/README.md +0 -0
  11. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/__init__.py +0 -0
  12. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/cli/__init__.py +0 -0
  13. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/cli/scanner.py +0 -0
  14. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/__init__.py +0 -0
  15. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/analyzer.py +0 -0
  16. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/attack_simulation.py +0 -0
  17. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/auth.py +0 -0
  18. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/database.py +0 -0
  19. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/parser.py +0 -0
  20. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/rag.py +0 -0
  21. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/remediation.py +0 -0
  22. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/rule_fusion.py +0 -0
  23. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/sbom.py +0 -0
  24. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/settings.py +0 -0
  25. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/core/valuation.py +0 -0
  26. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/plugins/__init__.py +0 -0
  27. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/adapter.py +0 -0
  28. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/base.py +0 -0
  29. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/gitleaks.py +0 -0
  30. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/poutine.py +0 -0
  31. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/semgrep.py +0 -0
  32. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/trivy.py +0 -0
  33. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/scanners/zizmor.py +0 -0
  34. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/__init__.py +0 -0
  35. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/app.py +0 -0
  36. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/attack_paths/__init__.py +0 -0
  37. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/attack_paths/routes.py +0 -0
  38. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/dashboard/__init__.py +0 -0
  39. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/dashboard/routes.py +0 -0
  40. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/sentry/routes.py +0 -0
  41. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/static/css/bootstrap.min.css +0 -0
  42. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/static/css/style.css +0 -0
  43. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/static/js/bootstrap.bundle.min.js +0 -0
  44. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/static/js/chart.umd.min.js +0 -0
  45. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/static/js/dashboard.js +0 -0
  46. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/summary/__init__.py +0 -0
  47. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/summary/routes.py +0 -0
  48. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/templates/index.html +0 -0
  49. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/topology/__init__.py +0 -0
  50. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar/web/topology/routes.py +0 -0
  51. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar.egg-info/SOURCES.txt +0 -0
  52. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar.egg-info/dependency_links.txt +0 -0
  53. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar.egg-info/entry_points.txt +0 -0
  54. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar.egg-info/requires.txt +0 -0
  55. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/devsecops_radar.egg-info/top_level.txt +0 -0
  56. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/setup.cfg +0 -0
  57. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/tests/test_analyzer.py +0 -0
  58. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/tests/test_database.py +0 -0
  59. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/tests/test_rule_fusion.py +0 -0
  60. {devsecops_radar-0.3.4 → devsecops_radar-0.3.6}/tests/test_scanners.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsecops-radar
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
5
5
  Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -1,7 +1,7 @@
1
1
  from sqlalchemy import create_engine, Column, Integer, String, DateTime, JSON, ForeignKey
2
2
  from sqlalchemy.orm import declarative_base, sessionmaker, relationship
3
- from pydantic import BaseModel, validator
4
- from typing import List, Optional
3
+ from pydantic import BaseModel, field_validator
4
+ from typing import Optional
5
5
  import datetime
6
6
  import os
7
7
 
@@ -16,14 +16,15 @@ class FindingSchema(BaseModel):
16
16
  description: Optional[str] = ""
17
17
  line: Optional[int] = None
18
18
 
19
- @validator('severity')
20
- def severity_upper(cls, v):
19
+ @field_validator('severity')
20
+ @classmethod
21
+ def severity_upper(cls, v: str) -> str:
21
22
  return v.upper()
22
23
 
23
24
  class Scan(Base):
24
25
  __tablename__ = 'scans'
25
26
  id = Column(Integer, primary_key=True)
26
- timestamp = Column(DateTime, default=datetime.datetime.utcnow)
27
+ timestamp = Column(DateTime, default=lambda: datetime.datetime.now(datetime.UTC))
27
28
  findings_json = Column(JSON)
28
29
  findings = relationship("Finding", back_populates="scan", cascade="all, delete-orphan")
29
30
 
@@ -1,6 +1,6 @@
1
1
  import re
2
2
  import datetime
3
- from reportlab.platypus import Table, TableStyle, Paragraph
3
+ from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
4
4
  from reportlab.lib.pagesizes import A4
5
5
  from reportlab.lib.styles import getSampleStyleSheet
6
6
  from reportlab.lib import colors
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsecops-radar
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
5
5
  Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devsecops-radar"
7
- version = "0.3.4"
7
+ version = "0.3.6"
8
8
  description = "Unified CI/CD Security Dashboard — Pipeline Sentinel"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,4 +1,5 @@
1
1
  import pytest
2
+ from unittest.mock import patch
2
3
  from devsecops_radar.web.app import create_app
3
4
 
4
5
  @pytest.fixture
@@ -11,6 +12,13 @@ def app():
11
12
  def client(app):
12
13
  return app.test_client()
13
14
 
15
+ @pytest.fixture(autouse=True)
16
+ def mock_database():
17
+ # Mock the database function to avoid needing a real DB
18
+ with patch('devsecops_radar.web.dashboard.routes.get_findings_paginated') as mock:
19
+ mock.return_value = {"items": [], "total": 0, "page": 1, "per_page": 50}
20
+ yield
21
+
14
22
  def test_dashboard_page(client):
15
23
  resp = client.get('/')
16
24
  assert resp.status_code == 200
@@ -26,5 +26,6 @@ def test_cli_merge_sample_files():
26
26
  capture_output=True, text=True
27
27
  )
28
28
  assert result.returncode == 0
29
- assert 'Merged' in result.stdout
29
+ # CLI logs to stderr, so check there
30
+ assert 'Merged' in result.stderr
30
31
  os.unlink(outpath)
File without changes