Releases: rstudio/pins-r
pins 1.4.0
Lifecycle changes
-
Changed the function signature of
pin_upload()
to be consistent withpin_write()
i.e. arguments liketags
must be passed by name and not position (#809). -
Started gradual deprecation process for legacy pins functions such as
pin()
(#844).
Other improvements
-
Added example Python code to pin previews for Posit Connect (#806).
-
Fixed a bug in how pins with the same name but different owners on Posit Connect were identified (#808).
-
Fixed a bug in handling folders with duplicate names for Google Drive (#819, @UchidaMizuki).
-
Fixed how previously deleted pin versions are detected (#838, @MichalLauer).
-
Added new board for Databricks Volumes
board_databricks()
(#839, @edgararuiz). -
Switched writing with
type = "parquet"
to use the nanoparquet package (#843).
pins 1.3.0
Breaking changes
- Changed the function signature of
pin_write()
so arguments liketype
andtitle
must be passed by name and not position (#792).
Other improvements
pins 1.2.2
pins 1.2.1
pins 1.2.0
Breaking changes
pin_write()
no longer writes identical pin contents by default, and gains a
force_identical_write
argument for writing even when the pin contents are
identical to the last version (#735).
Other improvements
-
The
print
method for boards no longer callspin_list()
internally (#718). -
board_s3()
now uses pagination for listing and versioning (#719, @mzorko). -
Added
type = "parquet"
to read and write Parquet files (#729). -
Updated error messages and type checking (#731) along with testing strategy (#724).
-
Added new check for whether a new version is the same as the previous version,
as can happen when writing pin versions very quickly (#727). -
Added new
headers
argument forboard_url()
, mostly for authentication, as
well as new board for Connect vanity URLsboard_connect_url()
(#732). -
Fixed bug in
cache_prune()
to correctly find caches forboard_url()
(#734).
pins 1.1.0
Breaking changes
-
Change the function
board_rsconnect()
toboard_connect()
, following
RStudio's rebranding to Posit (#689). -
Changed
type = "csv"
to use R's default value forstringsAsFactors
i.e.
FALSE
(#664). -
Functions for viewing legacy API pins in the RStudio Viewer pane are now
deprecated (when possible) or removed (#679). -
The functions for accessing Kaggle resource as pins are no longer supported.
We recommend you use the Kaggle CLI instead (#698).
Other improvements
-
Added vignettes describing how to manage custom formats and web-based boards (#631, #685, @ijlyttle).
-
Added new board for Google Cloud Storage
board_gcs()
(#695). -
Added new
tags
item to metadata for a pin (#677). -
Improved error message for
pin_versions()
(#657). -
Switched content and user caches for Connect to use environments instead
of files on disk. This means caches will no longer persist between sessions
but will be much less likely to end up in a broken state (#667). -
Added
write_board_manifest()
to write a manifest file_pins.yaml
recording all pins and their versions to the board's root directory.
This function only works for boards that are not read-only
(#661, based on work of @ijlyttle). -
Updated
board_url()
to handle versions recorded via a manifest file
(#681, based on work of @ijlyttle). -
Updated code preview on Posit Connect (#690).
pins 1.0.3
-
The
arrow
package is now suggested, rather than imported (#644, @jonthegeek). -
Fixed how Connect usernames are handled in messages, preview, etc (#643).
-
Increased datetime precision to the second, for
pin_versions()
and related
functions (#642, @tomsing1). -
Pass the dots from
pin_write()
through tos3_upload_file()
and
s3_uploade_yaml()
to support S3 tagging, encryption options, etc for
pins (#648, #652, @fh-mthomson).
pins 1.0.2
-
board_rsconnect()
now correctly finds the created date for pins (#623,
@bjfletcher). -
pin_upload()
now better handles path expansion (#585, @sellorm). -
The
pin_reactive_*()
functions now use the hash (rather than the created
date) for polling (#595, @thomaszwagerman).
pins 1.0.1
-
board_azure()
now allows you to set apath
so that multiple boards can
share the same container (#528, @hongooi73). -
board_deparse()
is more likely to generate runnable code when used
withboard_rsconnect()
(#553). -
legazy_azure()
works once again (#527). -
legacy_github()
works once again (#549). -
pin_meta()
now includes pinname
(#544). -
board_register()
works better when called directly, due to standardisation
of cache paths all computation (#529). -
Drop add-ins since they're not tested or documented (#525)
pins 1.0.0
pins 1.0.0 includes a new, more explicit, API that includes robust support for versioning. In the modern API, you create a board object which is passed to every pin_
function instead of "registering" a board that is later refereed to with a string. This leads to code like this:
board <- board_local()
board %>% pin_write(mtcars, "mtcars")
board %>% pin_read("mtcars")
The legacy API (pin()
, pin_get()
, and board_register()
) will continue to work, but new features will only be implemented with the new API, so we encourage you to switch to the modern API as quickly as possible. Learn more in vignette("pins-update")
.
Modern pin functions
-
pin_read()
andpin_write()
replace most uses ofpin_get()
andpin()
.
pin_write()
has atype
argument that allows you to choose how to serialise
your R objects to disk, allowing you to manage the tradeoffs between speed,
generality, and language inter-op, and ametadata
argument that allows you
to store arbitrary metadata (#430). -
pin_download()
andpin_upload()
are lower-level versions ofpin_read()
andpin_write()
that work with file paths rather than R objects. They
replace the use ofpin()
with a path and eliminate the type-instability
inpin_get()
, which can return either an R object or a character vector of
paths. -
pin_browse()
replacesboard_browse()
, and takes you to a specific pin,
either the original source on the internet, or the cached version on your
local file system (#435). -
pin_delete()
replacespin_remove()
, and can delete multiple pins (#433). -
pin_list()
lists all pins in a board. -
pin_meta()
replacespin_info()
and retrieves pin metadata (#418). -
pin_search()
replacespin_find()
. It is much more limited because the
previous version was based on assumptions that are not true for many boards. -
pin_reactive_read()
andpin_reactive_download()
replacepin_reactive()
. -
pin_exists()
reports whether or not a pin exists. -
pin_version_delete()
allows you to delete a single version.
pin_versions_prune()
(#459) allows you to easily prune old versions keeping
either a specified number of versions, or all versions beneath a certain age.
Modern boards
This version includes the following modern boards:
-
board_azure()
stores data in Azure's blob storage. It is built on top of
AzureStor (#474). -
board_folder()
is a generalised replacement for the legacy local board.
board_folder()
can store data in any directory, making it possible to
share boards using shared network drives or on dropbox or similar. If you
using pins casually and don't want to pick a directory,board_local()
is a variant ofboard_folder()
that stores data in a system data directory. -
board_kaggle_dataset()
andboard_kaggle_competition()
allow you to
download data from Kaggle. The data is automatically cached so that it's
only downloaded when it changes. -
board_ms365()
allow to pin data to MS One Drive and Sharpoint
(#498, @hongooi73). -
board_rsconnect()
shares data on
RStudio connect. This board
supports both modern and legacy APIs, so that you and your colleagues can use
a mixture of pins versions as you transition to pins 1.0.0. Note that the
compatibility is one directional: you canpin_read()
pins created by
pin()
, but you can'tpin_get()
pins created bypin_write()
. -
board_s3()
stores data in Amazon's S3 service. It is built on top of
paws. -
board_url()
lets you create a manual board from a vector of URLs. This is
useful becausepin_donwload()
andpin_read()
are cached, so they only
re-download the data if it has changed since the last time you used it (#409).
This board is a replacement forpin()
's ability to work directly with URLs
The legacy boards will continue to work with the legacy pins API; we will implement modern versions of the remaining legacy boards based on user feedback.
Minor improvements and bug fixes
-
All board objects now have class beginning with
pins_board_
and also
inherit from common superclasspins_board
. -
Pins no longer works with the connections pane. This automatically registered
code tended to be either dangerous (because it's easy to accidentally leak
credentials) or useless (because it relied on variables that the connection
pane doesn't capture). -
Pinned data frames are longer converted to tibbles.
-
The "packages" board is no longer registered by default; if you want to use
this you'll need to register withboard_register("packages")
. It has been
radically simplified so that it will no longer download packages, and it
pin_find()
now searches all packages that you have installed, rather than
a stale snapshot of data in CRAN packages. The CRAN files dataset has
been removed from the package. -
board_browse()
now works with local boards. -
board_rsconnect()
will automatically connect to the current RSC pin board
when run inside RSC itself (assuming you have version 1.8.8 or later) (#396). -
cache_browse()
,cache_info()
, andcache_prune()
provide some basic
tooling around the local pins cache maintained by pins (#438). -
pin_fetch()
has been removed -
option(pins.invisible)
is now defunct and ignored. -
You can no longer switch from a versioned pin to an unversioned pin without
first deleting the pin (#410).