health-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Health-dev] Integration of Orthanc (module health_orthanc)


From: Luis Falcon
Subject: Re: [Health-dev] Integration of Orthanc (module health_orthanc)
Date: Fri, 19 May 2023 10:54:26 +0100

Dear Patryk


On Wed, 17 May 2023 16:53:01 +0200
p.rosik@stud.uni-hannover.de <p.rosik@stud.uni-hannover.de> wrote:

> Hello dear GNU Health community ,
> 
> I am currently writing my master thesis and trying to implement a
> periodic synchronisation of the Orthanc and GNU Health DB.
> Unfortunately I run into some problems. I create a background thread
> in which the synchronisation should be done periodically. My idea was
> to initialise the variable "sync_thread = None" in the class
> "OrthancServerConfig" in order to be able to start and stop the
> synchronisation via a start and stop button. In addition, I use the
> already implemented method "sync" of the same class. I have already
> tried this:
> 
> class SyncThread(threading.Thread):
>     """A background thread that periodically synchronizes data with
> an Orthanc server.""" def __init__(self, servers=None, timeout=180):
>         """
>         Initialize the SyncThread object as a background service.
>         :param servers: A list of Orthanc servers.
>         :type servers: list
>         :param timeout: The time interval (in seconds) between each
> synchronization. :type timeout: int
>         """
>         threading.Thread.__init__(self,
> name="OrthancPeriodicSyncronizationThread") self.daemon = True
>         self.servers = servers
>         self.timeout = timeout
>         self.stop_event = threading.Event()
> 
>     def run(self):
>         """Call loop with timeout to synchronize the Orthanc DB with
> the GNU Health DB.""" with Transaction().start():         <-- (line
> in which error 1 occurs) while not self.stop_event.is_set():
>                 OrthancServerConfig.sync(self.servers)
>                 self.stop_event.wait(self.timeout)
>     
>     def stop(self):
>         """Stop the synchronization thread."""
>         self.stop_event.set()
> 
> 
> ​​​​​​Class OrthancServerConfig​(ModelSQL, ModelView):
>     sync_thread = None
>     ...
>     @classmethod
>     @ModelView.button
>     def start_periodic_sync(cls, servers):
>         """
>         Initializes the synchronization of data with Orthanc as a
> background service. :param servers: A list of Orthanc servers.
>         :type servers: list
>         """
>         if cls.sync_thread is not None:
>             raise UserWarning("Synchronization is already running!")
>         else:
>             cls.sync_thread = SyncThread(servers=servers)
>             cls.sync_thread.start()
> 
>     @classmethod
>     @ModelView.button
>     def stop_periodic_sync(cls):  <-- (error 2 occurs here, when
> "stop"-button is pressed) """
>         Stop the synchronization thread.
>         """
>         if cls.sync_thread is None:
>             raise UserWarning("No synchronization is performed!")
>         else:
>             cls.sync_thread.stop()
>             cls.sync_thread.join()
>             cls.sync_thread = None
> 
> 2 errors occur, for which I unfortunately don't know an answer to fix
> them. Error 1 occurs, when the "start" button is pressed and the
> "run"-method of the class "SyncThread" is triggered:
> orthanc/health_orthanc.py", line 66, in run with
> Transaction().start(): TypeError: Transaction.start() missing 2
> required positional arguments: 'database_name' and 'user' I'm not
> sure, if "with Transaction.start():" is necessary here, but i tried
> this, because i got this error before: orthanc/health_orthanc.py",
> line 269, in sync pool = Pool() File
> "/opt/gnuhealth/venv/lib/python3.10/site-packages/trytond/pool.py",
> line 61, in __new__ database_name = Transaction().database.name
> AttributeError: 'NoneType' object has no attribute 'name' If "with
> Transaction.start():" is required, unfortunately I wasn't able to
> figure out which are the two required arguments or if the solution is
> generally in a completely different direction.
> 
> The second error occurs, when the "stop" button is pressed:
>     TypeError: OrthancServerConfig.stop_periodic_sync() takes 1
> positional argument but 2 were given Here I was also not able to
> interpret the error, because both my button and the stop method are
> not passed 2 arguments.
> 
> I would be grateful for any help and am available for queries!
> 

Thanks for reporting! Definitely look into it. I have two conferences
(Volla community days and Tryton unconference) in the coming  days, but
I promise to see look into the issue, and come with and (hopefully :))
bring you and answer early next week.

This might be a bit related to how I usually work with periodic jobs...
I like to place it at operating system level (crontab) and call a
proteus script. You can take a look at the example on the federation
queue manager. To me, this way provides more flexibility.

Happy weekend!
Luis
 
> Best regards,
> ​​​​​​​Patryk
>  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]