[IMP] *: request.session.geoip -> request.geoip

Commit "[IMP] core: don't save visitor default session" moved the geoip
from the session to the request with a deprecation warning. This commit
adapts the remaining modules to use `request.geoip` instead of
`request.session.geoip`.

Geoip is always set on the request but it can be an empty dictionnary in
case the geolocalization failed.

closes odoo/odoo#86015

Task: 2789035
Related: odoo/enterprise#25192
Signed-off-by: Julien Castiaux <juc@odoo.com>
This commit is contained in:
Julien Castiaux
2022-04-05 14:13:54 +02:00
parent 04e972660b
commit c46f4b908a
17 changed files with 25 additions and 29 deletions
@@ -88,7 +88,7 @@ class Users(models.Model):
template = self.env.ref('auth_totp_mail_enforce.mail_template_totp_mail_code').sudo()
context = {}
if request:
geoip = request.session.geoip
geoip = request.geoip
device = request.httprequest.user_agent.platform
browser = request.httprequest.user_agent.browser
context.update({
+3 -4
View File
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import http, tools, _
@@ -52,7 +51,7 @@ class LivechatController(http.Controller):
rule = {}
# find the country from the request
country_id = False
country_code = request.session.geoip.get('country_code') if request.session.geoip else False
country_code = request.geoip.get('country_code')
if country_code:
country_id = request.env['res.country'].sudo().search([('code', '=', country_code)], limit=1).id
# extract url
@@ -85,9 +84,9 @@ class LivechatController(http.Controller):
country_id = request.env.user.country_id.id
else:
# if geoip, add the country name to the anonymous name
if request.session.geoip:
if request.geoip:
# get the country of the anonymous person, if any
country_code = request.session.geoip.get('country_code', "")
country_code = request.geoip.get('country_code', "")
country = request.env['res.country'].sudo().search([('code', '=', country_code)], limit=1) if country_code else None
if country:
country_id = country.id
+1 -2
View File
@@ -12,8 +12,7 @@ class LinkTracker(http.Controller):
@http.route('/r/<string:code>', type='http', auth='public', website=True)
def full_url_redirect(self, code, **post):
if not request.env['ir.http'].is_a_bot():
country_code = request.session.geoip and request.session.geoip.get(
'country_code') or False
country_code = request.geoip.get('country_code')
request.env['link.tracker.click'].sudo().add_click(
code,
ip=request.httprequest.remote_addr,
+1 -1
View File
@@ -97,7 +97,7 @@ class DiscussController(http.Controller):
if channel_sudo.public == 'groups':
raise NotFound()
guest = channel_sudo.env['mail.guest'].create({
'country_id': channel_sudo.env['res.country'].search([('code', '=', request.session.get('geoip', {}).get('country_code'))], limit=1).id,
'country_id': channel_sudo.env['res.country'].search([('code', '=', request.geoip.get('country_code'))], limit=1).id,
'lang': get_lang(channel_sudo.env).code,
'name': _("Guest"),
'timezone': channel_sudo.env['mail.guest']._get_timezone_from_request(request),
+1 -1
View File
@@ -138,7 +138,7 @@ class MassMailController(http.Controller):
def full_url_redirect(self, code, mailing_trace_id, **post):
# don't assume geoip is set, it is part of the website module
# which mass_mailing doesn't depend on
country_code = request.session.get('geoip', False) and request.session.geoip.get('country_code', False)
country_code = request.geoip.get('country_code')
request.env['link.tracker.click'].sudo().add_click(
code,
+2 -4
View File
@@ -39,7 +39,7 @@ class MailingSMSController(http.Controller):
check_res = self._check_trace(mailing_id, trace_code)
if not check_res.get('trace'):
return request.redirect('/web')
country_code = request.session.get('geoip', False) and request.session.geoip.get('country_code', False) if request.session.get('geoip') else None
country_code = request.geoip.get('country_code')
# parse and validate number
sms_number = post.get('sms_number', '').strip(' ')
sanitize_res = phone_validation.phone_sanitize_numbers([sms_number], country_code, None)[sms_number]
@@ -86,9 +86,7 @@ class MailingSMSController(http.Controller):
@http.route('/r/<string:code>/s/<int:sms_sms_id>', type='http', auth="public")
def sms_short_link_redirect(self, code, sms_sms_id, **post):
# don't assume geoip is set, it is part of the website module
# which mass_mailing doesn't depend on
country_code = request.session.get('geoip', False) and request.session.geoip.get('country_code', False)
country_code = request.geoip.get('country_code')
if sms_sms_id:
trace_id = request.env['mailing.trace'].sudo().search([('sms_sms_id_int', '=', int(sms_sms_id))]).id
else:
+2 -2
View File
@@ -187,7 +187,7 @@ class Http(models.AbstractModel):
if not request.context.get('tz'):
with contextlib.suppress(pytz.UnknownTimeZoneError):
tz = request.session.get('geoip', {}).get('time_zone', '')
tz = request.geoip.get('time_zone', '')
request.update_context(tz=pytz.timezone(tz).zone)
website = request.env['website'].get_current_website()
@@ -430,7 +430,7 @@ class Http(models.AbstractModel):
@api.model
def get_frontend_session_info(self):
session_info = super(Http, self).get_frontend_session_info()
geoip_country_code = request.session.get('geoip', {}).get('country_code')
geoip_country_code = request.geoip.get('country_code')
geoip_phone_code = request.env['res.country']._phone_code_for(geoip_country_code) if geoip_country_code else None
session_info.update({
'is_website_user': request.env.user.id == request.website.user_id.id,
+1 -1
View File
@@ -930,7 +930,7 @@ class Website(models.Model):
# The format of `httprequest.host` is `domain:port`
domain_name = request and request.httprequest.host or ''
country = request.session.geoip.get('country_code') if request and 'geoip' in request.session else False
country = request and request.geoip.get('country_code')
country_id = False
if country:
country_id = self.env['res.country'].search([('code', '=', country)], limit=1).id
+1 -1
View File
@@ -235,7 +235,7 @@ class Page(models.Model):
# It is the only way for end user to not use cache via expr.
# E.g (None if 'token' in request.params else 1,) will bypass cache_time
cache_key = (req.website.id, req.lang, req.httprequest.path)
if self.cache_key_expr: # e.g. (request.session.geoip.get('country_code'),)
if self.cache_key_expr: # e.g. (request.geoip.get('country_code'),)
cache_key += safe_eval(self.cache_key_expr, {'request': req})
return cache_key
+1 -1
View File
@@ -255,7 +255,7 @@ class WebsiteVisitor(models.Model):
def _create_visitor(self):
""" Create a visitor. Tracking is added after the visitor has been created."""
country_code = request.session.get('geoip', {}).get('country_code', False)
country_code = request.geoip.get('country_code')
country_id = request.env['res.country'].sudo().search([('code', '=', country_code)], limit=1).id if country_code else False
vals = {
'lang_id': request.lang.id,
+1 -1
View File
@@ -1142,7 +1142,7 @@
<we-button data-select-data-attribute="conditional" data-select-class="o_snippet_invisible" data-name="visibility_conditional">Conditionally</we-button>
</we-select>
<t t-if="request.session.get('geoip', {}).get('country_code')">
<t t-if="request.geoip.get('country_code')">
<t t-call="website.snippet_options_conditional_visibility">
<t t-set="option_name">⌙ Country</t>
<t t-set="attribute_rule" t-valuef="visibilityValueCountryRule"/>
@@ -16,7 +16,7 @@ class WebsiteForm(form.WebsiteForm):
country = visitor_partner.country_id or request.env.company.country_id
if country:
return country
country_code = request.session.geoip and request.session.geoip.get('country_code') or False
country_code = request.geoip.get('country_code')
if country_code:
return request.env['res.country'].sudo().search([('code', '=', country_code)], limit=1)
return request.env['res.country']
@@ -55,8 +55,8 @@ class WebsiteForm(form.WebsiteForm):
request.params.update({phone_field: fmt_number})
if model_name == 'crm.lead' and not request.params.get('state_id'):
geoip_country_code = request.session.get('geoip', {}).get('country_code')
geoip_state_code = request.session.get('geoip', {}).get('region')
geoip_country_code = request.geoip.get('country_code')
geoip_state_code = request.geoip.get('region')
if geoip_country_code and geoip_state_code:
state = request.env['res.country.state'].search([('code', '=', geoip_state_code), ('country_id.code', '=', geoip_country_code)])
if state:
@@ -20,8 +20,8 @@ class IrHttp(models.AbstractModel):
# We are avoiding to create a reveal_view if a lead is already
# created from another module, e.g. website_form
if not (visitor_sudo and visitor_sudo.lead_ids):
country_code = 'geoip' in request.session and request.session['geoip'].get('country_code')
state_code = 'geoip' in request.session and request.session['geoip'].get('region')
country_code = request.geoip.get('country_code')
state_code = request.geoip.get('region')
if country_code:
try:
url = request.httprequest.url
@@ -222,7 +222,7 @@ class WebsiteCrmPartnerAssign(WebsitePartnerPage):
# group by grade
grade_domain = list(base_partner_domain)
if not country and not country_all:
country_code = request.session['geoip'].get('country_code')
country_code = request.geoip.get('country_code')
if country_code:
country = country_obj.search([('code', '=', country_code)], limit=1)
if country:
@@ -36,7 +36,7 @@ class WebsiteHrRecruitment(http.Controller):
# Default search by user country
if not (country or department or office_id or kwargs.get('all_countries')):
country_code = request.session['geoip'].get('country_code')
country_code = request.geoip.get('country_code')
if country_code:
countries_ = Country.search([('code', '=', country_code)])
country = countries_[0] if countries_ else None
+1 -1
View File
@@ -878,7 +878,7 @@ class WebsiteSale(http.Controller):
def_country_id = order.partner_id.country_id
# IF PUBLIC ORDER
if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
country_code = request.session['geoip'].get('country_code')
country_code = request.geoip.get('country_code')
if country_code:
def_country_id = request.env['res.country'].search([('code', '=', country_code)], limit=1)
else:
+2 -2
View File
@@ -200,7 +200,7 @@ class Website(models.Model):
return pl_id in self.get_pricelist_available(show_visible=False).ids
def _get_geoip_country_code(self):
return request and request.session.geoip and request.session.geoip.get('country_code') or False
return request and request.geoip.get('country_code') or False
def _get_cached_pricelist_id(self):
return request and request.session.get('website_sale_current_pl') or None
@@ -417,7 +417,7 @@ class Website(models.Model):
# If the current user is the website public user, the fiscal position
# is computed according to geolocation.
if request.website.partner_id.id == partner_sudo.id:
country_code = request.session['geoip'].get('country_code')
country_code = request.geoip.get('country_code')
if country_code:
country_id = self.env['res.country'].search([('code', '=', country_code)], limit=1).id
fpos = self.env['account.fiscal.position'].sudo()._get_fpos_by_region(country_id)