Factorize parsing of hostname and port
and remove wrong constraint on database name. issue2911 review13521002
This commit is contained in:
1 parent
85f8848003
commit
7d3197afe2
3 files changed
+80
-101
No files matched your search
+25
-8
@@ -322,19 +322,17 @@ def request_server(server_widget):
|
||||
dialog.show_all()
|
||||
dialog.set_default_response(gtk.RESPONSE_OK)
|
||||
|
||||
url_m = re.match('^([\w.-]+):(\d{1,5})',
|
||||
server_widget.get_text())
|
||||
if url_m:
|
||||
entry_server.set_text(url_m.group(1))
|
||||
entry_port.set_text(url_m.group(2))
|
||||
netloc = server_widget.get_text()
|
||||
entry_server.set_text(get_hostname(netloc))
|
||||
entry_port.set_text(str(get_port(netloc)))
|
||||
|
||||
res = dialog.run()
|
||||
if res == gtk.RESPONSE_OK:
|
||||
host = entry_server.get_text()
|
||||
port = int(entry_port.get_text())
|
||||
url = '%s:%d' % (host, port)
|
||||
port = entry_port.get_text()
|
||||
url = '%s:%s' % (host, port)
|
||||
server_widget.set_text(url)
|
||||
result = (host, port)
|
||||
result = (get_hostname(url), get_port(url))
|
||||
parent.present()
|
||||
dialog.destroy()
|
||||
return result
|
||||
@@ -1534,6 +1532,25 @@ def humanize(size):
|
||||
size /= 1000.0
|
||||
|
||||
|
||||
def get_hostname(netloc):
|
||||
if '[' in netloc and ']' in netloc:
|
||||
return netloc.split(']')[0][1:]
|
||||
elif ':' in netloc:
|
||||
return netloc.split(':')[0]
|
||||
else:
|
||||
return netloc
|
||||
|
||||
|
||||
def get_port(netloc):
|
||||
netloc = netloc.split(']')[-1]
|
||||
if ':' in netloc:
|
||||
try:
|
||||
return int(netloc.split(':')[1])
|
||||
except ValueError:
|
||||
pass
|
||||
return 8000
|
||||
|
||||
|
||||
def resize_pixbuf(pixbuf, width, height):
|
||||
img_height = pixbuf.get_height()
|
||||
height = min(img_height, height) if height != -1 else img_height
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import gtk
|
||||
import gobject
|
||||
import gettext
|
||||
import re
|
||||
|
||||
import tryton.common as common
|
||||
from tryton.config import CONFIG, TRYTON_ICON
|
||||
from tryton.exceptions import TrytonServerError
|
||||
@@ -320,95 +320,72 @@ class DBCreate(object):
|
||||
self.dialog.props.sensitive = True
|
||||
res = self.dialog.run()
|
||||
dbname = self.entry_dbname.get_text()
|
||||
url = self.entry_server_connection.get_text()
|
||||
url_m = re.match('^([\w.\-]+):(\d{1,5})', url or '')
|
||||
netloc = self.entry_server_connection.get_text()
|
||||
host = common.get_hostname(netloc)
|
||||
port = common.get_port(netloc)
|
||||
langidx = self.combo_language.get_active_iter()
|
||||
langreal = langidx \
|
||||
and self.combo_language.get_model().get_value(langidx, 1)
|
||||
passwd = pass_widget.get_text()
|
||||
if res == gtk.RESPONSE_OK:
|
||||
if (not dbname
|
||||
or not re.match('^[a-zA-Z0-9_]+$', dbname)):
|
||||
common.warning(_('The database name is restricted to '
|
||||
'alpha-nummerical characters '
|
||||
'and "_" (underscore). '
|
||||
'Avoid all accents, space '
|
||||
'and any other special characters.'),
|
||||
_('Wrong characters in database name!'))
|
||||
continue
|
||||
elif admin_passwd.get_text() != admin_passwd2.get_text():
|
||||
if admin_passwd.get_text() != admin_passwd2.get_text():
|
||||
common.warning(
|
||||
_("The new admin password "
|
||||
"doesn't match the confirmation field.\n"),
|
||||
_("Passwords doesn't match!"))
|
||||
continue
|
||||
elif not admin_passwd.get_text():
|
||||
common.warning(_("Admin password and confirmation are "
|
||||
"required to create a new database."),
|
||||
_('Missing admin password!'))
|
||||
try:
|
||||
exist = rpc.db_exec(host, port, 'db_exist', dbname)
|
||||
except TrytonServerError, exception:
|
||||
common.process_exception(exception)
|
||||
continue
|
||||
elif url_m.group(1) \
|
||||
and int(url_m.group(2)) \
|
||||
and dbname \
|
||||
and langreal \
|
||||
and passwd \
|
||||
and admin_passwd.get_text():
|
||||
if exist:
|
||||
common.warning(_("A database with the same name "
|
||||
"already exists.\n"
|
||||
"Try another database name."),
|
||||
_("This database name already exist!"))
|
||||
self.entry_dbname.set_text("")
|
||||
self.entry_dbname.grab_focus()
|
||||
continue
|
||||
else: # Everything runs fine, break the block here
|
||||
self.dialog.props.sensitive = False
|
||||
try:
|
||||
exist = rpc.db_exec(url_m.group(1),
|
||||
int(url_m.group(2)), 'db_exist', dbname)
|
||||
rpcprogress = common.RPCProgress('db_exec',
|
||||
(host, port, 'create', dbname, passwd, langreal,
|
||||
admin_passwd.get_text()))
|
||||
rpcprogress.run(False)
|
||||
except TrytonServerError, exception:
|
||||
common.process_exception(exception)
|
||||
continue
|
||||
if exist:
|
||||
common.warning(_("A database with the same name "
|
||||
"already exists.\n"
|
||||
"Try another database name."),
|
||||
_("This database name already exist!"))
|
||||
self.entry_dbname.set_text("")
|
||||
self.entry_dbname.grab_focus()
|
||||
continue
|
||||
else: # Everything runs fine, break the block here
|
||||
host = url_m.group(1)
|
||||
port = url_m.group(2)
|
||||
self.dialog.props.sensitive = False
|
||||
try:
|
||||
rpcprogress = common.RPCProgress('db_exec',
|
||||
(host, int(port), 'create', dbname, passwd,
|
||||
langreal, admin_passwd.get_text()))
|
||||
rpcprogress.run(False)
|
||||
except TrytonServerError, exception:
|
||||
if str(exception.faultCode) == "AccessDenied":
|
||||
common.warning(_("Sorry, wrong password for "
|
||||
"the Tryton server. "
|
||||
"Please try again."),
|
||||
_("Access denied!"))
|
||||
self.entry_serverpasswd.set_text("")
|
||||
self.entry_serverpasswd.grab_focus()
|
||||
continue
|
||||
else: # Unclassified error
|
||||
common.warning(_("Can't create the "
|
||||
"database, caused by an unknown reason.\n"
|
||||
"If there is a database created, it could "
|
||||
"be broken. Maybe drop this database! "
|
||||
"Please check the error message for "
|
||||
"possible informations.\n"
|
||||
"Error message:\n")
|
||||
+ str(exception.faultCode),
|
||||
_("Error creating database!"))
|
||||
parent.present()
|
||||
self.dialog.destroy()
|
||||
rpc.logout()
|
||||
break
|
||||
if str(exception.faultCode) == "AccessDenied":
|
||||
common.warning(_("Sorry, wrong password for "
|
||||
"the Tryton server. "
|
||||
"Please try again."),
|
||||
_("Access denied!"))
|
||||
self.entry_serverpasswd.set_text("")
|
||||
self.entry_serverpasswd.grab_focus()
|
||||
continue
|
||||
else: # Unclassified error
|
||||
common.warning(_("Can't create the "
|
||||
"database, caused by an unknown reason.\n"
|
||||
"If there is a database created, it could "
|
||||
"be broken. Maybe drop this database! "
|
||||
"Please check the error message for "
|
||||
"possible informations.\n"
|
||||
"Error message:\n")
|
||||
+ str(exception.faultCode),
|
||||
_("Error creating database!"))
|
||||
parent.present()
|
||||
self.dialog.destroy()
|
||||
if self.sig_login:
|
||||
CONFIG['login.server'] = host
|
||||
CONFIG['login.port'] = port
|
||||
CONFIG['login.db'] = dbname
|
||||
CONFIG['login.login'] = 'admin'
|
||||
self.sig_login()
|
||||
rpc.logout()
|
||||
break
|
||||
|
||||
parent.present()
|
||||
self.dialog.destroy()
|
||||
if self.sig_login:
|
||||
CONFIG['login.server'] = host
|
||||
CONFIG['login.port'] = str(port)
|
||||
CONFIG['login.db'] = dbname
|
||||
CONFIG['login.login'] = 'admin'
|
||||
self.sig_login()
|
||||
break
|
||||
break
|
||||
parent.present()
|
||||
self.dialog.destroy()
|
||||
|
||||
@@ -528,9 +528,9 @@ class DBLogin(object):
|
||||
|
||||
def clear_profile_combo(self, entry, event):
|
||||
netloc = self.entry_host.get_text()
|
||||
host = self.get_hostname(netloc)
|
||||
host = common.get_hostname(netloc)
|
||||
try:
|
||||
port = str(self.get_port(netloc))
|
||||
port = str(common.get_port(netloc))
|
||||
except ValueError:
|
||||
host = ''
|
||||
port = ''
|
||||
@@ -555,21 +555,6 @@ class DBLogin(object):
|
||||
self.entry_database.props.visible = visibility
|
||||
self.label_database.props.visible = visibility
|
||||
|
||||
def get_hostname(self, netloc):
|
||||
if '[' in netloc and ']' in netloc:
|
||||
return netloc.split(']')[0][1:]
|
||||
elif ':' in netloc:
|
||||
return netloc.split(':')[0]
|
||||
else:
|
||||
return netloc
|
||||
|
||||
def get_port(self, netloc):
|
||||
netloc = netloc.split(']')[-1]
|
||||
if ':' in netloc:
|
||||
return int(netloc.split(':')[1])
|
||||
else:
|
||||
return 8000
|
||||
|
||||
def run(self):
|
||||
profile_name = CONFIG['login.profile']
|
||||
can_use_profile = self.profiles.has_section(profile_name)
|
||||
@@ -620,9 +605,9 @@ class DBLogin(object):
|
||||
profile = self.profile_store[active_profile][0]
|
||||
CONFIG['login.profile'] = profile
|
||||
netloc = self.entry_host.get_text()
|
||||
host = self.get_hostname(netloc)
|
||||
host = common.get_hostname(netloc)
|
||||
try:
|
||||
port = self.get_port(netloc)
|
||||
port = common.get_port(netloc)
|
||||
except ValueError:
|
||||
continue
|
||||
try:
|
||||
|
||||
Reference in new issue
Block a user