drive_reveal() adds extra information about your Drive files that is not readily available in the default dribble produced by googledrive. Why is this info not always included in the default dribble?

  • You don't always care about it. There is a lot of esoteric information in the drive_resource that has little value for most users.

  • It might be "expensive" to get this information and put it into a usable form. For example, revealing a file's "path", "permissions", or "published" status all require additional API calls.

drive_reveal() can also hoist any property out of the drive_resource list-column, when the property's name is passed as the what argument. The resulting new column is simplified if it is easy to do so, e.g., if the individual elements are all string or logical. If what extracts a date-time, we return POSIXct. Otherwise, you'll get a list-column. If this makes you sad, consider using tidyr::hoist() instead. It is more powerful due to a richer "plucking specification" and its ptype and transform arguments. Another useful function is tidyr::unnest_wider().

Usage,
drive_reveal(file, what = c("path", "permissions", "published", "parent"))

Arguments

file

Something that identifies the file(s) of interest on your Google Drive. Can be a character vector of names/paths, a character vector of file ids or URLs marked with as_id(), or a dribble.

what

Character, describing the type of info you want to add. These values get special handling (more details below):

  • path

  • permissions

  • published

  • parent

You can also request any property in the drive_resource column by name. The request can be in camelCase or snake_case, but the new column name will always be snake_case. Some examples of what:

  • mime_type (or mimeType)

  • trashed

  • starred

  • description

  • version

  • web_view_link (or webViewLink)

  • modified_time (or modifiedTime)

  • created_time (or createdTime)

  • owned_by_me (or ownedByMe)

  • size

  • quota_bytes_used (or quotaBytesUsed)

Value

An object of class dribble, a tibble with one row per file. The additional info requested via whatappears in one (or more) extra columns.

File path

When what = "path" the dribble gains a character column holding each file's path. This can be very slow, so use with caution.

The example path ~/a/b/ illustrates two conventions used in googledrive:

  • The leading ~/ means that the folder a is located in the current user's "My Drive" root folder.

  • The trailing / means that b, located in a, is a folder or a folder shortcut.

Permissions

When what = "permissions" the dribble gains a logical column shared that indicates whether a file is shared and a new list-column permissions_resource containing lists of Permissions resources.

Publishing

When what = "published" the dribble gains a logical column published that indicates whether a file is published and a new list-column revision_resource containing lists of Revisions resources.

Parent

When what = "parent" the dribble gains a character column id_parent that is the file id of this item's parent folder. This information is available in the drive_resource, but can't just be hoisted out:

  • Google Drive used to allow files to have multiple parents, but this is no longer supported and googledrive now assumes this is impossible. However, we have seen (very old) files that still have >1 parent folder. If we see this we message about it and drop all but the first parent.

  • The parents property in drive_resource has an "extra" layer of nesting and needs to be flattened.

If you really want the raw parents property, call drive_reveal(what = "parents").

See also

To learn more about the properties present in the metadata of a Drive file (which is what's in the drive_resource list-column of a dribble), see the API docs:

Examples

# Get a few of your files
files <- drive_find(n_max = 10, trashed = NA)

# the "special" cases that require additional API calls and can be slow
drive_reveal(files, "path")
#> # A dribble: 10 × 4
#>    name                 path                   id                drive_resource 
#>    <chr>                <chr>                  <drv_id>          <list>         
#>  1 name-squatter-rename ~/name-squatter-rename 10d0zK8RjQB78MMc… <named list [3
#>  2 name-squatter-mv     ~/name-squatter-mv     17W1TPu0C0KDUel4… <named list [3
#>  3 name-squatter-upload ~/name-squatter-upload 1rEGaCGxZxkphNY9… <named list [3
#>  4 name-squatter-rename ~/name-squatter-rename 1XueHVNUkCkFQ2X9… <named list [3
#>  5 name-squatter-mv     ~/name-squatter-mv     1p5Vr26vHK86e26Z… <named list [3
#>  6 name-squatter-upload ~/name-squatter-upload 1YKu9R-8TZP7W0wD… <named list [3
#>  7 name-squatter-rename ~/name-squatter-rename 1PKQRDdGePbv3Dlr… <named list [3
#>  8 name-squatter-mv     ~/name-squatter-mv     1jpl1mlKsjB2BXvf… <named list [3
#>  9 name-squatter-upload ~/name-squatter-upload 17sVOMK6VVAM1Yrx… <named list [3
#> 10 name-squatter-rename ~/name-squatter-rename 1aarnobNyvHba-Lz… <named list [3
drive_reveal(files, "permissions")
#> # A dribble: 10 × 5
#>    name                 shared id              drive_resource  permissions_reso…
#>    <chr>                <lgl>  <drv_id>        <list>          <list>           
#>  1 name-squatter-rename FALSE  10d0zK8RjQB78M… <named list [3<named list [2]> 
#>  2 name-squatter-mv     FALSE  17W1TPu0C0KDUe… <named list [3<named list [2]> 
#>  3 name-squatter-upload FALSE  1rEGaCGxZxkphN… <named list [3<named list [2]> 
#>  4 name-squatter-rename FALSE  1XueHVNUkCkFQ2… <named list [3<named list [2]> 
#>  5 name-squatter-mv     FALSE  1p5Vr26vHK86e2… <named list [3<named list [2]> 
#>  6 name-squatter-upload FALSE  1YKu9R-8TZP7W0… <named list [3<named list [2]> 
#>  7 name-squatter-rename FALSE  1PKQRDdGePbv3D… <named list [3<named list [2]> 
#>  8 name-squatter-mv     FALSE  1jpl1mlKsjB2BX… <named list [3<named list [2]> 
#>  9 name-squatter-upload FALSE  17sVOMK6VVAM1Y… <named list [3<named list [2]> 
#> 10 name-squatter-rename FALSE  1aarnobNyvHba-… <named list [3<named list [2]> 
drive_reveal(files, "published")
#> # A dribble: 10 × 5
#>    name                 published id            drive_resource  revision_resour…
#>    <chr>                <lgl>     <drv_id>      <list>          <list>          
#>  1 name-squatter-rename FALSE     10d0zK8RjQB7… <named list [3<named list [9]>
#>  2 name-squatter-mv     FALSE     17W1TPu0C0KD… <named list [3<named list [9]>
#>  3 name-squatter-upload FALSE     1rEGaCGxZxkp… <named list [3<named list [9]>
#>  4 name-squatter-rename FALSE     1XueHVNUkCkF… <named list [3<named list [9]>
#>  5 name-squatter-mv     FALSE     1p5Vr26vHK86… <named list [3<named list [9]>
#>  6 name-squatter-upload FALSE     1YKu9R-8TZP7… <named list [3<named list [9]>
#>  7 name-squatter-rename FALSE     1PKQRDdGePbv… <named list [3<named list [9]>
#>  8 name-squatter-mv     FALSE     1jpl1mlKsjB2… <named list [3<named list [9]>
#>  9 name-squatter-upload FALSE     17sVOMK6VVAM… <named list [3<named list [9]>
#> 10 name-squatter-rename FALSE     1aarnobNyvHb… <named list [3<named list [9]>

# a "special" case of digging info out of `drive_resource`, then processing
# a bit
drive_reveal(files, "parent")
#> # A dribble: 10 × 4
#>    name                 id_parent           id                   drive_resource 
#>    <chr>                <drv_id>            <drv_id>             <list>         
#>  1 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 10d0zK8RjQB78MMcrAR… <named list [3
#>  2 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 17W1TPu0C0KDUel420H… <named list [3
#>  3 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1rEGaCGxZxkphNY9J6X… <named list [3
#>  4 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1XueHVNUkCkFQ2X9q9x… <named list [3
#>  5 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 1p5Vr26vHK86e26Zj3J… <named list [3
#>  6 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1YKu9R-8TZP7W0wDOTz… <named list [3
#>  7 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1PKQRDdGePbv3Dlrnqc… <named list [3
#>  8 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 1jpl1mlKsjB2BXvfAK1… <named list [3
#>  9 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 17sVOMK6VVAM1YrxBFa… <named list [3
#> 10 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1aarnobNyvHba-LzAQh… <named list [3

# the "simple" cases of digging info out of `drive_resource`
drive_reveal(files, "trashed")
#> # A dribble: 10 × 4
#>    name                 trashed id                                drive_resource
#>    <chr>                <lgl>   <drv_id>                          <list>        
#>  1 name-squatter-rename TRUE    10d0zK8RjQB78MMcrARPPSPdtjwOTjLQ3 <named list [
#>  2 name-squatter-mv     TRUE    17W1TPu0C0KDUel420HeH6wcUJJsnKpcd <named list [
#>  3 name-squatter-upload TRUE    1rEGaCGxZxkphNY9J6XUaSQfPNIu2fZVh <named list [
#>  4 name-squatter-rename TRUE    1XueHVNUkCkFQ2X9q9xyrCscJPs2-THYL <named list [
#>  5 name-squatter-mv     TRUE    1p5Vr26vHK86e26Zj3J8zFrS6IbxUSbRW <named list [
#>  6 name-squatter-upload TRUE    1YKu9R-8TZP7W0wDOTzJHi1BJZsdS_fWf <named list [
#>  7 name-squatter-rename TRUE    1PKQRDdGePbv3DlrnqcXNW5CY0lYdFQvJ <named list [
#>  8 name-squatter-mv     TRUE    1jpl1mlKsjB2BXvfAK1G05byyVUtLpOWD <named list [
#>  9 name-squatter-upload TRUE    17sVOMK6VVAM1YrxBFa7m08AhtyusfOOU <named list [
#> 10 name-squatter-rename TRUE    1aarnobNyvHba-LzAQh6vLA8ejS5oRoug <named list [
drive_reveal(files, "mime_type")
#> # A dribble: 10 × 4
#>    name                 mime_type                id              drive_resource 
#>    <chr>                <chr>                    <drv_id>        <list>         
#>  1 name-squatter-rename application/octet-stream 10d0zK8RjQB78M… <named list [3
#>  2 name-squatter-mv     application/octet-stream 17W1TPu0C0KDUe… <named list [3
#>  3 name-squatter-upload application/octet-stream 1rEGaCGxZxkphN… <named list [3
#>  4 name-squatter-rename application/octet-stream 1XueHVNUkCkFQ2… <named list [3
#>  5 name-squatter-mv     application/octet-stream 1p5Vr26vHK86e2… <named list [3
#>  6 name-squatter-upload application/octet-stream 1YKu9R-8TZP7W0… <named list [3
#>  7 name-squatter-rename application/octet-stream 1PKQRDdGePbv3D… <named list [3
#>  8 name-squatter-mv     application/octet-stream 1jpl1mlKsjB2BX… <named list [3
#>  9 name-squatter-upload application/octet-stream 17sVOMK6VVAM1Y… <named list [3
#> 10 name-squatter-rename application/octet-stream 1aarnobNyvHba-… <named list [3
drive_reveal(files, "starred")
#> # A dribble: 10 × 4
#>    name                 starred id                                drive_resource
#>    <chr>                <lgl>   <drv_id>                          <list>        
#>  1 name-squatter-rename FALSE   10d0zK8RjQB78MMcrARPPSPdtjwOTjLQ3 <named list [
#>  2 name-squatter-mv     FALSE   17W1TPu0C0KDUel420HeH6wcUJJsnKpcd <named list [
#>  3 name-squatter-upload FALSE   1rEGaCGxZxkphNY9J6XUaSQfPNIu2fZVh <named list [
#>  4 name-squatter-rename FALSE   1XueHVNUkCkFQ2X9q9xyrCscJPs2-THYL <named list [
#>  5 name-squatter-mv     FALSE   1p5Vr26vHK86e26Zj3J8zFrS6IbxUSbRW <named list [
#>  6 name-squatter-upload FALSE   1YKu9R-8TZP7W0wDOTzJHi1BJZsdS_fWf <named list [
#>  7 name-squatter-rename FALSE   1PKQRDdGePbv3DlrnqcXNW5CY0lYdFQvJ <named list [
#>  8 name-squatter-mv     FALSE   1jpl1mlKsjB2BXvfAK1G05byyVUtLpOWD <named list [
#>  9 name-squatter-upload FALSE   17sVOMK6VVAM1YrxBFa7m08AhtyusfOOU <named list [
#> 10 name-squatter-rename FALSE   1aarnobNyvHba-LzAQh6vLA8ejS5oRoug <named list [
drive_reveal(files, "description")
#> # A dribble: 10 × 4
#>    name                 description id                          drive_resource  
#>    <chr>                <list>      <drv_id>                    <list>          
#>  1 name-squatter-rename <NULL>      10d0zK8RjQB78MMcrARPPSPdtj… <named list [39
#>  2 name-squatter-mv     <NULL>      17W1TPu0C0KDUel420HeH6wcUJ… <named list [39
#>  3 name-squatter-upload <NULL>      1rEGaCGxZxkphNY9J6XUaSQfPN… <named list [39
#>  4 name-squatter-rename <NULL>      1XueHVNUkCkFQ2X9q9xyrCscJP… <named list [39
#>  5 name-squatter-mv     <NULL>      1p5Vr26vHK86e26Zj3J8zFrS6I… <named list [39
#>  6 name-squatter-upload <NULL>      1YKu9R-8TZP7W0wDOTzJHi1BJZ… <named list [39
#>  7 name-squatter-rename <NULL>      1PKQRDdGePbv3DlrnqcXNW5CY0… <named list [39
#>  8 name-squatter-mv     <NULL>      1jpl1mlKsjB2BXvfAK1G05byyV… <named list [39
#>  9 name-squatter-upload <NULL>      17sVOMK6VVAM1YrxBFa7m08Aht… <named list [39
#> 10 name-squatter-rename <NULL>      1aarnobNyvHba-LzAQh6vLA8ej… <named list [39
drive_reveal(files, "version")
#> # A dribble: 10 × 4
#>    name                 version id                                drive_resource
#>    <chr>                <chr>   <drv_id>                          <list>        
#>  1 name-squatter-rename 2       10d0zK8RjQB78MMcrARPPSPdtjwOTjLQ3 <named list [
#>  2 name-squatter-mv     2       17W1TPu0C0KDUel420HeH6wcUJJsnKpcd <named list [
#>  3 name-squatter-upload 2       1rEGaCGxZxkphNY9J6XUaSQfPNIu2fZVh <named list [
#>  4 name-squatter-rename 2       1XueHVNUkCkFQ2X9q9xyrCscJPs2-THYL <named list [
#>  5 name-squatter-mv     2       1p5Vr26vHK86e26Zj3J8zFrS6IbxUSbRW <named list [
#>  6 name-squatter-upload 2       1YKu9R-8TZP7W0wDOTzJHi1BJZsdS_fWf <named list [
#>  7 name-squatter-rename 2       1PKQRDdGePbv3DlrnqcXNW5CY0lYdFQvJ <named list [
#>  8 name-squatter-mv     2       1jpl1mlKsjB2BXvfAK1G05byyVUtLpOWD <named list [
#>  9 name-squatter-upload 2       17sVOMK6VVAM1YrxBFa7m08AhtyusfOOU <named list [
#> 10 name-squatter-rename 2       1aarnobNyvHba-LzAQh6vLA8ejS5oRoug <named list [
drive_reveal(files, "web_view_link")
#> # A dribble: 10 × 4
#>    name                 web_view_link                id           drive_resource
#>    <chr>                <chr>                        <drv_id>     <list>        
#>  1 name-squatter-rename https://drive.google.com/fi… 10d0zK8RjQB… <named list [
#>  2 name-squatter-mv     https://drive.google.com/fi… 17W1TPu0C0K… <named list [
#>  3 name-squatter-upload https://drive.google.com/fi… 1rEGaCGxZxk… <named list [
#>  4 name-squatter-rename https://drive.google.com/fi… 1XueHVNUkCk… <named list [
#>  5 name-squatter-mv     https://drive.google.com/fi… 1p5Vr26vHK8… <named list [
#>  6 name-squatter-upload https://drive.google.com/fi… 1YKu9R-8TZP… <named list [
#>  7 name-squatter-rename https://drive.google.com/fi… 1PKQRDdGePb… <named list [
#>  8 name-squatter-mv     https://drive.google.com/fi… 1jpl1mlKsjB… <named list [
#>  9 name-squatter-upload https://drive.google.com/fi… 17sVOMK6VVA… <named list [
#> 10 name-squatter-rename https://drive.google.com/fi… 1aarnobNyvH… <named list [
drive_reveal(files, "modified_time")
#> # A dribble: 10 × 4
#>    name                 modified_time       id                   drive_resource 
#>    <chr>                <dttm>              <drv_id>             <list>         
#>  1 name-squatter-rename 2021-12-01 13:49:18 10d0zK8RjQB78MMcrAR… <named list [3
#>  2 name-squatter-mv     2021-12-01 13:49:04 17W1TPu0C0KDUel420H… <named list [3
#>  3 name-squatter-upload 2021-11-29 13:47:00 1rEGaCGxZxkphNY9J6X… <named list [3
#>  4 name-squatter-rename 2021-11-29 13:46:22 1XueHVNUkCkFQ2X9q9x… <named list [3
#>  5 name-squatter-mv     2021-11-29 13:46:04 1p5Vr26vHK86e26Zj3J… <named list [3
#>  6 name-squatter-upload 2021-11-28 13:45:05 1YKu9R-8TZP7W0wDOTz… <named list [3
#>  7 name-squatter-rename 2021-11-28 13:44:32 1PKQRDdGePbv3Dlrnqc… <named list [3
#>  8 name-squatter-mv     2021-11-28 13:44:17 1jpl1mlKsjB2BXvfAK1… <named list [3
#>  9 name-squatter-upload 2021-11-27 13:44:53 17sVOMK6VVAM1YrxBFa… <named list [3
#> 10 name-squatter-rename 2021-11-27 13:44:21 1aarnobNyvHba-LzAQh… <named list [3
drive_reveal(files, "created_time")
#> # A dribble: 10 × 4
#>    name                 created_time        id                   drive_resource 
#>    <chr>                <dttm>              <drv_id>             <list>         
#>  1 name-squatter-rename 2021-12-01 13:49:18 10d0zK8RjQB78MMcrAR… <named list [3
#>  2 name-squatter-mv     2021-12-01 13:49:04 17W1TPu0C0KDUel420H… <named list [3
#>  3 name-squatter-upload 2021-11-29 13:47:00 1rEGaCGxZxkphNY9J6X… <named list [3
#>  4 name-squatter-rename 2021-11-29 13:46:22 1XueHVNUkCkFQ2X9q9x… <named list [3
#>  5 name-squatter-mv     2021-11-29 13:46:04 1p5Vr26vHK86e26Zj3J… <named list [3
#>  6 name-squatter-upload 2021-11-28 13:45:05 1YKu9R-8TZP7W0wDOTz… <named list [3
#>  7 name-squatter-rename 2021-11-28 13:44:32 1PKQRDdGePbv3Dlrnqc… <named list [3
#>  8 name-squatter-mv     2021-11-28 13:44:17 1jpl1mlKsjB2BXvfAK1… <named list [3
#>  9 name-squatter-upload 2021-11-27 13:44:53 17sVOMK6VVAM1YrxBFa… <named list [3
#> 10 name-squatter-rename 2021-11-27 13:44:21 1aarnobNyvHba-LzAQh… <named list [3
drive_reveal(files, "owned_by_me")
#> # A dribble: 10 × 4
#>    name                 owned_by_me id                          drive_resource  
#>    <chr>                <lgl>       <drv_id>                    <list>          
#>  1 name-squatter-rename TRUE        10d0zK8RjQB78MMcrARPPSPdtj… <named list [39
#>  2 name-squatter-mv     TRUE        17W1TPu0C0KDUel420HeH6wcUJ… <named list [39
#>  3 name-squatter-upload TRUE        1rEGaCGxZxkphNY9J6XUaSQfPN… <named list [39
#>  4 name-squatter-rename TRUE        1XueHVNUkCkFQ2X9q9xyrCscJP… <named list [39
#>  5 name-squatter-mv     TRUE        1p5Vr26vHK86e26Zj3J8zFrS6I… <named list [39
#>  6 name-squatter-upload TRUE        1YKu9R-8TZP7W0wDOTzJHi1BJZ… <named list [39
#>  7 name-squatter-rename TRUE        1PKQRDdGePbv3DlrnqcXNW5CY0… <named list [39
#>  8 name-squatter-mv     TRUE        1jpl1mlKsjB2BXvfAK1G05byyV… <named list [39
#>  9 name-squatter-upload TRUE        17sVOMK6VVAM1YrxBFa7m08Aht… <named list [39
#> 10 name-squatter-rename TRUE        1aarnobNyvHba-LzAQh6vLA8ej… <named list [39
drive_reveal(files, "size")
#> # A dribble: 10 × 4
#>    name                 size  id                                drive_resource  
#>    <chr>                <chr> <drv_id>                          <list>          
#>  1 name-squatter-rename 0     10d0zK8RjQB78MMcrARPPSPdtjwOTjLQ3 <named list [39
#>  2 name-squatter-mv     0     17W1TPu0C0KDUel420HeH6wcUJJsnKpcd <named list [39
#>  3 name-squatter-upload 0     1rEGaCGxZxkphNY9J6XUaSQfPNIu2fZVh <named list [39
#>  4 name-squatter-rename 0     1XueHVNUkCkFQ2X9q9xyrCscJPs2-THYL <named list [39
#>  5 name-squatter-mv     0     1p5Vr26vHK86e26Zj3J8zFrS6IbxUSbRW <named list [39
#>  6 name-squatter-upload 0     1YKu9R-8TZP7W0wDOTzJHi1BJZsdS_fWf <named list [39
#>  7 name-squatter-rename 0     1PKQRDdGePbv3DlrnqcXNW5CY0lYdFQvJ <named list [39
#>  8 name-squatter-mv     0     1jpl1mlKsjB2BXvfAK1G05byyVUtLpOWD <named list [39
#>  9 name-squatter-upload 0     17sVOMK6VVAM1YrxBFa7m08AhtyusfOOU <named list [39
#> 10 name-squatter-rename 0     1aarnobNyvHba-LzAQh6vLA8ejS5oRoug <named list [39
drive_reveal(files, "quota_bytes_used")
#> # A dribble: 10 × 4
#>    name                 quota_bytes_used id                      drive_resource 
#>    <chr>                <chr>            <drv_id>                <list>         
#>  1 name-squatter-rename 0                10d0zK8RjQB78MMcrARPPS… <named list [3
#>  2 name-squatter-mv     0                17W1TPu0C0KDUel420HeH6… <named list [3
#>  3 name-squatter-upload 0                1rEGaCGxZxkphNY9J6XUaS… <named list [3
#>  4 name-squatter-rename 0                1XueHVNUkCkFQ2X9q9xyrC… <named list [3
#>  5 name-squatter-mv     0                1p5Vr26vHK86e26Zj3J8zF… <named list [3
#>  6 name-squatter-upload 0                1YKu9R-8TZP7W0wDOTzJHi… <named list [3
#>  7 name-squatter-rename 0                1PKQRDdGePbv3DlrnqcXNW… <named list [3
#>  8 name-squatter-mv     0                1jpl1mlKsjB2BXvfAK1G05… <named list [3
#>  9 name-squatter-upload 0                17sVOMK6VVAM1YrxBFa7m0… <named list [3
#> 10 name-squatter-rename 0                1aarnobNyvHba-LzAQh6vL… <named list [3

# 'root' is a special file id that represents your My Drive root folder
drive_get(id = "root") %>%
  drive_reveal("path")
#> # A dribble: 1 × 4
#>   name     path  id                  drive_resource   
#>   <chr>    <chr> <drv_id>            <list>           
#> 1 My Drive ~/    0AO_RMaBzcP63Uk9PVA <named list [31]>