blob: 3f750257ef733162894cbb56bbd7e57397182fb4 [file] [log] [blame] [view]
# Data Importer for Parse.com Application Data Export
## Overview
This Python script uses the Usergrid Python SDK to iterate a data export from Parse.com to import it into a Usergrid instance
## Usage
```
usage: parse_data_importer.py [-h] -o ORG -a APP --url URL -f FILE --tmp_dir
TMP_DIR [--client_id CLIENT_ID]
[--client_secret CLIENT_SECRET]
Parse.com Data Importer for Usergrid
optional arguments:
-h, --help show this help message and exit
-o ORG, --org ORG Name of the org to import data into
-a APP, --app APP Name of the app to import data into
--url URL The URL of the Usergrid Instance to import data into
-f FILE, --file FILE Full or relative path of the data file to import
--tmp_dir TMP_DIR Directory where data file will be unzipped
--client_id CLIENT_ID
The Client ID for using OAuth Tokens - necessary if
app is secured
--client_secret CLIENT_SECRET
The Client Secret for using OAuth Tokens - necessary
if app is secured
```
## Features
Support for:
* Roles -> Users
* Roles -> Roles
* Custom entities
* Joins implemented as Graph Edges with the name of 'joins' - in both directions
* Pointers implemented as Graph Edges with the name of 'pointers' - in both directions on an object
No Support for:
* Products - In-App Purchases
* Installations - Will map to 'Devices' at some point - important for Push Notifications perhaps
* Binary Assets (Images) - Work in Progress to complete
## Graph Edges in Usergrid
Usergrid is a Graph Datastore and implements the concept of a Graph Edge in the form of a 'connection'. Pointers, when found on an object, are implemented as follows:
Source Entity --[Edge Name]--> Target Entity
This is represented as a URL as follows: /{source_collection}/{source_entity_id}/pointers/{optional:target_type}. A GET on this URL would return a list of entities which have this graph edge. If a `{target_type}` is specified the results will be limited to entities of that type.
Examples:
* `GET /pets/max/pointers` - get the list of entities of all entity types which have a 'pointers' edge to them from the 'pet' 'max'
* `GET /pets/max/pointers/owners` - get the list of entities of owners which have a 'pointers' edge to them from the 'pet' 'max'
* `GET /pets/max/pointers/owners/jeff` - get the owner 'jeff' which has a 'pointers' edge to them from the 'pet' 'max'
## Pointers
Parse.com has support for pointers from one object to another. For example, for a Pointer from a Pet to an Owner, the object might look as follows:
```
{
"fields" : "...",
"objectId": "A7Hdad8HD3",
"owner": {
"__type": "Pointer",
"className": "Owner",
"objectId": "QC41NHJJlU"
}
}
```
## Joins
Parse.com has support for the concept of a Join as well. At the moment, Joining Users and Roles is supported and an attempt has been made to support arbitrary Joins based on the format of the `_Join:users:_Role.json` file found in my exported data. The from/to types appear to be found in the filename.
An example of the Join file is below:
```
{ "results": [
{
"owningId": "lxhMWzbeXa",
"relatedId": "MCU2Cv9nuk"
}
] }
```
Joins are implemented as Graph Edges with the name of 'joins' - in both directions from the objects where the Join was found