Skip to content

Releases: rstudio/pins-r

pins 1.4.0

07 Oct 17:45
Compare
Choose a tag to compare

Lifecycle changes

  • Changed the function signature of pin_upload() to be consistent with pin_write() i.e. arguments like tags 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

09 Nov 17:49
Compare
Choose a tag to compare

Breaking changes

  • Changed the function signature of pin_write() so arguments like type and title must be passed by name and not position (#792).

Other improvements

  • Removed content and user caches for Connect altogether. Now, we look up
    usernames and content on the Connect server every time (#793).

  • Added new urls item to metadata for a pin (#795).

pins 1.2.2

09 Sep 22:17
Compare
Choose a tag to compare
  • Fixed how dots are checked in pin_write() to make user-facing messages more
    clear (#770).

  • Improved documentation about Connect caches (#771) and deleting pin versions (#773).

  • Added board_deparse for board_url() (#774).

  • Fixed how board_gdrive() handles dribble objects (#780, @gorkang and #782).

pins 1.2.1

16 Aug 16:05
Compare
Choose a tag to compare
  • New environment variable PINS_CACHE_DIR controls the location of the
    default cache path (#748).

  • Added new board for Google Drive board_gdrive() (#749).

  • Updated test for new arrow release (#764).

pins 1.2.0

18 May 14:18
Compare
Choose a tag to compare

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 calls pin_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 for board_url(), mostly for authentication, as
    well as new board for Connect vanity URLs board_connect_url() (#732).

  • Fixed bug in cache_prune() to correctly find caches for board_url() (#734).

pins 1.1.0

21 Jan 18:24
Compare
Choose a tag to compare

Breaking changes

  • Change the function board_rsconnect() to board_connect(), following
    RStudio's rebranding to Posit (#689).

  • Changed type = "csv" to use R's default value for stringsAsFactors 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

24 Sep 19:05
Compare
Choose a tag to compare
  • 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 to s3_upload_file() and
    s3_uploade_yaml() to support S3 tagging, encryption options, etc for
    pins (#648, #652, @fh-mthomson).

pins 1.0.2

23 Aug 22:00
Compare
Choose a tag to compare
  • 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

15 Dec 13:08
Compare
Choose a tag to compare
  • board_azure() now allows you to set a path so that multiple boards can
    share the same container (#528, @hongooi73).

  • board_deparse() is more likely to generate runnable code when used
    with board_rsconnect() (#553).

  • legazy_azure() works once again (#527).

  • legacy_github() works once again (#549).

  • pin_meta() now includes pin name (#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

04 Oct 11:45
Compare
Choose a tag to compare

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() and pin_write() replace most uses of pin_get() and pin().
    pin_write() has a type 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 a metadata argument that allows you
    to store arbitrary metadata (#430).

  • pin_download() and pin_upload() are lower-level versions of pin_read()
    and pin_write() that work with file paths rather than R objects. They
    replace the use of pin() with a path and eliminate the type-instability
    in pin_get(), which can return either an R object or a character vector of
    paths.

  • pin_browse() replaces board_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() replaces pin_remove(), and can delete multiple pins (#433).

  • pin_list() lists all pins in a board.

  • pin_meta() replaces pin_info() and retrieves pin metadata (#418).

  • pin_search() replaces pin_find(). It is much more limited because the
    previous version was based on assumptions that are not true for many boards.

  • pin_reactive_read() and pin_reactive_download() replace pin_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 of board_folder() that stores data in a system data directory.

  • board_kaggle_dataset() and board_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 can pin_read() pins created by
    pin(), but you can't pin_get() pins created by pin_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 because pin_donwload() and pin_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 for pin()'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 superclass pins_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 with board_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(), and cache_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).