-
Notifications
You must be signed in to change notification settings - Fork 51
Ajour des résultats des metaux lourds #169
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 24 commits
7bbc835
c115571
1b4ea89
ad7843d
3b827e1
02814fc
8959dc4
59f4692
a93e28a
b06b8a4
2e60b61
7b6ed93
c19ea13
07434f6
b05a156
3e6058c
6b9b694
5bb0d0b
d73f1e6
e0909bc
66b043b
f70d90e
14609c0
bdfedaa
646c366
9fdb360
ceb3626
7c0ee63
6eec0da
20772de
08d13b2
e24d493
8d234f4
1102c4c
380f2e3
1fcd803
c26a6a6
483c484
65a83f1
b0e2a90
900a936
eeba613
68b3a61
6ca59e0
56c137e
b55806b
bd69c85
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
version: 2 | ||
|
||
models: | ||
- name: int__resultats_metaux_lourds_udi_dernier | ||
description: > | ||
Resultats Plomb et Arsenic par UDI pour la | ||
temporalité 'derniers prélèvements' | ||
columns: | ||
- name: categorie | ||
tests: | ||
- not_null | ||
- accepted_values: | ||
values: | ||
- metaux_lourds_pb | ||
- metaux_lourds_as | ||
|
||
- name: cdreseau | ||
description: "Code de l'installation (unité de distribution)" | ||
simondac marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
type: VARCHAR | ||
tests: | ||
- not_null | ||
|
||
- name: dernier_prel_datetime | ||
description: > | ||
Date et heure du dernier prélèvement | ||
pris en compte dans l'analyse | ||
type: TIMESTAMP | ||
tests: | ||
- not_null | ||
- dbt_utils.expression_is_true: | ||
expression: ">= CURRENT_DATE - INTERVAL 1 YEAR" | ||
|
||
- name: periode | ||
description: "Période de résultat" | ||
type: VARCHAR | ||
tests: | ||
- accepted_values: | ||
values: ["dernier_prel"] | ||
|
||
- name: dernier_prel_valeur | ||
description: "Valeur du dernier prélèvement" | ||
type: FLOAT | ||
|
||
- name: resultat | ||
description: "Résultat" | ||
simondac marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
type: VARCHAR | ||
tests: | ||
- not_null | ||
- accepted_values: | ||
20k-P marked this conversation as resolved.
Show resolved
Hide resolved
|
||
values: | ||
- aucun_parametre_quantifie | ||
- sup_limite_qualite | ||
- sup_limite_qualite_2036 | ||
- inf_5 | ||
- as_sup_10_inf_13 | ||
- inf_10 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
-- Ici on ne garde que le dernier prélèvement | ||
-- pour chaque UDI dans la dernière année | ||
WITH metaux_lourds_dernier_prel AS ( | ||
SELECT | ||
*, | ||
ROW_NUMBER() | ||
OVER ( | ||
PARTITION BY | ||
cdreseau, | ||
cdparametresiseeaux | ||
ORDER BY datetimeprel DESC | ||
) | ||
AS row_number | ||
FROM | ||
{{ ref('int__resultats_udi_communes') }} | ||
WHERE | ||
cdparametresiseeaux IN ('PB', 'AS') | ||
AND | ||
-- On garde les prélèvements de moins d'un an | ||
CURRENT_DATE - datetimeprel | ||
< INTERVAL 1 YEAR | ||
) | ||
|
||
-- Ici on ne prend que le prélèvement le plus récent (avec row_number = 1) | ||
-- pour chaque type de métaux lourds | ||
SELECT | ||
cdreseau, | ||
datetimeprel AS dernier_prel_datetime, | ||
'dernier_prel' AS periode, | ||
valtraduite AS dernier_prel_valeur, | ||
CASE | ||
WHEN | ||
cdparametresiseeaux = 'PB' | ||
THEN 'metaux_lourds_pb' | ||
WHEN | ||
cdparametresiseeaux = 'AS' | ||
THEN 'metaux_lourds_as' | ||
END AS categorie, | ||
CASE | ||
WHEN | ||
cdparametresiseeaux = 'PB' | ||
20k-P marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
AND ( | ||
valtraduite IS NULL | ||
OR valtraduite = 0 | ||
) | ||
THEN 'aucun_parametre_quantifie' | ||
20k-P marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
WHEN | ||
cdparametresiseeaux = 'PB' | ||
AND valtraduite >= 10 | ||
THEN 'sup_limite_qualite' | ||
WHEN | ||
cdparametresiseeaux = 'PB' | ||
AND valtraduite >= 5 | ||
AND valtraduite < 10 | ||
THEN 'sup_limite_qualite_2036' | ||
WHEN | ||
cdparametresiseeaux = 'PB' | ||
AND valtraduite < 5 | ||
THEN 'inf_5' | ||
|
||
WHEN | ||
cdparametresiseeaux = 'AS' | ||
AND ( | ||
valtraduite IS NULL | ||
OR valtraduite = 0 | ||
) | ||
THEN 'aucun_parametre_quantifie' | ||
20k-P marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
WHEN | ||
cdparametresiseeaux = 'AS' | ||
AND valtraduite >= 13 | ||
THEN 'sup_limite_qualite' | ||
WHEN | ||
cdparametresiseeaux = 'AS' | ||
AND valtraduite >= 10 | ||
AND valtraduite < 13 | ||
THEN 'as_sup_10_inf_13' | ||
|
||
WHEN | ||
cdparametresiseeaux = 'AS' | ||
AND valtraduite < 10 | ||
THEN 'inf_10' | ||
|
||
ELSE 'erreur' | ||
END AS resultat | ||
FROM | ||
metaux_lourds_dernier_prel | ||
WHERE | ||
row_number = 1 | ||
ORDER BY | ||
cdreseau |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,222 @@ | ||
# don't import any costly modules | ||
import sys | ||
import os | ||
|
||
|
||
is_pypy = '__pypy__' in sys.builtin_module_names | ||
|
||
|
||
def warn_distutils_present(): | ||
if 'distutils' not in sys.modules: | ||
return | ||
if is_pypy and sys.version_info < (3, 7): | ||
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning | ||
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 | ||
return | ||
import warnings | ||
|
||
warnings.warn( | ||
"Distutils was imported before Setuptools, but importing Setuptools " | ||
"also replaces the `distutils` module in `sys.modules`. This may lead " | ||
"to undesirable behaviors or errors. To avoid these issues, avoid " | ||
"using distutils directly, ensure that setuptools is installed in the " | ||
"traditional way (e.g. not an editable install), and/or make sure " | ||
"that setuptools is always imported before distutils." | ||
) | ||
|
||
|
||
def clear_distutils(): | ||
if 'distutils' not in sys.modules: | ||
return | ||
import warnings | ||
|
||
warnings.warn("Setuptools is replacing distutils.") | ||
mods = [ | ||
name | ||
for name in sys.modules | ||
if name == "distutils" or name.startswith("distutils.") | ||
] | ||
for name in mods: | ||
del sys.modules[name] | ||
|
||
|
||
def enabled(): | ||
""" | ||
Allow selection of distutils by environment variable. | ||
""" | ||
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local') | ||
return which == 'local' | ||
|
||
|
||
def ensure_local_distutils(): | ||
import importlib | ||
|
||
clear_distutils() | ||
|
||
# With the DistutilsMetaFinder in place, | ||
# perform an import to cause distutils to be | ||
# loaded from setuptools._distutils. Ref #2906. | ||
with shim(): | ||
importlib.import_module('distutils') | ||
|
||
# check that submodules load as expected | ||
core = importlib.import_module('distutils.core') | ||
assert '_distutils' in core.__file__, core.__file__ | ||
assert 'setuptools._distutils.log' not in sys.modules | ||
|
||
|
||
def do_override(): | ||
""" | ||
Ensure that the local copy of distutils is preferred over stdlib. | ||
See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 | ||
for more motivation. | ||
""" | ||
if enabled(): | ||
warn_distutils_present() | ||
ensure_local_distutils() | ||
|
||
|
||
class _TrivialRe: | ||
def __init__(self, *patterns): | ||
self._patterns = patterns | ||
|
||
def match(self, string): | ||
return all(pat in string for pat in self._patterns) | ||
|
||
|
||
class DistutilsMetaFinder: | ||
def find_spec(self, fullname, path, target=None): | ||
# optimization: only consider top level modules and those | ||
# found in the CPython test suite. | ||
if path is not None and not fullname.startswith('test.'): | ||
return | ||
|
||
method_name = 'spec_for_{fullname}'.format(**locals()) | ||
method = getattr(self, method_name, lambda: None) | ||
return method() | ||
|
||
def spec_for_distutils(self): | ||
if self.is_cpython(): | ||
return | ||
|
||
import importlib | ||
import importlib.abc | ||
import importlib.util | ||
|
||
try: | ||
mod = importlib.import_module('setuptools._distutils') | ||
except Exception: | ||
# There are a couple of cases where setuptools._distutils | ||
# may not be present: | ||
# - An older Setuptools without a local distutils is | ||
# taking precedence. Ref #2957. | ||
# - Path manipulation during sitecustomize removes | ||
# setuptools from the path but only after the hook | ||
# has been loaded. Ref #2980. | ||
# In either case, fall back to stdlib behavior. | ||
return | ||
|
||
class DistutilsLoader(importlib.abc.Loader): | ||
def create_module(self, spec): | ||
mod.__name__ = 'distutils' | ||
return mod | ||
|
||
def exec_module(self, module): | ||
pass | ||
|
||
return importlib.util.spec_from_loader( | ||
'distutils', DistutilsLoader(), origin=mod.__file__ | ||
) | ||
|
||
@staticmethod | ||
def is_cpython(): | ||
""" | ||
Suppress supplying distutils for CPython (build and tests). | ||
Ref #2965 and #3007. | ||
""" | ||
return os.path.isfile('pybuilddir.txt') | ||
|
||
def spec_for_pip(self): | ||
""" | ||
Ensure stdlib distutils when running under pip. | ||
See pypa/pip#8761 for rationale. | ||
""" | ||
if self.pip_imported_during_build(): | ||
return | ||
clear_distutils() | ||
self.spec_for_distutils = lambda: None | ||
|
||
@classmethod | ||
def pip_imported_during_build(cls): | ||
""" | ||
Detect if pip is being imported in a build script. Ref #2355. | ||
""" | ||
import traceback | ||
|
||
return any( | ||
cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None) | ||
) | ||
|
||
@staticmethod | ||
def frame_file_is_setup(frame): | ||
""" | ||
Return True if the indicated frame suggests a setup.py file. | ||
""" | ||
# some frames may not have __file__ (#2940) | ||
return frame.f_globals.get('__file__', '').endswith('setup.py') | ||
|
||
def spec_for_sensitive_tests(self): | ||
""" | ||
Ensure stdlib distutils when running select tests under CPython. | ||
python/cpython#91169 | ||
""" | ||
clear_distutils() | ||
self.spec_for_distutils = lambda: None | ||
|
||
sensitive_tests = ( | ||
[ | ||
'test.test_distutils', | ||
'test.test_peg_generator', | ||
'test.test_importlib', | ||
] | ||
if sys.version_info < (3, 10) | ||
else [ | ||
'test.test_distutils', | ||
] | ||
) | ||
|
||
|
||
for name in DistutilsMetaFinder.sensitive_tests: | ||
setattr( | ||
DistutilsMetaFinder, | ||
f'spec_for_{name}', | ||
DistutilsMetaFinder.spec_for_sensitive_tests, | ||
) | ||
|
||
|
||
DISTUTILS_FINDER = DistutilsMetaFinder() | ||
|
||
|
||
def add_shim(): | ||
DISTUTILS_FINDER in sys.meta_path or insert_shim() | ||
|
||
|
||
class shim: | ||
def __enter__(self): | ||
insert_shim() | ||
|
||
def __exit__(self, exc, value, tb): | ||
remove_shim() | ||
|
||
|
||
def insert_shim(): | ||
sys.meta_path.insert(0, DISTUTILS_FINDER) | ||
|
||
|
||
def remove_shim(): | ||
try: | ||
sys.meta_path.remove(DISTUTILS_FINDER) | ||
except ValueError: | ||
pass |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__import__('_distutils_hack').do_override() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'local') == 'local'; enabled and __import__('_distutils_hack').add_shim(); |
Uh oh!
There was an error while loading. Please reload this page.