Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error upon submitting correction annotations #179

Closed
pirolen opened this issue Sep 8, 2021 · 71 comments
Closed

Error upon submitting correction annotations #179

pirolen opened this issue Sep 8, 2021 · 71 comments
Assignees
Labels

Comments

@pirolen
Copy link

pirolen commented Sep 8, 2021

I got errors on two files upon submitting correction annotations, and those files would not open anymore, there is nginx gateway timeout signalled.

I am attaching the docserver logs here too.

Screenshot 2021-09-08 at 16 29 13
Screenshot 2021-09-08 at 16 30 22
Screenshot 2021-09-08 at 16 30 43
foliaserverlog.txt

@pirolen
Copy link
Author

pirolen commented Sep 8, 2021

Update: after restarting nginx and the documentserver, the second file (0030) opened again.
For the first one (000) the error stays:

Screenshot 2021-09-08 at 16 53 13

@pirolen
Copy link
Author

pirolen commented Sep 9, 2021

The log above is of the web service, attached please is the foliadocserver's log...

foliadocserve_pl_new.log.zip.txt

@pirolen
Copy link
Author

pirolen commented Sep 9, 2021

Keep getting this error, related to corrections, after test-annotating for a while on different files. Attached please find the last hour's activity log.

Can it perhaps be also related to insufficient memory? The service runs on Debian 10 and is currently pretty thin:
total used free shared buff/cache available
Mem: 16019 7259 2062 299 6696 8377

fdocserve_lastactiv.log.txt

@proycon proycon self-assigned this Sep 10, 2021
@proycon
Copy link
Owner

proycon commented Sep 10, 2021

It looks like a corruption occurred for your first file (an invalid reference somewhere), that's a definitely a bug in the system because that should not happen of course. I thought I had an auto-correction mechanism in place for that already, but I may be wrong, since clearly it fails to load now. Could you send the two FoLiA documents so I can pinpoint why exactly it might have gone wrong?

Can it perhaps be also related to insufficient memory? The service runs on Debian 10 and is currently pretty thin:
total used free shared buff/cache available
Mem: 16019 7259 2062 299 6696 8377

Nah, that sounds like enough memory.

@proycon proycon added the bug label Sep 10, 2021
@pirolen
Copy link
Author

pirolen commented Sep 10, 2021

@proycon
Copy link
Owner

proycon commented Sep 10, 2021

I thought I had an auto-correction mechanism in place for that already, but I may be wrong, since clearly it fails to load now.

There was a bug in this mechanism, so that's probably what caused part of the problem (fixed and released already in foliapy v2.5.7). I can't really pinpoint the problem on the 0030 document yet, will investigate further.

@pirolen
Copy link
Author

pirolen commented Sep 20, 2021

Thanks, so how should I update FLAT so that I can load these annotated documents again?

I run
pip install git+https://github.com/proycon/foliadocserve
pip install git+https://github.com/proycon/flat

By this I got folia-2.5.5

@pirolen
Copy link
Author

pirolen commented Sep 20, 2021

There was a doc that I test-annotated (pls see attached), which I cannot import correctly, although foliavalidator says it is fine.

FLAT says:

Uploaded file is no valid FoLiA Document: FoLiA exception in handling of @ line 93 (in parent @ parent line 92) : [InvalidReference] FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.w.bc123fb8afdf4d1000c315a0ddacba70Traceback (most recent call last): -- File "/home/flatuser/flateditor/env/lib/python3.7/site-packages/folia/main.py", line 7574, in getitem -- return self.index[key] -- KeyError: 'FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.w.bc123fb8afdf4d1000c315a0ddacba70' -- -- During handling of the above exception, another exception occurred: -- -- Traceback (most recent call last): -- File "/home/flatuser/flateditor/env/lib/python3.7/site-packages/folia/main.py", line 6322, in parsexml -- return doc[id] -- File "/home/flatuser/flateditor/env/lib/python3.7/site-packages/folia/main.py", line 7583, in getitem -- raise KeyError("No such key: " + key) --
etc.

FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.flatout.folia.xml.txt

@kosloot
Copy link

kosloot commented Sep 20, 2021

On my PC, both folialint and foliavalidator reject this file:

folialint ../FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.flatout.folia.xml.txt
../FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.flatout.folia.xml.txt failed: XML error: Unresolvable id FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.w.bc123fb8afdf4d1000c315a0ddacba70 in WordReference

foliavalidator ../FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.flatout.folia.xml.txt
VALIDATION ERROR on full parse by library (stage 2/3), in ../FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.flatout.folia.xml.txt
ParseError: FoLiA exception in handling of @ line 93 (in parent @ parent line 92) : [InvalidReference] FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.w.bc123fb8afdf4d1000c315a0ddacba70

@kosloot
Copy link

kosloot commented Sep 22, 2021

Looking closer, the problem is in this fragment:

             <entities>
                <entity xml:id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.entity.1" class="ff:italic" processor="proc.pirolen.039f428d" datetime="2021-09-09T17:
01:08">
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.w.bc123fb8afdf4d1000c315a0ddacba70" t="-;"/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.3" t="Wodeham"/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.4" t="("/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.5" t="?"/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.6" t=")"/>
                </entity>
                <entity xml:id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.entity.2" class="lem:Auth" processor="proc.pirolen.039f428d" datetime="2021-09-09T17:0
1:58">
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.ucto.w.bc123fb8afdf4d1000c315a0ddacba70" t="-;"/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.3" t="Wodeham"/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.4" t="("/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.5" t="?"/>
                  <wref id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.w.6" t=")"/>
                  <feat subset="normaliz_intern" class="Adam;"/>
                </entity>
              </entities>

the processor="proc.pirolen.039f428d" created 2 strange entities, both referring to a word? created by ucto, which isn't in the text.

I have no clue why or how. Seems very strange and is surely dead wrong.

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

Thanks a lot for troubleshooting!
The text in this file is very nonstandard, it comes from a register in Latin, with very problematic/incorrect OCR on which I run ucto.
I did some test-annotations with a test-entity set. During this I also did some corrections, typically with direct edits.
It can thus be that I direct-deleted some word or string that was annotated already...

@kosloot
Copy link

kosloot commented Sep 22, 2021

Direct edits are the source of a lot of evil. As you discovered.
That should not be a standard procedure. Using FLAT, these problems should have been avoided (I Hope)

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

I was using FLAT.

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

It might be this: in the entity annotation, the string "-;" is a single unit.
Whereas in the correction these are separate tokens.

          <correction xml:id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.correction.1" class="word_misrec" processor="proc.foliadocserve.90a509c3" datetime="2021-09-09T17:00:55">
            <new>
              <w xml:id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.correction.1.w.1">
                <t set="https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/text.foliaset.ttl">-<feat subset="normaliz_addPrevLem" class="Adam"/></t>
              </w>
              <w xml:id="FA-MBK-4-3_035245008_0020_abpproc_partransf.text.1.div.1.p.1.list.1.item.1.s.1.correction.1.w.2">
                <t set="https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/text.foliaset.ttl">;</t>
              </w>
            </new>
          </correction>

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

I suspect this can come from the order of steps I made:

  • first added the entity annotation to "-;" which was at that time a single token (I assume I got it like that from ucto).
  • then I realized that I want to add the annotation to the dash only, but not to the semicolon, so I did a direct edit correction and split these two characters.
  • then the entity annotation broke I assume and FLAT reported an error.

As said, I was experimenting with an annotation approach and tagset and FLAT.
If this order of annotation breaks things, I would configure my FLAT differently (e.g. not allowing direct edits).
@proycon please tell me if this should be the case.

@proycon
Copy link
Owner

proycon commented Sep 22, 2021

Yes, the core of the error was an invalid reference that was indeed created like you describe. i thought I had a simple workaround in place in the latest version that would allow loading your document, by simply dropping the invalid reference completely. You should be on foliapy v2.5.7 for this to work correctly, you might have a slightly older version still?

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

Thanks, I see! So when I update FLAT, I don't actually see a foliapy version being referred to, only folia (please see above):
I run
pip install git+https://github.com/proycon/foliadocserve
pip install git+https://github.com/proycon/flat

By this I get folia-2.5.5

@kosloot
Copy link

kosloot commented Sep 22, 2021

Just a remark: Should't the correction have an "original" node containing the "-;" thus keeping the reference alive?
(although I fear a lot of confusion and mess later on, considering this reference)

@proycon
Copy link
Owner

proycon commented Sep 22, 2021

@pirolen: do pip install git+https://github.com/proycon/foliapy , it seems flat and foliadocserve itself don't force the latest version yet.

Just a remark: Should't the correction have an "original" node containing the "-;" thus keeping the reference alive?
(although I fear a lot of confusion and mess later on, considering this reference)

If it's done in correction mode, yes, but not in direct edit mode.

@proycon
Copy link
Owner

proycon commented Sep 22, 2021

By this I get folia-2.5.5

Yes, that's foliapy, you need 2.5.7 of that one

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

$pip show folia
Name: FoLiA
Version: 2.5.7

I completely stopped and restarted the webserver and foliadocserver, but still could not load this very document.

What I did then: I deleted the (several) annotations about wich FLAT complained, and then it worked to load the document.
Will keep testing.

@kosloot
Copy link

kosloot commented Sep 22, 2021

If it's done in correction mode, yes, but not in direct edit mode.

Ok, didn't know that (not a FLAT user). But this implies that 'direct edit mode' is highly dangerous.
Not recommended imho.

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

Btw, you might have seen that I used ucto set to French and German, on these Latin texts... not sure what would be a better option.

@kosloot
Copy link

kosloot commented Sep 22, 2021

Best would be to create a separated tokconfig-lat fil, su you could use -Llat.
I wonder if this isn't just a simplified version from the French or German files.

Any input would be welcome.

@pirolen
Copy link
Author

pirolen commented Sep 22, 2021

Also the existing Italian files would be useful. I am happy to assist, e.g. compiling an abbreviations list.
Still I am afraid that the data I work with is very idiosynchratic, i.e. that the list I'd compile would not generalize, or is that of no concern?

@kosloot
Copy link

kosloot commented Sep 22, 2021

Well, ANY list of Latin abbreviations would be welcome, I suppose. As long as it doesn't contains entries that wouldn't be an abbreviation in "normal" Latin context.
Including: this Wikipedia list might be a start?

@pirolen
Copy link
Author

pirolen commented Oct 13, 2021

I will let you know when I'll have a usable abbreviation list -- the data provider said that the abbreviations used in the texts at hand are almost random (as the printed book required).

@pirolen
Copy link
Author

pirolen commented Feb 16, 2023

Hi, I encountered similar issues (again on Latin), when using an ucto-ed file, in a containerized FLAT. Similar to my previous experiences (with a non-container FLAT back then):

  • tokens disappear from the context of an annotated token, right after I submit the annotation
  • annotations can not be added to tokens: submitting yields an error message.
    :-(

Could you please tell where the logfile is located in the container? I am going to attach it, together with before/after files and screenshots. Many thanks!

Disclaimer: I cannot exclude the possibility of unintentionally having used the GUI in a way that is not valid...

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

I am trying to trace back how everything was set up. (Apologies for the overhead!)

I have this server since end of last year.
This is what it looks like now.
E.g. ownership is convoluted, and the flat dir belongs to root :-(

I guess I need to set all this straight for the new container!
Unless this is how FLAT sets it up and all looks fine to you.

drwxr-xr-x  4 root  root        34 Feb 22 13:32 flat 

pirol@badwqsv-dev:~$ ls -l  /home/pirol/flat/
total 0
drwxr-xr-x 3 systemd-timesync users 26 Feb 22 13:32 data
drwxr-xr-x 2 root             root   6 Feb 22 13:32 settings

pirol@badwqsv-dev:~$ ls -l  /home/pirol/flat/data/
total 0
drwxrwsr-x 2 systemd-timesync users 6 Feb 22 13:32 flat.docroot

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

PS. The data has always been in the container. I used to access files from there. I could access them with e.g. docker exec flat ls data/flat.docroot/

@proycon
Copy link
Owner

proycon commented Feb 22, 2023

pirol@badwqsv-dev:~$ ls -l  /home/pirol/flat/data/
total 0
drwxrwsr-x 2 systemd-timesync users 6 Feb 22 13:32 flat.docroot

And what's inside that flat.docroot/ dir? Isn't your data in there? I'd guess it is.

PS. The data has always been in the container. I used to access files from there. I could access them with e.g. docker exec flat ls data/flat.docroot/

That could have also just been the mountpoint with the actual files outside the container.

E.g. ownership is convoluted, and the flat dir belongs to root :-(

I guess I need to set all this straight for the new container!
Unless this is how FLAT sets it up and all looks fine to you.

Actually yes, it looks okay. If the data is there then it doesn't look so bad. I'll explain:

E.g. ownership is convoluted, and the flat dir belongs to root :-(

That's probably because the container is not run rootless (our containers do support that btw) and so root inside the container maps to root outside the container. It always takes a bit of effort to get these things nicely in sync (and with rootless containers it's even more of an effort, but best for security).

Yes, the user under which foliadocserve runs inside the containers happens to map to 'systemd-timesync' outside of the container on your system (same UID).

If you start your container with the same volume mounts as the old one, doesn't your data show up? That's how it was designed.

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

I will test. I also suspect that things got mixed up when I was attempting to configure the container.

E.g. not only I pulled the image, but also cloned the repo etc. I also see a Dockerfile in the directory.... (Please advise: is it the best to create an empty dir, cd to it, and start the container in there? Or is this nonsense? I think I also used foliautils by cloning... have to check. And: was one supposed to create the flat/data dir in advance)

Can you perhaps also explain why there is no need to build the container, i.e. one can start it directly after pulling the image?
Yes, I prefer rootless running. I was starting the container as pirol.

@proycon
Copy link
Owner

proycon commented Feb 22, 2023

E.g. not only I pulled the image, but also cloned the repo etc. I also see a Dockerfile in the directory.... (Please advise: is it > the best to create an empty dir, cd to it, and start the container in there?

You don't have to be in any particular location to start the container (assuming the volume mounts all use absolute paths) and you indeed don't need to clone the git repo at all to work with the containers.

Can you perhaps also explain why there is no need to build the container, i.e. one can start it directly after pulling the
image?

The container image was built already on my end, and uploaded to Docker Hub. You pull in the container image and can run it directly without needing anything else. It contains all the binaries (rather than the sources which you don't need in that context).

When you built containers before for some of our tools, that was needed because you were working with development versions of things that weren't released yet (so I hadn't built and published a container for it). Only in that situation did you need the git source repo.

Yes, I prefer rootless running. I was starting the container as pirol.

I personally use podman instead of docker, as it's better suited for rootless containers (and is otherwise almost entirely compatible with docker and its containers). It may be that Docker is also better at it nowadays. It's probably overkill to switch at this point if the current docker solution works for you. Perhaps talk to your system administrator at some point about it.

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

That wasn't supposed to happen, the data should have been on the /data mount rather than in the container itself. Your mounts look okay. Is it not still in /home/pirol/flat/data' ?? Did you perhaps set the FLAT_DOCROOTenvironment variable for the container to anything perhaps? (it should point to/data/flat.docrootby default when unset, which is want you want in combination with the mount you're using). Or are you using aflat_settings.pythat explicitly setsWORKDIR` to something else? Those are the only ways I can explain the data not being on the volume.

For the record:
None of these. /home/pirol/flat/data/flat.docroot/ is empty.

Proceeding now further with starting the container.

@proycon
Copy link
Owner

proycon commented Feb 22, 2023

For the record:
None of these. /home/pirol/flat/data/flat.docroot/ is empty.

Ah okay, that's not what I expected then, so the files must have indeed lived inside the container somehow.

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

Does this look as expected, permission/ownershipwise?

pirol@badwqsv-dev:~$ ls -la /home/pirol/flat/data/flat.docroot/
total 0
drwxrwsr-x 2 systemd-timesync users 6 Feb 22 13:32 .
drwxr-xr-x 3 systemd-timesync users 26 Feb 22 13:32 ..

@proycon
Copy link
Owner

proycon commented Feb 22, 2023

Yes, I think I use UID 100 and GID 100 in the container. That probably matches what you're seeing.

@proycon
Copy link
Owner

proycon commented Feb 22, 2023

By the way, you can configure the UID and GID used inside the container by setting environment variables UWSGI_UID and UWSGI_GID upon starting the container.

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

Uh... I am not sure about the implications. So far it would be great to make sure that (as you write in the installation manual) I need to make sure I (belonging to the docker group) have sufficient writing permissions.

So again, I manually create the flat dir beforehand as pirol, correct? And if I start the container also as pirol, the permissions are supposed to be fine, also if some dirs will be created by root? (since I haven't yet investigated how to run rootless). And: shall I also create the data and settings dirs beforehand as pirol? And e.g. put there the yaml files (for annotation config) in advance, before starting the container?

@pirolen
Copy link
Author

pirolen commented Feb 22, 2023

Got an internal server error upon docker run :-( Sorry!

The logs:
2023/02/22 18:27:34 [notice] 15#15: using the "epoll" event method
2023/02/22 18:27:34 [notice] 15#15: nginx/1.22.1
2023/02/22 18:27:34 [notice] 15#15: OS: Linux 5.4.0-139-generic
2023/02/22 18:27:34 [notice] 15#15: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/02/22 18:27:34 [notice] 15#15: start worker processes
2023/02/22 18:27:34 [notice] 15#15: start worker process 21
2023/02/22 18:27:34 [notice] 15#15: start worker process 22
2023/02/22 18:27:34 [notice] 15#15: start worker process 23
2023/02/22 18:27:34 [notice] 15#15: start worker process 24
2023-02-22 18:27:34 - foliadocserve 0.7.7
2023-02-22 18:27:34 - Initialising document store in /data/flat.docroot
2023-02-22 18:27:34 - Documents loaded: 0
129.187.243.28 - - [22/Feb/2023:18:27:56 +0000] "GET / HTTP/1.1" 500 32 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15" "-"
129.187.243.28 - - [22/Feb/2023:18:27:58 +0000] "GET / HTTP/1.1" 500 32 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15" "-"
172.17.0.1 - - [22/Feb/2023:18:28:32 +0000] "GET / HTTP/1.1" 500 32 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15" "-"
172.17.0.1 - - [22/Feb/2023:18:28:32 +0000] "GET /favicon.ico HTTP/1.1" 500 32 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15" "-"
2023-02-22 18:28:34 - Documents loaded: 0

@proycon
Copy link
Owner

proycon commented Feb 23, 2023

Got an internal server error upon docker run :-( Sorry!

Can you pass --env FLAT_DEBUG=1 to the container, that should provide some more output on what causes the HTTP 500.
For production deployment, it's recommended to turn that off again. I suspect permission issues.

So again, I manually create the flat dir beforehand as pirol, correct? And if I start the container also as pirol, the
permissions are supposed to be fine, also if some dirs will be created by root? (since I haven't yet investigated how to
run rootless). And: shall I also create the data and settings dirs beforehand as pirol? And e.g. put there the yaml files (for > annotation config) in advance, before starting the container?

You can create /home/pirol/flat/data and /home/pirol/flat/settings yes, and put the yaml configuration in the latter before starting the container. Then start with -v /home/pirol/flat/data:/data -v /home/pirol/flat/settings/:/etc/flat as you did before. You don't need to create a data/flat.docroot dir, the container will do that and ensure it has the proper permissions, for a container that is not rootless this shouldn't pose any problems. Basically the result will look like what you had before (which looked okay to me), but we need to verify files indeed end up there now.

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

Thanks, passing FLAT_DEBUG looks informative, I paste the logs further below, and also what was printed to stderr.

NB. I haven't yet set the reverse proxy.

Stderr:

Applying migrations...
Starting foliadocserve...
/usr/bin/django-admin:17: RemovedInDjango40Warning: django-admin.py is deprecated in favor of django-admin.
  warnings.warn(
Traceback (most recent call last):
  File "/usr/bin/django-admin", line 21, in <module>
    management.execute_from_command_line()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/flat_settings.py", line 317, in <module>
    raise Exception(f"No configurations found in {environ['FLAT_CONFIG_DIR']}")
Exception: No configurations found in /etc/flat
Creating FLAT superuser and (re)setting password...
/usr/bin/django-admin:17: RemovedInDjango40Warning: django-admin.py is deprecated in favor of django-admin.
  warnings.warn(
Traceback (most recent call last):
  File "/usr/bin/django-admin", line 21, in <module>
    management.execute_from_command_line()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/flat_settings.py", line 317, in <module>
    raise Exception(f"No configurations found in {environ['FLAT_CONFIG_DIR']}")
Exception: No configurations found in /etc/flat
chown: /data/flat.db: No such file or directory
chmod: /data/flat.db: No such file or directory
Starting FLAT via uwsgi...
*** Starting uWSGI 2.0.21 (64bit) on [Thu Feb 23 17:55:47 2023] ***
compiled with version: 12.2.1 20220924 on 09 November 2022 12:47:28
os: Linux-5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023
nodename: 32b530542c90
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /etc/service/uwsgi
detected binary path: /usr/sbin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
setgid() to 100
set additional group 82 (www-data)
set additional group 101 (nginx)
setuid() to 100
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 127.0.0.1:8888 fd 3
Python version: 3.10.10 (main, Feb  9 2023, 02:08:14) [GCC 12.2.1 20220924]
Python main interpreter initialized at 0x7f170a1d9230
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 250128 bytes (244 KB) for 4 cores
*** Operational MODE: preforking+threaded ***
[23/Feb/2023:17:55:48] ENGINE Listening for SIGTERM.
[23/Feb/2023:17:55:48] ENGINE Listening for SIGHUP.
[23/Feb/2023:17:55:48] ENGINE Listening for SIGUSR1.
[23/Feb/2023:17:55:48] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.

[23/Feb/2023:17:55:48] ENGINE Started monitor thread 'Autoreloader'.
Traceback (most recent call last):
  File "/etc/flat.wsgi", line 28, in <module>
    application = get_wsgi_application()
  File "/usr/lib/python3.10/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/usr/lib/python3.10/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/flat_settings.py", line 317, in <module>
    raise Exception(f"No configurations found in {environ['FLAT_CONFIG_DIR']}")
Exception: No configurations found in /etc/flat
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
spawned uWSGI master process (pid: 32)
spawned uWSGI worker 1 (pid: 47, cores: 2)
spawned uWSGI worker 2 (pid: 48, cores: 2)
[23/Feb/2023:17:55:48] ENGINE Serving on http://0.0.0.0:8080
[23/Feb/2023:17:55:48] ENGINE Bus STARTED

The logs:

2023/02/23 17:55:47 [notice] 18#18: using the "epoll" event method
2023/02/23 17:55:47 [notice] 18#18: nginx/1.22.1
2023/02/23 17:55:47 [notice] 18#18: OS: Linux 5.4.0-139-generic
2023/02/23 17:55:47 [notice] 18#18: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/02/23 17:55:47 [notice] 18#18: start worker processes
2023/02/23 17:55:47 [notice] 18#18: start worker process 22
2023/02/23 17:55:47 [notice] 18#18: start worker process 23
2023/02/23 17:55:47 [notice] 18#18: start worker process 24
2023/02/23 17:55:47 [notice] 18#18: start worker process 25
2023-02-23 17:55:48 - foliadocserve 0.7.7
2023-02-23 17:55:48 - Initialising document store in /data/flat.docroot
2023-02-23 17:55:48 - Documents loaded: 0
2023-02-23 17:56:48 - Documents loaded: 0
2023-02-23 17:57:48 - Documents loaded: 0
2023/02/23 17:57:50 [info] 25#25: *1 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������ڨ���O��뫲l��	�;��*z�ս�i>�Z�7h ^����JP�Rܲ]��]Y�a�>~��_Ô�ˀ	�%�4�������,�+�$�#�"
129.187.243.56 - - [23/Feb/2023:17:57:50 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\xDA\xA8\x13\xFD\x9EO\x0F\x0E\xEB\xAB\xB2l\xC8\xFF\x09\x80;\x1E\x83*z\xF2\xD5\xBD\xBCi>\xF0Z\xF87h ^\x85\x8C\xE5\x9EJP\x11R\xDC\xB2]\x8B\xD4]Y\x1Ea\xA0>~\x08\xF4_\xC3\x94\xCA\xCB\x80\x09\xDB%\x004\x13\x01\x13\x02\x13\x03\xC0,\xC0+\xC0$\xC0#\xC0" 400 150 "-" "-" "-"
2023/02/23 17:57:50 [info] 24#24: *2 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������5I�,�{��>�g;P�T��T�`�&b9HB���T;� h�t�Y�s��"
129.187.243.56 - - [23/Feb/2023:17:57:50 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x035I\x86,\xDA{\x15\x94>\x8Eg;P\x8FT\xCD\xE9T\xC5`\x8A&b9HB\x80\xCA\x1FT;\x8A h\xCCt\xECY\x82s\xDB\x16" 400 150 "-" "-" "-"
2023/02/23 17:57:50 [info] 22#22: *3 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�������������E��\�J�T�����x��K;��*��Vp��C������"
129.187.243.56 - - [23/Feb/2023:17:57:50 +0000] "\x16\x03\x01\x00\x9C\x01\x00\x00\x98\x03\x01\xF9\x8BE\x97\x91\x5C\xFDJ\x9CT\xBB\xB5\xEB\x00\xE9x\xF6\x05K;\x10\xE9*\x05\x9EVp\x0B\xDBC\xF1\xCF\x00\x00\x14\xC0" 400 150 "-" "-" "-"
2023/02/23 17:57:51 [info] 23#23: *4 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "���������������&E��r�J	Te���v����vr`�^,���) g�[*��N�ۣͷ�h��X`]�N8%�,���P"
129.187.243.56 - - [23/Feb/2023:17:57:51 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\x96\xAA\x80\x00&E\xA9\x8Er\x1CJ\x09Te\xAC\xB3\x98v\x8D\x7F\x7F\xF9vr`\x1D^,\xEC\xEE\xF7) g\xD8[*\xF5\xA0N\xD7\xDB\xA3\xCD\xB7\xC6h\xB7\xABX`]\x80N8%\xF4,\xA9\xAE\xB7P" 400 150 "-" "-" "-"
2023/02/23 17:57:51 [info] 25#25: *5 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������TL�����D,H|��9��y��?7땣��y�#3�t �yz�� �nY�l]��S���"����ܓ�}W�U���6�������,�+�$�#�"
129.187.243.56 - - [23/Feb/2023:17:57:51 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03TL\xFD\xD0\xCE\xF8\xE6D,H|\xA4\xCA9\xF8\x0Fy\x12\xE1?7\xEB\x95\xA3\x17\xC3y\xB7#3\xDEt \x03yz\x92\x9E \xF9nY\xD6l]\xFB\x0ES\xC0\x8F\xD1\x22\x92\xD9\xEB\xDB\xDC\x93\xDB}W\xC6U\xC1\x8A\x006\x13\x01\x13\x02\x13\x03\xC0,\xC0+\xC0$\xC0#\xC0" 400 150 "-" "-" "-"
2023/02/23 17:57:51 [info] 25#25: *6 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�������������p�lw\=���l"
129.187.243.56 - - [23/Feb/2023:17:57:51 +0000] "\x16\x03\x01\x00\x9C\x01\x00\x00\x98\x03\x01\xE9\xC4p\x11lw\x5C=\xF8\x84\x8Dl" 400 150 "-" "-" "-"
2023/02/23 17:57:53 [info] 25#25: *7 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�������������x	�������:��ތO�T��̊&�������� pǂ����!YJ;��`w����kU��B���FQ��k�4�������,�+�$�#�"
129.187.243.56 - - [23/Feb/2023:17:57:53 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\x8F\x08x\x09\x94\x8E\x8F\x90\xCA\x1C\x90:\x03\xCD\xDE\x8CO\x84T\xAF\x06\xCC\x8A&\x9F\xC7\x05\xA4\x0B\xFD\x92\x90 p\xC7\x82\xB2\x89\xED\x1A!YJ;\xDF\xED`w\x9D\xD8\xEC\xCDkU\xF2\xCEB\x01\xBA\x08FQ\x1E\xE4k\x004\x13\x01\x13\x02\x13\x03\xC0,\xC0+\xC0$\xC0#\xC0" 400 150 "-" "-" "-"
2023/02/23 17:57:53 [info] 25#25: *8 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������Xx����Gҏfp�ُ\�	������)b+��ӟ�� ��������j%��!w�#��_eV��v�?r�QB���6�������,�+�$�#�"
129.187.243.56 - - [23/Feb/2023:17:57:53 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03Xx\xFF\x18\x90\x17G\xD2\x8Ffp\xEA\xD9\x8F\x5C\x96\x09\xD3\x0E\xA1\xB3\xEE\x01)b+\xB1\xF9\xD3\x9F\x11\xA7 \x11\xA5\x06\x9B\x1D\xAA\x07\xB8j%\xA4\xBC!w\x00#\xFF\xD0_eV\xC1\x01v\x08?r\x98QB\xD9\x0E\x006\x13\x01\x13\x02\x13\x03\xC0,\xC0+\xC0$\xC0#\xC0" 400 150 "-" "-" "-"
2023/02/23 17:57:53 [info] 25#25: *9 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������!.���.�$	z�uS�c���I����"
129.187.243.56 - - [23/Feb/2023:17:57:53 +0000] "\x16\x03\x01\x00\x9C\x01\x00\x00\x98\x03\x01!.\xB2\x1E\x16.\x9E$\x09z\xDDuS\x85c\xA5\xA3\x92I\xF7\xB1\xBF\xBD" 400 150 "-" "-" "-"
2023/02/23 17:57:53 [info] 25#25: *10 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������Stэ����h~s���"���iA���[�x���q\R ���v"
129.187.243.56 - - [23/Feb/2023:17:57:53 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03St\xD1\x8D\x04\xA0\x96\x0Bh~s\xF4\xD5\xE2\x22\xF1\xF0\xFFiA\xFC\x92\x98[\xF4x\x1F\xF4\xB6q\x5CR \xFC\xFB\xA0v" 400 150 "-" "-" "-"
2023/02/23 17:57:53 [info] 25#25: *11 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�������������k\�C(�"
129.187.243.56 - - [23/Feb/2023:17:57:54 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\x0B\x80k\x5C\xEDC(\x86" 400 150 "-" "-" "-"
2023/02/23 17:57:54 [info] 25#25: *12 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "������������G�Ɇ"���n���ɛ������Z�~�1�.���$����"
129.187.243.56 - - [23/Feb/2023:17:57:54 +0000] "\x16\x03\x01\x00\x9C\x01\x00\x00\x98\x03\x01\xF2G\xA5\xC9\x86\x22\x82\xD8\x13n\x87\x9E\x82\xC9\x9B\xC1\xEE\xB0\xC7\xEC\xDAZ\x87~\xB11\xAB.\xE1\x1C\xA4$\x00\x00\x14\xC0" 400 150 "-" "-" "-"
2023/02/23 17:58:04 [info] 25#25: *13 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "������������F�"
2023/02/23 17:58:04 [info] 25#25: *14 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "������������5v�����������Z�e�=Pۗ����B�{��� 3��1�eRȜ/쟀�T���#����sj�V�h�mB� ZZ�������+�/�,�0̨̩���������/�5����**���"
129.187.243.56 - - [23/Feb/2023:17:58:04 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\xE0F\x9A" 400 150 "-" "-" "-"
129.187.243.56 - - [23/Feb/2023:17:58:04 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\xD25v\xB2\x7F\x9F\x8E\xBA\xAB\xDE\xEF\xE9\xE1\x07Z\xCAe\x1C=P\xDB\x97\x87\x87\xF7\xC5B\xD0{\xC6\xD5\xCB 3\x9D\x801\x01eR\xC8\x9C/\xEC\x9F\x80\xBAT\x9B\x0E\x10#\x9C\xFF\xD2\xE8sj\xBEV\x82h\x99mB\x00 ZZ\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x13\xC0\x14\x00\x9C\x00\x9D\x00/\x005\x01\x00\x01\x93**\x00\x00\x00" 400 150 "-" "-" "-"
2023/02/23 17:58:04 [info] 25#25: *15 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�������������Q_/�-���f���Ÿ������HaN۔NA^�n s�V�����}�:(�8�����qF�{Fdy}A���>� ���������+�/�,�0̨̩���������/�5���������"
2023/02/23 17:58:04 [info] 25#25: *16 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "���������������y$�u������eY�'&e�BH8ۄ;�(�R� \c՞�h֚�����ߔ�$���G��g��������� ���������+�/�,�0̨̩���������/�5��������Di�����h2��������������"
129.187.243.56 - - [23/Feb/2023:17:58:04 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\xB8\xDEQ_/\xA9-\xFC\xBF\x93f\xA9\x0B\x1B\xC5\xB8\x18\xFF\xE1\xC2\x19\x11HaN\xDB\x94NA^\xD9n s\xEBV\x1C\x8A\x13\xB8\xF3}\x04:(\xF98\x80\xE2\x18\x99\x89qF\x82{Fdy}A\x1B\x8C\x83>\x00 \xFA\xFA\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x13\xC0\x14\x00\x9C\x00\x9D\x00/\x005\x01\x00\x01\x93\x9A\x9A\x00\x00\x00" 400 150 "-" "-" "-"
129.187.243.56 - - [23/Feb/2023:17:58:04 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\x0B\xE2\x98\x14y$\xBBu\xEA\xCB\x1C\x8C\xE2\xE4eY\x84'&e\xA7BH8\xDB\x84;\xA2(\x8CR\xF7 \x5Cc\xD5\x9E\x83h\xD6\x9A\xF1\xA5\xF4\xDE\xC3\xDF\x94\xD3$\xBA\x18\x18G\x8B\xF5g\x01\x94\xE9\xF8\x85\xFE\xE9\xC7\x00 \xBA\xBA\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x13\xC0\x14\x00\x9C\x00\x9D\x00/\x005\x01\x00\x01\x93\xAA\xAA\x00\x00Di\x00\x05\x00\x03\x02h2\x00\x1B\x00\x03\x02\x00\x02\x00\x0B\x00\x02\x01\x00\x00" 400 150 "-" "-" "-"
2023/02/23 17:58:09 [info] 25#25: *17 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�������������e�Ԕ�a�T<�_�"������h�2����Z)� �������I��:�_�`~��ں0���,�7��a�� **�������+�/�,�0̨̩���������/�5������������������������"
2023/02/23 17:58:09 [info] 24#24: *18 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������r�[�o^;��������X}�9��t�Z6��m�#љ ��ִ�����m!�����0E�T"
129.187.243.56 - - [23/Feb/2023:17:58:09 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\xC0\x9Ee\xE8\xD4\x94\xBBa\xAA\x0CT<\xE1_\x01\x22\xE5\x88\xC0\xE3\xBF\x1Fh\xC42\xA5\x9E\x12\x9DZ)\xE8 \xFF\xA6\x05\x9F\x08\x1A\xB0I\xAA\xE8:\x0C\xB6_\x02`~\xB0\xE7\xDA\xBA0\xAD\x13\xAA,\xEC7\xAA\xE6a\xD1\x00 **\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0,\xC00\xCC\xA9\xCC\xA8\xC0\x13\xC0\x14\x00\x9C\x00\x9D\x00/\x005\x01\x00\x01\x93\xAA\xAA\x00\x00\x00\x17\x00\x00\x00\x1B\x00\x03\x02\x00\x02\x00\x12\x00\x00\x00" 400 150 "-" "-" "-"
129.187.243.56 - - [23/Feb/2023:17:58:09 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03r\x9E[\xA5o^;\xC8\x11\xA3\x9F\xF5\xA1\xA5\x82X}\xE59\xCB\x16t\x8EZ6\x1F\xFFm\xC9#\xD1\x99 \x1D\xB9\xD6\xB4\x91\xC2\xE4\xC6\xF4m!\xDC\xEE\x08\xB7\xC00E\x8AT" 400 150 "-" "-" "-"
2023/02/23 17:58:09 [info] 25#25: *19 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "������������v��~�����:����6��B��&JPWT���"
2023/02/23 17:58:09 [info] 25#25: *20 client sent invalid method while reading client request line, client: 129.187.243.56, server: , request: "�����������+�&c8 d�.!��7���,��E(�)"
129.187.243.56 - - [23/Feb/2023:17:58:09 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03\xE9v\x04\xD0~\x1C\xA7\xBE\xF7\xC6:\x18\xD9\x07\x1F6\x00\xB5B\x99\xE8&JPWT\x1B\x9C\xC8" 400 150 "-" "-" "-"
129.187.243.56 - - [23/Feb/2023:17:58:09 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x03+\xBF&c8 d\xBC.!\xC3\xE47\x03\x19\xB1,\x98\x1CE(\x19)" 400 150 "-" "-" "-"

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

Please ignore the above, I will make a clearn relaunch

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

I guess it looks similar now:

pirol@badwqsv-dev:~$ docker logs flat > flatlogs.log
Starting foliadocserve...
Applying migrations...
/usr/bin/django-admin:17: RemovedInDjango40Warning: django-admin.py is deprecated in favor of django-admin.
  warnings.warn(
Traceback (most recent call last):
  File "/usr/bin/django-admin", line 21, in <module>
    management.execute_from_command_line()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/flat_settings.py", line 317, in <module>
    raise Exception(f"No configurations found in {environ['FLAT_CONFIG_DIR']}")
Exception: No configurations found in /etc/flat
Creating FLAT superuser and (re)setting password...
/usr/bin/django-admin:17: RemovedInDjango40Warning: django-admin.py is deprecated in favor of django-admin.
  warnings.warn(
Traceback (most recent call last):
  File "/usr/bin/django-admin", line 21, in <module>
    management.execute_from_command_line()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3.10/site-packages/django/core/management/__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/flat_settings.py", line 317, in <module>
    raise Exception(f"No configurations found in {environ['FLAT_CONFIG_DIR']}")
Exception: No configurations found in /etc/flat
chown: /data/flat.db: No such file or directory
chmod: /data/flat.db: No such file or directory
Starting FLAT via uwsgi...
*** Starting uWSGI 2.0.21 (64bit) on [Thu Feb 23 18:12:39 2023] ***
compiled with version: 12.2.1 20220924 on 09 November 2022 12:47:28
os: Linux-5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023
nodename: c13c7e68aa89
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /etc/service/uwsgi
detected binary path: /usr/sbin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
setgid() to 100
set additional group 82 (www-data)
set additional group 101 (nginx)
setuid() to 100
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 127.0.0.1:8888 fd 3
Python version: 3.10.10 (main, Feb  9 2023, 02:08:14) [GCC 12.2.1 20220924]
Python main interpreter initialized at 0x7f0b9e5df230
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 250128 bytes (244 KB) for 4 cores
*** Operational MODE: preforking+threaded ***
[23/Feb/2023:18:12:39] ENGINE Listening for SIGTERM.
[23/Feb/2023:18:12:39] ENGINE Listening for SIGHUP.
[23/Feb/2023:18:12:39] ENGINE Listening for SIGUSR1.
[23/Feb/2023:18:12:39] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.

[23/Feb/2023:18:12:39] ENGINE Started monitor thread 'Autoreloader'.
Traceback (most recent call last):
  File "/etc/flat.wsgi", line 28, in <module>
    application = get_wsgi_application()
  File "/usr/lib/python3.10/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/usr/lib/python3.10/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.10/site-packages/flat_settings.py", line 317, in <module>
    raise Exception(f"No configurations found in {environ['FLAT_CONFIG_DIR']}")
Exception: No configurations found in /etc/flat
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
spawned uWSGI master process (pid: 32)
spawned uWSGI worker 1 (pid: 47, cores: 2)
spawned uWSGI worker 2 (pid: 48, cores: 2)
[23/Feb/2023:18:12:40] ENGINE Serving on http://0.0.0.0:8080
[23/Feb/2023:18:12:40] ENGINE Bus STARTED

The logs:

2023/02/23 18:12:39 [notice] 16#16: using the "epoll" event method
2023/02/23 18:12:39 [notice] 16#16: nginx/1.22.1
2023/02/23 18:12:39 [notice] 16#16: OS: Linux 5.4.0-139-generic
2023/02/23 18:12:39 [notice] 16#16: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/02/23 18:12:39 [notice] 16#16: start worker processes
2023/02/23 18:12:39 [notice] 16#16: start worker process 21
2023/02/23 18:12:39 [notice] 16#16: start worker process 22
2023/02/23 18:12:39 [notice] 16#16: start worker process 23
2023/02/23 18:12:39 [notice] 16#16: start worker process 24
2023-02-23 18:12:39 - foliadocserve 0.7.7
2023-02-23 18:12:39 - Initialising document store in /data/flat.docroot
2023-02-23 18:12:39 - Documents loaded: 0
2023-02-23 18:13:40 - Documents loaded: 0

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

In the FLAT Manual it says:

$FLAT_CONFIG_DIR - Set this to a directory on the /data/ mount that holds the external configuration files in YAML format. Example: /data/flat.d/. You may omit this if you instead decided to edit settings.py directly.

I haven't yet created any yaml config, neither did I edit settings.py so far. Maybe this contributes to the problems.
Will create a yaml config file and restart the container.

I thought that there would be a fallback on some default settings.py in case no yaml config is provided.
E.g. based on the Dockerfile:

cp flat_settings.py /usr/lib/python3.*/site-packages/ &&\

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

But maybe I am mixing up things. In any case, the flat_settings.py file is in place inside the container.

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

Got FLAT running, now it's only the configuration invalid ;-)

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

I am using the default full.yml file now for settings, but get an Invalid configuration error in the browser when I try to upload (various) documents. Below is what is printed if I do docker logs flat > flatlogs.log


2023/02/23 19:29:49 [notice] 17#17: using the "epoll" event method
2023/02/23 19:29:49 [notice] 17#17: nginx/1.22.1
2023/02/23 19:29:49 [notice] 17#17: OS: Linux 5.4.0-139-generic
2023/02/23 19:29:49 [notice] 17#17: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/02/23 19:29:49 [notice] 17#17: start worker processes
2023/02/23 19:29:49 [notice] 17#17: start worker process 22
2023/02/23 19:29:49 [notice] 17#17: start worker process 23
2023/02/23 19:29:49 [notice] 17#17: start worker process 24
2023/02/23 19:29:49 [notice] 17#17: start worker process 25
2023-02-23 19:29:49 - foliadocserve 0.7.7
2023-02-23 19:29:49 - Initialising document store in /data/flat.docroot
2023-02-23 19:29:49 - Documents loaded: 0
Operations to perform:
Synchronize unmigrated apps: editor, messages, metadata, staticfiles, structureeditor, viewer
Apply all migrations: admin, auth, contenttypes, sessions, users
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Running migrations:
No migrations to apply.
Updating existing password for superuser.
2023-02-23 19:30:49 - Documents loaded: 0
129.187.243.56 - - [23/Feb/2023:19:31:14 +0000] "GET /index/cgl HTTP/1.1" 302 0 "http://badwqsv-dev.srv.mwn.de:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
129.187.243.56 - - [23/Feb/2023:19:31:14 +0000] "GET /login/?next=/index/cgl HTTP/1.1" 200 4132 "http://badwqsv-dev.srv.mwn.de:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
129.187.243.56 - - [23/Feb/2023:19:31:18 +0000] "POST /login/ HTTP/1.1" 302 0 "http://badwqsv-dev.srv.mwn.de:8080/login/?next=/index/cgl" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
127.0.0.1 - - [23/Feb/2023:19:31:18] "GET /namespaces/ HTTP/1.1" 200 34 "" "Python-urllib/3.10"
129.187.243.56 - - [23/Feb/2023:19:31:18 +0000] "GET / HTTP/1.1" 200 7445 "http://badwqsv-dev.srv.mwn.de:8080/login/?next=/index/cgl" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
127.0.0.1 - - [23/Feb/2023:19:31:24] "GET /namespaces/ HTTP/1.1" 200 34 "" "Python-urllib/3.10"
127.0.0.1 - - [23/Feb/2023:19:31:24] "GET /documents/pirolen HTTP/1.1" 200 50 "" "Python-urllib/3.10"
129.187.243.56 - - [23/Feb/2023:19:31:24 +0000] "GET /index/pirolen HTTP/1.1" 200 8285 "http://badwqsv-dev.srv.mwn.de:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
2023/02/23 19:31:35 [warn] 22#22: *1 a client request body is buffered to a temporary file /var/lib/nginx/tmp/client_body/0000000001, client: 129.187.243.56, server: , request: "POST /upload/ HTTP/1.1", host: "badwqsv-dev.srv.mwn.de:8080", referrer: "http://badwqsv-dev.srv.mwn.de:8080/index/pirolen"
129.187.243.56 - - [23/Feb/2023:19:31:36 +0000] "POST /upload/ HTTP/1.1" 403 1089 "http://badwqsv-dev.srv.mwn.de:8080/index/pirolen" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
2023-02-23 19:31:49 - Documents loaded: 0
2023/02/23 19:32:14 [info] 25#25: *3 client timed out (110: Operation timed out) while waiting for request, client: 129.187.243.56, server: 0.0.0.0:80
2023/02/23 19:32:32 [warn] 22#22: *1 a client request body is buffered to a temporary file /var/lib/nginx/tmp/client_body/0000000002, client: 129.187.243.56, server: , request: "POST /upload/ HTTP/1.1", host: "badwqsv-dev.srv.mwn.de:8080", referrer: "http://badwqsv-dev.srv.mwn.de:8080/index/pirolen"
129.187.243.56 - - [23/Feb/2023:19:32:32 +0000] "POST /upload/ HTTP/1.1" 403 1089 "http://badwqsv-dev.srv.mwn.de:8080/index/pirolen" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
2023-02-23 19:32:49 - Documents loaded: 0
2023/02/23 19:33:32 [info] 23#23: *10 client timed out (110: Operation timed out) while waiting for request, client: 129.187.243.56, server: 0.0.0.0:80
2023-02-23 19:33:49 - Documents loaded: 0
2023-02-23 19:34:49 - Documents loaded: 0

@pirolen
Copy link
Author

pirolen commented Feb 23, 2023

Apologies for the troubles.
Can it be that the docserver logging is still not getting into the info when redirecting docker logs to a file? It is printed to the terminal.

Furthermore, I am not sure if this is informative, but despite being admin, and having also granted myself explicitly all rights via the django admininstration GUI, I see this in the logs:
(in the flat_settings.yml I have allowupload: true).

[pid: 49|app: 0|req: 6/8] 129.187.243.56 () {46 vars in 985 bytes} [Thu Feb 23 19:59:44 2023] GET /index/pirolen => generated 8285 bytes in 15 msecs (HTTP/1.1 200) 4 headers in 263 bytes (1 switches on core 1)
Forbidden: /upload/
[pid: 49|app: 0|req: 7/9] 129.187.243.56 () {54 vars in 1255 bytes} [Thu Feb 23 20:00:06 2023] POST /upload/ => generated 1089 bytes in 9 msecs (HTTP/1.1 403) 3 headers in 102 bytes (1 switches on core 0)
[pid: 49|app: 0|req: 8/10] 129.187.243.56 () {46 vars in 984 bytes} [Thu Feb 23 20:28:19 2023] GET /admin/ => generated 4585 bytes in 45 msecs (HTTP/1.1 200) 5 headers in 207 bytes (1 switches on core 1)
[pid: 49|app: 0|req: 9/11] 129.187.243.56 () {46 vars in 1031 bytes} [Thu Feb 23 20:28:28 2023] GET /admin/users/writepermissions/add/ => generated 6696 bytes in 29 msecs (HTTP/1.1 200) 6 headers in 375 bytes (1 switches on core 0)
[pid: 49|app: 0|req: 10/12] 129.187.243.56 () {44 vars in 851 bytes} [Thu Feb 23 20:28:28 2023] GET /admin/jsi18n/ => generated 3195 bytes in 5 msecs (HTTP/1.1 200) 3 headers in 103 bytes (1 switches on core 1)
[pid: 49|app: 0|req: 11/13] 129.187.243.56 () {46 vars in 1024 bytes} [Thu Feb 23 20:28:49 2023] GET /admin/auth/user/ => generated 8833 bytes in 36 msecs (HTTP/1.1 200) 6 headers in 375 bytes (1 switches on core 0)
[pid: 49|app: 0|req: 12/14] 129.187.243.56 () {44 vars in 834 bytes} [Thu Feb 23 20:28:50 2023] GET /admin/jsi18n/ => generated 3195 bytes in 4 msecs (HTTP/1.1 200) 3 headers in 103 bytes (1 switches on core 1)
[pid: 47|app: 0|req: 3/15] 129.187.243.56 () {46 vars in 1025 bytes} [Thu Feb 23 20:28:53 2023] GET /admin/auth/user/1/change/ => generated 17598 bytes in 106 msecs (HTTP/1.1 200) 6 headers in 376 bytes (1 switches on core 0)
[pid: 47|app: 0|req: 4/16] 129.187.243.56 () {44 vars in 843 bytes} [Thu Feb 23 20:28:53 2023] GET /admin/jsi18n/ => generated 3195 bytes in 5 msecs (HTTP/1.1 200) 3 headers in 103 bytes (1 switches on core 1)
[pid: 47|app: 0|req: 5/17] 129.187.243.56 () {54 vars in 1233 bytes} [Thu Feb 23 20:29:16 2023] POST /admin/auth/user/1/change/ => generated 0 bytes in 32 msecs (HTTP/1.1 302) 7 headers in 499 bytes (1 switches on core 0)
[pid: 49|app: 0|req: 13/18] 129.187.243.56 () {48 vars in 1265 bytes} [Thu Feb 23 20:29:16 2023] GET /admin/auth/user/ => generated 9028 bytes in 35 msecs (HTTP/1.1 200) 7 headers in 473 bytes (1 switches on core 0)
[pid: 49|app: 0|req: 14/19] 129.187.243.56 () {44 vars in 834 bytes} [Thu Feb 23 20:29:16 2023] GET /admin/jsi18n/ => generated 3195 bytes in 4 msecs (HTTP/1.1 200) 3 headers in 103 bytes (1 switches on core 1)
[pid: 47|app: 0|req: 6/20] 129.187.243.56 () {46 vars in 975 bytes} [Thu Feb 23 20:29:24 2023] GET / => generated 7445 bytes in 16 msecs (HTTP/1.1 200) 4 headers in 263 bytes (1 switches on core 1)
[pid: 49|app: 0|req: 15/21] 129.187.243.56 () {46 vars in 985 bytes} [Thu Feb 23 20:29:27 2023] GET /index/pirolen => generated 8285 bytes in 16 msecs (HTTP/1.1 200) 4 headers in 263 bytes (1 switches on core 0)
Forbidden: /upload/
[pid: 49|app: 0|req: 16/22] 129.187.243.56 () {54 vars in 1257 bytes} [Thu Feb 23 20:29:36 2023] POST /upload/ => generated 1089 bytes in 9 msecs (HTTP/1.1 403) 3 headers in 102 bytes (1 switches on core 1)

@proycon
Copy link
Owner

proycon commented Feb 27, 2023

Sorry for the delay in catching up!

Can it be that the docserver logging is still not getting into the info when redirecting docker logs to a file? It is printed to the terminal.

Try something like docker logs flat > flatlogs 2>&1 , that should capture all to file regardless of stdout or stderr. It contains the foliadocserve output as well.

I haven't yet created any yaml config, neither did I edit settings.py so far. Maybe this contributes to the problems.
Will create a yaml config file and restart the container.

I thought that there would be a fallback on some default settings.py in case no yaml config is provided.

Yes, definitely, when you don't provide a yaml config, it will just use the built-in 'full' config, which may be fine for your purposes now as we already ascertained there was little difference between your config and the default. So indeed you don't have the provide a settings.py or yaml config as long as you set some of the configuration environment variables.

Perhaps it's easiest for now to try without custom yaml config and without custom settings.py, you can always add that later if you want to fine-tune the configuration. Just leave out the -v /home/pirol/flat/settings/:/etc/flat when starting and it should fallback to the internal yaml configuration.

For reference, this is how I run it in my tests:

docker run -p 8080:80  -v /tmp/flatdata:/data proycon/flat

@pirolen
Copy link
Author

pirolen commented Feb 27, 2023

Just leave out the -v /home/pirol/flat/settings/:/etc/flat when starting and it should fallback to the internal yaml configuration.

OK, so also --env FLAT_CONFIG_DIR=/etc/flat be left out, right?

Thanks a lot, it is working now, if I start it and add the domain name via --env FLAT_DOMAIN.

So shall I try to specify now my own configs nonetheless?
(E.g. for my use case it would be good to see the Entry structure, and also allow the Annot. focus to be on Entity.)

So if I want to provide my own yaml, can Ojust stop the container, add the config yaml, and restart the container? Or should I stop FLAT and start a new container, specifying the settings via --env?

@pirolen
Copy link
Author

pirolen commented Feb 27, 2023

Do these parameters make sense for starting the container: -d --restart unless-stopped ?

@pirolen
Copy link
Author

pirolen commented Feb 27, 2023

PS. the documents are now showing up at the mounted location as expected!
(restarted the container and mounted a dir in my home dir, not in /tmp)

@proycon
Copy link
Owner

proycon commented Feb 27, 2023

OK, so also --env FLAT_CONFIG_DIR=/etc/flat be left out, right?

Yes

So if I want to provide my own yaml, can just stop the container, add the config yaml, and restart the
container? Or should I stop FLAT and start a new container, specifying the settings via --env?

Just stop and start the container yes (technically it's a new container each time), each will have a unique ID, but based off the same container image (the proycon/flat one). If you supply your own yaml file, you'll need to readd the -v /home/pirol/flat/settings/:/etc/flat then of course. I don't think you'll need a custom settings.py at all though.

Working incrementally is a good idea, then you can detect where things go wrong and roll back easily.

If you manage to reproduce the original issue of tokens getting deleted (no rush), that'd be great.

Do these parameters make sense for starting the container: -d --restart unless-stopped ?

That would autorestart the container if it fails. At this stage I don't think you need that. If it really fails it's more likely to fail continuously anyway. You can use -d if you prefer to run it cleanly in the background, if you run it from tmux/screen then you might not want -d.

@pirolen
Copy link
Author

pirolen commented Feb 27, 2023

need to readd the -v /home/pirol/flat/settings/:/etc/flat then of course.

And also to add --env FLAT_CONFIG_DIR=/etc/flat, right?

I did both and now got the 'Invalid configuration' error message, upon wanting to upload a document.

The yml file I put under settings is the same as provided by you, https://raw.githubusercontent.com/proycon/flat/master/flat.d/full.yml, although I renamed it.

@proycon
Copy link
Owner

proycon commented Feb 27, 2023

And also to add --env FLAT_CONFIG_DIR=/etc/flat, right?

Yes, indeed

although I renamed it.

Ah, that's the the issue then, pass--env FLAT_DEFAULTCONFIGURATION=howeveryounamedit (without yml extension), the default is full and looks for full.yml. Perhaps this needs some clarification in the documentation, I'll have to check what it says.

@pirolen
Copy link
Author

pirolen commented Feb 28, 2023

Works like a charm now, thanks!!
Will be testing annotating to see if I encounter the original issue of tokens getting deleted.

@proycon proycon closed this as completed Aug 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants