tomwer 1.2.1__py3-none-any.whl → 1.3.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangecontrib/tomwer/tutorials/icat_publication.ows +58 -0
- orangecontrib/tomwer/widgets/__init__.py +11 -11
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
- orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +6 -6
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +6 -6
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +24 -7
- orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
- orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -3
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +64 -23
- orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +20 -8
- orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +6 -6
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +5 -5
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +8 -1
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
- orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
- orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
- orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
- orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
- orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
- orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
- orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
- orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -20
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +19 -3
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -169
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +18 -22
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +18 -26
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +15 -19
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +9 -9
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +0 -1
- orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
- tomwer/__main__.py +7 -64
- tomwer/app/axis.py +3 -3
- tomwer/app/canvas.py +8 -0
- tomwer/app/canvas_launcher/config.py +16 -14
- tomwer/app/canvas_launcher/environ.py +1 -0
- tomwer/app/canvas_launcher/mainwindow.py +4 -1
- tomwer/app/darkref.py +1 -1
- tomwer/app/darkrefpatch.py +1 -1
- tomwer/app/diffframe.py +3 -3
- tomwer/app/imagekeyeditor.py +5 -5
- tomwer/app/imagekeyupgrader.py +5 -5
- tomwer/app/intensitynormalization.py +14 -13
- tomwer/app/{saaxis.py → multicor.py} +3 -3
- tomwer/app/{sadeltabeta.py → multipag.py} +3 -3
- tomwer/app/nabuapp.py +0 -11
- tomwer/app/radiostack.py +6 -4
- tomwer/app/samplemoved.py +3 -2
- tomwer/app/scanviewer.py +4 -2
- tomwer/app/sinogramviewer.py +3 -2
- tomwer/app/slicestack.py +3 -2
- tomwer/app/zstitching.py +88 -6
- tomwer/core/cluster/cluster.py +26 -0
- tomwer/core/log/logger.py +7 -5
- tomwer/core/process/conditions/filters.py +1 -1
- tomwer/core/process/control/datalistener/datalistener.py +19 -14
- tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
- tomwer/core/process/control/nxtomoconcatenate.py +13 -13
- tomwer/core/process/control/nxtomomill.py +92 -34
- tomwer/core/process/control/scantransfer.py +20 -43
- tomwer/core/process/control/scanvalidator.py +3 -2
- tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
- tomwer/core/process/control/test/test_email.py +4 -4
- tomwer/core/process/control/test/test_h52nx_process.py +59 -7
- tomwer/core/process/control/test/test_volume_link.py +64 -64
- tomwer/core/process/control/timer.py +1 -1
- tomwer/core/process/control/volumesymlink.py +200 -200
- tomwer/core/process/edit/darkflatpatch.py +14 -15
- tomwer/core/process/edit/imagekeyeditor.py +41 -39
- tomwer/core/process/icat/__init__.py +0 -0
- tomwer/core/process/icat/createscreenshots.py +100 -0
- tomwer/core/process/icat/gallery.py +377 -0
- tomwer/core/process/icat/icatbase.py +36 -0
- tomwer/core/process/icat/publish.py +228 -0
- tomwer/core/process/icat/screenshots.py +27 -0
- tomwer/core/process/output.py +52 -0
- tomwer/core/process/reconstruction/axis/axis.py +280 -69
- tomwer/core/process/reconstruction/axis/mode.py +163 -48
- tomwer/core/process/reconstruction/axis/params.py +29 -21
- tomwer/core/process/reconstruction/darkref/darkrefs.py +41 -127
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +4 -3
- tomwer/core/process/reconstruction/darkref/params.py +1 -1
- tomwer/core/process/reconstruction/nabu/castvolume.py +4 -4
- tomwer/core/process/reconstruction/nabu/helical.py +9 -5
- tomwer/core/process/reconstruction/nabu/nabucommon.py +71 -78
- tomwer/core/process/reconstruction/nabu/nabuscores.py +425 -53
- tomwer/core/process/reconstruction/nabu/nabuslices.py +114 -93
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +54 -27
- tomwer/core/process/reconstruction/nabu/plane.py +9 -0
- tomwer/core/process/reconstruction/nabu/settings.py +2 -2
- tomwer/core/process/reconstruction/nabu/utils.py +164 -26
- tomwer/core/process/reconstruction/output.py +108 -0
- tomwer/core/process/reconstruction/saaxis/saaxis.py +238 -264
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +151 -87
- tomwer/core/process/reconstruction/scores/params.py +7 -4
- tomwer/core/process/reconstruction/scores/scores.py +13 -0
- tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
- tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
- tomwer/core/process/reconstruction/test/test_darkref_copy.py +7 -7
- tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
- tomwer/core/process/stitching/nabustitcher.py +13 -12
- tomwer/core/process/task.py +34 -26
- tomwer/core/process/test/test_axis.py +13 -12
- tomwer/core/process/test/test_dark_and_flat.py +10 -7
- tomwer/core/process/test/test_data_transfer.py +10 -8
- tomwer/core/process/test/test_nabu.py +14 -6
- tomwer/core/process/test/test_normalization.py +4 -4
- tomwer/core/scan/blissscan.py +3 -3
- tomwer/core/scan/edfscan.py +13 -10
- tomwer/core/scan/hdf5scan.py +19 -530
- tomwer/core/scan/nxtomoscan.py +534 -0
- tomwer/core/scan/scanbase.py +72 -44
- tomwer/core/scan/scanfactory.py +13 -13
- tomwer/core/scan/test/test_edf.py +2 -2
- tomwer/core/scan/test/test_future_scan.py +3 -3
- tomwer/core/scan/test/test_h5.py +18 -16
- tomwer/core/scan/test/test_process_registration.py +4 -40
- tomwer/core/scan/test/test_scan.py +5 -78
- tomwer/core/settings.py +22 -2
- tomwer/core/test/test_scanutils.py +8 -7
- tomwer/core/test/test_utils.py +35 -28
- tomwer/core/tomwer_object.py +1 -1
- tomwer/core/utils/__init__.py +0 -466
- tomwer/core/utils/deprecation.py +1 -1
- tomwer/core/utils/dictutils.py +14 -0
- tomwer/core/utils/lbsram.py +35 -0
- tomwer/core/utils/nxtomoutils.py +1 -1
- tomwer/core/utils/scanutils.py +6 -6
- tomwer/core/utils/spec.py +263 -0
- tomwer/core/volume/edfvolume.py +6 -6
- tomwer/core/volume/hdf5volume.py +6 -6
- tomwer/core/volume/jp2kvolume.py +6 -6
- tomwer/core/volume/rawvolume.py +6 -6
- tomwer/core/volume/tiffvolume.py +12 -12
- tomwer/core/volume/volumefactory.py +2 -2
- tomwer/gui/cluster/slurm.py +274 -65
- tomwer/gui/cluster/supervisor.py +12 -0
- tomwer/gui/cluster/test/test_cluster.py +14 -2
- tomwer/gui/cluster/test/test_supervisor.py +3 -3
- tomwer/gui/configuration/__init__.py +0 -0
- tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
- tomwer/gui/configuration/level.py +22 -0
- tomwer/gui/control/actions.py +54 -0
- tomwer/gui/control/datalist.py +83 -16
- tomwer/gui/control/datalistener.py +4 -16
- tomwer/gui/control/datawatcher/controlwidget.py +2 -4
- tomwer/gui/control/datawatcher/datawatcher.py +1 -24
- tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
- tomwer/gui/control/history.py +2 -2
- tomwer/gui/control/observations.py +2 -2
- tomwer/gui/control/reducedarkflatselector.py +9 -9
- tomwer/gui/control/selectorwidgetbase.py +36 -9
- tomwer/gui/control/serie/seriecreator.py +5 -22
- tomwer/gui/control/test/test_email.py +1 -1
- tomwer/gui/control/test/test_scanvalidator.py +6 -5
- tomwer/gui/control/test/test_single_tomo_obj.py +3 -3
- tomwer/gui/control/tomoobjdisplaymode.py +8 -0
- tomwer/gui/debugtools/datasetgenerator.py +3 -3
- tomwer/gui/edit/dkrfpatch.py +20 -26
- tomwer/gui/edit/imagekeyeditor.py +11 -12
- tomwer/gui/edit/nxtomoeditor.py +111 -44
- tomwer/gui/edit/nxtomowarmer.py +7 -6
- tomwer/gui/edit/test/test_dkrf_patch.py +13 -13
- tomwer/gui/edit/test/test_image_key_editor.py +3 -3
- tomwer/gui/edit/test/test_nx_editor.py +40 -16
- tomwer/gui/icat/__init__.py +0 -0
- tomwer/gui/icat/createscreenshots.py +80 -0
- tomwer/gui/icat/gallery.py +214 -0
- tomwer/gui/icat/publish.py +187 -0
- tomwer/gui/imagefromfile.py +2 -2
- tomwer/gui/qfolderdialog.py +24 -1
- tomwer/gui/reconstruction/axis/CompareImages.py +88 -168
- tomwer/gui/reconstruction/axis/axis.py +171 -57
- tomwer/gui/reconstruction/axis/radioaxis.py +122 -257
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +2 -1
- tomwer/gui/reconstruction/nabu/castvolume.py +14 -3
- tomwer/gui/reconstruction/nabu/check.py +9 -9
- tomwer/gui/reconstruction/nabu/helical.py +29 -12
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +2 -1
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +126 -35
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +39 -32
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +222 -31
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +57 -27
- tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
- tomwer/gui/reconstruction/nabu/slices.py +10 -11
- tomwer/gui/reconstruction/nabu/volume.py +22 -10
- tomwer/gui/reconstruction/normalization/intensity.py +18 -48
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +8 -24
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
- tomwer/gui/reconstruction/saaxis/saaxis.py +9 -21
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +45 -12
- tomwer/gui/reconstruction/scores/control.py +2 -9
- tomwer/gui/reconstruction/scores/scoreplot.py +13 -11
- tomwer/gui/reconstruction/test/test_axis.py +41 -16
- tomwer/gui/reconstruction/test/test_nabu.py +31 -9
- tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
- tomwer/gui/reconstruction/test/test_sadeltabeta.py +12 -2
- tomwer/gui/settings.py +5 -28
- tomwer/gui/stackplot.py +2 -5
- tomwer/gui/stitching/action.py +49 -0
- tomwer/gui/stitching/config/axisparams.py +7 -24
- tomwer/gui/stitching/config/output.py +10 -8
- tomwer/gui/stitching/config/positionoveraxis.py +22 -23
- tomwer/gui/stitching/normalization.py +117 -0
- tomwer/gui/stitching/stitchandbackground.py +4 -6
- tomwer/gui/stitching/stitching.py +267 -45
- tomwer/gui/stitching/stitching_preview.py +62 -55
- tomwer/gui/stitching/stitching_raw.py +13 -12
- tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
- tomwer/gui/utils/buttons.py +112 -29
- tomwer/gui/utils/inputwidget.py +43 -25
- tomwer/gui/utils/lineselector/lineselector.py +1 -1
- tomwer/gui/utils/scandescription.py +4 -0
- tomwer/gui/utils/step.py +144 -0
- tomwer/gui/utils/unitsystem.py +2 -5
- tomwer/gui/utils/vignettes.py +176 -15
- tomwer/gui/visualization/dataviewer.py +48 -35
- tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
- tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
- tomwer/gui/visualization/scanoverview.py +1 -1
- tomwer/gui/visualization/sinogramviewer.py +20 -36
- tomwer/gui/visualization/test/test_diffviewer.py +3 -3
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
- tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
- tomwer/gui/visualization/test/test_stacks.py +3 -3
- tomwer/gui/visualization/test/test_volumeviewer.py +65 -67
- tomwer/gui/visualization/volumeviewer.py +114 -113
- tomwer/io/utils/h5pyutils.py +3 -3
- tomwer/io/utils/raw_and_processed_data.py +84 -0
- tomwer/io/utils/tomoobj.py +4 -6
- tomwer/io/utils/utils.py +7 -7
- tomwer/resources/gui/icons/parameters.svg +1 -1
- tomwer/resources/gui/icons/ruler.png +0 -0
- tomwer/resources/gui/icons/ruler.svg +273 -0
- tomwer/resources/gui/icons/short_description.png +0 -0
- tomwer/resources/gui/icons/short_description.svg +58 -0
- tomwer/resources/gui/icons/url.png +0 -0
- tomwer/resources/gui/icons/url.svg +58 -0
- tomwer/resources/gui/illustrations/no_rot.svg +1 -1
- tomwer/synctools/stacks/edit/darkflatpatch.py +19 -14
- tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
- tomwer/synctools/stacks/reconstruction/axis.py +4 -4
- tomwer/synctools/stacks/reconstruction/castvolume.py +22 -7
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +25 -20
- tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
- tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
- tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
- tomwer/synctools/test/test_darkRefs.py +7 -58
- tomwer/synctools/test/test_foldertransfer.py +6 -6
- tomwer/synctools/utils/scanstages.py +6 -6
- tomwer/tests/conftest.py +34 -0
- tomwer/tests/datasets.py +13 -0
- tomwer/tests/test_scripts.py +91 -41
- tomwer/tests/utils.py +5 -0
- tomwer/third_part/WaitingOverlay.py +110 -0
- tomwer/third_part/__init__.py +0 -0
- tomwer/version.py +2 -2
- tomwer-1.3.12-py3.11-nspkg.pth +1 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/METADATA +73 -58
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/RECORD +287 -286
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/WHEEL +1 -1
- orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +0 -197
- orangecontrib/tomwer/widgets/reconstruction/icons/XY_lamino.svg +0 -168
- orangecontrib/tomwer/widgets/reconstruction/icons/XZ_lamino.svg +0 -275
- orangecontrib/tomwer/widgets/reconstruction/icons/YZ_lamino.svg +0 -182
- tomwer/app/lamino.py +0 -143
- tomwer/core/process/reconstruction/lamino/__init__.py +0 -1
- tomwer/core/process/reconstruction/lamino/tofu.py +0 -1000
- tomwer/core/process/test/test_lamino.py +0 -76
- tomwer/core/test/test_lamino.py +0 -92
- tomwer/gui/reconstruction/lamino/__init__.py +0 -31
- tomwer/gui/reconstruction/lamino/tofu/TofuOptionLoader.py +0 -107
- tomwer/gui/reconstruction/lamino/tofu/__init__.py +0 -1
- tomwer/gui/reconstruction/lamino/tofu/misc.py +0 -148
- tomwer/gui/reconstruction/lamino/tofu/projections.py +0 -896
- tomwer/gui/reconstruction/lamino/tofu/settings.py +0 -75
- tomwer/gui/reconstruction/lamino/tofu/tofu.py +0 -432
- tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +0 -567
- tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +0 -760
- tomwer/gui/reconstruction/test/test_lamino.py +0 -189
- tomwer/resources/gui/icons/esrf_1.svg +0 -307
- tomwer/resources/gui/icons/lamino_parameters.svg +0 -70
- tomwer/resources/gui/icons/triangle.svg +0 -80
- tomwer/resources/gui/illustrations/lamino_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_angle.svg +0 -509
- tomwer/resources/gui/illustrations/lamino_beta_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_beta_angle.svg +0 -97
- tomwer/resources/gui/illustrations/lamino_theta_angle.png +0 -0
- tomwer/resources/gui/illustrations/lamino_theta_angle.svg +0 -368
- tomwer/resources/gui/illustrations/manual_slice.png +0 -0
- tomwer/resources/gui/illustrations/manual_slice.svg +0 -221
- tomwer/resources/gui/illustrations/psi_angle.png +0 -0
- tomwer/resources/gui/illustrations/psi_angle.svg +0 -479
- tomwer/resources/gui/illustrations/rotation_center.png +0 -0
- tomwer/resources/gui/illustrations/rotation_center.svg +0 -276
- tomwer/resources/gui/illustrations/slice_stack.png +0 -0
- tomwer/resources/gui/illustrations/slice_stack.svg +0 -266
- tomwer/resources/gui/illustrations/xy_slice.png +0 -0
- tomwer/resources/gui/illustrations/xy_slice.svg +0 -269
- tomwer/resources/gui/illustrations/xz_slice.png +0 -0
- tomwer/resources/gui/illustrations/xz_slice.svg +0 -270
- tomwer/resources/gui/illustrations/yz_slice.png +0 -0
- tomwer/resources/gui/illustrations/yz_slice.svg +0 -270
- tomwer/synctools/stacks/reconstruction/lamino.py +0 -233
- tomwer/synctools/test/test_scanstages.py +0 -162
- tomwer/tests/utils/__init__.py +0 -247
- tomwer/tests/utils/utilstest.py +0 -220
- tomwer-1.2.1-py3.11-nspkg.pth +0 -1
- /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/LICENSE +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/entry_points.txt +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.2.1.dist-info → tomwer-1.3.12.dist-info}/top_level.txt +0 -0
@@ -1,162 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
# /*##########################################################################
|
3
|
-
#
|
4
|
-
# Copyright (c) 2017 European Synchrotron Radiation Facility
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
23
|
-
#
|
24
|
-
# ###########################################################################*/
|
25
|
-
|
26
|
-
__authors__ = ["H. Payno"]
|
27
|
-
__license__ = "MIT"
|
28
|
-
__date__ = "30/09/2019"
|
29
|
-
|
30
|
-
|
31
|
-
import glob
|
32
|
-
import os
|
33
|
-
import shutil
|
34
|
-
import tempfile
|
35
|
-
import unittest
|
36
|
-
from collections import namedtuple
|
37
|
-
|
38
|
-
import pytest
|
39
|
-
|
40
|
-
from tomwer.core.scan.scanfactory import ScanFactory
|
41
|
-
from tomwer.synctools.utils.scanstages import ScanStages
|
42
|
-
from tomwer.tests.utils import UtilsTest, skip_gui_test
|
43
|
-
|
44
|
-
if skip_gui_test() is False:
|
45
|
-
from tomwer.synctools.rsyncmanager import RSyncManager
|
46
|
-
|
47
|
-
|
48
|
-
_stage_desc = namedtuple(
|
49
|
-
"_stage_desc",
|
50
|
-
[
|
51
|
-
"n_par_file",
|
52
|
-
"n_edf_file",
|
53
|
-
"n_info_file",
|
54
|
-
"n_xml_file",
|
55
|
-
"n_vol",
|
56
|
-
"folder_should_exists",
|
57
|
-
],
|
58
|
-
) # noqa
|
59
|
-
|
60
|
-
|
61
|
-
@pytest.mark.skipif(RSyncManager().has_rsync() is False, reason="Rsync is missing")
|
62
|
-
@pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
|
63
|
-
class TestScanStagesEDF(unittest.TestCase):
|
64
|
-
"""
|
65
|
-
test the ScanStages class for edf scans
|
66
|
-
"""
|
67
|
-
|
68
|
-
def setUp(self) -> None:
|
69
|
-
self.output_dir = tempfile.mkdtemp()
|
70
|
-
dataset = "D2_H2_T2_h_"
|
71
|
-
self.data_test_dir = UtilsTest.getEDFDataset(dataset)
|
72
|
-
self.target_dir = os.path.join(self.output_dir, dataset)
|
73
|
-
self.scan_stages = ScanStages(
|
74
|
-
scan=ScanFactory.create_scan_object(self.data_test_dir)
|
75
|
-
)
|
76
|
-
|
77
|
-
def tearDown(self) -> None:
|
78
|
-
shutil.rmtree(self.output_dir)
|
79
|
-
|
80
|
-
def testRSyncUntil(self):
|
81
|
-
"""test the rsync_until function"""
|
82
|
-
ACQUI_NOT_STARTED = ScanStages.AcquisitionStage.ACQUI_NOT_STARTED
|
83
|
-
# ACQUI_STARTED = ScanStages.AcquisitionStage.ACQUI_STARTED
|
84
|
-
# ACQUI_ON_GOING = ScanStages.AcquisitionStage.ACQUI_ON_GOING
|
85
|
-
# ACQUI_ENDED = ScanStages.AcquisitionStage.ACQUI_ENDED
|
86
|
-
# RECONSTRUCTION_ADDED = ScanStages.AcquisitionStage.RECONSTRUCTION_ADDED
|
87
|
-
# COMPLETE = ScanStages.AcquisitionStage.COMPLETE
|
88
|
-
|
89
|
-
# tomo_n = 3605
|
90
|
-
stage_res = {
|
91
|
-
ACQUI_NOT_STARTED: _stage_desc(
|
92
|
-
n_par_file=0,
|
93
|
-
n_edf_file=0,
|
94
|
-
n_info_file=0,
|
95
|
-
n_xml_file=0,
|
96
|
-
n_vol=0,
|
97
|
-
folder_should_exists=False,
|
98
|
-
),
|
99
|
-
# comment most of the test because take too long
|
100
|
-
# ACQUI_STARTED: _stage_desc(
|
101
|
-
# n_par_file=0,
|
102
|
-
# n_edf_file=0,
|
103
|
-
# n_info_file=1,
|
104
|
-
# n_xml_file=0,
|
105
|
-
# n_vol=0,
|
106
|
-
# folder_should_exists=True,
|
107
|
-
# ),
|
108
|
-
# ACQUI_ON_GOING: _stage_desc(
|
109
|
-
# n_par_file=0,
|
110
|
-
# n_edf_file=tomo_n // 2,
|
111
|
-
# n_info_file=1,
|
112
|
-
# n_xml_file=0,
|
113
|
-
# n_vol=0,
|
114
|
-
# folder_should_exists=True,
|
115
|
-
# ),
|
116
|
-
# ACQUI_ENDED: _stage_desc(
|
117
|
-
# n_par_file=0,
|
118
|
-
# n_edf_file=tomo_n,
|
119
|
-
# n_info_file=1,
|
120
|
-
# n_xml_file=1,
|
121
|
-
# n_vol=0,
|
122
|
-
# folder_should_exists=True,
|
123
|
-
# ),
|
124
|
-
# RECONSTRUCTION_ADDED: _stage_desc(
|
125
|
-
# n_par_file=6,
|
126
|
-
# n_edf_file=tomo_n,
|
127
|
-
# n_info_file=2,
|
128
|
-
# n_xml_file=2,
|
129
|
-
# n_vol=1,
|
130
|
-
# folder_should_exists=True,
|
131
|
-
# ),
|
132
|
-
# COMPLETE: _stage_desc(
|
133
|
-
# n_par_file=6,
|
134
|
-
# n_edf_file=3719, # there is several ref, darks...
|
135
|
-
# n_info_file=2,
|
136
|
-
# n_xml_file=2,
|
137
|
-
# n_vol=1,
|
138
|
-
# folder_should_exists=True,
|
139
|
-
# ),
|
140
|
-
}
|
141
|
-
for stage, th_results in stage_res.items():
|
142
|
-
with self.subTest(stage=stage):
|
143
|
-
self.scan_stages.rsync_until(stage=stage, dest_dir=self.output_dir)
|
144
|
-
self.assertEqual(
|
145
|
-
os.path.exists(self.target_dir), th_results.folder_should_exists
|
146
|
-
)
|
147
|
-
self.assertEqual(
|
148
|
-
len(glob.glob(os.path.join(self.target_dir, "*.par"))),
|
149
|
-
th_results.n_par_file,
|
150
|
-
)
|
151
|
-
self.assertEqual(
|
152
|
-
len(glob.glob(os.path.join(self.target_dir, "*.edf"))),
|
153
|
-
th_results.n_edf_file,
|
154
|
-
)
|
155
|
-
self.assertEqual(
|
156
|
-
len(glob.glob(os.path.join(self.target_dir, "*.xml"))),
|
157
|
-
th_results.n_xml_file,
|
158
|
-
)
|
159
|
-
self.assertEqual(
|
160
|
-
len(glob.glob(os.path.join(self.target_dir, "*.vol"))),
|
161
|
-
th_results.n_vol,
|
162
|
-
)
|
tomwer/tests/utils/__init__.py
DELETED
@@ -1,247 +0,0 @@
|
|
1
|
-
#!/usr/bin/python
|
2
|
-
# coding: utf-8
|
3
|
-
#
|
4
|
-
# Project: Azimuthal integration
|
5
|
-
# https://github.com/pyFAI/pyFAI
|
6
|
-
#
|
7
|
-
# Copyright (C) 2015 European Synchrotron Radiation Facility, Grenoble, France
|
8
|
-
#
|
9
|
-
# Principal author: Jérôme Kieffer (Jerome.Kieffer@ESRF.eu)
|
10
|
-
#
|
11
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
12
|
-
# of this software and associated documentation files (the "Software"), to deal
|
13
|
-
# in the Software without restriction, including without limitation the rights
|
14
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15
|
-
# copies of the Software, and to permit persons to whom the Software is
|
16
|
-
# furnished to do so, subject to the following conditions:
|
17
|
-
#
|
18
|
-
# The above copyright notice and this permission notice shall be included in
|
19
|
-
# all copies or substantial portions of the Software.
|
20
|
-
#
|
21
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
24
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
25
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
26
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
27
|
-
# THE SOFTWARE.
|
28
|
-
|
29
|
-
|
30
|
-
__doc__ = """test module for pyFAI."""
|
31
|
-
__authors__ = ["Jérôme Kieffer", "Valentin Valls", "Henri Payno"]
|
32
|
-
__license__ = "MIT"
|
33
|
-
__copyright__ = "European Synchrotron Radiation Facility, Grenoble, France"
|
34
|
-
__date__ = "07/02/2017"
|
35
|
-
|
36
|
-
import fileinput
|
37
|
-
import logging
|
38
|
-
import os
|
39
|
-
import shutil
|
40
|
-
|
41
|
-
from tomwer.core.utils import DownloadDataset, url_base
|
42
|
-
|
43
|
-
logger = logging.getLogger(__name__)
|
44
|
-
logger.setLevel(logging.DEBUG)
|
45
|
-
|
46
|
-
|
47
|
-
class UtilsTest(object):
|
48
|
-
"""
|
49
|
-
Static class providing useful stuff for preparing tests.
|
50
|
-
"""
|
51
|
-
|
52
|
-
timeout = 100 # timeout in seconds for downloading datasets.tar.bz2
|
53
|
-
|
54
|
-
def __init__(self):
|
55
|
-
self.installed = False
|
56
|
-
|
57
|
-
@classmethod
|
58
|
-
def dataDownloaded(cls, archive_folder, archive_file):
|
59
|
-
return cls.dataIsHere(archive_folder=archive_folder) or cls.dataIsDownloaded(
|
60
|
-
archive_file=archive_file
|
61
|
-
)
|
62
|
-
|
63
|
-
@classmethod
|
64
|
-
def dataIsHere(cls, archive_folder):
|
65
|
-
return os.path.isdir(archive_folder)
|
66
|
-
|
67
|
-
@classmethod
|
68
|
-
def dataIsDownloaded(cls, archive_file):
|
69
|
-
return os.path.isfile(archive_file)
|
70
|
-
|
71
|
-
@classmethod
|
72
|
-
def getEDFDataset(cls, folderID):
|
73
|
-
path = os.path.abspath(
|
74
|
-
os.path.join(cls.getDatasets(name="edf_datasets"), folderID)
|
75
|
-
)
|
76
|
-
if os.path.isdir(path):
|
77
|
-
return path
|
78
|
-
else:
|
79
|
-
raise RuntimeError("Coul'd find folder containing scan %s" % folderID)
|
80
|
-
|
81
|
-
@classmethod
|
82
|
-
def getH5Dataset(cls, folderID):
|
83
|
-
path = os.path.abspath(
|
84
|
-
os.path.join(cls.getDatasets(name="h5_datasets"), folderID)
|
85
|
-
)
|
86
|
-
if os.path.exists(path):
|
87
|
-
return path
|
88
|
-
else:
|
89
|
-
raise RuntimeError("Coul'd find folder containing scan %s" % folderID)
|
90
|
-
|
91
|
-
@classmethod
|
92
|
-
def getBlissDataset(cls, folderID):
|
93
|
-
path = os.path.abspath(
|
94
|
-
os.path.join(cls.getDatasets(name="bliss_acq"), folderID)
|
95
|
-
)
|
96
|
-
if os.path.exists(path):
|
97
|
-
return path
|
98
|
-
else:
|
99
|
-
raise RuntimeError("Coul'd find folder containing scan %s" % folderID)
|
100
|
-
|
101
|
-
@classmethod
|
102
|
-
def getRecDatasets(cls):
|
103
|
-
path = os.path.abspath(
|
104
|
-
cls.getDatasets(
|
105
|
-
name="rec_HA-700_45.4_136keV_BM5_burrow_GSA-1-44_021_avg-2_"
|
106
|
-
)
|
107
|
-
)
|
108
|
-
if os.path.exists(path):
|
109
|
-
return path
|
110
|
-
else:
|
111
|
-
raise RuntimeError("Coul'd find folder containing rec")
|
112
|
-
|
113
|
-
@classmethod
|
114
|
-
def getOrangeTestFile(cls, folderID):
|
115
|
-
path = os.path.abspath(os.path.join(cls.getOrangeTestFiles(), folderID))
|
116
|
-
if os.path.isfile(path):
|
117
|
-
return path
|
118
|
-
else:
|
119
|
-
raise RuntimeError("Coul'd find folder containing scan %s" % folderID)
|
120
|
-
|
121
|
-
@classmethod
|
122
|
-
def getOrangeTestFiles(cls):
|
123
|
-
return cls.getDatasets(name="orangetestfiles")
|
124
|
-
|
125
|
-
@classmethod
|
126
|
-
def getOrangeExecTestFile(cls, folderID):
|
127
|
-
path = os.path.abspath(os.path.join(cls.getOrangeExecTestFiles(), folderID))
|
128
|
-
if os.path.isfile(path):
|
129
|
-
return path
|
130
|
-
else:
|
131
|
-
raise RuntimeError("Coul'd find folder containing scan %s" % folderID)
|
132
|
-
|
133
|
-
@classmethod
|
134
|
-
def getOrangeExecTestFiles(cls):
|
135
|
-
return cls.getDatasets(name="ows_test_exec")
|
136
|
-
|
137
|
-
@classmethod
|
138
|
-
def getDatasets(cls, name="datasets"):
|
139
|
-
"""
|
140
|
-
Downloads the requested image from Forge.EPN-campus.eu
|
141
|
-
|
142
|
-
@param: name of the image.
|
143
|
-
For the RedMine forge, the filename contains a directory name that is removed
|
144
|
-
@return: full path of the locally saved file
|
145
|
-
"""
|
146
|
-
archive_file = name + ".tar.bz2"
|
147
|
-
archive_folder = "".join((os.path.dirname(__file__), "/" + name + "/"))
|
148
|
-
archive_file = os.path.join(archive_folder, archive_file)
|
149
|
-
|
150
|
-
# download if needed
|
151
|
-
if not cls.dataDownloaded(
|
152
|
-
archive_folder=archive_folder, archive_file=archive_file
|
153
|
-
):
|
154
|
-
DownloadDataset(
|
155
|
-
dataset=os.path.basename(archive_file),
|
156
|
-
output_folder=archive_folder,
|
157
|
-
timeout=cls.timeout,
|
158
|
-
)
|
159
|
-
|
160
|
-
if not os.path.isfile(archive_file):
|
161
|
-
raise RuntimeError(
|
162
|
-
"Could not automatically download test images %s!\n"
|
163
|
-
"If you are behind a firewall, please set both environment "
|
164
|
-
"variable http_proxy and https_proxy. "
|
165
|
-
"This even works under windows ! \n Otherwise please try "
|
166
|
-
"to download the images manually from \n%s/%s"
|
167
|
-
% (archive_file, url_base, archive_file)
|
168
|
-
)
|
169
|
-
|
170
|
-
# decompress if needed
|
171
|
-
if os.path.isfile(archive_file):
|
172
|
-
logger.info("decompressing %s." % archive_file)
|
173
|
-
outdir = "".join((os.path.dirname(__file__)))
|
174
|
-
shutil.unpack_archive(archive_file, extract_dir=outdir, format="bztar")
|
175
|
-
os.remove(archive_file)
|
176
|
-
else:
|
177
|
-
logger.info("not trying to decompress it")
|
178
|
-
return archive_folder
|
179
|
-
|
180
|
-
@classmethod
|
181
|
-
def hasInternalTest(cls, dataset):
|
182
|
-
"""
|
183
|
-
The id of the internal test is to have some large scan accessible
|
184
|
-
which are stored locally. This should be used only for unit test that
|
185
|
-
can be skipped
|
186
|
-
"""
|
187
|
-
if "TOMWER_ADDITIONAL_TESTS_DIR" not in os.environ:
|
188
|
-
return False
|
189
|
-
else:
|
190
|
-
dir_ = os.path.join(os.environ["TOMWER_ADDITIONAL_TESTS_DIR"], dataset)
|
191
|
-
return os.path.isdir(dir_)
|
192
|
-
|
193
|
-
@classmethod
|
194
|
-
def getInternalTestDir(cls, dataset):
|
195
|
-
if cls.hasInternalTest(dataset) is False:
|
196
|
-
return None
|
197
|
-
else:
|
198
|
-
return os.path.join(os.environ["TOMWER_ADDITIONAL_TESTS_DIR"], dataset)
|
199
|
-
|
200
|
-
|
201
|
-
def rebaseParFile(filePath, scanOldPath, scanNewPath):
|
202
|
-
"""
|
203
|
-
Change some variables on the oar file to rebase it like if it was acquire
|
204
|
-
in scanNewPath and allow pyhst reconstruction.
|
205
|
-
"""
|
206
|
-
assert os.path.isfile(filePath)
|
207
|
-
|
208
|
-
with fileinput.FileInput(filePath, inplace=True, backup=".bak") as file:
|
209
|
-
for line in file:
|
210
|
-
print(line.replace(scanOldPath, scanNewPath))
|
211
|
-
|
212
|
-
|
213
|
-
def rebaseAcquisition(src, dst):
|
214
|
-
"""Copy the acquisition from src to dst by changing the ID of the acquisition
|
215
|
-
on all files and sub-folders"""
|
216
|
-
|
217
|
-
def copyDir(_dirSrc, _dirDst, srcID, dstID):
|
218
|
-
assert os.path.exists(_dirDst) is False
|
219
|
-
os.makedirs(_dirDst)
|
220
|
-
for _file in os.listdir(_dirSrc):
|
221
|
-
_filePath = os.path.join(_dirSrc, _file)
|
222
|
-
if os.path.isdir(_filePath):
|
223
|
-
copyDir(
|
224
|
-
_dirSrc=_filePath,
|
225
|
-
_dirDst=os.path.join(_dirDst, _file.replace(srcID, dstID, 1)),
|
226
|
-
srcID=srcID,
|
227
|
-
dstID=dstID,
|
228
|
-
)
|
229
|
-
else:
|
230
|
-
shutil.copyfile(
|
231
|
-
src=_filePath,
|
232
|
-
dst=os.path.join(_dirDst, _file.replace(srcID, dstID, 1)),
|
233
|
-
)
|
234
|
-
|
235
|
-
# cp folder then copy files
|
236
|
-
assert os.path.isdir(src)
|
237
|
-
srcID = os.path.basename(src)
|
238
|
-
dstID = os.path.basename(dst)
|
239
|
-
copyDir(_dirSrc=src, _dirDst=dst, srcID=srcID, dstID=dstID)
|
240
|
-
|
241
|
-
|
242
|
-
def skip_gui_test():
|
243
|
-
return os.environ.get("_TOMWER_NO_GUI_UNIT_TESTS", "False") == "True"
|
244
|
-
|
245
|
-
|
246
|
-
def skip_orange_workflows_test():
|
247
|
-
return os.environ.get("_TOMWER_NO_ORANGE_WORKFLOWS_UNIT_TESTS", "False") == "True"
|
tomwer/tests/utils/utilstest.py
DELETED
@@ -1,220 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
#
|
3
|
-
# Copyright (C) 2012-2016 European Synchrotron Radiation Facility, Grenoble, France
|
4
|
-
#
|
5
|
-
# Principal author: Jérôme Kieffer (Jerome.Kieffer@ESRF.eu)
|
6
|
-
#
|
7
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
-
# of this software and associated documentation files (the "Software"), to deal
|
9
|
-
# in the Software without restriction, including without limitation the rights
|
10
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
-
# copies of the Software, and to permit persons to whom the Software is
|
12
|
-
# furnished to do so, subject to the following conditions:
|
13
|
-
#
|
14
|
-
# The above copyright notice and this permission notice shall be included in
|
15
|
-
# all copies or substantial portions of the Software.
|
16
|
-
#
|
17
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
-
# THE SOFTWARE.
|
24
|
-
#
|
25
|
-
"bunch of utility function/static classes to handle testing environment"
|
26
|
-
|
27
|
-
__author__ = "Jérôme Kieffer"
|
28
|
-
__contact__ = "jerome.kieffer@esrf.eu"
|
29
|
-
__license__ = "MIT"
|
30
|
-
__copyright__ = "European Synchrotron Radiation Facility, Grenoble, France"
|
31
|
-
__date__ = "24/01/2018"
|
32
|
-
|
33
|
-
import getpass
|
34
|
-
import logging
|
35
|
-
import os
|
36
|
-
import shutil
|
37
|
-
import sys
|
38
|
-
import tempfile
|
39
|
-
import threading
|
40
|
-
import unittest
|
41
|
-
from argparse import ArgumentParser
|
42
|
-
|
43
|
-
from silx.resources import ExternalResources
|
44
|
-
|
45
|
-
PACKAGE = "pyFAI"
|
46
|
-
DATA_KEY = "PYFAI_DATA"
|
47
|
-
|
48
|
-
logger = logging.getLogger(__name__)
|
49
|
-
|
50
|
-
TEST_HOME = os.path.dirname(os.path.abspath(__file__))
|
51
|
-
|
52
|
-
|
53
|
-
def copy(infile, outfile):
|
54
|
-
"link or copy file according to the OS"
|
55
|
-
if "link" in dir(os):
|
56
|
-
os.link(infile, outfile)
|
57
|
-
else:
|
58
|
-
shutil.copy(infile, outfile)
|
59
|
-
|
60
|
-
|
61
|
-
class TestContext(object):
|
62
|
-
"""
|
63
|
-
Class providing useful stuff for preparing tests.
|
64
|
-
"""
|
65
|
-
|
66
|
-
def __init__(self):
|
67
|
-
self.options = None
|
68
|
-
self.timeout = 60 # timeout in seconds for downloading images
|
69
|
-
self.url_base = "http://ftp.edna-site.org/pyFAI/testimages"
|
70
|
-
self.resources = ExternalResources(
|
71
|
-
PACKAGE, timeout=self.timeout, env_key=DATA_KEY, url_base=self.url_base
|
72
|
-
)
|
73
|
-
self.sem = threading.Semaphore()
|
74
|
-
self.recompiled = False
|
75
|
-
self.reloaded = False
|
76
|
-
self.name = PACKAGE
|
77
|
-
self.script_dir = None
|
78
|
-
self.installed = False
|
79
|
-
|
80
|
-
self.download_images = self.resources.download_all
|
81
|
-
self.getimage = self.resources.getfile
|
82
|
-
self.low_mem = bool(os.environ.get("PYFAI_LOW_MEM"))
|
83
|
-
self.opencl = bool(os.environ.get("PYFAI_OPENCL", True))
|
84
|
-
|
85
|
-
self._tempdir = None
|
86
|
-
|
87
|
-
def forceBuild(self, remove_first=True):
|
88
|
-
"""
|
89
|
-
Force the recompilation of pyFAI
|
90
|
-
|
91
|
-
Nonesense, kept for legacy reasons
|
92
|
-
"""
|
93
|
-
return
|
94
|
-
|
95
|
-
def get_options(self):
|
96
|
-
"""
|
97
|
-
Parse the command line to analyse options ... returns options
|
98
|
-
"""
|
99
|
-
if self.options is None:
|
100
|
-
parser = ArgumentParser(usage="Tests for %s" % self.name)
|
101
|
-
parser.add_argument(
|
102
|
-
"-d",
|
103
|
-
"--debug",
|
104
|
-
dest="debug",
|
105
|
-
help="run in debugging mode",
|
106
|
-
default=False,
|
107
|
-
action="store_true",
|
108
|
-
)
|
109
|
-
parser.add_argument(
|
110
|
-
"-i",
|
111
|
-
"--info",
|
112
|
-
dest="info",
|
113
|
-
help="run in more verbose mode ",
|
114
|
-
default=False,
|
115
|
-
action="store_true",
|
116
|
-
)
|
117
|
-
parser.add_argument(
|
118
|
-
"-f",
|
119
|
-
"--force",
|
120
|
-
dest="force",
|
121
|
-
help="force the build of the library",
|
122
|
-
default=False,
|
123
|
-
action="store_true",
|
124
|
-
)
|
125
|
-
parser.add_argument(
|
126
|
-
"-r",
|
127
|
-
"--really-force",
|
128
|
-
dest="remove",
|
129
|
-
help="remove existing build and force the build of the library",
|
130
|
-
default=False,
|
131
|
-
action="store_true",
|
132
|
-
)
|
133
|
-
parser.add_argument(dest="args", type=str, nargs="*")
|
134
|
-
self.options = parser.parse_args([])
|
135
|
-
return self.options
|
136
|
-
|
137
|
-
def get_test_env(self):
|
138
|
-
"""
|
139
|
-
Returns an associated environment with a working project.
|
140
|
-
"""
|
141
|
-
env = dict((str(k), str(v)) for k, v in os.environ.items())
|
142
|
-
env["PYTHONPATH"] = os.pathsep.join(sys.path)
|
143
|
-
return env
|
144
|
-
|
145
|
-
def script_path(self, script_name, module_name):
|
146
|
-
"""Returns the script path according to it's location"""
|
147
|
-
if self.installed:
|
148
|
-
script = self.get_installed_script_path(script_name)
|
149
|
-
else:
|
150
|
-
import importlib
|
151
|
-
|
152
|
-
module = importlib.import_module(module_name)
|
153
|
-
script = module.__file__
|
154
|
-
return script
|
155
|
-
|
156
|
-
def get_installed_script_path(self, script):
|
157
|
-
"""
|
158
|
-
Returns the path of the executable and the associated environment
|
159
|
-
|
160
|
-
In Windows, it checks availability of script using .py .bat, and .exe
|
161
|
-
file extensions.
|
162
|
-
"""
|
163
|
-
if sys.platform == "win32":
|
164
|
-
available_extensions = [".py", ".bat", ".exe"]
|
165
|
-
else:
|
166
|
-
available_extensions = [""]
|
167
|
-
|
168
|
-
paths = os.environ.get("PATH", "").split(os.pathsep)
|
169
|
-
for base in paths:
|
170
|
-
# clean up extra quotes from paths
|
171
|
-
if base.startswith('"') and base.endswith('"'):
|
172
|
-
base = base[1:-1]
|
173
|
-
for file_extension in available_extensions:
|
174
|
-
script_path = os.path.join(base, script + file_extension)
|
175
|
-
print(script_path)
|
176
|
-
if os.path.exists(script_path):
|
177
|
-
# script found
|
178
|
-
return script_path
|
179
|
-
# script not found
|
180
|
-
logger.warning("Script '%s' not found in paths: %s", script, ":".join(paths))
|
181
|
-
script_path = script
|
182
|
-
return script_path
|
183
|
-
|
184
|
-
def _initialize_tmpdir(self):
|
185
|
-
"""Initialize the temporary directory"""
|
186
|
-
if not self._tempdir:
|
187
|
-
with self.sem:
|
188
|
-
if not self._tempdir:
|
189
|
-
self._tempdir = tempfile.mkdtemp(
|
190
|
-
"_" + getpass.getuser(), self.name + "_"
|
191
|
-
)
|
192
|
-
|
193
|
-
@property
|
194
|
-
def tempdir(self):
|
195
|
-
if not self._tempdir:
|
196
|
-
self._initialize_tmpdir()
|
197
|
-
return self._tempdir
|
198
|
-
|
199
|
-
def clean_up(self):
|
200
|
-
"""Removes the temporary directory (and all its content !)"""
|
201
|
-
with self.sem:
|
202
|
-
if not self._tempdir:
|
203
|
-
return
|
204
|
-
if not os.path.isdir(self._tempdir):
|
205
|
-
return
|
206
|
-
for root, dirs, files in os.walk(self._tempdir, topdown=False):
|
207
|
-
for name in files:
|
208
|
-
os.remove(os.path.join(root, name))
|
209
|
-
for name in dirs:
|
210
|
-
os.rmdir(os.path.join(root, name))
|
211
|
-
os.rmdir(self._tempdir)
|
212
|
-
self._tempdir = None
|
213
|
-
|
214
|
-
|
215
|
-
UtilsTest = TestContext()
|
216
|
-
"""Singleton containing util context of whole the tests"""
|
217
|
-
|
218
|
-
|
219
|
-
class ParametricTestCase(unittest.TestCase):
|
220
|
-
pass
|
tomwer-1.2.1-py3.11-nspkg.pth
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('orangecontrib',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('orangecontrib', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('orangecontrib', [os.path.dirname(p)])));m = m or sys.modules.setdefault('orangecontrib', types.ModuleType('orangecontrib'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|