77
88from dateutil .relativedelta import relativedelta
99
10- from odoo import _ , api , fields , models , SUPERUSER_ID
11- from odoo .http import request
10+ from odoo import SUPERUSER_ID , _ , api , fields , models
1211from odoo .exceptions import UserError
12+ from odoo .http import request
1313
1414from odoo .addons .web .controllers .export import CSVExport , ExcelExport
1515
1616
1717class DelayExport (models .Model ):
18- _name = ' delay.export'
19- _description = ' Asynchronous Export'
18+ _name = " delay.export"
19+ _description = " Asynchronous Export"
2020
21- user_ids = fields .Many2many (' res.users' , string = ' Users' , index = True )
21+ user_ids = fields .Many2many (" res.users" , string = " Users" , index = True )
2222 model_description = fields .Char ()
2323 url = fields .Char ()
2424 expiration_date = fields .Date ()
2525
2626 @api .model
2727 def delay_export (self , data ):
2828 """Delay the export, called from js"""
29- params = json .loads (data .get (' data' ))
29+ params = json .loads (data .get (" data" ))
3030 if not self .env .user .email :
31- raise UserError (_ (' You must set an email address to your user.' ))
31+ raise UserError (_ (" You must set an email address to your user." ))
3232 self .with_delay ().export (params )
3333
3434 @api .model
3535 def _get_file_content (self , params ):
36- export_format = params .get (' format' )
36+ export_format = params .get (" format" )
3737
3838 items = operator .itemgetter (
39- ' model' , ' fields' , ' ids' , ' domain' , ' import_compat' , ' context' , ' user_ids'
39+ " model" , " fields" , " ids" , " domain" , " import_compat" , " context" , " user_ids"
4040 )(params )
4141 (model_name , fields_name , ids , domain , import_compat , context , user_ids ) = items
4242
43- model = self .env [model_name ].sudo ().with_context (
44- import_compat = import_compat , ** context
43+ model = (
44+ self .env [model_name ]
45+ .sudo ()
46+ .with_context (import_compat = import_compat , ** context )
4547 )
4648 records = model .browse (ids ) or model .search (
4749 domain , offset = 0 , limit = False , order = False
4850 )
4951
5052 if not model ._is_an_ordinary_table ():
51- fields_name = [field for field in fields_name if field [' name' ] != 'id' ]
53+ fields_name = [field for field in fields_name if field [" name" ] != "id" ]
5254
53- field_names = [f [' name' ] for f in fields_name ]
54- import_data = records .export_data (field_names ).get (' datas' , [])
55+ field_names = [f [" name" ] for f in fields_name ]
56+ import_data = records .export_data (field_names ).get (" datas" , [])
5557
5658 if import_compat :
5759 columns_headers = field_names
5860 else :
59- columns_headers = [val [' label' ].strip () for val in fields_name ]
61+ columns_headers = [val [" label" ].strip () for val in fields_name ]
6062
6163 # Patch: ensure request.env is set with a valid uid before triggering ExportXlsxWriter
62- if export_format != 'csv' :
63- if not hasattr (request , 'env' ) or request .env .uid is None :
64- request .env = api .Environment (self .env .cr , SUPERUSER_ID , self .env .context )
64+ if export_format != "csv" :
65+ if not hasattr (request , "env" ) or request .env .uid is None :
66+ request .env = api .Environment (
67+ self .env .cr , SUPERUSER_ID , self .env .context
68+ )
6569
66- if export_format == ' csv' :
70+ if export_format == " csv" :
6771 csv = CSVExport ()
6872 return csv .from_data (columns_headers , import_data )
6973 else :
@@ -79,7 +83,7 @@ def export(self, params):
7983 * format: csv/excel
8084 * model: model to export
8185 * fields: list of fields to export, a list of dict:
82- [{' label': '', ' name': '' }]
86+ [{" label": "", " name": "" }]
8387 * ids: list of ids to export
8488 * domain: domain for the export
8589 * context: context for the export (language, ...)
@@ -88,62 +92,62 @@ def export(self, params):
8892 """
8993 content = self ._get_file_content (params )
9094
91- items = operator .itemgetter (' model' , ' context' , ' format' , ' user_ids' )(params )
95+ items = operator .itemgetter (" model" , " context" , " format" , " user_ids" )(params )
9296 model_name , context , export_format , user_ids = items
93- users = self .env [' res.users' ].browse (user_ids )
97+ users = self .env [" res.users" ].browse (user_ids )
9498
95- export_record = self .sudo ().create ({' user_ids' : [(6 , 0 , users .ids )]})
99+ export_record = self .sudo ().create ({" user_ids" : [(6 , 0 , users .ids )]})
96100
97- name = '{ }.{}' . format ( model_name , export_format )
98- attachment = self .env [' ir.attachment' ].create (
101+ name = f" { model_name } .{ export_format } "
102+ attachment = self .env [" ir.attachment" ].create (
99103 {
100- ' name' : name ,
101- ' datas' : base64 .b64encode (content ),
102- ' type' : ' binary' ,
103- ' res_model' : self ._name ,
104- ' res_id' : export_record .id ,
104+ " name" : name ,
105+ " datas" : base64 .b64encode (content ),
106+ " type" : " binary" ,
107+ " res_model" : self ._name ,
108+ " res_id" : export_record .id ,
105109 }
106110 )
107111
108- url = ' {}/web/content/ir.attachment/{}/datas/{}?download=true' .format (
109- self .env [' ir.config_parameter' ].sudo ().get_param (' web.base.url' ),
112+ url = " {}/web/content/ir.attachment/{}/datas/{}?download=true" .format (
113+ self .env [" ir.config_parameter" ].sudo ().get_param (" web.base.url" ),
110114 attachment .id ,
111115 attachment .name ,
112116 )
113117
114118 time_to_live = (
115- self .env [' ir.config_parameter' ].sudo ().get_param (' attachment.ttl' , 7 )
119+ self .env [" ir.config_parameter" ].sudo ().get_param (" attachment.ttl" , 7 )
116120 )
117121 date_today = fields .Date .today ()
118122 expiration_date = fields .Date .to_string (
119123 date_today + relativedelta (days = + int (time_to_live ))
120124 )
121125
122- odoo_bot = self .sudo ().env .ref (' base.partner_root' )
126+ odoo_bot = self .sudo ().env .ref (" base.partner_root" )
123127 email_from = odoo_bot .email
124128 model_description = self .env [model_name ]._description
125129 export_record .write (
126130 {
127- ' url' : url ,
128- ' expiration_date' : expiration_date ,
129- ' model_description' : model_description ,
131+ " url" : url ,
132+ " expiration_date" : expiration_date ,
133+ " model_description" : model_description ,
130134 }
131135 )
132136
133- self .env .ref (' base_export_async.delay_export_mail_template' ).send_mail (
137+ self .env .ref (" base_export_async.delay_export_mail_template" ).send_mail (
134138 export_record .id ,
135139 email_values = {
136- ' email_from' : email_from ,
137- ' reply_to' : email_from ,
138- ' recipient_ids' : [(6 , 0 , users .mapped (' partner_id' ).ids )],
140+ " email_from" : email_from ,
141+ " reply_to" : email_from ,
142+ " recipient_ids" : [(6 , 0 , users .mapped (" partner_id" ).ids )],
139143 },
140144 )
141145
142146 @api .model
143147 def cron_delete (self ):
144148 time_to_live = (
145- self .env [' ir.config_parameter' ].sudo ().get_param (' attachment.ttl' , 7 )
149+ self .env [" ir.config_parameter" ].sudo ().get_param (" attachment.ttl" , 7 )
146150 )
147151 date_today = fields .Date .today ()
148152 date_to_delete = date_today + relativedelta (days = - int (time_to_live ))
149- self .search ([(' create_date' , '<=' , date_to_delete )]).unlink ()
153+ self .search ([(" create_date" , "<=" , date_to_delete )]).unlink ()
0 commit comments