Wednesday, July 1, 2020¶
I probably fixed #3705. How to reproduce the problem locally:
$ export LINO_CACHE_ROOT=/home/luc/lino_cache
$ go cosi1
$ pm prep
$ dt docs/specs/cosi/cosi1.rst
The problem was because the cosi1 demo project has a local config dir. When the
cosi1 tests were run on travis (i.e. LINO_CACHE_ROOT
is set), Lino
forgot to add the cosi1 site’s config dir to its list of config dirs. Another
problem was that these “non-local site config dirs” (for which cosi1 on travis is
the only example) must come before the plugin config dirs.
The confdirs demo project now also has a local config directory. The
Introduction to config directories page now does some actual testing. It uses a trick to
deactivate the LINO_CACHE_ROOT
on Travis CI when running the tests
for this page:
>>> import os ; os.environ.pop('LINO_CACHE_ROOT', None) # disable for this doctest
Curious to see whether my trick works. (Edit: yes, it works)
I reviewed docs about config
.
I discovered and fixed a bug in the template of the status
command
that caused it to never say [writeable].
lino repo gets red when book fails¶
I probably fixed #3706 and tidied up some duplicate functionality.
Running e2e tests locally¶
I used https://opensource.com/article/20/6/reactjs-tools as a base for the following.
- ::
$ sudo apt install nodejs npm
Worked.
- ::
$ cd ~/tmp $ npm start
failed with:
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'start' ]
2 info using npm@3.5.2
3 info using node@v8.10.0
4 verbose stack Error: ENOENT: no such file or directory, open '/home/luc/tmp/package.json'
I went to https://create-react-app.dev/docs/getting-started#npx and read that they now tell us to say:
npx create-react-app my-app
But this also fails saying “Command ‘npx’ not found …”.
Yes, they say “(npx comes with npm 5.2+ and higher, see instructions for older npm versions)”. I try what’s there:
$ npm install -g create-react-app
This fails with:
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib'
npm ERR! { Error: EACCES: permission denied, access '/usr/local/lib'
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
Okay, let’s trust them:
$ sudo npm install -g create-react-app
/usr/local/bin/create-react-app -> /usr/local/lib/node_modules/create-react-app/index.js
/usr/local/lib
└─┬ create-react-app@3.4.1
├─┬ chalk@3.0.0
│ ├─┬ ansi-styles@4.2.1
│ │ ├── @types/color-name@1.1.1
│ │ └─┬ color-convert@2.0.1
│ │ └── color-name@1.1.4
│ └─┬ supports-color@7.1.0
│ └── has-flag@4.0.0
├── commander@4.1.0
├─┬ cross-spawn@7.0.1
│ ├── path-key@3.1.1
│ ├─┬ shebang-command@2.0.0
│ │ └── shebang-regex@3.0.0
│ └─┬ which@2.0.2
│ └── isexe@2.0.0
├── envinfo@7.5.0
├─┬ fs-extra@8.1.0
│ ├── graceful-fs@4.2.4
│ ├── jsonfile@4.0.0
│ └── universalify@0.1.2
├─┬ hyperquest@2.1.3
│ ├── buffer-from@0.1.2
│ ├─┬ duplexer2@0.0.2
│ │ └─┬ readable-stream@1.1.14
│ │ ├── isarray@0.0.1
│ │ └── string_decoder@0.10.31
│ └─┬ through2@0.6.5
│ ├── readable-stream@1.0.34
│ └── xtend@4.0.2
├─┬ inquirer@7.0.4
│ ├─┬ ansi-escapes@4.3.1
│ │ └── type-fest@0.11.0
│ ├─┬ chalk@2.4.2
│ │ ├─┬ ansi-styles@3.2.1
│ │ │ └─┬ color-convert@1.9.3
│ │ │ └── color-name@1.1.3
│ │ └─┬ supports-color@5.5.0
│ │ └── has-flag@3.0.0
│ ├─┬ cli-cursor@3.1.0
│ │ └─┬ restore-cursor@3.1.0
│ │ ├─┬ onetime@5.1.0
│ │ │ └── mimic-fn@2.1.0
│ │ └── signal-exit@3.0.3
│ ├── cli-width@2.2.1
│ ├─┬ external-editor@3.1.0
│ │ ├── chardet@0.7.0
│ │ ├─┬ iconv-lite@0.4.24
│ │ │ └── safer-buffer@2.1.2
│ │ └─┬ tmp@0.0.33
│ │ └── os-tmpdir@1.0.2
│ ├─┬ figures@3.2.0
│ │ └── escape-string-regexp@1.0.5
│ ├── lodash@4.17.15
│ ├── mute-stream@0.0.8
│ ├── run-async@2.4.1
│ ├─┬ rxjs@6.5.5
│ │ └── tslib@1.13.0
│ ├─┬ string-width@4.2.0
│ │ ├── emoji-regex@8.0.0
│ │ ├── is-fullwidth-code-point@3.0.0
│ │ └─┬ strip-ansi@6.0.0
│ │ └── ansi-regex@5.0.0
│ ├─┬ strip-ansi@5.2.0
│ │ └── ansi-regex@4.1.0
│ └── through@2.3.8
├── semver@6.3.0
├─┬ tar-pack@3.4.1
│ ├─┬ debug@2.6.9
│ │ └── ms@2.0.0
│ ├─┬ fstream@1.0.12
│ │ ├── inherits@2.0.4
│ │ └─┬ mkdirp@0.5.5
│ │ └── minimist@1.2.5
│ ├─┬ fstream-ignore@1.0.5
│ │ └─┬ minimatch@3.0.4
│ │ └─┬ brace-expansion@1.1.11
│ │ ├── balanced-match@1.0.0
│ │ └── concat-map@0.0.1
│ ├─┬ once@1.4.0
│ │ └── wrappy@1.0.2
│ ├─┬ readable-stream@2.3.7
│ │ ├── core-util-is@1.0.2
│ │ ├── isarray@1.0.0
│ │ ├── process-nextick-args@2.0.1
│ │ ├── safe-buffer@5.1.2
│ │ ├── string_decoder@1.1.1
│ │ └── util-deprecate@1.0.2
│ ├─┬ rimraf@2.7.1
│ │ └─┬ glob@7.1.6
│ │ ├── fs.realpath@1.0.0
│ │ ├── inflight@1.0.6
│ │ └── path-is-absolute@1.0.1
│ ├─┬ tar@2.2.2
│ │ └── block-stream@0.0.9
│ └── uid-number@0.0.6
├── tmp@0.1.0
└─┬ validate-npm-package-name@3.0.0
└── builtins@1.0.3
And here we go:
$ create-react-app my-app
Creating a new React app in /home/luc/tmp/my-app.
You are using npm 3.5.2 so the project will be bootstrapped with an old unsupported version of tools.
Please update to npm 5 or higher for a better, fully supported experience.
Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts...
> core-js@2.6.11 postinstall /home/luc/tmp/my-app/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
my-app@0.1.0 /home/luc/tmp/my-app
├─┬ react@16.13.1
... (skipping about 1000 lines)
├── webpack-manifest-plugin@1.1.0
└── whatwg-fetch@2.0.2
Success! Created my-app at /home/luc/tmp/my-app
Inside that directory, you can run several commands:
npm start
Starts the development server.
npm run build
Bundles the app into static files for production.
npm test
Starts the test runner.
npm run eject
Removes this tool and copies build dependencies, configuration files
and scripts into the app directory. If you do this, you can’t go back!
We suggest that you begin by typing:
cd my-app
npm start
Happy hacking!
Note: the project was bootstrapped with an old unsupported version of tools.
Please update to Node >=8.10 and npm >=5 to get supported tools in new projects.
Welcome to React
To get started, edit src/App.js and save to reload.
Questions: Do I want to get a newer version of npm? And if yes, how can I get it?
But all this was not necessary for Lino. Tonis helped me to get started for reproducing a series of failures in the book on travis.
In the book repo we have a series of e2e tests to be run with cypress. There is
no react in the book at the moment, but cypress doesn’t need react, we use it in
the book to test the extjs front end. Installing npm and then cypress as done
by the .travis.json
file works straightforward.
The test_confirmation_callback.js
file contains 3 tests.
I can run them interactively using:
./node_modules/cypress/bin/cypress open
I must still make sure to run runserver
in a separate
terminal, and that I can run the avanti1 tests only when avanti1 is running, and
the min1 tests only when min1 is running.
When running the tests, we observed the problem that the type()
method on
a input field doesn’t work as expected. Here is the source code:
cy.get('.l-InsertFormPanel input[name="first_name"]').type("Alfred").wait(20);
The type()
method does not insert all the characters, only the first “A”.
The type()
method is documented here It inserts the specified
text into the DOM element. Each keypress is delayed 10ms by default in order to
simulate how a very fast user types. Text passed to .type() may include special
character sequences. Maybe this causes problem? So I tried to disable this
feature:
cy.get('.l-InsertFormPanel input[name="first_name"]').type("Alfred", {parseSpecialCharSequences:false}).wait(20);
No change. I tried also with {delay:100}
(i.e. simulate a slow typing with
100 instead of the default 10 ms delay after each key). That seems to give
better results, but still not perfect. Some part of the text is always eaten
away. Actually not even always because once I saw the test case pass
successfully. But at the next run it failed again.
I am afraid that the problem is because ExtJS probably handles DOM events specially.
‘AnswersByResponseRow’ object has no attribute ‘save_existing_instance’¶
I opened #3707 in response to an exception on avanti production site. I
managed to reproduce their problem and then to fix it. Actually there were two
bugs (in lino_xl.lib.polls
).
Added a new method
lino.core.requests.BaseRequest.clear_cached_status()
. Andtickets.LinksByTicket.get_table_summary()
now uses this method instead of manually setting_status = None
.Fixed a bug in
AnswersByResponseEditor
that caused remarks to always be stored next to the first question of a poll.It was not possible to edit the “My remark” field in
AnswersByResponseEditor
. Lino then raised above error message.
This last bug was quite subtle. I finally “just” had to move the definition of
save_existing_instance()
from lino.core.model.Model
to
lino.core.fields.TableRow
. En passant I did some py2to3 conversions
and translated two German captions.