Skip to content

Commit

Permalink
Feat/count high risk false positive next to positive (#157)
Browse files Browse the repository at this point in the history
* wip

* wip

* wip test

* test: high false positive risk transform

* docker compose

* chores: update poetry lock

* chores: bump some libs

* feat: save channel_metadata and update them when needed

* doc: channel_metadata
  • Loading branch information
polomarcus authored Apr 5, 2024
1 parent 0257672 commit c081dc6
Showing 18 changed files with 731 additions and 314 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/deploy-main.yml
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ on:

env:
PYTHON_VERSION: '3.11'
POETRY_VERSION: '1.8.1'
POETRY_VERSION: '1.8.2'

jobs:
build:
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ on:

env:
PYTHON_VERSION: '3.11'
POETRY_VERSION: '1.8.1'
POETRY_VERSION: '1.8.2'

jobs:
# Label of the runner job
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ WORKDIR /app

COPY pyproject.toml poetry.lock ./

RUN pip install poetry==1.8.1
RUN pip install poetry==1.8.2

RUN poetry install

2 changes: 1 addition & 1 deletion Dockerfile_api_import
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ WORKDIR /app

COPY pyproject.toml poetry.lock ./

RUN pip install poetry==1.8.1
RUN pip install poetry==1.8.2

RUN poetry install

2 changes: 1 addition & 1 deletion Dockerfile_ingest
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ WORKDIR /app

COPY pyproject.toml poetry.lock ./

RUN pip install poetry==1.8.1
RUN pip install poetry==1.8.2

RUN poetry install

2 changes: 1 addition & 1 deletion Dockerfile_streamlit
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ WORKDIR /app

COPY pyproject.toml poetry.lock ./

RUN pip install poetry==1.8.1
RUN pip install poetry==1.8.2

RUN poetry install

6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -277,6 +277,7 @@ With Sentry, with env variable `SENTRY_DSN`.

Learn more here : https://docs.sentry.io/platforms/python/configuration/options/

## Batch import
### Batch import based on time
Use env variable `START_DATE` like in docker compose (epoch second format : 1705409797).

@@ -306,13 +307,16 @@ After having updated `UPDATE` env variable to true inside docker-compose.yml and
update_pg_keywords.py:20 | Difference old 1000 - new_number_of_keywords 0
```

#### Batch update from an offset
### Batch update from an offset
With +1 millions rows, we can update from an offset to fix a custom logic by using `START_OFFSET` to batch update PG from a offset.

~55 minutes to update 50K rows on a mVCPU 2240 - 4Gb RAM on Scaleway.

Example inside the docker-compose.yml mediatree service -> START_OFFSET: 100

### Channel metadata
In order to maintain channel perimeter (weekday, hours) up to date, we save the current version inside `postgres/channel_metadata.json`, if we modify this file the next deploy will update every lines of inside Postgresql table `channel_metadata`.

### Fix linting
Before committing, make sure that the line of codes you wrote are conform to PEP8 standard by running:
```bash
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ services:
context: ./
dockerfile: Dockerfile
entrypoint: ["poetry", "run", "pytest","-vv", "-o", "log_cli=true", "--cov-report", "term:skip-covered", "--cov=quotaclimat", "--cov=postgres", "test/"]
# entrypoint: ["sleep", "12000"] # use to debug the container if needed
# entrypoint: ["sleep", "12000"] # use to debug the container if needed
environment:
ENV: docker
# CHANNEL: "fr3-idf"
169 changes: 86 additions & 83 deletions poetry.lock

Large diffs are not rendered by default.

149 changes: 149 additions & 0 deletions postgres/channel_metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
[
{"ID":"58","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"3"},
{"ID":"59","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"4"},
{"ID":"60","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"5"},
{"ID":"61","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"6"},
{"ID":"62","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"7"},
{"ID":"49","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"120","Weekday":"1"},
{"ID":"57","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"2"},
{"ID":"2","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"235","Weekday":"3"},
{"ID":"3","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"235","Weekday":"4"},
{"ID":"4","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"235","Weekday":"5"},
{"ID":"5","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"235","Weekday":"6"},
{"ID":"6","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"140","Weekday":"7"},
{"ID":"56","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"0","Weekday":"1"},
{"ID":"1","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"235","Weekday":"2"},
{"ID":"16","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"220","Weekday":"3"},
{"ID":"17","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"220","Weekday":"4"},
{"ID":"18","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"220","Weekday":"5"},
{"ID":"19","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"220","Weekday":"6"},
{"ID":"20","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"100","Weekday":"7"},
{"ID":"14","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"225","Weekday":"1"},
{"ID":"15","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"220","Weekday":"2"},
{"ID":"9","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"285","Weekday":"3"},
{"ID":"10","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"285","Weekday":"4"},
{"ID":"11","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"285","Weekday":"5"},
{"ID":"12","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"285","Weekday":"6"},
{"ID":"13","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"285","Weekday":"7"},
{"ID":"22","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"120","Weekday":"2"},
{"ID":"8","Channel Name":"france2","Channel Title":"France 2","Duration Minutes":"285","Weekday":"2"},
{"ID":"30","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"3"},
{"ID":"31","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"4"},
{"ID":"32","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"5"},
{"ID":"33","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"6"},
{"ID":"34","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"7"},
{"ID":"106","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"510","Weekday":"2"},
{"ID":"29","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"2"},
{"ID":"37","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"65","Weekday":"3"},
{"ID":"38","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"65","Weekday":"4"},
{"ID":"39","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"65","Weekday":"5"},
{"ID":"40","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"65","Weekday":"6"},
{"ID":"41","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"65","Weekday":"7"},
{"ID":"63","Channel Name":"bfmtv","Channel Title":"BFM TV","Duration Minutes":"960","Weekday":"1"},
{"ID":"36","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"65","Weekday":"2"},
{"ID":"51","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"125","Weekday":"3"},
{"ID":"52","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"125","Weekday":"4"},
{"ID":"53","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"125","Weekday":"5"},
{"ID":"54","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"125","Weekday":"6"},
{"ID":"55","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"0","Weekday":"7"},
{"ID":"50","Channel Name":"tmc","Channel Title":"TMC","Duration Minutes":"125","Weekday":"2"},
{"ID":"79","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"3"},
{"ID":"80","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"4"},
{"ID":"81","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"5"},
{"ID":"82","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"6"},
{"ID":"83","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"7"},
{"ID":"70","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"1"},
{"ID":"78","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"2"},
{"ID":"86","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"420","Weekday":"3"},
{"ID":"87","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"420","Weekday":"4"},
{"ID":"88","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"420","Weekday":"5"},
{"ID":"89","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"300","Weekday":"6"},
{"ID":"90","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"270","Weekday":"7"},
{"ID":"84","Channel Name":"itele","Channel Title":"CNews","Duration Minutes":"960","Weekday":"1"},
{"ID":"85","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"420","Weekday":"2"},
{"ID":"135","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"190","Weekday":"3"},
{"ID":"136","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"190","Weekday":"4"},
{"ID":"137","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"190","Weekday":"5"},
{"ID":"138","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"190","Weekday":"6"},
{"ID":"139","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"165","Weekday":"7"},
{"ID":"71","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"2"},
{"ID":"134","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"190","Weekday":"2"},
{"ID":"44","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"165","Weekday":"3"},
{"ID":"45","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"165","Weekday":"4"},
{"ID":"46","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"165","Weekday":"5"},
{"ID":"47","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"165","Weekday":"6"},
{"ID":"48","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"120","Weekday":"7"},
{"ID":"127","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"570","Weekday":"2"},
{"ID":"43","Channel Name":"d8","Channel Title":"c8","Duration Minutes":"165","Weekday":"2"},
{"ID":"107","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"510","Weekday":"3"},
{"ID":"108","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"510","Weekday":"4"},
{"ID":"109","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"510","Weekday":"5"},
{"ID":"110","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"510","Weekday":"6"},
{"ID":"111","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"180","Weekday":"7"},
{"ID":"92","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"450","Weekday":"2"},
{"ID":"93","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"450","Weekday":"3"},
{"ID":"94","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"450","Weekday":"4"},
{"ID":"95","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"450","Weekday":"5"},
{"ID":"96","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"450","Weekday":"6"},
{"ID":"7","Channel Name":"tf1","Channel Title":"TF1","Duration Minutes":"140","Weekday":"1"},
{"ID":"128","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"570","Weekday":"3"},
{"ID":"129","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"570","Weekday":"4"},
{"ID":"130","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"570","Weekday":"5"},
{"ID":"131","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"570","Weekday":"6"},
{"ID":"21","Channel Name":"fr3-idf","Channel Title":"France 3-idf","Duration Minutes":"100","Weekday":"1"},
{"ID":"72","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"3"},
{"ID":"73","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"4"},
{"ID":"74","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"5"},
{"ID":"75","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"6"},
{"ID":"91","Channel Name":"france-inter","Channel Title":"France Inter","Duration Minutes":"210","Weekday":"1"},
{"ID":"65","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"3"},
{"ID":"66","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"4"},
{"ID":"67","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"5"},
{"ID":"68","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"6"},
{"ID":"69","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"7"},
{"ID":"35","Channel Name":"m6","Channel Title":"M6","Duration Minutes":"100","Weekday":"1"},
{"ID":"64","Channel Name":"lci","Channel Title":"LCI","Duration Minutes":"960","Weekday":"2"},
{"ID":"23","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"120","Weekday":"3"},
{"ID":"24","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"120","Weekday":"4"},
{"ID":"25","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"120","Weekday":"5"},
{"ID":"26","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"120","Weekday":"6"},
{"ID":"140","Channel Name":"france-culture","Channel Title":"France Culture","Duration Minutes":"15","Weekday":"1"},
{"ID":"42","Channel Name":"arte","Channel Title":"Arte","Duration Minutes":"20","Weekday":"1"},
{"ID":"141","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"1"},
{"ID":"142","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"2"},
{"ID":"143","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"3"},
{"ID":"144","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"4"},
{"ID":"145","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"5"},
{"ID":"146","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"6"},
{"ID":"147","Channel Name":"rfi","Channel Title":"RFI","Duration Minutes":"160","Weekday":"7"},
{"ID":"148","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"1"},
{"ID":"149","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"2"},
{"ID":"150","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"3"},
{"ID":"151","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"4"},
{"ID":"152","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"5"},
{"ID":"153","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"6"},
{"ID":"154","Channel Name":"france24","Channel Title":"France 24","Duration Minutes":"960","Weekday":"7"},
{"ID":"155","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"140","Weekday":"1"},
{"ID":"156","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"390","Weekday":"2"},
{"ID":"157","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"390","Weekday":"3"},
{"ID":"158","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"390","Weekday":"4"},
{"ID":"159","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"390","Weekday":"5"},
{"ID":"160","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"390","Weekday":"6"},
{"ID":"161","Channel Name":"sud-radio","Channel Title":"Sud Radio","Duration Minutes":"140","Weekday":"7"},
{"ID":"162","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"1"},
{"ID":"163","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"2"},
{"ID":"164","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"3"},
{"ID":"165","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"4"},
{"ID":"166","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"5"},
{"ID":"167","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"6"},
{"ID":"168","Channel Name":"france-info","Channel Title":"FranceinfoRadio","Duration Minutes":"960","Weekday":"7"},
{"ID":"133","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"270","Weekday":"1"},
{"ID":"132","Channel Name":"europe1","Channel Title":"Europe 1","Duration Minutes":"270","Weekday":"7"},
{"ID":"28","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"75","Weekday":"1"},
{"ID":"27","Channel Name":"france5","Channel Title":"France 5","Duration Minutes":"165","Weekday":"7"},
{"ID":"77","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"1"},
{"ID":"76","Channel Name":"franceinfotv","Channel Title":"France Info","Duration Minutes":"960","Weekday":"7"},
{"ID":"112","Channel Name":"rmc","Channel Title":"RMC","Duration Minutes":"180","Weekday":"1"},
{"ID":"98","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"330","Weekday":"1"},
{"ID":"97","Channel Name":"rtl","Channel Title":"RTL","Duration Minutes":"210","Weekday":"7"}
]
Loading

1 comment on commit c081dc6

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
postgres
   insert_data.py44784%36–38, 57–59, 64
   insert_existing_data_example.py20385%25–27
postgres/schemas
   models.py1101884%98–105, 116–117, 149–163
quotaclimat/data_analytics
   analytics_signataire_charte.py29290%1–67
   bilan.py1081080%2–372
   data_coverage.py34340%1–94
   exploration.py1251250%1–440
   sitemap_analytics.py1181180%1–343
quotaclimat/data_ingestion
   categorization_program_type.py110%1
   config_youtube.py110%1
   scaleway_db_backups.py34340%1–74
   scrap_chartejournalismeecologie_signataires.py50500%1–169
   scrap_sitemap.py1341787%27–28, 33–34, 66–71, 95–97, 138–140, 202, 223–228
   scrap_tv_program.py62620%1–149
   scrap_youtube.py1141140%1–238
quotaclimat/data_ingestion/ingest_db
   ingest_sitemap_in_db.py553733%21–42, 45–58, 62–73
quotaclimat/data_ingestion/scrap_html
   scrap_description_article.py36392%19–20, 32
quotaclimat/data_processing/mediatree
   api_import.py18310543%41–45, 50–58, 62–65, 71, 74–101, 107–122, 127–129, 154–166, 170–173, 177–183, 194–205, 208–212, 218, 242–243, 247, 251–270, 273–275
   config.py15287%7, 16
   detect_keywords.py192498%197, 250–252
   utils.py662267%19, 30–54, 57, 76–77
quotaclimat/data_processing/sitemap
   sitemap_processing.py412734%15–19, 23–25, 29–47, 51–58, 66–96, 101–103
quotaclimat/utils
   channels.py660%1–95
   climate_keywords.py220%3–35
   healthcheck_config.py291452%22–24, 27–38
   logger.py241154%22–24, 28–37
   plotly_theme.py17170%1–56
   sentry.py10280%21–22
TOTAL171997343% 

Tests Skipped Failures Errors Time
71 0 💤 0 ❌ 0 🔥 1m 10s ⏱️

Please sign in to comment.