From 22c4d692e9bc895e83e15debd622c602020bbc1b Mon Sep 17 00:00:00 2001 From: ggj62i Date: Mon, 12 Oct 2026 12:59:31 +0000 Subject: [PATCH 1/3] =?UTF-8?q?creation=20du=20test=20associ=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/get_file.R | 5 +- .../_vcr/get_file_deces_preserve_filename.yml | 419 ++++++++++++++++++ tests/testthat/test-get_file.R | 12 + 3 files changed, 434 insertions(+), 2 deletions(-) create mode 100644 tests/testthat/_vcr/get_file_deces_preserve_filename.yml diff --git a/R/get_file.R b/R/get_file.R index 2f62394..39339d0 100644 --- a/R/get_file.R +++ b/R/get_file.R @@ -2,7 +2,8 @@ #' #' @param ds_name Dataset name #' @param file_name File name -#' @param download_file_name Filename on disk after download +#' @param download_file_name Filename on disk after download - default +#' melodi filename #' @param download_directory Download directory - default system tempdir #' #' @return downloaded file name on disk @@ -17,7 +18,7 @@ get_file <- function( ds_name, file_name, - download_file_name, + download_file_name = NULL, download_directory = tempdir() ) { # Build useful parameters diff --git a/tests/testthat/_vcr/get_file_deces_preserve_filename.yml b/tests/testthat/_vcr/get_file_deces_preserve_filename.yml new file mode 100644 index 0000000..b0c6dc6 --- /dev/null +++ b/tests/testthat/_vcr/get_file_deces_preserve_filename.yml @@ -0,0 +1,419 @@ +http_interactions: +- request: + method: GET + uri: https://api.insee.fr/melodi/file/DS_EC_DECES/T1_DECES_JOUR_NAT_FR + response: + status: 200 + headers: + cache-control: max-age=600, public + content-disposition: inline; filename="T1_DECES_JOUR_NAT_FR.xlsx" + content-encoding: gzip + content-type: application/octet-stream + date: Mon, 12 Oct 2026 12:31:29 GMT + set-cookie: INSEE=rd4o00000000000000000000ffff0ac3084ao8082; expires=Mon, 12-Oct-2026 + 12:51:29 GMT; path=/; Httponly; Secure + strict-transport-security: + - max-age=31536000 ; includeSubDomains + - max-age=100000; includeSubDomains + vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + x-content-type-options: nosniff + x-frame-options: DENY + x-gravitee-request-id: d0b84150-416d-43f4-b841-50416dc3f401 + x-gravitee-transaction-id: d0b84150-416d-43f4-b841-50416dc3f401 + x-request-id: xuuwyy1hixkc + x-xss-protection: '0' + body: + raw_gzip: |- + eJztu3k8lO37P2xLJLtIRspEKftOlsiSLTvZI0P2nZA1oYiUpYma4rZkBjWFLGMSsi9hjF3I + HopQGPN + c477HzH1/v9/79Tzf3+f57xdz5bzO43gfx/E+jvO8znNe52WkR03DQUFHR0fRoqtk + R0H2jx342Fz28Q + 6EeAc6mIX6QgLsRG95eXaa6XhTSbDstrVgb3p+YdFkpU4QbqYR+kqZMtZw + 7dbjEZZfEcPUIPVEjbiH/ + msmGHOMSPv0wqchd0Z6g++MPGuU8A/wFw8cpL9F7NlOvDny9qf1 + 8JeXjjaXZJ8lz43QXTMuaY4PUmgO + P20U9OXMGks9e2/8V+eCG9aJ5zAmopeSae/YvIzt/hLw + LIk2O5nvZcaFbHjCWESa95PkzycEpJrYPMp + SNZZQpwyvhzMFC04xsl7beHc6w+5iHD+7qzyI + K1MKg+q9/ujz98KbL70eUPH2txnTJ+QWq2ElWCUg1D + s5UtC1pMAz5xKVwByHdNb1aplvGJ+u + t4q/eytt2rjyOPuVB7yXgjNvnGWfr8yZl8EdffNmimfyvsLaw + PMn6vQ9YGwORcmozrRhVVT8 + u106x1Bl/FTPatTbVTUOnOTuWQWtBFAu3kXQwUjvMF1OyKHIS5QUFPk0 + FBRG/2MCGICPgz/E + M0BMlHAteVSvSy3BEu8g0IHK9jrE6jacRIe613/4+OOhsdfZ+le0xupQ9UkVnmr + 10+JSE3iJ + 1mDVBB2UqejzvJigvtjcm0O/B3luKaiUrlw6Vj/vO3WF9qrZdfSISl+ciWXbF1PjDNakGL + Uz + Yx523y5R6jXcc1oOzKHWFQkoYx9mDe/NrkBhfp+l7oIufjn69Y7NHUWnFZ2jHY/3vijVSaYa + NA18 + Evrso161VJt/uMInJlfY2UE/2j546HaNfIUhdEmw4OeEpDSDprZ3hjsV5MfGlGWyN2ey + sOt2du+G9uc + YGt4jkcZicT+H+AYjqAjseEvS6c0AsetS/Rs7LMDH2eeGkb+Pb4CYo68voTYN + UuqPfBRn0ViN1GxBjS + 2qafSmx9I9/6ameuqPEdkeT3WkrupETv90h3hqYXVn2dQDoZpLJaPY + BxxXZJNTZi1U+LCLZy6iTC8fY + WW/2JELOlfp75jiGu3J9VMQCylA6p8ObRAo4P4orZCUdd3h + 5L3JHmntDw/StEDwX4d0S7aPW7oych0e + 0zZ96PR+gmN360gk0zY1IZzJ2yGDaYCzlRT/Fg4r + eTg3fPwhhHi8HtrpNYhzxON1WyKype94xVdcTo9 + 5If869xbXoxs2nipXcsf2UG7PjvXXnFkN + OHl13D+kn3qbgi/M47ztVw6weG/x+LtjkZ6bQ5x5LHeNnV + 7Tnr8dGx0SJMSbNdBQb3NYZZPF + aO3Jh3y4L1fedBzNUAznacM4nUn4hnVj4IaIn3rdPU66vEADaY2XG + hzObC7eElNvTVo1F8Zx + 4gzpZ8SjadmphdZid1+z1jLhmTpa1U9eRhtNy89Ou8/2ah0KrauJeJLVHSaF + s6MqbX/7VI+Z + P1Zd58N0a75u3eNCDCbobbNMnuezz0nJXjzVk8k/nNZNHjmsP/6+5BkRAT2yQMG74iP + oHSra + Cnu6ZEggUeaOXDgtMGLeUP4biRzA55anWMBNR3+Is2mgv5u3awCBx7s59SYjNzm1ttY5zsui + d + L/gBXh1hNS5GK8aVj96KOjsHizKXKRmWqE/IpkRtDpr8DHgV5OWbmG168Or1fcPzbchd/1S + Ub+YQFF4 + t3L9k4udFVaVYswf1/Pu/OFdhpUzCN9Z+zKNgbvO1G+djbo47l3zNQzlUZN1OH1I + DemR7RCyMYQF/0x + dLOvzdjg5GjSGS2poWN6wQ1l7wspWlypgu8hxBKcdfnp20zcc/YpLbqSm + esWiveFWYOOk++d3h882j8 + x+fX8xtNIe52F6Vg6H3fsRhg8Nvz34DMTH1DBhmKgtERXMsS32 + TOPZH4qtgY+WaJ5xKAoFmQydAS1oS + NE9Ves5GuvCIn3nBTdN56mbtGpSiU/V+o/murDI3Cni + 1ug85U5r/Octk85TGUdzTdgyHhWla+SfOS9g + LHRPV8dM9//rLQzqalCZ6diS2Zbi/+GfP3nC + vVb3XtXtFG6vwIQEoCaP/jOXCwxVyIf/gctvuWuvDY+ + ms/2vfx6pW51Lv/ufuNTVx0Y4pevq + vEr/j13y083+MxctHXlJzvjWQNoGZ8U7jpLP6sWhXdef6LuK6x + dIHRfs4z76eOHo9r3X4vrS + 1I6OT27Sfvwo/vlo3F3HXG46hgYNKRbO+Hsup4SPsndeunZc8GkMSbAr9 + rYTzXLlnc0RtZ3l + F7jgnsiLN9G87yaYhn0O/5/ebmIadjrs9eZOxaCazbcXIsE9nBdvJv3vbwNx+HIK + qkoYgY/I + 5P7fy/+9/P9xeSKbqxX15dmomGwrGlvT+auj9Kr9mfawneZXI0EjjKrvGjQ3U3ExYVXeO6b + B + 2V9dPkdUfQuuDC0ascMphUop+Y9V7DRPZitaRVb+WrtsUtkAe+tTZ78a+TbyZsWSi6kPTBWV + 8Lama + bEOfc8yWzPcTvVZ5LyYv/Lo9J7qWK5eaXaCi8Kzxi89trzmYk63JezRSZvBViGGqVdV + Z8yfwLq7XPhm + Ve1u1+agL6KetshVDQmgpbEhBigdFZFK2PPn/nsyr5ZUPmpif1Lu/Y5eyPr1 + c17OfnWo6fcuX2GWITM + 6FNfQPzn5rZJrztTVEBQZpLATCurb+4G1U2bFLMxfGilrmo+fSGHq + Xw6eqv08tltrE9JpYFqZN/F5qf + Lt752hmaUfF26ho0all1R2Su3HyuQ2/BWqlyMd174O6UzR + 4eRrnsBg9p1acuPCWcocncVXvbdSl0Y6p + /a8f2kzmnaLB3Uyu3KtanPh/JvhuDnvdS7LCJmw + +VWe0b4BmZ3u7M/U8YW1vyYLh4ZuJWQnhL3ZSSqs + UYoIkQ1r23uadznKFlJ7WjVF9DV+OThw + +HbgHcsl7x+Bakz4KJvSPZUo/Gzg7QSfp2Fy3wXx407BslE + XL+K+//DfHSnZCalQHFI9H4YL + SPn+DBcQWLT3U7Xsu2/N8tU9BsKa6KJVC3MvHQUFnca/rYkY/1oTBY + Z6QvYXQ2MWBj4j4kdR + q5Z01ZXBoyW+tCOaEh8aRGukqYPNPYdZi8Wu6LquYg2R3xp5HwosaRv9dDI2/ + Br+Tkei1Vux + q4f65uX8lh9Tkp/oNAQ8zg+D8NcyuITqhFScP20eXZGl4KyicPSvfWMRkcJv6hXNHiB0 + jC6k + 90rnvSCbMS0tt1PlP9RyNHVADto5RjFJ+p6hrSVqGaNHsqePa2sOXHmjzSnBdCUNOjEfI374 + 92 + iOgwC0P/H+CcWigJwwfRam+iUGx8CShUtX5CER0ezMR1+lROYceaV8/FDG99H1UXfdQRbp + 1ma1SN4KC + 59JI1mf6DXeAGF8vQR8b8IroNh9e7exz7St+opLeoMTSAbiGXKYDRTNb9po3ZMb + yCM9DLdXS7nLwXKT + Fg0el/m85SCz4MraMBWHNcF6034r5Xv+gv9GzzWuF241P+AZbejsdxb+ + rv3p70xYZoUKEz/7vjsmHjx + 3trl7ljUE+0Kcqg6ztwnGbz9eYDvReYld9nlUF+d713ftZz/n + lg794LtvD0rV0hAayOo9K9lf02J7ti + L2zuv5LEH3Q88uutNJvbS3C7gmFhprT+F9tpMd+V1q + orct5OZMlxpf59JixvoRSvyzgeaA9Dn3sq0FM + 9SqTR2tHZNqYqpKM8NG6wZ0R1L57fhaxs9c + P395D3xZwa/9Pcja077I78DSmZ7+30qF+c9SCfHx93Dy + 8fEgFMuDVDVvYEeluaV8Vybc90WR + uzFI9hhbkq5dz8rhcHVhp4snanou+DGJWiSc88q0e1A324mPauu + s9GiCyg9/OSY8e4huTfH4 + UuoRlc2RISnP4oQ1tl+BdJNnJFfyYgXzvUUg/YwKyes9ad3Ziq8b0gX4IN + +e9DTGn6uyEE2a + 0lF8d5I2QQbfDO4vx/w88TMLDKNlL+A0FeXhGdEsisxGvRV/cvOHCYKjf1CLyioDN + 9vXK7AX + g+Ioeqzcd5L599zzx+zfx0NzPuaBD/lUeqiz16LthGK/lMscueVqcWplULQd4iOtPCwZZsC+ + + 7afO/OZGJmjEXJVAFlW/P+d3gIpH/7rXOPEnWX9u0Mkp29+slz8y0GsUZ7mE131SY2CjqSFb + w8W6Wb + zEfPyRm2mFgbrL7jxaLqxHxLO+IezEx4db446yNaluZj7poYn1l0wxL84Nzsf3ALt1 + JfuxGKf6L77JM + Uc7Gl+PeD+/qSHkMMh8z9yRRvaLZi9qwFPZoMVcn6OtIClUXah7dCluM1F5 + oaLUJ0gF8uHRq82uS+M1 + tP2UAYZO0cou/t2P9E5YHrK1CMhF37yBZcw8mRvx7FwLd439BzVY + qpuhk/PJhbVjE/0yuI2yPeVZcDj + /7/NieVWBranXRWZdlAtw2OMoedTyWQJHh3qVHEYBBur/ + dY9+nFRQATchkMAAsf3/JAg0ZYzZpI4OZg + h82fp9TL3OUGhz+aFjevHnkw1PaAtitCZmrcwz + ztNnpqufX/bfKoNdwdyFvx8YfxL2+pkbBKQl/p6Jm + Vl1ZX1DdRfXsMMVVRO1u7syOQ2/uLPo + vzW1Nx3CPIHe+dUAr8H/2lLFd+NW+Op+8zngf33/ldXts7oK + sx/d25ueswzxgT1XwU3OtHdP + oFD479vrlsywFdXxvZnOhukErGGlA1/Urd+/+6ZxS6vo2vmGnazIKkQ + Wnz1659aWKUPUrV28 + 2/RkZ3bIxBh+YbIGHfke/+unKTh1a9VBdWx8ea5yVSWibmd2aXVibG/59zL6Vm + 3U+uIK3zJz + lG3Fin3k+kaWF36uZodPtaFb7LlqWyUzc1To3gysLiooZKfRsAyNq9zZ2ppQHpuIjArbX + cKV + DBmWqY6jf+2gI8LwKwtzuDUHVfyjbvTtyDBcIH5xpXO6IWpiQqWvr6EQH4CfXYgaQ0cBt1OD + tqY + 2QgxX94LxYpVa9mMRO99//vw+6TCB+7650D6yjXw1J7erg1tvd5g4v7fbrv1rPQu1LpYq + VoeOWt8uW4 + XtbUw24yPwu70j2YgRnhqZ72MNO90OeztNCSHdEwtjScxl+L2ZqKjbW7i+kRHD + rLLSN2PjX0OicLdH1 + vC4BTxurcrhdjj+90J3N2ytvUzsJS++ild1+N6ccv0DpahE2HhjVuVu + IRYI9/f2j8lmrtTu1amBr+vM + +FvhqjB0LXzk03N0MzrirSi2zAFgsakSD6QOyzUzljTHPL+B + 2YaEo2/Pw9AlYgZ7ElHe36omf/V+1ZS + 7hq5Lys0aLBP7/eozbG9qOgtdJBY1WecNs62sjfQK + NW6PdA/1a3cbKK/FDa9piTS/mnlgw7ReOoPDZo + a4KxiKrObOoLx+b3u0W7pXXRVx0GwfyfcY + Em2OCXxZgX21DMN/raxRrKzwk9d9cGKi60H2zdqJs7Pa0 + 1cfrM59suM9EzHtJ32y/9fG6K3E + TygfpdRPCu7BCpXP+RXCw2+PsOqyv1Jq7tUQBSO9cHQFfpLLIAP2 + oXd65SV8k9JXC59Nu/HD + 6rZWcXRFfurLIGN27k49fMnJ0zJXXz274c5faB+OreZTCOp69ezOIn+Rn1u + 4jWrsIsjs4lmM + pknExiruSnGAyTLInMs4aMlGNXcRZH7RFaNpsTxc0JqKUHTFdFsFpWESI9F8VkFdxb + C3i+fh + WZu3tsBw0a7cOUR1S/FcuReupTjAApdjbjnXWzIhpW3x7O3iftcW6glJy2aEvTEN8wWxrQA/ + + jQyzWmbl1ra4QxCM73C/eDIRDK+32giwuOyMKYUDgO6+ACCGxQrF+91riSB4AhBsWZwZPinl + 5ywjD/f + rck9E2G+rSKYgaF1luqwYu4rttmThQF9j0RZBkbdrmEww3meDADm9D2k7ovxY2+Ix + AbIAsE3RBYa3Wj + 0IAO64Yz1Gur+mYb4iPinAhZBhC90Goc4yCgSQ+4A1vTtKyKc5GCVX4Fbw + gwpYK0GxM8DCFFK+jYskC + IZ2uRdL+EYtpBHwnwL4LYv5qzHrLe734f37cmj3bpKSoSmvlUiX + +/O31gCpdRtgeBOhQy/HUixrE2Gn + bZFEgMjscA/fLCL2QTAjUg77Ws/eWi/WLi5LmIrfa7QS + eaplYrUc/kYRaZ2DUXQt17AQy5I1CHIul4c + Hdbn7WSw/XQ4tT0FwupZ3AbrFy+OVkc7ljYhe + BQC23KO8eUcRWU0QXZxCjFv7vK1OQYgSLFQ3hgaVBT + e+ITbl4RWuE9tpmCarkgALLldMKS5j + d19zKQcj0AUPV+210QbuB/0pyljS8IeYa9Dnd2XHqVc/P7fEE + hTt5hCiaRgUrO9AUsMi4fl1 + Xiu7HAxgn81qrDJSa7dlUXA2uttqzMxiZy/iIrLazwKrAB9ZbV8Mdg6a + RpQGWMhlYCKv+hB7 + slsW68on/uz0nkN4n4fjoH92VgKigDn0ifEUhHcOZjkHY+AcZIOLTMiWzsE88O4 + rQliEd1by + Wo3Jw0f2cWT/WGhZ/GQ11mU1pmFhqdo7kopY2dezcw6anwDqvua9Y0DXoiiy2ms5cuKg06 + V8 + bHUnDQOEA/wmIbyxsgZ/NmFvq+GIzeaOSOegOcQK8LtYq/juoHEePr754UAQ0MPVDjLJmSvA + L45Z + mFvxjpNjgL8tpWEuuAapum6cR1aXyBpgwXDLrsXIrkVzCGb4QjbQC39fEwY0nYOWmmlI + vc5BofjxVIS + 9AhwbYFHGD4ejpfyUkWEzCPtuK1Txurvq1PuTVih/i7I5hD3EYmfgQFQSHgGM + vbIczJIC3DIINZw6UR + Z9Sh5u6cTCD7fZCHkuRndavsSygIW/1OPLEa4PLFxM3zLkGzXPBG/k + naihSHzv61KmwS96/h2OBmpHo + Wkbd/8Up5/x3GDJ8tIylfhUrjPN58SklpVg3jrIB1aul2DR + RrAoP9pjmIriXhILGxc/W9ZESF05w6l7 + SUZsXE5sXGnTP65QnfNjNZlSN5vK7arJmsymFfZj + tZ5St53KXQNRK8cqMQwFjizNidCNBjIElulE5mX + HPX0v7mtyr2tT/8aVnDi/6uWg4djEn74y + jvM5NIFIBoj1tbM2uDH3y9/+eMcecHbymSejGUP9Yw7DdD + fH54jSiCkWZaGNxm867wttTsaL + XCrIuO20feZb3/Ko0m3mh275sCeq9HjpOUrJEhoO9nOOL7wnAifEK + GMl818kqkF9jfoGuyjU + oY+MNF7qXyuyOTn85pUCUjPNbcpIUKm/BDuPdqMwLtDgSDvHLrgY7NWzdSI6 + V7/oHJgT8lFz + LGzVUUyt4G6yZK6xoGe/V63cN4GWdz3GWkptcanIEticHIWJYFw6a5qk4x+zKBoop25 + bog7U + 16RiW+EY9TmIui63sRC7xWLF3b1rVMIQdT1uPyF2e0IznEIcoq7PnSbE7rI4IMZoE63PIANp + L + NB/LwRXc6POkTxdmDyfTn8xiGed8Qu3pMjPdFaY5GSht818qgCFmSBNButLSccib2UH1U1a + DYi6MbfE + edMUd7ttKZZL59kftSWaQF+brW9RQDmftiWaQr+bVYocbWZztk48DzaBfDQbq+hJ + RVGaQ43MtRBtcfB + qr5eqhtQIydPw5JsZQjbmONAjylLJl/DkWxn0DkHtgar2VNch6te4WS+w + f1qUHZjfGWg8zKhRcM8K6m + 9ho3r2BkWJ/pULYHfIR+sHedwfLATfZbBWSk6WeGMvNbwBKJlq + S7SFilv23f6DslryZWnyYAZ9SFCN+ + sKOQLSl4NcMVpSkYxlie8iF+jZE3YH7xwX2PfdazkPR + EPXr3KzC7LQetSY0cRB1R24JYXampWBcDyyG + wgn68JoWR3tcU/WzmPhuIMwT7Yk3oN+vVa46 + /io43afuzJ0mzC7okXOFJh2iDuF+I8wuurRZtd1I2SF + 5+m3yzUyhbHMVJcghKKdie6IrdM1K + 5uc4xTt9OhFwLqTtpnnZR8aHmfT5kMZ3+golbqNHjNrj+iVzrQ + sQFhuC/RQe0B5rLdv2dGyx + owbt9fa4QUl+m4IOC0bL+9EV+kUi4ApImxfGl/ewb3vcqGSuTcG3AWl+m + 1/XX7RI/xAxjfQw + IOSBThT8EdLma4BjOyXKfr890Q/qb9s3qnxJlP1Re6I/FGkL337OLJ5F3wlprNIP + La3dDKe/ + lEX/GaJRrQ8tPVE6TREENbLTQrSnLxXbS/N8EGVHticGQ5F2VVsouS+i7NXtiSHQNTt4FH8 + / + xS0oi71WY3v6D2vcugBtS3vcmqSTfUEOdhHG9ZqR79cxqOAipC2MkbaBIhzaY6812p6+Za1A + KHIWB + 62v7em/n2pRRdfpF4mBNyFtERhfYcpdydPo5PksoZ3yeBOKaLT+vBh4D9IWZYD1o/ig + TycOpnJpi34Q + Ti8pwvGElVpq5kOxZQYtS0ccjVTudUGRQd/ntEdd1O9w+4k/Pul53JyKTur0 + x+QrT3TYB2yURn6oRaa + 5OTkW2A5aNxCKV7IjMR76zvHzll50g/68OPikS1uCyBL74UsdcSxS + /E4FyYOLsEiJS06C6U9Y2aVmGt + 23jz50O92UXPRE6IKFKYYWGKlOWrYd6Vxwx7pjH57QS7ho + fNKHvpFJdqF4ADW6oeXZkc5jg8JKRd8Q/ + PqElVcK0lwwxPfhhuDPJ6x8UjPNAz0etm8uJbRI + s0qaxiPCpma4hHtPSxokdhzj5ykt5GWBMmi4/NFi + ex4ZudmsllZl5KyV3HEMzONymfc4lEHL + 5WuLrSJyzx1bn1bl63w1pSMDzLNtcVh79mOagoKkZQpiW/E + oU0rHXXCAv3MpaMiXd+5Li628 + 5Fnt2ba0DOZmNo4fLCkdrWlV/s4YB1V5eUkuYis1CwSCMmjPAvgKyO + EdpeOcE6zHlFv2+7ZK + SJBWG5Y1xJYoL7R8WoBk3HNU76HbZEsOCHpBW/bmEbKORZkPB/7CX55kIxke6 + amMBQcQlUZH + goQLBEDQAAWRhZZtBcrmWGsAIqv/UQpCrnovO9eavy8XkdkWGGX4+c3rTF/nrvzydDDP + yrIi + J9YEU/6+NtPf+Y6Gr/Dr/POefvdEZloGjA4xJHm2nrdJd5tpKearVOQcNsmoeN+fGeiMe6uS + 0l + RhVi4iWpkPGhpgsG6OtSme4swaNUnx5Pl0AqDNfIyfQNtyH+epvuI1zv1A3u5l02rPFm8D + rawUz+PrM + eAA85gkEFRPW/bnbSLVvWmM2EvExnDaRijFX0xkpSDQetOkjEA2jq2QiGm3l7xI + IkYGpEcSZAz5wUtM + jyLyZcppklwDuzYpH1abzSZOrPppbvvZX4RdDPF1FgVBH4MDZlrc5Q3v + HDCdGT5BxrsFaiuYKLjQEr8 + kT9ZQkCRBFEf1NpEVXmAaCdACmJVJRcIIpSWVZBgDWRGWONbS + kNzF6z8mQuhpDyzxHyYj6uIXsvi7Bk + l2bS5HuJMc9P919KDoKgqApzix9r/Y8JIqevJ0MAnb + cz6Lk7OEEypIgPZC0fmR0Cr2dilIwyeQ+RDZo + ACegyTa75C0ZlriXdtBpPRMhp0gaQn1kVeF + H6mxUYchhhSEej0pdV0i7K+0fUfkk3itYAZTkgxVOHYd + J2F7PZEi0pwl0xifJkFyz+Ynlplo + C5k56CscQ0JkDHAmMbt8ufvwQT6GHh4m2dqsQ9auvm+Ja5FWkMQ + /22gCkRk+bh5LwttqaydG + Ail5U2eRRPS+PexGOF45mszyuh6ZZVwfPdlUFchHRzQwwMezYkhOgVQ1Sc + 0A13uMK5WVkDwk + pxU61tLWl5KbwNxLgLlR72gwA0HN6py2bE4MFciKjoCoroi0v3FYHrk/990NdI4we + E+hzfkx + 7ZAC8uFGSxgr25cWdXnkKW1OoNLM+akJWpyAlgJybDvI70PaXV9ntRThdPDITqQQqcWjRUWZ + + IhwHZvB3Pr2UtoEz2Tcdu2+6/+GRhrsvG92l9lFQMB9GX+fTIKuHYAagWKqgRONGKZ6rHlyH + CI4Jt6 + TdBWZDldvA84VoIOcSEXI+zDmioP7AtA3O3ILYdUV7YIKSmQhvlYpAV/KQwvHCvaUm + egkQFEjrb/vdw + PkpwcmKjVJJYjTOykj7HlqiH8Dk+Df8bnoakotwWAYT0RowR3OPHTCZggiR + IrMlPfChiecumMG+zlgB + WRJVreBLqQ0gZvmmA4N7/cT7xDxf5/p2+fNAARmWNflw+nNAOfUU + itd/+kZ+aAJh3FNqc/KA6U1RKYZ + BsfgYb6iONlD/47qHRReLLIK+QngzwCMJHqdsB41Lv12B + WqR4FmmffP8+z3osLSvELMXzCZbO9otxyf + cWPSWCBTgKiM4IrvSIkIFNxwgDX+eXFmFntDn9 + S5ojU4QBHqyX0/ZZ2TKsBqI1uqCyLxpfQ532/hIcG + AP7yYIdPkJK5CfC0vwvVhqO2JOF/jrY + kFQMFVsZo2QlhXLQEyQrqXAGLlK2DAjjg9hYbggCkWjH1t13 + JGEGb9TNUZOK6BpcnARZs8l2 + mtj6ap0W4fXtIENLmpuY61QkX7wGqYgWbOX85TPJQFYiVhmJ1Y1NBW1 + bkOIuCCD3y4uwNt6H + B0aXGJnPvs6R3CsviT4D43DgQhnRE0C0BO3BTQz2Y1oV49LwHZKoSo4msdrjwA + F8s78/kLVS + BIi+TLYobc8VHpArL9k9eZ6BrLUnGklmX2L0MBXJvsf7FOqD1reKrHifE5IiRNR4JXK9j + k6y + 1lBNG1kUAfJJsQd9wSMfX2edOiDjxnvOQyQLme9VmEnxjm0PRAYyEwkGQXd8Mw6RWiO+TUyk + Vjg + 6XpPMgXHVZT4y4phDUklU1UQwR5RRklQd4msySRVltxNGReocEmFq4CR5KxYRUUcK7Jts + NV+KxV9TEQ + E3PtL5KEn1XRYbyOoIgWYTBSS8Ena6Pi1/XzQDKD+pavoU4bsESSHAg20ZOzJZ + Dwcc/76sDkGkZuOEF + zr9S4uJPPKMdibgYOENt3pO+T6dP4EMQQLySI4U4da0fGBK6tCJBetN + tjwCWekCU94PPV8A3uoRWA8Y + z5GRQkRQgh5SlbwVkspOsJ+5b3+SSZsMBaujT0RZbvmrAIC/ + F1rCHj8hebWMC+vbj0jP3/kVaGi8Bkq + jnfkxTUABCcwzfF3MJEkvnN0usQ+Y5aK85YiO5IOX + sHtXicaAedP1MNtfXq2FKCLJAFfLYthI/qKihs + mC4aHxIvPe4/6BrSVrJpQckatS7QGYJsnw + yPYNeiLgReTeURpSKK+13Il4wCS5IfMHmeVJ+qQD+A1gT + XiY6LxVqud81ocDn0a2f+eTub+0 + KiRIdMQW678xbUHKU4E9NQlf7cZZohwCWDzrEVlEnrRyuCdBdH+m + OhNX7ETG/kBNG5k1RdXo + A/9llYRgpFSULPm+Uy84CHTWkhSorJndFbJM1EiTwX+PCyYKtgWJJLw9Rxb + LPIrMKxT2Cimw + eJmUA+YGwEtLHmfI6rY2hLxumwzJ1FzlyQiXyYkhscrz/Aa54JwReWbu5R1QsAEsCQ + kDc99/ + IWAZcl6F6CQEeKbPniH5vza8dZvIT/HJoQHLRAOylL5voyLLtt8Fol6xdkU8tzC5oDolyXiB + + lRuxyzzVc+lCI3nut08SZpe/yjOPm0zw2g9lopfmysiXsQdjsjjM+bJXDXlZuxoT9apKIWLq + 5DTDKA3 + JMJ86UJH8Ko46eY7cgj2EzEIfRpTopT3Wv4Xa2XqfE3+7dkdOJiJ+qYdC8gp5vkf1 + yYwVRaaRUXli1o + Y0Rm0ajnKSyJNFPHtIJvn6uRNZeRXeoP9rxqkqnRHfoSaW4WIaoweUSx7J + RgDJ8He+PGH9pUWXgGHRl + mbugMv9kJZBsIb4WZ3ZYH9kMJawPDEB9v5pl2LAFyZb7oOsWoNE + dqSMiC0hYEW6JerrLACySgNfmGmx + KHsDPCbptS2+tugqIB2Xy6m0LT6mHSOAeC516pCpdYgd + I/iBaEnLQAALQUUOYgvYAWULkRAHfnITkg1 + APFqy3gRPEwF7UxDKzQcQwGhQKN13XjMFAaw5 + I82s9gPjJwTmhdu4TLSsoz2gmmZN7AO20DBKor+lHs + ATmAhPMFZdREQE6MB9PpKCiANf8HcG + NvWvXXxJoVj0yTECy7U/fcd0rx8jRTIUvkoiQHinmukQGcYJb + zI6EPM2JIcN8sJJBBRb2hO1 + BLDlOZtshKoCxICqihQoIsEj4lm5SXSgPh1kBXjoDDmQwBll5MhStHCC + jtSY3AskuVQRVmZM + 0ipxNKMn+T5gyXme5GFpgxUHEUResnLvXh7RK7aUDmzPOhGTXpvzskAGWZ+lw2o + dkWJg/bWq + GUoSnc166XCQjI2W7fBvZNwF3qUiUsI7JA6sS0iNTVqiEvAtihhZ1YafNieGA+yRDTGcpD + TZ + REVVE/34A3ie8p4jBrfcsp13jBgbsAEHnnEHTqS7kRiuVc0kAfCU8pE1PumRcd8NIauOmg3C + HESE + iG8kc7awEfgW/6+Uf3tAVigWDaEniP6UeSh4UhLG+b7+9k7fAUOAUjczWT0FSJFCZwx5 + SvQuHQzf4/5 + ONkS/j5ORvAg3O3AWmHTlgSciiUyJa2SIYEmyWiOvGszDA44IE1EeAwld+iBR + 289SEGQejY9xkSiS6f + CIPog9E3VfjFR18RvII6TM1CuSebdTiCXrmjx5kSzVDvfekIyNeA3u + f7H4p1oC4XF0AD83yEDCUOMiG + 6vzANGe+z2Z9lhk508q7Yr9qPSAGW88PAZssx9WPvCNptRZ + BtDQvmnCt47Pffb7RPYl1YpFfJ315JGa + KZ7AnJTqApSjAGiIX7uC8LWjtShZX3enMLEFjMpt + +Ni+9QoAE5gcYFbA0Aa+r0wCDQEzTHhezYc0kck + Wzn3zjBPUJFB4nS6GamZjd30dHqmQW+dZ + P8yl/vC5FSeqp5pLXSXyBnIT5jBfyFW3u7u5t7dgWAazj1 + rfGMFvB+J/7Y01o2/HwxyUxtG/ + 88ubVWt39jBj06oRPiFiPmJNaPzP7YSdqEjcr4aaVJjD7T9PfWDGZ + uBzektyzMyGW6nd6LFt + eOVWGRq/kbW15fO8bhdTMhOiWoubmStMMFRFb4aCVVWU9mbaw3dn8ZSEUz9S + CUn6r8EUFN5L + /3bqB/xfTv38eUiKdPZn/4jUg4f17g3iR+Mdmubrzg058oCvio29SLDT2qL4ZMFmqs3 + 0qOad + j2rDccTrhkt0Z35E3S6asMt0VtGRdqnokRE57gS7/LX1Y/OPjRX6ZM7m+vwO50ndIzUvowq/ + 6 + j6YB1nKZNS7O4pCIrTMVPum3rVe8EMlW3FaLp5jL+2CjWrcmqhgPofm9m2XTriuxvSSOiBQ + 0vh3gUeT + z8iAhkWuCwei3MjvtBS7kLtK0lmzR9fCscoVqr8rQcW49vyHr/WCwu0WVD+FgvIK + Izbn7r7fPZ0SIKB + z/zYVKKw2tOP7IQJRQ9n3TgwSXt+i/F8cj5LcPx6V5eCTLc7RNLElJIxm + Fr9+6thL92ytkYY/3IZhrk + /l6d0/pPk9jtylbD1VlRO4rBfbtHoStsSAFURFiFR6lunbzbu3 + 3Z32Kyi+a8+JCWuLwuVEXf3ltSmkf + HPd1icdiZiEh7XJDax421bae5pBsSnjr4qr3vYWdHhJ + SXtUjnNniNW88F/afs5VBbE3U9LL0nxVHKzu + 0u/ettrYmXflfXY+726NUcL2t6flAapuuFGm + OtHCUQ/jkMaumio0T4UZfBfiETXfwGWOkKvQ0VO061H + 3WVrJytDMFnGF7A3j+O7nj+lX8SnE + cEiuCbgmZQ0vrnX/iJcRu//2rPlIqKPh5S39NlWd33fM5m9JJj + /6lWdSr3P++B9/sDdJXm1M + 8Lp7tsS3Zw0UtRZpueLXWn3o+Yxst0kec8c7jwH9PvtRGTiWpj8H4+WGD + IRp8l8di+C57bSC + l2iuMY7CevWH6aCzfsY4q5/BMbRS6NGinCnOXOa/dzy0VYniU/aX1obINRY6w5av + 0T+UhUEb + H1np2DSOS6i0HpGoF5C6rJ/I+AlVf5wmTQClra9xlD9eyVmq8czg9V4e/XFHFon+U05X7rl + G + 05em3+rlyaltOOVUpPaB5qsx9PSnZtq7ctIUzHGH3lGfSqyNZmbhb+3ao7arVvIwfWF4iDXo + 3osn1 + RpG6nZ1jHbVIEUYRYnYixIqtZfadvyJnCB17HkVaVPK6uvyxfKxWse0e4qmfORm9bIu + Y4+9yI/Puw8+ + V5crctiL/uM856GX9HaUFDqppRSxVyT4TgeWPGk4yX/pRlaeE/9NM32aByZq + PeeO0djpQQa9aAapznh + lsuSOsakHNlA+1GZXU8SycQcLUFYcUQirZZEmfIrpY7Vk1FgMmpQv + Cq2slW9nZgcZY77pjMwihhoVll + sD8svNC3hlfDYLfuvOH7YpR/I2QRWej9V4wEMKBzf1h6OS + naP2pw18QvLNFioKCvRRwmigpOKgII0H8 + lch2Sn++e+/ef/0nwDkbwsy/E05hvJv70/+U5H8 + vTyWvynCqP7rq4X/1CZ/IY31b9re1P/Nm3z/VCc/ + u83xN/W3NP/9O2z/RCA/0sv4N4Rmxn+c + +P6nKvkBV+a/qa4x/5cTwP9UJj/5eeJvynys/3Yi9p845M+ + S43/Ducz2P58a/ScK+UQL/huK + guz/q6fQPwHJa/XvbjnJ/c+ztZHeIVqCDAPwMwBo+ypSUFBQ/D+ySx + gm + recorded_at: 2026-10-12 12:31:29 +recorded_with: VCR-vcr/2.1.0 diff --git a/tests/testthat/test-get_file.R b/tests/testthat/test-get_file.R index 108b481..45bef8e 100644 --- a/tests/testthat/test-get_file.R +++ b/tests/testthat/test-get_file.R @@ -10,3 +10,15 @@ vcr::use_cassette("get_file_deces", { ) }) }) + +vcr::use_cassette("get_file_deces_preserve_filename", { + test_that("get file OK", { + expect_no_error( + # small file for tests + test <- get_file( + ds_name = "DS_EC_DECES", + file_name = "T1_DECES_JOUR_NAT_FR" + ) + ) + }) +}) From 2ff0480ab04d95526745fefe30c1d9f7c0a4e2c0 Mon Sep 17 00:00:00 2001 From: ggj62i Date: Mon, 12 Oct 2026 16:03:12 +0000 Subject: [PATCH 2/3] =?UTF-8?q?suite,=20=C3=A0=20compl=C3=A9ter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/get_file.R | 26 +++++++++++++++++++++----- man/get_file.Rd | 13 ++++++++++--- tests/testthat/test-get_file.R | 3 ++- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/R/get_file.R b/R/get_file.R index 39339d0..dc3c191 100644 --- a/R/get_file.R +++ b/R/get_file.R @@ -3,8 +3,10 @@ #' @param ds_name Dataset name #' @param file_name File name #' @param download_file_name Filename on disk after download - default -#' melodi filename +#' system tempfile #' @param download_directory Download directory - default system tempdir +#' @param keep_original_file_name Keep original file name from Melodi on disk +#' - default FALSE #' #' @return downloaded file name on disk #' @export @@ -18,8 +20,9 @@ get_file <- function( ds_name, file_name, - download_file_name = NULL, - download_directory = tempdir() + download_file_name = tempfile(), + download_directory = tempdir(), + keep_original_file_name = FALSE ) { # Build useful parameters url <- glue::glue( @@ -31,10 +34,23 @@ get_file <- function( message("Request file : ", url) message("Downloaded path : ", path) - httr2::request(url) |> + resp <- httr2::request(url) |> httr2::req_user_agent(getOption("rmelodi.req_user_agent")) |> httr2::req_progress() |> httr2::req_perform(path = path) - return(path) + if (keep_original_file_name) { + # Extract original filename from content-disposition in request + cd <- httr2::resp_headers(resp)[["content-disposition"]] + m <- regmatches(cd, regexec('filename\\*?="?([^";]+)"?', cd)) + original_file_name <- if (length(m[[1]]) > 1) m[[1]][2] else basename(tmp) + + # Rename the file on disk with this new name + renamed_path <- file.path(download_directory, original_file_name) + file.rename(path, original_file_name) + + return(renamed_path) + } else { + return(path) + } } diff --git a/man/get_file.Rd b/man/get_file.Rd index 6b0860c..d70e84e 100644 --- a/man/get_file.Rd +++ b/man/get_file.Rd @@ -7,8 +7,9 @@ get_file( ds_name, file_name, - download_file_name, - download_directory = tempdir() + download_file_name = tempfile(), + download_directory = tempdir(), + keep_original_file_name = FALSE ) } \arguments{ @@ -16,9 +17,15 @@ get_file( \item{file_name}{File name} -\item{download_file_name}{Filename on disk after download} +\item{download_file_name}{Filename on disk after download - default +system tempfile} \item{download_directory}{Download directory - default system tempdir} + +\item{keep_original_file_name}{Keep original file name from Melodi on disk +\itemize{ +\item default FALSE +}} } \value{ downloaded file name on disk diff --git a/tests/testthat/test-get_file.R b/tests/testthat/test-get_file.R index 45bef8e..fc9da88 100644 --- a/tests/testthat/test-get_file.R +++ b/tests/testthat/test-get_file.R @@ -17,7 +17,8 @@ vcr::use_cassette("get_file_deces_preserve_filename", { # small file for tests test <- get_file( ds_name = "DS_EC_DECES", - file_name = "T1_DECES_JOUR_NAT_FR" + file_name = "T1_DECES_JOUR_NAT_FR", + keep_original_file_name = TRUE ) ) }) From b3caec381e5e14289d5710eece9d3bc7fda45b2d Mon Sep 17 00:00:00 2001 From: ggj62i Date: Tue, 13 Oct 2026 06:50:27 +0000 Subject: [PATCH 3/3] first version OK --- R/get_file.R | 36 ++++++++++++++++++++++------------ man/get_file.Rd | 15 +++++--------- tests/testthat/test-get_file.R | 18 +++++++++++++---- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/R/get_file.R b/R/get_file.R index dc3c191..f27421d 100644 --- a/R/get_file.R +++ b/R/get_file.R @@ -2,11 +2,10 @@ #' #' @param ds_name Dataset name #' @param file_name File name -#' @param download_file_name Filename on disk after download - default -#' system tempfile +#' @param download_file_name Filename on disk after download - if not specified, +#' preserve original file name from Melodi - default NULL (preserve original +#' file name) #' @param download_directory Download directory - default system tempdir -#' @param keep_original_file_name Keep original file name from Melodi on disk -#' - default FALSE #' #' @return downloaded file name on disk #' @export @@ -20,34 +19,47 @@ get_file <- function( ds_name, file_name, - download_file_name = tempfile(), - download_directory = tempdir(), - keep_original_file_name = FALSE + download_file_name = NULL, + download_directory = tempdir() ) { # Build useful parameters url <- glue::glue( "{getOption('rmelodi.base_url_api')}/file/{ds_name}/{file_name}" ) - path <- file.path(download_directory, download_file_name) + + if (!is.null(download_file_name)) { + path <- file.path(download_directory, download_file_name) + message("Downloaded path : ", path) + } else { + # if no file name specified : tempfile + # and then after download, rename with original file name + path <- tempfile() + message("Temporary downloaded path : ", path) + } # Download file message("Request file : ", url) - message("Downloaded path : ", path) resp <- httr2::request(url) |> httr2::req_user_agent(getOption("rmelodi.req_user_agent")) |> httr2::req_progress() |> httr2::req_perform(path = path) - if (keep_original_file_name) { - # Extract original filename from content-disposition in request + if (is.null(download_file_name)) { + # Extract original filename from content-disposition in request header + # Exemple of content-disposition : + # inline; filename="DS_SRCV_CONFIANCE_2025_CSV_FR.zip" cd <- httr2::resp_headers(resp)[["content-disposition"]] m <- regmatches(cd, regexec('filename\\*?="?([^";]+)"?', cd)) original_file_name <- if (length(m[[1]]) > 1) m[[1]][2] else basename(tmp) + message("Original file name in Melodi : ", original_file_name) # Rename the file on disk with this new name renamed_path <- file.path(download_directory, original_file_name) - file.rename(path, original_file_name) + message("Move file to path : ", renamed_path) + file.copy(path, renamed_path) + message("Remove temporary file : ", path) + unlink(path) return(renamed_path) } else { diff --git a/man/get_file.Rd b/man/get_file.Rd index d70e84e..5ecd3d0 100644 --- a/man/get_file.Rd +++ b/man/get_file.Rd @@ -7,9 +7,8 @@ get_file( ds_name, file_name, - download_file_name = tempfile(), - download_directory = tempdir(), - keep_original_file_name = FALSE + download_file_name = NULL, + download_directory = tempdir() ) } \arguments{ @@ -17,15 +16,11 @@ get_file( \item{file_name}{File name} -\item{download_file_name}{Filename on disk after download - default -system tempfile} +\item{download_file_name}{Filename on disk after download - if not specified, +preserve original file name from Melodi - default NULL (preserve original +file name)} \item{download_directory}{Download directory - default system tempdir} - -\item{keep_original_file_name}{Keep original file name from Melodi on disk -\itemize{ -\item default FALSE -}} } \value{ downloaded file name on disk diff --git a/tests/testthat/test-get_file.R b/tests/testthat/test-get_file.R index fc9da88..a1114a6 100644 --- a/tests/testthat/test-get_file.R +++ b/tests/testthat/test-get_file.R @@ -2,12 +2,17 @@ vcr::use_cassette("get_file_deces", { test_that("get file OK", { expect_no_error( # small file for tests - test <- get_file( + path <- get_file( ds_name = "DS_EC_DECES", file_name = "T1_DECES_JOUR_NAT_FR", download_file_name = "TEST2.XLSX" ) ) + # verification que le nom du fichier correspond à celui demandé + expect_match( + object = path, + regexp = "TEST2.XLSX" + ) }) }) @@ -15,11 +20,16 @@ vcr::use_cassette("get_file_deces_preserve_filename", { test_that("get file OK", { expect_no_error( # small file for tests - test <- get_file( + path <- get_file( ds_name = "DS_EC_DECES", - file_name = "T1_DECES_JOUR_NAT_FR", - keep_original_file_name = TRUE + file_name = "T1_DECES_JOUR_NAT_FR" ) ) + + # verification que le nom du fichier correspond à celui de Melodi + expect_match( + object = path, + regexp = "T1_DECES_JOUR_NAT_FR.xlsx" + ) }) })