1+ # Template: templates/config.py.jinja2
2+ # Generated as: fao/src/api/routers/asti_expenditures_config.py
3+
4+ from dataclasses import dataclass , field
5+ from typing import List , Dict , Any
6+ from fao .src .db .pipelines .asti_expenditures .asti_expenditures_model import AstiExpenditures
7+ from fao .src .db .pipelines .area_codes .area_codes_model import AreaCodes
8+ from fao .src .db .pipelines .item_codes .item_codes_model import ItemCodes
9+ from fao .src .db .pipelines .elements .elements_model import Elements
10+ from fao .src .db .pipelines .flags .flags_model import Flags
11+
12+ from fao .src .core .validation import (
13+ is_valid_area_code ,
14+ is_valid_element_code ,
15+ is_valid_flag ,
16+ is_valid_item_code ,
17+ )
18+ from fao .src .core .exceptions import (
19+ invalid_area_code ,
20+ invalid_element_code ,
21+ invalid_flag ,
22+ invalid_item_code ,
23+ )
24+
25+ @dataclass
26+ class AstiExpendituresConfig :
27+ """Configuration for asti_expenditures API"""
28+
29+ # Basic info
30+ name : str = "asti_expenditures"
31+ model_name : str = "AstiExpenditures"
32+ table_name : str = "asti_expenditures"
33+
34+ # Columns
35+ all_data_fields : List [str ] = field (default_factory = lambda : [
36+ "area_code" ,
37+ "area_code_m49" ,
38+ "area" ,
39+ "item_code" ,
40+ "item" ,
41+ "element_code" ,
42+ "element" ,
43+ "year_code" ,
44+ "year" ,
45+ "unit" ,
46+ "value" ,
47+ "flag" ,
48+ "note" ,
49+ ])
50+
51+ all_parameter_fields : List [str ] = field (default_factory = lambda : [
52+ "area_code" ,
53+ "area" ,
54+ "item_code" ,
55+ "item" ,
56+ "element_code" ,
57+ "element" ,
58+ "flag" ,
59+ "description" ,
60+ "year_code" ,
61+ "year" ,
62+ "year_min" ,
63+ "year_max" ,
64+ "unit" ,
65+ "value" ,
66+ "value_min" ,
67+ "value_max" ,
68+ "note" ,
69+ ])
70+
71+ # Foreign keys
72+ foreign_keys : List [Dict [str , Any ]] = field (default_factory = lambda : [
73+ {
74+ "table_name" : "area_codes" ,
75+ "model_name" : "AreaCodes" ,
76+ "join_column" : "area_code_id" ,
77+ "columns" : ["area_code" , "area" ],
78+ },
79+ {
80+ "table_name" : "item_codes" ,
81+ "model_name" : "ItemCodes" ,
82+ "join_column" : "item_code_id" ,
83+ "columns" : ["item_code" , "item" ],
84+ },
85+ {
86+ "table_name" : "elements" ,
87+ "model_name" : "Elements" ,
88+ "join_column" : "element_code_id" ,
89+ "columns" : ["element_code" , "element" ],
90+ },
91+ {
92+ "table_name" : "flags" ,
93+ "model_name" : "Flags" ,
94+ "join_column" : "flag_id" ,
95+ "columns" : ["flag" , "description" ],
96+ },
97+ ])
98+
99+ filter_configs : List [Dict [str , Any ]] = field (default_factory = lambda : [
100+ {
101+ "name" : "area_code" ,
102+ "filter_type" : "multi" ,
103+ "filter_model" : AreaCodes , # <-- Actual model class
104+ "filter_column" : "area_code" ,
105+ "validation_func" : is_valid_area_code ,
106+ "exception_func" : invalid_area_code ,
107+ "joins_table" : "area_code_id" ,
108+ "join_model" : AreaCodes , # <-- Actual model class
109+ "join_condition" : AstiExpenditures .area_code_id ,
110+ },
111+ {
112+ "name" : "area" ,
113+ "filter_type" : "like" ,
114+ "filter_model" : AreaCodes , # <-- Actual model class
115+ "filter_column" : "area" ,
116+ "joins_table" : "area_code_id" ,
117+ "join_model" : AreaCodes , # <-- Actual model class
118+ "join_condition" : AstiExpenditures .area_code_id ,
119+ },
120+ {
121+ "name" : "item_code" ,
122+ "filter_type" : "multi" ,
123+ "filter_model" : ItemCodes , # <-- Actual model class
124+ "filter_column" : "item_code" ,
125+ "validation_func" : is_valid_item_code ,
126+ "exception_func" : invalid_item_code ,
127+ "joins_table" : "item_code_id" ,
128+ "join_model" : ItemCodes , # <-- Actual model class
129+ "join_condition" : AstiExpenditures .item_code_id ,
130+ },
131+ {
132+ "name" : "item" ,
133+ "filter_type" : "like" ,
134+ "filter_model" : ItemCodes , # <-- Actual model class
135+ "filter_column" : "item" ,
136+ "joins_table" : "item_code_id" ,
137+ "join_model" : ItemCodes , # <-- Actual model class
138+ "join_condition" : AstiExpenditures .item_code_id ,
139+ },
140+ {
141+ "name" : "element_code" ,
142+ "filter_type" : "multi" ,
143+ "filter_model" : Elements , # <-- Actual model class
144+ "filter_column" : "element_code" ,
145+ "validation_func" : is_valid_element_code ,
146+ "exception_func" : invalid_element_code ,
147+ "joins_table" : "element_code_id" ,
148+ "join_model" : Elements , # <-- Actual model class
149+ "join_condition" : AstiExpenditures .element_code_id ,
150+ },
151+ {
152+ "name" : "element" ,
153+ "filter_type" : "like" ,
154+ "filter_model" : Elements , # <-- Actual model class
155+ "filter_column" : "element" ,
156+ "joins_table" : "element_code_id" ,
157+ "join_model" : Elements , # <-- Actual model class
158+ "join_condition" : AstiExpenditures .element_code_id ,
159+ },
160+ {
161+ "name" : "flag" ,
162+ "filter_type" : "multi" ,
163+ "filter_model" : Flags , # <-- Actual model class
164+ "filter_column" : "flag" ,
165+ "validation_func" : is_valid_flag ,
166+ "exception_func" : invalid_flag ,
167+ "joins_table" : "flag_id" ,
168+ "join_model" : Flags , # <-- Actual model class
169+ "join_condition" : AstiExpenditures .flag_id ,
170+ },
171+ {
172+ "name" : "description" ,
173+ "filter_type" : "like" ,
174+ "filter_model" : Flags , # <-- Actual model class
175+ "filter_column" : "description" ,
176+ "joins_table" : "flag_id" ,
177+ "join_model" : Flags , # <-- Actual model class
178+ "join_condition" : AstiExpenditures .flag_id ,
179+ },
180+ {
181+ "name" : "year_code" ,
182+ "filter_type" : "like" ,
183+ "filter_model" : AstiExpenditures , # <-- Actual model class
184+ "filter_column" : "year_code" ,
185+ },
186+ {
187+ "name" : "year" ,
188+ "filter_type" : "exact" ,
189+ "filter_model" : AstiExpenditures , # <-- Actual model class
190+ "filter_column" : "year" ,
191+ },
192+ {
193+ "name" : "year_min" ,
194+ "filter_type" : "range_min" ,
195+ "filter_model" : AstiExpenditures , # <-- Actual model class
196+ "filter_column" : "year" ,
197+ },
198+ {
199+ "name" : "year_max" ,
200+ "filter_type" : "range_max" ,
201+ "filter_model" : AstiExpenditures , # <-- Actual model class
202+ "filter_column" : "year" ,
203+ },
204+ {
205+ "name" : "unit" ,
206+ "filter_type" : "like" ,
207+ "filter_model" : AstiExpenditures , # <-- Actual model class
208+ "filter_column" : "unit" ,
209+ },
210+ {
211+ "name" : "value" ,
212+ "filter_type" : "exact" ,
213+ "filter_model" : AstiExpenditures , # <-- Actual model class
214+ "filter_column" : "value" ,
215+ },
216+ {
217+ "name" : "value_min" ,
218+ "filter_type" : "range_min" ,
219+ "filter_model" : AstiExpenditures , # <-- Actual model class
220+ "filter_column" : "value" ,
221+ },
222+ {
223+ "name" : "value_max" ,
224+ "filter_type" : "range_max" ,
225+ "filter_model" : AstiExpenditures , # <-- Actual model class
226+ "filter_column" : "value" ,
227+ },
228+ {
229+ "name" : "note" ,
230+ "filter_type" : "like" ,
231+ "filter_model" : AstiExpenditures , # <-- Actual model class
232+ "filter_column" : "note" ,
233+ },
234+ ])
235+
236+ range_configs : List [Dict [str , Any ]] = field (default_factory = lambda : [
237+ {
238+ "param_name" : "year" ,
239+ "filter_model" : AstiExpenditures ,
240+ "filter_column" : "year" ,
241+ },
242+ {
243+ "param_name" : "value" ,
244+ "filter_model" : AstiExpenditures ,
245+ "filter_column" : "value" ,
246+ },
247+ ])
248+
249+ field_metadata : Dict [str , Dict [str , Any ]] = field (default_factory = lambda : {
250+ "area_code" : {
251+ "type" : "String" ,
252+ "is_numeric" : False ,
253+ "nullable" : False ,
254+ },
255+ "area_code_m49" : {
256+ "type" : "String" ,
257+ "is_numeric" : False ,
258+ "nullable" : False ,
259+ },
260+ "area" : {
261+ "type" : "String" ,
262+ "is_numeric" : False ,
263+ "nullable" : False ,
264+ },
265+ "item_code" : {
266+ "type" : "String" ,
267+ "is_numeric" : False ,
268+ "nullable" : False ,
269+ },
270+ "item" : {
271+ "type" : "String" ,
272+ "is_numeric" : False ,
273+ "nullable" : False ,
274+ },
275+ "element_code" : {
276+ "type" : "String" ,
277+ "is_numeric" : False ,
278+ "nullable" : False ,
279+ },
280+ "element" : {
281+ "type" : "String" ,
282+ "is_numeric" : False ,
283+ "nullable" : False ,
284+ },
285+ "year_code" : {
286+ "type" : "String" ,
287+ "is_numeric" : False ,
288+ "nullable" : False ,
289+ },
290+ "year" : {
291+ "type" : "SmallInteger" ,
292+ "is_numeric" : True ,
293+ "nullable" : False ,
294+ },
295+ "unit" : {
296+ "type" : "String" ,
297+ "is_numeric" : False ,
298+ "nullable" : False ,
299+ },
300+ "value" : {
301+ "type" : "Float" ,
302+ "is_numeric" : True ,
303+ "nullable" : False ,
304+ },
305+ "flag" : {
306+ "type" : "String" ,
307+ "is_numeric" : False ,
308+ "nullable" : False ,
309+ },
310+ "note" : {
311+ "type" : "String" ,
312+ "is_numeric" : False ,
313+ "nullable" : False ,
314+ },
315+ })
0 commit comments