diff --git a/HISTORY.rst b/HISTORY.rst index 53636341926a1b1c63753625f28451aa9b1d3634..fe4096184f2c0b0fd75839175f134702c309f890 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -2,6 +2,13 @@ History ======= +1.2.3 (2024-07-29) +------------------- +* Add logpath to default_config.json +* Add default_config and data to package +* remove non necessary dependencies +* install dependencies via conda if possible + 1.2.2 (2024-07-23) ------------------- * Add GitHub release pipeline to CI. diff --git a/MANIFEST.in b/MANIFEST.in index e8f37ad21e9fe20ff8638beaed9ca7aac472f631..f277787895260702eb6a8fb3c31a16b16808ee20 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -9,3 +9,4 @@ recursive-exclude * __pycache__ recursive-exclude * *.py[co] recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif +recursive-include data *.zip default_config.json diff --git a/data/default_config.json b/data/default_config.json index 13038c8d2d9dfb77bc2af8ec04ce40c851c2484f..c123af6d88fcea533c49c8d809ed9b7f27a8f534 100644 --- a/data/default_config.json +++ b/data/default_config.json @@ -29,7 +29,7 @@ 13.073049, 52.383835 ], - "apply_SCL_band_mask": true, + "apply_SCL_band_mask": false, "SCL_filter_values": [ 3, 7, @@ -52,7 +52,8 @@ "download_data": true, "download_thumbnails": false, "download_overviews": false, - "logging_level": "INFO" + "logging_level": "INFO", + "path_to_logfile": "data/data_output/" } }, "s2_settings": { diff --git a/s2downloader/config.py b/s2downloader/config.py index 5f38a154a1c985e1ef57cb15b0fcc0af23609b2b..4a13eb004191465c52b004ebee97a5dd1ae49650 100644 --- a/s2downloader/config.py +++ b/s2downloader/config.py @@ -287,6 +287,11 @@ class ResultsSettings(BaseModel, extra='forbid'): description="Logging level, it should be one of: DEBUG, INFO, WARN, or ERROR.", default="INFO" ) + path_to_logfile: Optional[str] = Field( + title="Path to the logfile directory.", + description="Path to the directory, where the logfile should be stored. Logfile name is s2DataDownloader.log", + default=results_dir + ) @field_validator('logging_level') def checkLogLevel(cls, v): @@ -295,9 +300,9 @@ class ResultsSettings(BaseModel, extra='forbid'): raise ValueError("Logging level, it should be one of: DEBUG, INFO, WARN, or ERROR.") return v - @field_validator('results_dir') + @field_validator('results_dir', 'path_to_logfile') def checkFolder(cls, v): - """Check if output folder location is defined - string should not be empty.""" + """Check if folder location is defined - string should not be empty.""" if v == "": raise ValueError("Empty string is not allowed.") if os.path.isabs(v) is False: diff --git a/s2downloader/s2downloader.py b/s2downloader/s2downloader.py index c03b203cc5f93b822a7b5781c6b0960dd387fa97..9c463035d94a6d568ffe852a10d6e1aed6410379 100644 --- a/s2downloader/s2downloader.py +++ b/s2downloader/s2downloader.py @@ -176,12 +176,13 @@ def downloadMosaic(*, config_dict: dict): download_thumbnails = result_settings['download_thumbnails'] download_overviews = result_settings['download_overviews'] target_resolution = result_settings['target_resolution'] + logging_dir = result_settings['path_to_logfile'] logging_level = logging.getLevelName(result_settings['logging_level']) logFormatter = logging.Formatter("[%(levelname)-5.5s] %(message)s") logger = logging.getLogger(__name__) - fileHandler = logging.FileHandler("{0}/{1}.log".format(result_dir, "s2DataDownloader"), mode='w') + fileHandler = logging.FileHandler("{0}/{1}.log".format(logging_dir, "s2DataDownloader"), mode='w') fileHandler.setFormatter(logFormatter) logger.addHandler(fileHandler) diff --git a/s2downloader/version.py b/s2downloader/version.py index 31af82653cd54e88faf8b7bd0efd7458f9045054..a6f1217ad15d509bcdf8f292ea5fc286a86d9e96 100644 --- a/s2downloader/version.py +++ b/s2downloader/version.py @@ -20,5 +20,5 @@ # limitations under the License. """Version module for S2Downloader.""" -__version__ = '1.2.2' -__versionalias__ = '2024-07-23_01' +__version__ = '1.2.3' +__versionalias__ = '2024-07-29_01' diff --git a/setup.py b/setup.py index 6a1da4d809c900e2924566b10a9fc8de34767940..56ae00966a3f1a84d1462b022ebb6f00069b5ceb 100644 --- a/setup.py +++ b/setup.py @@ -35,11 +35,10 @@ version = {} with open("s2downloader/version.py") as version_file: exec(version_file.read(), version) -req = ['gdal', 'affine', 'pyproj', 'numpy', 'matplotlib', 'geojson', 'rasterio', 'geopy', - 'pandas', 'geopandas>=0.11', 'shapely', 'rtree', 'python-dateutil', 'pystac', - 'pystac-client', 'pydantic', 'geojson-pydantic'] +req = ['numpy', 'affine', 'pyproj', 'geojson', 'geojson-pydantic', 'rasterio', 'geopandas>=0.11', + 'shapely', 'pystac', 'geopy', 'pystac-client', 'pydantic'] -req_setup = ['pytest-runner'] +req_setup = [] req_test = ['pytest>=3', 'pytest-cov', 'pytest-reporter-html1', 'urlchecker'] @@ -58,7 +57,7 @@ req_dev = ['twine'] + req_setup + req_test + req_doc + req_lint setup( author="FernLab", author_email='fernlab@gfz-potsdam.de', - python_requires='>=3.7', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Science/Research', @@ -84,7 +83,6 @@ setup( }, install_requires=req, license="Apache Software License 2.0", - include_package_data=True, keywords=['s2downloader', 'remote sensing', 'sentinel-2', @@ -103,6 +101,7 @@ setup( }, name='s2downloader', packages=find_packages(include=['s2downloader', 's2downloader.*']), + include_package_data=True, setup_requires=req_setup, test_suite='tests', tests_require=req_test, diff --git a/tests/CI_docker/context/environment_s2downloader.yml b/tests/CI_docker/context/environment_s2downloader.yml index ac7234bd1e558040280bd465ad5f6594b773273b..0f783d190d43bee7bf55c53af373874290fd37dc 100644 --- a/tests/CI_docker/context/environment_s2downloader.yml +++ b/tests/CI_docker/context/environment_s2downloader.yml @@ -6,50 +6,38 @@ channels: &id1 dependencies: - python=3.10.* - pip - - pyicu - - gdal - numpy - affine - pyproj - geojson - - matplotlib + - geojson-pydantic - rasterio - - pandas - geopandas>=0.11 - shapely - - rtree - - python-dateutil - - pydantic + - pystac - geopy - - geojson-pydantic - - - pip: - # setup requirements - - tox - - # test requirements - - pytest - - pytest-cov - - pytest-runner - - pytest-reporter-html1 - - urlchecker - - # lint requirements - - flake8 - - pycodestyle - - pydocstyle - - pylint - - # doc requirements - - sphinx>=4.1.1 - - sphinx-argparse - # - sphinx_autodoc_typehints - - sphinx_rtd_theme - - numpydoc + - pystac-client + - pydantic + # setup requirements + - tox + # test requirements + - pytest + - pytest-cov + - urlchecker + # lint requirements + - flake8 + - pycodestyle + - pydocstyle + # doc requirements + - sphinx>=4.1.1 + - sphinx-argparse + # - sphinx_autodoc_typehints + - sphinx_rtd_theme + - numpydoc + # deployment requirements + - twine + # code requirements - # deployment requirements - - twine - # code requirements - - pystac - - pystac-client + - pip: + - pytest-reporter-html1 diff --git a/tests/test_s2downloader.py b/tests/test_s2downloader.py index 58ba93cf0bbe1210b994721fc2a21ddd1bf90dac..2f6390bd53f16d73be45b0c00e334962600a506b 100644 --- a/tests/test_s2downloader.py +++ b/tests/test_s2downloader.py @@ -76,6 +76,7 @@ class TestS2Downloader(unittest.TestCase): os.path.abspath(os.path.join(cls.root_path, "tests/temp_results"))) cls.output_data_path = cls.configuration['user_settings']['result_settings']['results_dir'] + cls.configuration['user_settings']['result_settings']['path_to_logfile'] = cls.output_data_path cls.configuration['user_settings']['aoi_settings']['SCL_filter_values'] = [3, 6] cls.configuration['user_settings']['aoi_settings']['date_range'] = ["2021-09-04", "2021-09-05"]