Coverage for gws-app/gws/base/exporter/manager.py: 79%

34 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-05 13:35 +0200

1"""Exporter manager.""" 

2 

3import gws 

4import gws.lib.osx 

5from . import worker 

6 

7 

8class Object(gws.ExporterManager): 

9 """Exporter manager.""" 

10 

11 def list_exporters(self, where, user): 

12 exporters = [] 

13 titles = set() 

14 

15 for obj in where: 

16 if not obj: 

17 continue 

18 for e in getattr(obj, 'exporters', []): 

19 if not user.can_use(e): 

20 continue 

21 if e.title in titles: 

22 continue 

23 titles.add(e.title) 

24 exporters.append(e) 

25 

26 return exporters 

27 

28 def get_exporter(self, where, uid, user): 

29 for e in self.list_exporters(where, user): 

30 if e.uid == uid: 

31 return e 

32 

33 def start_export_job(self, request, user): 

34 mgr = self.root.app.jobMgr 

35 job = mgr.create_job( 

36 worker.Object, 

37 user, 

38 payload=dict( 

39 requestPath=gws.u.serialize_to_path(request, gws.u.ephemeral_path('export.pickle')), 

40 ), 

41 ) 

42 job = mgr.schedule_job(job) 

43 return mgr.job_status_response(job) 

44 

45 def exec_export(self, request, out_path): 

46 w = worker.Object(self.root, self.root.app.authMgr.systemUser, job=None, request=request) 

47 w.work() 

48 if w.result and w.result.path: 

49 gws.lib.osx.copy(w.result.path, out_path) 

50 return w.result 

51 raise gws.Error('no features exported') 

52