Tuesday, October 1, 2019

I worked a bit on our community guide (Lino Community Guide).

I saw that Hamza had tried to fix #3239 and realized that the docs about LINO_CACHE_ROOT were insufficient. He had no chance to find the easy solution. Indeed we have two demo projects lino_book.projects.polls and lino_book.projects.polls2 which cause a name clash when LINO_CACHE_ROOT is used. The simple solution was to manually set a lino.core.site.Site.project_name for the second mysite site.

But why did this problem occur only now? The polls2 demo project is quite old, isn’t it? And LINO_CACHE_ROOT is used on Travis CI already a long time, isn’t it?

Manual tests on new server

The new weleup server is basically functional. Now for the more detailed tests : does bleaching affect some existing data? Does Tx25 now work again?

$ python manage.py checkdata -f system.BleachChecker
Started manage.py checkdata -f system.BleachChecker (using lino_local.weleup1.settings) --> PID 9408
Found 0 and fixed 202 data problems in Income confirmations.
Found 0 and fixed 8 data problems in Simple confirmations.
Found 0 and fixed 2 data problems in Tasks.
Found 0 and fixed 230 data problems in Budgets.
Found 0 and fixed 437 data problems in ISIPs.
Found 0 and fixed 96 data problems in Contract partners.
Found 0 and fixed 9685 data problems in Events/Notes.
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino/modlib/checkdata/management/commands/checkdata.py", line 63, in handle
    check_data(args=args, fix=options['fix'])
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino/modlib/checkdata/models.py", line 349, in check_data
    todo, done = chk.update_problems(obj, False, fix)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino/modlib/checkdata/choicelists.py", line 139, in update_problems
    for fixable, msg in self.get_checkdata_problems(obj, fix):
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino/modlib/system/models.py", line 228, in get_checkdata_problems
    obj.full_clean()
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/django/db/models/base.py", line 1181, in full_clean
    self.clean_fields(exclude=exclude)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/django/db/models/base.py", line 1219, in clean_fields
    raw_value = getattr(self, f.attname)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino/core/fields.py", line 602, in __get__
    return self.value_from_object(instance, None)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino/core/fields.py", line 593, in value_from_object
    return m(obj, ar)
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino_xl/lib/outbox/models.py", line 253, in get_recipients
    Recipient.objects.filter(mail=self, type=RecipientTypes.to)]
  File "/usr/local/lino/lino_local/weleup1/env/lib/python3.7/site-packages/lino_xl/lib/outbox/models.py", line 252, in <listcomp>
    recs = [unicode(r) for r in
NameError: name 'unicode' is not defined
Done manage.py checkdata -f system.BleachChecker (PID 9408)

This was a trivial py2to3 bug in a place that is not covered by any test. I fixed the actual problem, but did not write a test case to cover it. AFAIK they don’t use the outbox plugin, maybe we should rather deprecate it.

Now let’s test whether Tx25 works! That’s the the moment I have been waiting for… As a first test I will just request a Tx25 for client 2000067. And oops, here is an error message:

‘NoneType’ object has no attribute ‘promotePrefixes’

I asked Google and found https://github.com/cackharot/suds-py3/pull/40/commits

and I applied the same changes as in this commit which is not yet released to the suds master. Great! This seems to fix the issue!

Afterwards I get another error. Probably caused because their firewall prevents the new server from connecting to the CBSS:

[2019-10-01 15:25:40.401201] Traceback (most recent call last):
  File "/usr/lib/python3.7/urllib/request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/usr/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1016, in _send_output
    self.send(msg)
  File "/usr/lib/python3.7/http/client.py", line 956, in send
    self.connect()
  File "/usr/lib/python3.7/http/client.py", line 1384, in connect
    super().connect()
  File "/usr/lib/python3.7/http/client.py", line 928, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.7/socket.py", line 707, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/lib/python3.7/socket.py", line 748, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/lino_welfare/modlib/cbss/mixins.py", line 239, in execute_request
    retval = self.execute_request_(now, simulate_response)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/lino_welfare/modlib/cbss/mixins.py", line 554, in execute_request_
    return self.execute_newstyle(client, info, simulate_response)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/lino_welfare/modlib/cbss/models.py", line 484, in execute_newstyle
    reply = client.service.retrieveTI(infoCustomer, None, legalContext, si)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/suds/client.py", line 559, in __call__
    return client.invoke(args, kwargs)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/suds/client.py", line 618, in invoke
    result = self.send(soapenv)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/suds/client.py", line 652, in send
    reply = transport.send(request)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/suds/transport/http.py", line 178, in send
    return HttpTransport.send(self, request)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/suds/transport/http.py", line 78, in send
    fp = self.u2open(u2request)
  File "/usr/local/lino/lino_local/prod/env/lib/python3.7/site-packages/suds/transport/http.py", line 119, in u2open
    return url.open(u2request, timeout=tm)
  File "/usr/lib/python3.7/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/usr/lib/python3.7/urllib/request.py", line 543, in _open
    '_open', req)
  File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.7/urllib/request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/usr/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>

That error message is a bit useless. It should simply say “Connection to https://example.com failed with [Errno -2] Name or service not known”.

Another surprise:

from lxml import etree
ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process.

After reading this I added the following line to the nginx/a_uwsgi.ini file

single-interpreter = True

https://stackoverflow.com/questions/12626503/does-mod-wsgi-runs-in-a-single-python-interpreter