Merge pull request #4964 from odoo-dev/master-cli-remove-unused-options-xmo
Removes unused CLI options and the underlying code bits
This commit is contained in:
@@ -53,9 +53,6 @@ def exp_about(extended=False):
|
||||
return info, openerp.release.version
|
||||
return info
|
||||
|
||||
def exp_timezone_get(db, login, password):
|
||||
return openerp.tools.misc.get_server_timezone()
|
||||
|
||||
def exp_set_loglevel(loglevel, logger=None):
|
||||
# TODO Previously, the level was set on the now deprecated
|
||||
# `openerp.netsvc.Logger` class.
|
||||
|
||||
+3
-57
@@ -48,16 +48,6 @@ class MyOption (optparse.Option, object):
|
||||
self.my_default = attrs.pop('my_default', None)
|
||||
super(MyOption, self).__init__(*opts, **attrs)
|
||||
|
||||
|
||||
def check_ssl():
|
||||
try:
|
||||
from OpenSSL import SSL
|
||||
import socket
|
||||
|
||||
return hasattr(socket, 'ssl') and hasattr(SSL, "Connection")
|
||||
except:
|
||||
return False
|
||||
|
||||
DEFAULT_LOG_HANDLER = [':INFO']
|
||||
|
||||
def _get_default_datadir():
|
||||
@@ -101,7 +91,6 @@ class configmanager(object):
|
||||
|
||||
self.misc = {}
|
||||
self.config_file = fname
|
||||
self.has_ssl = check_ssl()
|
||||
|
||||
self._LOGLEVELS = dict([
|
||||
(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x))
|
||||
@@ -148,24 +137,6 @@ class configmanager(object):
|
||||
help="specify the TCP port for longpolling requests", type="int")
|
||||
parser.add_option_group(group)
|
||||
|
||||
# XML-RPC / HTTPS
|
||||
title = "XML-RPC Secure Configuration"
|
||||
if not self.has_ssl:
|
||||
title += " (disabled as ssl is unavailable)"
|
||||
|
||||
group = optparse.OptionGroup(parser, title)
|
||||
group.add_option("--xmlrpcs-interface", dest="xmlrpcs_interface", my_default='',
|
||||
help="Specify the TCP IP address for the XML-RPC Secure protocol. The empty string binds to all interfaces.")
|
||||
group.add_option("--xmlrpcs-port", dest="xmlrpcs_port", my_default=8071,
|
||||
help="specify the TCP port for the XML-RPC Secure protocol", type="int")
|
||||
group.add_option("--no-xmlrpcs", dest="xmlrpcs", action="store_false", my_default=True,
|
||||
help="disable the XML-RPC Secure protocol")
|
||||
group.add_option("--cert-file", dest="secure_cert_file", my_default='server.cert',
|
||||
help="specify the certificate file for the SSL connection")
|
||||
group.add_option("--pkey-file", dest="secure_pkey_file", my_default='server.pkey',
|
||||
help="specify the private key file for the SSL connection")
|
||||
parser.add_option_group(group)
|
||||
|
||||
# WEB
|
||||
group = optparse.OptionGroup(parser, "Web interface Configuration")
|
||||
group.add_option("--db-filter", dest="dbfilter", my_default='.*',
|
||||
@@ -271,8 +242,6 @@ class configmanager(object):
|
||||
group.add_option('--debug', dest='debug_mode', action='store_true', my_default=False, help='enable debug mode')
|
||||
group.add_option("--stop-after-init", action="store_true", dest="stop_after_init", my_default=False,
|
||||
help="stop the server after its initialization")
|
||||
group.add_option("-t", "--timezone", dest="timezone", my_default=False,
|
||||
help="specify reference timezone for the server (e.g. Europe/Brussels")
|
||||
group.add_option("--osv-memory-count-limit", dest="osv_memory_count_limit", my_default=False,
|
||||
help="Force a limit on the maximum number of records kept in the virtual "
|
||||
"osv_memory tables. The default is False, which means no count-based limit.",
|
||||
@@ -399,9 +368,8 @@ class configmanager(object):
|
||||
'db_port', 'db_template', 'logfile', 'pidfile', 'smtp_port',
|
||||
'email_from', 'smtp_server', 'smtp_user', 'smtp_password',
|
||||
'db_maxconn', 'import_partial', 'addons_path',
|
||||
'xmlrpc', 'syslog', 'without_demo', 'timezone',
|
||||
'xmlrpcs_interface', 'xmlrpcs_port', 'xmlrpcs',
|
||||
'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level', 'log_db',
|
||||
'xmlrpc', 'syslog', 'without_demo',
|
||||
'dbfilter', 'log_handler', 'log_level', 'log_db',
|
||||
'geoip_database',
|
||||
]
|
||||
|
||||
@@ -422,7 +390,7 @@ class configmanager(object):
|
||||
'language', 'translate_out', 'translate_in', 'overwrite_existing_translations',
|
||||
'debug_mode', 'dev_mode', 'smtp_ssl', 'load_language',
|
||||
'stop_after_init', 'logrotate', 'without_demo', 'xmlrpc', 'syslog',
|
||||
'list_db', 'xmlrpcs', 'proxy_mode',
|
||||
'list_db', 'proxy_mode',
|
||||
'test_file', 'test_enable', 'test_commit', 'test_report_directory',
|
||||
'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent',
|
||||
'data_dir',
|
||||
@@ -468,28 +436,6 @@ class configmanager(object):
|
||||
self.options['translate_modules'] = opt.translate_modules and map(lambda m: m.strip(), opt.translate_modules.split(',')) or ['all']
|
||||
self.options['translate_modules'].sort()
|
||||
|
||||
# TODO checking the type of the parameters should be done for every
|
||||
# parameters, not just the timezone.
|
||||
# The call to get_server_timezone() sets the timezone; this should
|
||||
# probably done here.
|
||||
if self.options['timezone']:
|
||||
# Prevent the timezone to be True. (The config file parsing changes
|
||||
# the string 'True' to the boolean value True. It would be probably
|
||||
# be better to remove that conversion.)
|
||||
die(not isinstance(self.options['timezone'], basestring),
|
||||
"Invalid timezone value in configuration or environment: %r.\n"
|
||||
"Please fix this in your configuration." %(self.options['timezone']))
|
||||
|
||||
# If an explicit TZ was provided in the config, make sure it is known
|
||||
try:
|
||||
import pytz
|
||||
pytz.timezone(self.options['timezone'])
|
||||
except pytz.UnknownTimeZoneError:
|
||||
die(True, "The specified timezone (%s) is invalid" % self.options['timezone'])
|
||||
except:
|
||||
# If pytz is missing, don't check the provided TZ, it will be ignored anyway.
|
||||
pass
|
||||
|
||||
if opt.pg_path:
|
||||
self.options['pg_path'] = opt.pg_path
|
||||
|
||||
|
||||
@@ -740,90 +740,6 @@ def detect_ip_addr():
|
||||
ip_addr = 'localhost'
|
||||
return ip_addr
|
||||
|
||||
# RATIONALE BEHIND TIMESTAMP CALCULATIONS AND TIMEZONE MANAGEMENT:
|
||||
# The server side never does any timestamp calculation, always
|
||||
# sends them in a naive (timezone agnostic) format supposed to be
|
||||
# expressed within the server timezone, and expects the clients to
|
||||
# provide timestamps in the server timezone as well.
|
||||
# It stores all timestamps in the database in naive format as well,
|
||||
# which also expresses the time in the server timezone.
|
||||
# For this reason the server makes its timezone name available via the
|
||||
# common/timezone_get() rpc method, which clients need to read
|
||||
# to know the appropriate time offset to use when reading/writing
|
||||
# times.
|
||||
def get_win32_timezone():
|
||||
"""Attempt to return the "standard name" of the current timezone on a win32 system.
|
||||
@return the standard name of the current win32 timezone, or False if it cannot be found.
|
||||
"""
|
||||
res = False
|
||||
if sys.platform == "win32":
|
||||
try:
|
||||
import _winreg
|
||||
hklm = _winreg.ConnectRegistry(None,_winreg.HKEY_LOCAL_MACHINE)
|
||||
current_tz_key = _winreg.OpenKey(hklm, r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation", 0,_winreg.KEY_ALL_ACCESS)
|
||||
res = str(_winreg.QueryValueEx(current_tz_key,"StandardName")[0]) # [0] is value, [1] is type code
|
||||
_winreg.CloseKey(current_tz_key)
|
||||
_winreg.CloseKey(hklm)
|
||||
except Exception:
|
||||
pass
|
||||
return res
|
||||
|
||||
def detect_server_timezone():
|
||||
"""Attempt to detect the timezone to use on the server side.
|
||||
Defaults to UTC if no working timezone can be found.
|
||||
@return the timezone identifier as expected by pytz.timezone.
|
||||
"""
|
||||
try:
|
||||
import pytz
|
||||
except Exception:
|
||||
_logger.warning("Python pytz module is not available. "
|
||||
"Timezone will be set to UTC by default.")
|
||||
return 'UTC'
|
||||
|
||||
# Option 1: the configuration option (did not exist before, so no backwards compatibility issue)
|
||||
# Option 2: to be backwards compatible with 5.0 or earlier, the value from time.tzname[0], but only if it is known to pytz
|
||||
# Option 3: the environment variable TZ
|
||||
sources = [ (config['timezone'], 'OpenERP configuration'),
|
||||
(time.tzname[0], 'time.tzname'),
|
||||
(os.environ.get('TZ',False),'TZ environment variable'), ]
|
||||
# Option 4: OS-specific: /etc/timezone on Unix
|
||||
if os.path.exists("/etc/timezone"):
|
||||
tz_value = False
|
||||
try:
|
||||
f = open("/etc/timezone")
|
||||
tz_value = f.read(128).strip()
|
||||
except Exception:
|
||||
pass
|
||||
finally:
|
||||
f.close()
|
||||
sources.append((tz_value,"/etc/timezone file"))
|
||||
# Option 5: timezone info from registry on Win32
|
||||
if sys.platform == "win32":
|
||||
# Timezone info is stored in windows registry.
|
||||
# However this is not likely to work very well as the standard name
|
||||
# of timezones in windows is rarely something that is known to pytz.
|
||||
# But that's ok, it is always possible to use a config option to set
|
||||
# it explicitly.
|
||||
sources.append((get_win32_timezone(),"Windows Registry"))
|
||||
|
||||
for (value,source) in sources:
|
||||
if value:
|
||||
try:
|
||||
tz = pytz.timezone(value)
|
||||
_logger.info("Using timezone %s obtained from %s.", tz.zone, source)
|
||||
return value
|
||||
except pytz.UnknownTimeZoneError:
|
||||
_logger.info("The timezone specified in %s (%s) is invalid, ignoring it.", source, value)
|
||||
|
||||
_logger.info("No valid timezone could be detected, using default UTC "
|
||||
"timezone. You can specify it explicitly with option 'timezone' in "
|
||||
"the server configuration.")
|
||||
return 'UTC'
|
||||
|
||||
def get_server_timezone():
|
||||
return "UTC"
|
||||
|
||||
|
||||
DEFAULT_SERVER_DATE_FORMAT = "%Y-%m-%d"
|
||||
DEFAULT_SERVER_TIME_FORMAT = "%H:%M:%S"
|
||||
DEFAULT_SERVER_DATETIME_FORMAT = "%s %s" % (
|
||||
@@ -945,54 +861,6 @@ def posix_to_ldml(fmt, locale):
|
||||
|
||||
return ''.join(buf)
|
||||
|
||||
def server_to_local_timestamp(src_tstamp_str, src_format, dst_format, dst_tz_name,
|
||||
tz_offset=True, ignore_unparsable_time=True):
|
||||
"""
|
||||
Convert a source timestamp string into a destination timestamp string, attempting to apply the
|
||||
correct offset if both the server and local timezone are recognized, or no
|
||||
offset at all if they aren't or if tz_offset is false (i.e. assuming they are both in the same TZ).
|
||||
|
||||
WARNING: This method is here to allow formatting dates correctly for inclusion in strings where
|
||||
the client would not be able to format/offset it correctly. DO NOT use it for returning
|
||||
date fields directly, these are supposed to be handled by the client!!
|
||||
|
||||
@param src_tstamp_str: the str value containing the timestamp in the server timezone.
|
||||
@param src_format: the format to use when parsing the server timestamp.
|
||||
@param dst_format: the format to use when formatting the resulting timestamp for the local/client timezone.
|
||||
@param dst_tz_name: name of the destination timezone (such as the 'tz' value of the client context)
|
||||
@param ignore_unparsable_time: if True, return False if src_tstamp_str cannot be parsed
|
||||
using src_format or formatted using dst_format.
|
||||
|
||||
@return local/client formatted timestamp, expressed in the local/client timezone if possible
|
||||
and if tz_offset is true, or src_tstamp_str if timezone offset could not be determined.
|
||||
"""
|
||||
if not src_tstamp_str:
|
||||
return False
|
||||
|
||||
res = src_tstamp_str
|
||||
if src_format and dst_format:
|
||||
# find out server timezone
|
||||
server_tz = get_server_timezone()
|
||||
try:
|
||||
# dt_value needs to be a datetime.datetime object (so no time.struct_time or mx.DateTime.DateTime here!)
|
||||
dt_value = datetime.strptime(src_tstamp_str, src_format)
|
||||
if tz_offset and dst_tz_name:
|
||||
try:
|
||||
import pytz
|
||||
src_tz = pytz.timezone(server_tz)
|
||||
dst_tz = pytz.timezone(dst_tz_name)
|
||||
src_dt = src_tz.localize(dt_value, is_dst=True)
|
||||
dt_value = src_dt.astimezone(dst_tz)
|
||||
except Exception:
|
||||
pass
|
||||
res = dt_value.strftime(dst_format)
|
||||
except Exception:
|
||||
# Normal ways to end up here are if strptime or strftime failed
|
||||
if not ignore_unparsable_time:
|
||||
return False
|
||||
return res
|
||||
|
||||
|
||||
def split_every(n, iterable, piece_maker=tuple):
|
||||
"""Splits an iterable into length-n pieces. The last piece will be shorter
|
||||
if ``n`` does not evenly divide the iterable length.
|
||||
|
||||
Reference in New Issue
Block a user