This assignment focuses on your ability to implement MongoDB Ruby Driver commands within the context of a Rails application and scaffold. To do this -- you will implement an ActiveModel model class using MongoDB that should nearly immediately work with a generated controller and view. This will not only test your knowledge of the specific MongoDB Ruby Driver commands but will also give you insight into the functionality provided by the Mongoid ORM you will use later in the course and how you can drop down to the raw MongoDB Driver API if the need ever arises in a full application. You will be given much of the Rails portion of the assignment in detailed hints. You must fill in the missing MongoDB Ruby Driver portions based on the lectures and other course materials.
The overall goal of the assignment is to:
will_paginate
pagination of dataThe functional goal of the assignment is to:
racers
collection and use a a class called Racer to encapsulate access to MongoDB and the racers
collection.Racer
class as a Rails model class to encapsulate the properties tracked for a racer within MongoDB.This will include the following model commands
Create a scaffold for the Racer
model class to view and modify racer information in the database collection.
Add pagination support to the Racer
index page.
Create a new Rails application called raceday
.
Download and extract the starter set of boostrap files for this assignment.
|-- Gemfile
|-- race_results.json
`-- spec
|-- start_spec.rb
|-- mongoid_spec.rb
|-- connection_spec.rb
|-- crud._specrb
|-- model_spec.rb
|-- scaffold_spec.rb
`-- paginate_spec.rb
Overwrite your existing Gemfile with the Gemfile from the bootstrap fileset. They should be nearly identical, but this is done to make sure the gems and versions you use in your solution can be processed by the automated Grader when you submit. Any submission should be tested with this version of the file.
NOTE the Gemfile includes the following added to support testing:
group :test do
gem 'rspec-rails', '~> 3.0'
gem 'capybara'
end
as well as a new definition for the following items:
tzinfo-data
gem conditionally included on Windows platformsmongoid
gem added to support getting connections to MongoDB serverwill_paginate
added for implementing paging
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'mongoid', '~> 5.0.0'
gem 'will_paginate', '~> 3.0.6'
Add the spec/*.rb
files provided with the bootstrap fileset to the corresponding spec/
directory within your raceday
application. These files contain tests that will help determine whether you have completed the assignment.
Run the bundle
command to make sure all gems are available.
$ bundle
Run the rspec test(s) to receive feedback. rspec
must be run from the root directory of your application. There are several test files provided for this assignment. Many of those files are designed to test your code at specific points as you proceed through the technical requirements of this assignment. As such, many tests will fail if executed after additional technical requirements have been completed. Initially, majority of tests will (obviously) fail until you complete the requirements necessary for them to pass.
$ rspec
...
(N) examples, 1 failure, (N) pending
To focus test feedback on a specific step of the requirements, add the specific file (path included) with the tests along with "-e rq##" to the rspec command line to only evaluate a specific requirement. Pad all step numbers to two digits.
$ rspec spec/connection_spec.rb -e rq01
...
(N) example, 0 failures
Start your MongoDB mongod
process.
Implement your solution to the technical requirements and use the rspec tests to help verify your completed solution.
Submit your Rails app solution for grading.
In this section you will complete the installation of Mongoid into your application by generating a configuration file and wiring that configuration file into the Rails application so you can get connections to MongoDB. We will only use Mongoid for connections at this point. All commands to MongoDB will be through the MongoDB Ruby Driver.
Start with the raceday
application created in the Getting Started
section.
Generate a Mongoid configuration file and update to reference the same MongoDB server instance and database as in the previous assignment.
$ rails g mongoid:config
The generated defaults should be correct for what we will use. They may be different from what you used in a previous assignment, but we are purposely going to keep them in a separate database from what was used in the other assignment.
$ cat config/mongoid.yml | egrep -v '^$|#'
development:
clients:
default:
database: raceday_development
hosts:
- localhost:27017
...
test:
clients:
default:
database: raceday_test
hosts:
- localhost:27017
...
Add some Mongoid configuration to config/application.rb
. This is used by stand-alone programs like "rails console" to be able to load the Mongoid environment with fewer steps. This also configures which ORM your scaffold commands use by default. Adding the mongoid gem had the impact of making Mongoid the default ORM. The lines below show how we can set it back to ether ActiveRecord or Mongoid and how to use the --orm
flag to identify the mapping on a per-model type basis. However, we will not be generating any ActiveRecord or Mongoid model classes as a part of this assignment. We will only be using Mongoid during this assignment to get connections to MongoDB and we might as well show a complete configuration while we are here.
module Raceday
class Application < Rails::Application
...
#bootstraps mongoid within applications -- like rails console
Mongoid.load!('./config/mongoid.yml')
#which default ORM are we using with scaffold
#add --orm mongoid, or active_record
# to rails generate cmd line to be specific
#config.generators {|g| g.orm :active_record}
config.generators {|g| g.orm :mongoid}
...
Start the web server.
$ rails s
$ rspec spec/mongoid_spec.rb
In this section you create a model class and add some convenience methods to get a connection to the MongoDB server and document collection.
Racer
in the app/models
directory. This class must have:
mongo_client
that returns a MongoDB client configured to communicate to the default database specified in the config/mongoid.yml
file.collection
that returns the racers
MongoDB collection holding the Racer
documents.Hint: You can use code like the following to obtain a connection from Mongoid.
$ rails c
> Mongoid::Clients.default
=> #<Mongo::Client:0x46050120 cluster=localhost:27017>
Use the rails console
to demonstrate your new methods.
> Racer.mongo_client.database.name
=> "raceday_development"
> Racer.collection.name
=> "racers"
Note that the Rails convention is to have CamelCase classnames and snake_case filenames. Some platforms will allow you to use CamelCase, but the grader cannot recognize any class that does not use snake_case.
$ rspec spec/connection_spec.rb -e rq01
Use the rails console
and the Racer
class and methods added above to ingest data into the collection. The ; nil
is shown below is to keep the default logger level of the rails console from printing the evaluation of the large collection results after each command.
$ rails c
> file_path="./race_results.json"
> file=File.read(file_path); nil
> hash=JSON.parse(file); nil
> racers=Racer.collection
> racers.insert_many(hash); nil
You should end up with 1000 racers in your collection.
> Racer.collection.count
=> 1000
$ rspec spec/connection_spec.rb -e rq02
In this section you will apply your knowledge of MongoDB Ruby Driver commands to implement CRUD methods required by the Rails scaffold. We don't need the scaffold yet -- we can implement and test quite a lot with the "rails console" and unit tests.
Racer
class called all
. This method must:
Hint:
def self.all(prototype={...}, sort={...}, skip=0, limit=nil)
...
end
Use the Rails console to verify and explore your result. Use the reload!
command after making code changes.
The following command shows there are 1000 records in the database.
> reload!
> pp Racer.all.count; nil
1000
The following command shows that the parameters to the all
method are optional.
> pp Racer.all.first; nil
{"_id"=>BSON::ObjectId('563daabbe301d0978b000000'),
"number"=>0,
"first_name"=>"SHAUN",
"last_name"=>"JOHNSON",
"gender"=>"M",
"group"=>"15 to 19",
"secs"=>1464}
The following command shows we have the power to find matching documents thru a prototype and control the sorting and paging.
> pp Racer.all({group:"50 to 59", gender:"F"}, {last_name:-1},0,1).to_a; nil
[{"_id"=>BSON::ObjectId('563daabbe301d0978b0000a6'),
"number"=>166,
"first_name"=>"MONA",
"last_name"=>"WATSON",
"gender"=>"F",
"group"=>"50 to 59",
"secs"=>2321}]
$ rspec spec/crud_spec.rb -e rq01
Racer
class that allow one to set/get each of the following properties:
Hint:
class Racer
attr_accessor :id, :number, :first_name, :last_name, :gender, :group, :secs
Note that id
is a special primary key property within ActiveModel and must exist to work correctly with Rails scaffold. We will map that property to the string value of the MongoDB _id
property. The _id
properties ingested are in BSON::ObjectId
form and can be converted to/from string using:
@id=doc[:_id].to_s
:_id=>BSON::ObjectId.from_string(@id))
Note that the BSON::ObjectId is a globally unique value and has a specific format and length. The from_string
method will throw an exception if passed a string with an incorrect format/length. If we wanted to use an arbitrary, unique value -- we would not use the BSON::ObjectId type for our MongoDB primary key.
$ rspec spec/crud_spec.rb -e rq02
racers
document. It must:
id
property, this method must test whether the hash is coming from a web page [:id]
or from a MongoDB query [:_id]
and assign the value to whichever is non-nil.Hint:
def initialize(params={})
@id=params[:_id].nil? ? params[:id] : params[:_id].to_s
@number=params[:number].to_i
@first_name=params[:first_name]
@last_name=params[:last_name]
@gender=params[:gender]
@group=params[:group]
@secs=params[:secs].to_i
end
$ rspec spec/crud_spec.rb -e rq03
Racer
class called find
. This method must:
id
parameter that is either a string or BSON::ObjectId Note: it must be able to handle either format._id
racer
document represented by that id
Hint:
def self.find id
result=collection...
return result.nil? ? nil : Racer.new(result)
end
Use the rails console
to test and explore your changes. Note that return type is now an instance of a Racer
class or nil if not found. The last example has a valid BSON string but an unknown value.
> reload!
> Racer.all.projection(first_name:1, last_name:1).first
=> {"_id"=>BSON::ObjectId('563daabbe301d0978b000000'), "first_name"=>"SHAUN", "last_name"=>"JOHNSON"}
> Racer.find "563daabbe301d0978b000000"
=> #<Racer:0x000000072c0680 @id="563daabbe301d0978b000000", @number=0, @first_name="SHAUN", @last_name="JOHNSON", ...
> Racer.find "563daabbe301d0978b000999"
=> nil
$ rspec spec/crud_spec.rb -e rq04
Racer
class called save
. This method must:
Racer
instance into the database_id
from the result and assign the to_s value of the _id
to the instance attribute @id
Hint:
def save
result=self.class.collection....
@id=result... #store just the string form of the _id
end
Use the rails console
to test and explore your changes.
> racer=Racer.new(number:1001, first_name:"cat", last_name:"inhat", group:"masters", secs:1000)
=> #<Racer:0x00000007305a78 @id=nil, @number=1001, @first_name="cat", @last_name="inhat", @gender=nil, @group="masters", @secs=1000>
> racer.save
=> "563e24c2e301d0978b0003ea"
> Racer.find "563e24c2e301d0978b0003ea"
=> #<Racer:0x0000000731ab08 @id="563e24c2e301d0978b0003ea", @number=1001, @first_name="cat", @last_name="inhat", @gender=nil, @group="masters", @secs=1000>
$ rspec spec/crud_spec.rb -e rq05
Racer
class called update
. This method must:
@id
instance variable in the databaseHint:
def update(params)
@number=params[:number].to_i
@first_name=params[:first_name]
@last_name=params[:last_name]
@secs=params[:secs].to_i
...
params.slice!(:number, :first_name, :last_name, :gender, :group, :secs)
self.class.collection
...
end
Use the rails console
to test and explore your changes.
> doc=Racer.all({first_name:"cat",last_name:"inhat"}).first
> racer=Racer.find doc[:_id].to_s
> racer.first_name
=> "cat"
> racer.update(first_name:"thing", last_name:"one", group:"15 to 19")
> pp Racer.all(:_id=>doc[:_id]).first
{"_id"=>BSON::ObjectId('5663d512e301d0a256000fa3'),
"first_name"=>"thing",
"last_name"=>"one",
"group"=>"15 to 19"}
$ rspec spec/crud_spec.rb -e rq06
Racer
class called destroy
. This method must:
@number
instance variable in the databaseHint:
def destroy
self.class.collection
....
end
Use the rails console
to test and explore your changes.
> Racer.find('5663d512e301d0a256000fa3').first_name
=> "thing"
> Racer.find('5663d512e301d0a256000fa3').destroy
=> #<Mongo::Operation::Result:57331320 documents=[{"ok"=>1, "n"=>1}]>
> Racer.find('5663d512e301d0a256000fa3')
=> nil
$ rspec spec/crud_spec.rb -e rq07
In this section we will transform the Racer
class into a Racer
model class by adding a few constructs to make the class look like an ActiveModel instance used by the Rails scaffold.
Add the ActiveModel::Model
mixin to the Racer
class.
class Racer
include ActiveModel::Model
$ rspec spec/model_spec.rb -e rq01
Racer
class called persisted?
. This method must:
nil
. Remember -- we assigned @id during save when we obtained the generated primary key.Hint:
def persisted?
<EMAIL_ADDRESS>end
Use the rails console
to test and explore your changes. Remember that most of the methods we added return MongoDB hashes and persisted?
is an instance method of Racer
. You can only call this method on objects of type Racer
.
> id=Racer.all({first_name:"thing", last_name:"one"}).first[:_id].to_s
=> "563e24c2e301d0978b0003ea"
> Racer.find(id).persisted?
=> true
$ rspec spec/model_spec.rb -e rq02
created_at
and updated_at
to the Racer
class that act as placeholders for property getters. They must
Hint:
def created_at
nil
end
def updated_at
nil
end
$ rspec spec/model_spec.rb -e rq03
In this section you will make the model class accessible to the browser by adding a controller and view through Rails scaffold. You carefully implemented the methods and detaisl of the Racer
model class so that it should nearly immediately work with these generated classes.
Generate a controller and view for the Racer
model using the scaffold_controller
command. Identify the fields for the model object so the generator creates fields to display and manage them.
Hint:
$ rails g scaffold_controller racer number:integer first_name last_name gender group secs:integer
Add a route to the new controller in config/routes.rb
and set the racers#index
page to be the root URI for the application.
Rails.application.routes.draw do
resources :racers
root to: 'racers#index'
Use the rake routes
to test and explore your changes.
$ rake routes
Prefix Verb URI Pattern Controller#Action
racers GET /racers(.:format) racers#index
POST /racers(.:format) racers#create
new_racer GET /racers/new(.:format) racers#new
edit_racer GET /racers/:id/edit(.:format) racers#edit
racer GET /racers/:id(.:format) racers#show
PATCH /racers/:id(.:format) racers#update
PUT /racers/:id(.:format) racers#update
DELETE /racers/:id(.:format) racers#destroy
root GET / racers#index
If you attempt to access the index page, you will notice an error stating the following.  However, we can fix that by using a helper
and our Racer.initialize
that takes a hash.
undefined method `number' for {}:BSON::Document
<% @racers.each do |racer| %>

<%= racer.number %>	 <=========
<%= racer.first_name %>
<%= racer.last_name %>
<%= racer.gender %>
RacersHelper
class called toRacer
. This class was generated by the scaffold_controller
command and placed in app/helpers/racers_helper.rb
. The new method must:
Racer
, simply return the instance unmodified. Else attempt to instantiate a Racer from the input argument and return the result.Hint:
module RacersHelper
def toRacer(value)
return value.is_a?(Racer) ? value : Racer.new(value)
end
end
Insert a call to the helper method in app/views/racers/index.html.erb
Hint:
<% @racers.each do |racer| racer=toRacer(racer) %>
Fix the JSON marshalling in app/views/racers/index.json.jbuilder
by adding the call to the helper method as well
Hint:
json.array!(@racers) do |racer|
racer=toRacer(racer)
json.extract! racer, :id, :number, :first_name, :last_name, :gender, :group, :secs
json.url racer_url(racer, format: :json)
end
Remove the confirmation dialogs from your Destroy link since we are not using a webdriver that supports javascript for this assignment. Inside the index.html.erb file you will need to change the destroy link to eliminate the confirmation dialog:
from: <%= link_to 'Destroy', racer, method: :delete, data: { confirm: 'Are you sure?' } %>
to: <%= link_to 'Destroy', racer, method: :delete %>
Access the root URI for the application and take your application for a test drive.
$ rspec spec/scaffold_spec.rb
Although we are not using a large dataset, we are still using an amount of records sorted by an non-indexed property and can notice some delay in accessing a page with all of our results. Add will_paginate
support for paging. The UI portion will be handled automatically but you must add query support for the new paginated call. Luckily you already have most of that implemented.
Racer
class called paginate
. This method must::page
property from that hash, convert to an integer, and default to the value of 1
if not set.:per_page
property from that hash, convert to an integer, and default to the value of 30
if not setnumber
assending.Racer
classReturn a WillPaginate::Collection
with the page
, limit
, and total
values filled in -- as well as the page worth of data.
Hint:
def self.paginate(params)
page=(params[:page] || 1).to_i
limit=(params[:per_page] || 30).to_i
skip=(page-1)*limit
racers=[]
...find racer docs
racers << Racer.new(doc)
...
total=...get collection size
WillPaginate::Collection.create(page, limit, total) do |pager|
pager.replace(racers)
end
end
Use the rails console
to test and explore your changes.
> reload!
> page=Racer.paginate(page:1)
> page.current_page
=> page 1
> page.per_page
=> 30
> page.total_pages
=> 34
> page.count
=> 30
> page.total_entries
=> 1001
$ rspec spec/paginate_spec.rb -e rq01
Update the racers#index
method to use the new Racer.paginate
method instead of the scaffold Racer.all
method. This method is located in app/controllers/racers_controller.rb
Hint:
def index
#@racers = Racer.all
@racers = Racer.paginate(page:params[:page], per_page:params[:per_page])
end
Use the browser to test and explore your changes.
http://localhost:3000/racers?page=1&per_page=5
$ rspec spec/paginate_spec.rb -e rq02
Add the will_paginate
command to the racers#index
view page in app/views/racers/index.html.erb
.
Hint:

<% @racers.each do |racer| racer=toRacer(racer) %>
...
<% end %>

<%= will_paginate @racers %>
User the browser to test and navigate the pages of racers. Note that will_paginate does not autotically add anything for page_size.
$ rspec spec/paginate_spec.rb -e rq03
(Ungraded/Optional) In this section you will optionally configure your solution for a Heroku deployment. Feel free to submit the assignment for grading and continue on with this optional work. You should be able to find details about the changes required for deployment within the Zips
example and in the lecture on deployment.
Create a database and user account on MongoLab
.
Import the race_results.json
into the MongoLab database.
Create an application on Heroku
. Name your application raceday#####
where #####
is a random, unassigned number.
Configure the application for use on Heroku by:
config/mongoid.yml
file with a deployment profileGemfile
to satisfy Heroku
RDBMS constraints for ActiveRecord.Deploy the application to Heroku and access via the web.
Some unit tests have been provided in the bootstrap files and provide examples of tests the grader will be evaluating for when you submit your solution. They must be run from the project root directory.
$ rspec
...
(N) examples, 0 failures
You can run as many specific tests you wish be adding -e rq## -e rq##
$ rspec (spec path) -e rq01 -e rq02
Submit an .zip archive (other archive forms not currently supported) with your solution root directory as the top-level (e.g., your Gemfile and sibling files must be in the root of the archive and not in a sub-folder. The grader will replace the spec files with fresh copies and will perform a test with different query terms.
|-- app
| |-- assets
| |-- controllers
| |-- helpers
| |-- mailers
| |-- models
| `-- views
|-- bin
|-- config
|-- config.ru
|-- db
|-- Gemfile
|-- Gemfile.lock
|-- lib
|-- log
|-- public
|-- Rakefile
|-- README.rdoc
|-- test
`-- vendor


By Josh Fermin
Open source data analytics cluster computing framework
Real-Time vs Interactive vs Batch processing
Write apps in Java, Scala or Python.
Map Reduce is only a part of supported capabilities.
Two major problems:
Generalize Map Reduce
Problem: Count how many lines a word shows up in a document
./bin/spark-shell/
./bin/pyspark/
scala> val textFile = sc.textFile("README.md")
textFile: spark.RDD[String] = spark.MappedRDD@2ee9b6e3
val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark: spark.RDD[String] = spark.FilteredRDD@7dd4af09
Cluster-wide in-memory cache
Useful for when data is accessed repeatedly (i.e. iterative algorithms or re-querying a small dataset)
scala> linesWithSpark.cache()
res7: spark.RDD[String] = spark.FilteredRDD@17e51082
scala> linesWithSpark.count()
res8: Long = 15


Have more questions? Need help setting up your workflow? Get in touch!
To access the Zube API, you first need to generate a private key. You will then use this private key to sign access token requests.
Make sure to store this file! Zube only stores the public portion of the key and you will not be able to view this key again.
Before you can send requests to Zube's API endpoints, you will need an access token. Before you can request an access token from Zube, you will need to create a refresh JSON Web Token (JWT) signed by your private key and encoded using the RS256
algorithm. Zube checks the key of this refresh JWT against the public key stored by Zube and returns a new access JWT that you use to access all other API endpoints.
var fs = require('fs');
var jsonwebtoken = require('jsonwebtoken'); // $ npm install jsonwebtoken
var client_id = CLIENT_ID;
var private_key = fs.readFileSync(PATH_TO_PEM_FILE);
var now = Math.floor(Date.now() / 1000);
var refresh_jwt = jsonwebtoken.sign({
iat: now, // Issued at time
exp: now + 60, // JWT expiration time (10 minute maximum)
iss: client_id // Your Zube client id
}, private_key, { algorithm: 'RS256' });
console.log(refresh_jwt);
Replace CLIENT_ID
and PATH_TO_PEM_FILE
in the above code with your information.
The code above creates a refresh JWT with a one minute expiry. You can create your refresh JWT with an expiry of up to 10 minutes. Once your refresh JWT is expired, you will need to generate a new refresh JWT to request new access tokens.
After creating the refresh JWT, you can request a new access token. Set your refresh JWT and Client Id in the Header
of the API request to the tokens endpoint:
curl -i \
-H "Authorization: Bearer REFRESH_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Accept: application/json" \
-X POST \
https://zube.io/api/users/tokens
REFRESH_JWT
and CLIENT_ID
are the values you must replace.
The API request above will return an access token, your ACCESS_JWT
, which you can use to make further requests to Zube's API endpoints.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Accept: application/json" \
https://zube.io/api/ANY_END_POINT
NOTE: The access JWT in only valid for 24 hours, after which you will need to request a new access token by repeating the steps outlined above.
Zube generates a fingerprint for your private and public key pair using a SHA-1 hash function. You can verify that your private key matches the public key stored on Zube by generating the fingerprint of your private key and comparing it to the fingerprint displayed on Zube. To verify your private key:
openssl rsa -in PATH_TO_PEM_FILE -pubout -outform DER | openssl sha1 -c
You can remove a lost, compromised or unwanted private key by deleting it in the Zube interface. After you have deleted your private key, you will be able to generate a new one.
You can find instructions for getting your CLIENT_ID
and generating your ACCESS_JWT
in the Authentication section above.
To send a request to a Zube API endpoint, include your ACCESS_JWT
and CLIENT_ID
in the Header
for your request.
The code below will send a GET
request to the projects
endpoint.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Accept: application/json" \
https://zube.io/api/projects
The code above will return a JSON object:
{
"pagination":{
"page":1,
"per_page":30,
"total_pages":1,
"total":1
},
"data":[
{
"id":123456,
"account_id":54321,
"description":"The place to organize our web application",
"name":"Web Project",
"created_at":"2018-07-06T03:52:29.513Z",
"updated_at":"2018-07-06T03:52:29.513Z",
"slug":"web-project",
"private":true,
"priority_format":"number",
"priority":true,
"points":true,
"triage":false,
"upvotes":false,
"sources":[
{
"id":123456789,
"github_owner_id":87654321,
"description":"Javascript frontend repository",
"full_name":"zubeio/js-frontend",
"homepage":null,
"html_url":"https://github.com/zubeio/js-frontend",
"name":"js-frontend",
"private":true,
"created_at":"2018-09-13T19:53:09.000Z",
"updated_at":"2019-07-02T22:25:48.000Z",
"webhook_verified_at":"2019-07-03T23:29:09.894Z",
"initial_import_at":"2018-12-17T04:09:49.348Z"
}
],
"workspaces":[
{
"id":654321,
"project_id":123456,
"description":null,
"name":"Product Team Workspace",
"slug":"product-team-workspace",
"private":true,
"priority_format":"number",
"priority":true,
"points":true,
"upvotes":false,
"created_at":"2018-12-17T04:09:49.348Z",
"updated_at":"2018-12-17T04:09:49.348Z",
"archive_merged_prs":false,
"use_category_labels":false
}
]
}
]
}
Most endpoints that return lists will return their data as paginated collections defaulting to 30 items per page. You can specify further pages by passing the page
parameter. For pages that allow customized pagination, you can set the number of results per page with the per_page
parameter.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?page=2&per_page=10"
Most endpoints that return lists accept order[by]
and order[direction]
parameters. order[direction]
accepts either asc
or desc
. The possible attributes available for order[by]
can be found in the table below the endpoint description.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?order%5Bby%5D=points&order%5Bdirection%5D=desc"
Most endpoints that return lists can be filtered using where
. For endpoints that support filtering, the attributes available for where
appear in the table below the endpoint. All filtering is scoped under the where
query parameter. For example, you'd use where[project_id]
to filter for a direct match of cards that are on the specified project.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?where%5Bproject_id%5D=3"
For most endpoints that return lists you can specify which data attributes you'd like included in the response using the select
parameter. select
takes an array of attributes. For example to select just the id
and title
attributes of cards you'd use select[]=id&select[]=title
Note: For convenience, many models return with some of their associated models populated. For endpoints where a model returns with associated model data, the associated data will not be removed when a request includes select
, so select
may be of limited use in those cases.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?select%5B%5D=id&select%5B%5D=title"
Most responses will return with an ETag
header. You are highly encouraged to make use of ETags for subsequent requests to the same endpoint. If the response would be the same, a 304 Not Modified
will be returned instead.
For example, if you received a response to the cards endpoint with the response header ETag: "27e-BpOwiFj52s046/zdOTfiQ0fepw8"
, then you'd include it as the value of the request header If-None-Match
for subsequent requests like so:
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H 'If-None-Match: "27e-BpOwiFj52s046/zdOTfiQ0fepw8"' \
https://zube.io/api/cards
When body data is sent for POST
or PUT
requests, it should be sent as valid JSON. Any request that sends body data should also include the required header "Content-Type: application/json"
.
curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Content-Type: application/json" \
-d '{"project_id":YOUR_PROJECT_ID,"title":"Hello World"}' \
-X POST \
https://zube.io/api/cards
You can can make at most one (1) request per second. While short bursts of a few requests at a slightly higher rate are permitted, exceeding one request per second for any extended duration will result in rejection of your requests and may constitute abuse.
Never make concurrent requests or make requests at a rate faster than one per second. If you accidentally hit the rate limit, please back off the rate of your requests immediately. If you happen to trigger abuse detection, please do your best not to trigger it again. Failure to observe these rules will result in rejection of your requests and possible suspension from future API usage.
accounts
in the Zube API.
where
clause and order
clause.
| name | type |
|---|---|
annual_amount
|
numeric |
created_at
|
timestamp |
discount
|
integer |
display_name
|
text |
first_billable_at
|
timestamp |
has_annual_billing
|
boolean |
has_github_billing
|
boolean |
id
|
integer |
private_users_count
|
integer |
seats
|
integer |
slug
|
text |
status
|
text |
updated_at
|
timestamp |
where
clause and order
clause.
| name | type |
|---|---|
avatar_path_is_locked
|
boolean |
created_at
|
timestamp |
github_user_id
|
integer |
id
|
integer |
is_user
|
boolean |
name
|
text |
name_is_locked
|
boolean |
updated_at
|
timestamp |
username
|
text |
| name | type | required | notes |
|---|---|---|---|
person_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
avatar_path_is_locked
|
boolean |
created_at
|
timestamp |
github_user_id
|
integer |
id
|
integer |
is_user
|
boolean |
name
|
text |
name_is_locked
|
boolean |
updated_at
|
timestamp |
username
|
text |
| name | type | required | notes |
|---|---|---|---|
person_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
account_id
|
integer |
auto_add_github_users
|
boolean |
created_at
|
timestamp |
default_epic_list_id
|
integer |
id
|
integer |
name
|
text |
private
|
boolean |
should_use_fibonacci_scale
|
boolean |
slug
|
text |
updated_at
|
timestamp |
where
clause and order
clause.
| name | type |
|---|---|
body
|
text |
category_name
|
text |
closed_at
|
timestamp |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
epic_id
|
integer |
id
|
integer |
last_comment_at
|
timestamp |
number
|
integer |
points
|
number |
priority
|
integer |
project_id
|
integer |
search_key
|
text |
sprint_id
|
integer |
state
|
text |
status
|
text |
updated_at
|
timestamp |
upvotes_count
|
integer |
was_archived_from_404
|
boolean |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
where[created_after]
|
timestamp | ||
where[updated_after]
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
assignee_ids
|
Array |
Array of assignee.id s
|
|
body
|
Text | ||
category_name
|
String | ||
epic_id
|
Integer | ||
github_issue[milestone_id]
|
Integer | ||
github_issue[source_id]
|
Integer |
Required if github_issue object is sent
|
|
label_ids
|
Array |
Array of label.id s
|
|
points
|
Number | ||
priority
|
Integer |
Must be one of 1 , 2 , 3 , 4 , 5 , or null
|
|
project_id
|
Integer | ✅ | |
sprint_id
|
Integer | ||
title
|
String | ✅ | |
workspace_id
|
Integer |
| name | type | required | notes |
|---|---|---|---|
assignee_ids
|
Array | ✅ |
Array of assignee.id s
|
body
|
Text | ✅ | |
epic_id
|
Integer | ✅ | |
github_issue[milestone_id]
|
Integer | ✅ | |
label_ids
|
Array | ✅ |
Array of label.id s
|
points
|
Number | ✅ | |
priority
|
Integer | ✅ |
Must be one of 1 , 2 , 3 , 4 , 5 , or null
|
project_id
|
Integer | ✅ | |
sprint_id
|
Integer | ✅ | |
state
|
String | ✅ |
Only accepts open or closed
|
title
|
String | ✅ | |
workspace_id
|
Integer | ✅ |
destination: {
position: CARD_POSITION,
type: "category",
name: NAME_OF_CATEGORY,
workspace_id: YOUR_WORKSPACE_ID
}
To move a card to a project's triage, pass:
destination: {
position: CARD_POSITION,
type: "project"
}
| name | type | required | notes |
|---|---|---|---|
destination[name]
|
Integer | Name of the destination category. | |
destination[position]
|
Integer | ✅ | |
destination[type]
|
String | ✅ |
Only accepts category or project
|
destination[workspace_id]
|
Integer |
Required if sending destination[type] as category
|
| name | type | required | notes |
|---|---|---|---|
source_id
|
Integer | ✅ | You cannot change the source for a card that already has a source |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
id
|
integer |
linked_card_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
card_id
|
Integer | ✅ | |
linked_card_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
body
|
Text | ✅ |
| name | type | required | notes |
|---|---|---|---|
body
|
Text | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
custom_field_id
|
integer |
date
|
timestamp |
id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
date
|
Timestamp | ✅ |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
date
|
Timestamp | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
custom_field_id
|
integer |
id
|
integer |
number
|
double precision |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
number
|
Float | ✅ |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
number
|
Float | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
custom_field_id
|
integer |
id
|
integer |
text
|
text |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
text
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
text
|
String | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
custom_field_id
|
integer |
id
|
integer |
single_select_option_id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
single_select_option_id
|
Integer | ✅ |
| name | type | required | notes |
|---|---|---|---|
custom_field_id
|
Integer | ✅ | |
single_select_option_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
assignee_id
|
integer |
cards_count
|
integer |
cards_status
|
text |
closed_at
|
timestamp |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
customer_id
|
integer |
due_on
|
timestamp |
id
|
integer |
number
|
integer |
priority
|
integer |
project_id
|
integer |
search_key
|
text |
start_date
|
timestamp |
state
|
text |
status
|
text |
title
|
text |
track_cards
|
boolean |
type
|
text |
updated_at
|
timestamp |
categories
in the Zube API.
_categoryId
is an ObjectId
, not an integer
.
_categoryId
is an ObjectId
, not an integer
.
where
clause and order
clause.
| name | type |
|---|---|
created_at
|
timestamp |
data_type
|
USER-DEFINED |
id
|
integer |
name
|
text |
project_id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
data_type
|
String | ✅ |
Must be one of date , number , text , or single_select
|
name
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
text
|
String | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
created_at
|
timestamp |
custom_field_id
|
integer |
id
|
integer |
text
|
text |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
text
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
text
|
String | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
assignee_id
|
integer |
cards_status
|
text |
closed_at
|
timestamp |
closed_cards_count
|
integer |
closed_points
|
number |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
due_on
|
timestamp |
epic_list_id
|
integer |
id
|
integer |
number
|
integer |
open_cards_count
|
integer |
open_points
|
number |
priority
|
integer |
project_id
|
integer |
rank
|
text |
search_key
|
text |
start_date
|
timestamp |
state
|
text |
status
|
text |
title
|
text |
track_cards
|
boolean |
updated_at
|
timestamp |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
where[after_number]
|
integer | ||
where[created_after]
|
timestamp | ||
where[updated_after]
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
after_target_id
|
Integer |
after_target_id is the id of the epic after which this epic should be placed
|
|
assignee_id
|
Integer | ||
before_target_id
|
Integer |
before_target_id is the id of the epic before which this epic should be placed
|
|
color
|
String | Hex color code string without preceding "#" | |
description
|
Text | ||
due_on
|
Timestamp | ||
epic_list_id
|
Boolean | ||
label_ids
|
Array |
Array of label.id s
|
|
target_position
|
Integer | Refers to the target index position of the epic | |
title
|
String | ✅ | |
track_cards
|
Boolean |
| name | type | required | notes |
|---|---|---|---|
assignee_id
|
Integer | ✅ | |
color
|
String | ✅ | Hex color code string without preceding "#" |
description
|
Text | ✅ | |
due_on
|
Timestamp | ✅ | |
epic_list_id
|
Boolean | ✅ | |
label_ids
|
Array | ✅ |
Array of label.id s
|
state
|
String | ✅ |
Only accepts open or closed
|
status
|
String | ✅ |
Must be one of new , queued , in_progress , completed , closed , or archived
|
title
|
String | ✅ | |
track_cards
|
Boolean | ✅ |
target_position
, after_target_id
or before_target_id
.
| name | type | required | notes |
|---|---|---|---|
after_target_id
|
Integer |
after_target_id is the id of the epic after which this epic should be placed
|
|
assignee_id
|
Integer | ✅ | |
before_target_id
|
Integer |
before_target_id is the id of the epic before which this epic should be placed
|
|
color
|
String | ✅ | Hex color code string without preceding "#" |
description
|
Text | ✅ | |
due_on
|
Timestamp | ✅ | |
epic_list_id
|
Boolean | ✅ | |
label_ids
|
Array | ✅ |
Array of label.id s
|
state
|
String | ✅ |
Only accepts open or closed
|
status
|
String | ✅ |
Must be one of new , queued , in_progress , completed , closed , or archived
|
target_position
|
Integer | Refers to the target index position of the epic | |
title
|
String | ✅ | |
track_cards
|
Boolean | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
body
|
text |
category_name
|
text |
closed_at
|
timestamp |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
epic_id
|
integer |
id
|
integer |
last_comment_at
|
timestamp |
number
|
integer |
points
|
number |
priority
|
integer |
project_id
|
integer |
search_key
|
text |
sprint_id
|
integer |
state
|
text |
status
|
text |
updated_at
|
timestamp |
upvotes_count
|
integer |
was_archived_from_404
|
boolean |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
card_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
body
|
Text | ✅ |
| name | type | required | notes |
|---|---|---|---|
body
|
Text | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
actor_id
|
integer |
assignee_id
|
integer |
commit_id
|
text |
created_at
|
timestamp |
event
|
text |
github_issue_id
|
integer |
id
|
bigint |
source_id
|
integer |
updated_at
|
timestamp |
where
clause and order
clause.
| name | type |
|---|---|
created_at
|
timestamp |
id
|
integer |
name
|
text |
project_id
|
integer |
rank
|
text |
updated_at
|
timestamp |
target_position
, after_target_id
or before_target_id
.
| name | type | required | notes |
|---|---|---|---|
after_target_id
|
Integer |
after_target_id is the id of the epic list after which this epic list should be placed
|
|
before_target_id
|
Integer |
before_target_id is the id of the epic list before which this epic list should be placed
|
|
name
|
String | ✅ | |
target_position
|
Integer | Refers to the target index position of the list. |
| name | type | required | notes |
|---|---|---|---|
name
|
String | ✅ |
target_position
, after_target_id
or before_target_id
.
| name | type | required | notes |
|---|---|---|---|
after_target_id
|
Integer |
after_target_id is the id of the epic list after which this epic list should be placed
|
|
before_target_id
|
Integer |
before_target_id is the id of the epic list before which this epic list should be placed
|
|
target_position
|
Integer | Refers to the target index position of the list. |
where
clause and order
clause.
| name | type |
|---|---|
created_at
|
timestamp |
id
|
integer |
project_id
|
integer |
slug
|
text |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
color
|
String | ✅ | Hex color code string without preceding "#" |
name
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
color
|
String | ✅ | Hex color code string without preceding "#" |
name
|
String | ✅ |
_notificationId
is an ObjectId
, not an integer
.
| name | type | required | notes |
|---|---|---|---|
read
|
Boolean | ✅ |
_notificationId
is an ObjectId
, not an integer
.
where
clause and order
clause.
| name | type |
|---|---|
account_id
|
integer |
auto_add_github_users
|
boolean |
created_at
|
timestamp |
default_epic_list_id
|
integer |
id
|
integer |
name
|
text |
private
|
boolean |
should_use_fibonacci_scale
|
boolean |
slug
|
text |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
account_id
|
Integer | ✅ | |
description
|
String | ||
name
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
auto_add_github_users
|
Boolean | ||
color
|
String | Hex color code string without preceding "#" | |
description
|
String | ||
name
|
String | ✅ | |
should_use_fibonacci_scale
|
Boolean | ||
triage
|
Boolean | Only valid for projects with one workspace |
where
clause and order
clause.
| name | type |
|---|---|
avatar_path_is_locked
|
boolean |
created_at
|
timestamp |
github_user_id
|
integer |
id
|
integer |
is_user
|
boolean |
name
|
text |
name_is_locked
|
boolean |
updated_at
|
timestamp |
username
|
text |
| name | type | required | notes |
|---|---|---|---|
person_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
avatar_path_is_locked
|
boolean |
created_at
|
timestamp |
github_user_id
|
integer |
id
|
integer |
is_user
|
boolean |
name
|
text |
name_is_locked
|
boolean |
updated_at
|
timestamp |
username
|
text |
| name | type | required | notes |
|---|---|---|---|
person_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
avatar_path_is_locked
|
boolean |
created_at
|
timestamp |
github_user_id
|
integer |
id
|
integer |
is_user
|
boolean |
name
|
text |
name_is_locked
|
boolean |
updated_at
|
timestamp |
username
|
text |
where
clause and order
clause.
| name | type |
|---|---|
body
|
text |
category_name
|
text |
closed_at
|
timestamp |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
epic_id
|
integer |
id
|
integer |
last_comment_at
|
timestamp |
number
|
integer |
points
|
number |
priority
|
integer |
project_id
|
integer |
search_key
|
text |
sprint_id
|
integer |
state
|
text |
status
|
text |
updated_at
|
timestamp |
upvotes_count
|
integer |
was_archived_from_404
|
boolean |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
where[after_number]
|
integer | ||
where[assignee_ids][]
|
Array |
Array of assignee.id s or null
|
|
where[created_after]
|
timestamp | ||
where[labels][]
|
Array |
Array of label.name s or null
|
|
where[milestones][]
|
Array |
Array of milestone.title s or null
|
|
where[source_ids][]
|
Array |
Array of source.id s or null
|
|
where[types]
|
String |
Only accepts issue , pull_request or null
|
|
where[updated_after]
|
timestamp | ||
order[by]
|
String | ✅ |
Accepts assignee , creator , milestone or sprint
|
order[direction]
|
String | ✅ |
Only accepts asc or desc
|
where
clause and order
clause.
| name | type |
|---|---|
closed_at
|
timestamp |
created_at
|
timestamp |
creator_id
|
integer |
due_on
|
timestamp |
id
|
integer |
number
|
integer |
source_id
|
integer |
state
|
text |
title
|
text |
updated_at
|
timestamp |
where
clause and order
clause.
| name | type |
|---|---|
contact
|
text |
created_at
|
timestamp |
creator_id
|
integer |
id
|
integer |
name
|
text |
project_id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
contact
|
String | ||
name
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
contact
|
String | ||
name
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
subscription_level
|
String | ✅ |
Must be one of following , not_following , or muted
|
| name | type | required | notes |
|---|---|---|---|
subscription_level
|
String | ✅ |
Must be one of following , not_following , or muted
|
| name | type | required | notes |
|---|---|---|---|
card_added_to_triage
|
Boolean | ✅ | |
card_assigned_to_self
|
Boolean | ✅ | |
card_assignee_added
|
Boolean | ✅ | |
card_card_linked
|
Boolean | ✅ | |
card_comment_added
|
Boolean | ✅ | |
card_comment_mention
|
Boolean | ✅ | |
card_epic_added
|
Boolean | ✅ | |
card_label_added
|
Boolean | ✅ | |
card_mention
|
Boolean | ✅ | |
card_milestone_added
|
Boolean | ✅ | |
card_points_changed
|
Boolean | ✅ | |
card_priority_changed
|
Boolean | ✅ | |
card_ticket_added
|
Boolean | ✅ | |
email
|
String | ✅ | |
epic_assigned_to_self
|
Boolean | ✅ | |
epic_assignee_added
|
Boolean | ✅ | |
epic_card_added
|
Boolean | ✅ | |
epic_comment_added
|
Boolean | ✅ | |
epic_comment_mention
|
Boolean | ✅ | |
epic_created
|
Boolean | ✅ | |
epic_due_date_changed
|
Boolean | ✅ | |
epic_mention
|
Boolean | ✅ | |
epic_status_closed
|
Boolean | ✅ | |
epic_status_completed
|
Boolean | ✅ | |
epic_status_in_progress
|
Boolean | ✅ | |
epic_status_queued
|
Boolean | ✅ | |
pr_added_to_triage
|
Boolean | ✅ | |
pr_assigned_to_self
|
Boolean | ✅ | |
pr_assignee_added
|
Boolean | ✅ | |
pr_card_linked
|
Boolean | ✅ | |
pr_comment_added
|
Boolean | ✅ | |
pr_comment_mention
|
Boolean | ✅ | |
pr_epic_added
|
Boolean | ✅ | |
pr_label_added
|
Boolean | ✅ | |
pr_mention
|
Boolean | ✅ | |
pr_milestone_added
|
Boolean | ✅ | |
pr_points_changed
|
Boolean | ✅ | |
pr_priority_changed
|
Boolean | ✅ | |
pr_ticket_added
|
Boolean | ✅ | |
ticket_assigned_to_self
|
Boolean | ✅ | |
ticket_assignee_added
|
Boolean | ✅ | |
ticket_card_added
|
Boolean | ✅ | |
ticket_comment_added
|
Boolean | ✅ | |
ticket_comment_mention
|
Boolean | ✅ | |
ticket_created
|
Boolean | ✅ | |
ticket_due_date_changed
|
Boolean | ✅ | |
ticket_label_added
|
Boolean | ✅ | |
ticket_mention
|
Boolean | ✅ | |
ticket_priority_changed
|
Boolean | ✅ | |
ticket_start_date_changed
|
Boolean | ✅ | |
ticket_status_closed
|
Boolean | ✅ | |
ticket_status_completed
|
Boolean | ✅ | |
ticket_status_in_progress
|
Boolean | ✅ | |
ticket_status_queued
|
Boolean | ✅ |
| name | type | required | notes |
|---|---|---|---|
card_added_to_triage
|
Boolean | ✅ | |
card_assigned_to_self
|
Boolean | ✅ | |
card_assignee_added
|
Boolean | ✅ | |
card_card_linked
|
Boolean | ✅ | |
card_comment_added
|
Boolean | ✅ | |
card_comment_mention
|
Boolean | ✅ | |
card_epic_added
|
Boolean | ✅ | |
card_label_added
|
Boolean | ✅ | |
card_mention
|
Boolean | ✅ | |
card_milestone_added
|
Boolean | ✅ | |
card_points_changed
|
Boolean | ✅ | |
card_priority_changed
|
Boolean | ✅ | |
card_ticket_added
|
Boolean | ✅ | |
epic_assigned_to_self
|
Boolean | ✅ | |
epic_assignee_added
|
Boolean | ✅ | |
epic_card_added
|
Boolean | ✅ | |
epic_comment_added
|
Boolean | ✅ | |
epic_comment_mention
|
Boolean | ✅ | |
epic_created
|
Boolean | ✅ | |
epic_due_date_changed
|
Boolean | ✅ | |
epic_mention
|
Boolean | ✅ | |
epic_status_closed
|
Boolean | ✅ | |
epic_status_completed
|
Boolean | ✅ | |
epic_status_in_progress
|
Boolean | ✅ | |
epic_status_queued
|
Boolean | ✅ | |
pr_added_to_triage
|
Boolean | ✅ | |
pr_assigned_to_self
|
Boolean | ✅ | |
pr_assignee_added
|
Boolean | ✅ | |
pr_card_linked
|
Boolean | ✅ | |
pr_comment_added
|
Boolean | ✅ | |
pr_comment_mention
|
Boolean | ✅ | |
pr_epic_added
|
Boolean | ✅ | |
pr_label_added
|
Boolean | ✅ | |
pr_mention
|
Boolean | ✅ | |
pr_milestone_added
|
Boolean | ✅ | |
pr_points_changed
|
Boolean | ✅ | |
pr_priority_changed
|
Boolean | ✅ | |
pr_ticket_added
|
Boolean | ✅ | |
ticket_assigned_to_self
|
Boolean | ✅ | |
ticket_assignee_added
|
Boolean | ✅ | |
ticket_card_added
|
Boolean | ✅ | |
ticket_comment_added
|
Boolean | ✅ | |
ticket_comment_mention
|
Boolean | ✅ | |
ticket_created
|
Boolean | ✅ | |
ticket_due_date_changed
|
Boolean | ✅ | |
ticket_label_added
|
Boolean | ✅ | |
ticket_mention
|
Boolean | ✅ | |
ticket_priority_changed
|
Boolean | ✅ | |
ticket_start_date_changed
|
Boolean | ✅ | |
ticket_status_closed
|
Boolean | ✅ | |
ticket_status_completed
|
Boolean | ✅ | |
ticket_status_in_progress
|
Boolean | ✅ | |
ticket_status_queued
|
Boolean | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
closed_at
|
timestamp |
created_at
|
timestamp |
end_date
|
timestamp |
id
|
integer |
project_id
|
integer |
start_date
|
timestamp |
state
|
text |
updated_at
|
timestamp |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
description
|
Text | ||
end_date
|
Timestamp | ✅ | |
start_date
|
Timestamp | ✅ | |
title
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
description
|
Text | ✅ | |
end_date
|
Timestamp | ✅ | |
start_date
|
Timestamp | ✅ | |
state
|
String | ✅ |
Only accepts open or closed
|
title
|
String | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
created_at
|
timestamp |
full_name
|
text |
github_owner_id
|
integer |
has_webhooks
|
boolean |
id
|
integer |
name
|
text |
updated_at
|
timestamp |
webhook_verified_at
|
timestamp |
where
clause and order
clause.
| name | type |
|---|---|
avatar_path_is_locked
|
boolean |
created_at
|
timestamp |
github_user_id
|
integer |
id
|
integer |
is_user
|
boolean |
name
|
text |
name_is_locked
|
boolean |
updated_at
|
timestamp |
username
|
text |
where
clause and order
clause.
| name | type |
|---|---|
closed_at
|
timestamp |
created_at
|
timestamp |
creator_id
|
integer |
due_on
|
timestamp |
id
|
integer |
number
|
integer |
source_id
|
integer |
state
|
text |
title
|
text |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
description
|
Text | ||
due_on
|
Timestamp | ||
title
|
String | ✅ |
| name | type | required | notes |
|---|---|---|---|
description
|
Text | ✅ | |
due_on
|
Timestamp | ✅ | |
state
|
String | ✅ |
Only accepts open or closed
|
title
|
String | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
assignee_id
|
integer |
cards_count
|
integer |
cards_status
|
text |
closed_at
|
timestamp |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
customer_id
|
integer |
due_on
|
timestamp |
id
|
integer |
number
|
integer |
priority
|
integer |
project_id
|
integer |
search_key
|
text |
start_date
|
timestamp |
state
|
text |
status
|
text |
title
|
text |
track_cards
|
boolean |
type
|
text |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
where[after_number]
|
integer | ||
where[created_after]
|
timestamp | ||
where[updated_after]
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
assignee_id
|
Integer | ||
customer_id
|
Integer | ||
description
|
Text | ||
due_on
|
Timestamp | ||
priority
|
Number |
Must be one of 1 , 2 , 3 , 4
|
|
start_date
|
Timestamp | ||
title
|
String | ✅ | |
track_cards
|
Boolean | ||
type
|
String |
Must be one of task , bug , feature , question
|
| name | type | required | notes |
|---|---|---|---|
assignee_id
|
Integer | ✅ | |
customer_id
|
Integer | ✅ | |
description
|
Text | ✅ | |
due_on
|
Timestamp | ✅ | |
priority
|
Number | ✅ |
Must be one of 1 , 2 , 3 , 4
|
start_date
|
Timestamp | ✅ | |
state
|
String | ✅ |
Only accepts open or closed
|
status
|
String | ✅ |
Must be one of new , queued , in_progress , completed , closed , or archived
|
title
|
String | ✅ | |
track_cards
|
Boolean | ✅ | |
type
|
String | ✅ |
Must be one of task , bug , feature , or question
|
where
clause and order
clause.
| name | type |
|---|---|
body
|
text |
category_name
|
text |
closed_at
|
timestamp |
closer_id
|
integer |
comments_count
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
epic_id
|
integer |
id
|
integer |
last_comment_at
|
timestamp |
number
|
integer |
points
|
number |
priority
|
integer |
project_id
|
integer |
search_key
|
text |
sprint_id
|
integer |
state
|
text |
status
|
text |
updated_at
|
timestamp |
upvotes_count
|
integer |
was_archived_from_404
|
boolean |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
card_id
|
Integer | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
card_id
|
integer |
created_at
|
timestamp |
creator_id
|
integer |
id
|
integer |
updated_at
|
timestamp |
| name | type | required | notes |
|---|---|---|---|
body
|
Text | ✅ |
| name | type | required | notes |
|---|---|---|---|
body
|
Text | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
add_category_labels_to_imported_cards
|
boolean |
archive_merged_prs
|
boolean |
auto_archive_closed_cards
|
boolean |
created_at
|
timestamp |
default_card_template_id
|
integer |
id
|
integer |
is_archived
|
boolean |
name
|
text |
private
|
boolean |
project_id
|
integer |
should_display_prs
|
boolean |
should_use_fibonacci_scale
|
boolean |
slug
|
text |
timezone
|
text |
updated_at
|
timestamp |
use_category_labels
|
boolean |
| name | type | required | notes |
|---|---|---|---|
description
|
Text | ||
name
|
String | ✅ | |
project_id
|
Integer | ✅ |
| name | type | required | notes |
|---|---|---|---|
add_category_labels_to_imported_cards
|
Boolean | ✅ | |
add_category_labels_to_imported_cards
|
Boolean | ✅ | |
archive_merged_prs
|
Boolean | ✅ | |
auto_archive_closed_cards
|
Boolean | ✅ | |
description
|
Text | ✅ | |
name
|
String | ✅ | |
points
|
Boolean | ✅ | |
priority
|
Boolean | ✅ | |
priority_format
|
String | ✅ |
Must be one of number , name , or color
|
should_use_fibonacci_scale
|
Boolean | ✅ | |
upvotes
|
Boolean | ✅ | |
use_category_labels
|
Boolean | ✅ |
| name | type | required | notes |
|---|---|---|---|
subscription_level
|
String | ✅ |
Must be one of following , not_following , or muted
|
| name | type | required | notes |
|---|---|---|---|
card_added_to_workspace
|
Boolean | ✅ | |
card_assigned_to_self
|
Boolean | ✅ | |
card_assignee_added
|
Boolean | ✅ | |
card_card_linked
|
Boolean | ✅ | |
card_column_changed
|
Boolean | ✅ | |
card_comment_added
|
Boolean | ✅ | |
card_comment_mention
|
Boolean | ✅ | |
card_epic_added
|
Boolean | ✅ | |
card_label_added
|
Boolean | ✅ | |
card_mention
|
Boolean | ✅ | |
card_milestone_added
|
Boolean | ✅ | |
card_points_changed
|
Boolean | ✅ | |
card_priority_changed
|
Boolean | ✅ | |
card_sprint_added
|
Boolean | ✅ | |
card_state_changed
|
Boolean | ✅ | |
card_status_done
|
Boolean | ✅ | |
card_status_in_progress
|
Boolean | ✅ | |
card_status_in_review
|
Boolean | ✅ | |
card_status_queued
|
Boolean | ✅ | |
card_ticket_added
|
Boolean | ✅ | |
pr_added_to_workspace
|
Boolean | ✅ | |
pr_assigned_to_self
|
Boolean | ✅ | |
pr_assignee_added
|
Boolean | ✅ | |
pr_card_linked
|
Boolean | ✅ | |
pr_column_changed
|
Boolean | ✅ | |
pr_comment_added
|
Boolean | ✅ | |
pr_comment_mention
|
Boolean | ✅ | |
pr_epic_added
|
Boolean | ✅ | |
pr_label_added
|
Boolean | ✅ | |
pr_mention
|
Boolean | ✅ | |
pr_merged
|
Boolean | ✅ | |
pr_milestone_added
|
Boolean | ✅ | |
pr_points_changed
|
Boolean | ✅ | |
pr_priority_changed
|
Boolean | ✅ | |
pr_sprint_added
|
Boolean | ✅ | |
pr_state_changed
|
Boolean | ✅ | |
pr_status_done
|
Boolean | ✅ | |
pr_status_in_progress
|
Boolean | ✅ | |
pr_status_in_review
|
Boolean | ✅ | |
pr_status_queued
|
Boolean | ✅ | |
pr_ticket_added
|
Boolean | ✅ | |
sprint_card_added
|
Boolean | ✅ | |
sprint_card_removed
|
Boolean | ✅ | |
sprint_created
|
Boolean | ✅ | |
sprint_end_date_changed
|
Boolean | ✅ | |
sprint_start_date_changed
|
Boolean | ✅ | |
sprint_state_changed
|
Boolean | ✅ |
| name | type | required | notes |
|---|---|---|---|
card_added_to_workspace
|
Boolean | ✅ | |
card_assigned_to_self
|
Boolean | ✅ | |
card_assignee_added
|
Boolean | ✅ | |
card_card_linked
|
Boolean | ✅ | |
card_column_changed
|
Boolean | ✅ | |
card_comment_added
|
Boolean | ✅ | |
card_comment_mention
|
Boolean | ✅ | |
card_epic_added
|
Boolean | ✅ | |
card_label_added
|
Boolean | ✅ | |
card_mention
|
Boolean | ✅ | |
card_milestone_added
|
Boolean | ✅ | |
card_points_changed
|
Boolean | ✅ | |
card_priority_changed
|
Boolean | ✅ | |
card_sprint_added
|
Boolean | ✅ | |
card_state_changed
|
Boolean | ✅ | |
card_status_done
|
Boolean | ✅ | |
card_status_in_progress
|
Boolean | ✅ | |
card_status_in_review
|
Boolean | ✅ | |
card_status_queued
|
Boolean | ✅ | |
card_ticket_added
|
Boolean | ✅ | |
email
|
String | ✅ | |
pr_added_to_workspace
|
Boolean | ✅ | |
pr_assigned_to_self
|
Boolean | ✅ | |
pr_assignee_added
|
Boolean | ✅ | |
pr_card_linked
|
Boolean | ✅ | |
pr_column_changed
|
Boolean | ✅ | |
pr_comment_added
|
Boolean | ✅ | |
pr_comment_mention
|
Boolean | ✅ | |
pr_epic_added
|
Boolean | ✅ | |
pr_label_added
|
Boolean | ✅ | |
pr_mention
|
Boolean | ✅ | |
pr_merged
|
Boolean | ✅ | |
pr_milestone_added
|
Boolean | ✅ | |
pr_points_changed
|
Boolean | ✅ | |
pr_priority_changed
|
Boolean | ✅ | |
pr_sprint_added
|
Boolean | ✅ | |
pr_state_changed
|
Boolean | ✅ | |
pr_status_done
|
Boolean | ✅ | |
pr_status_in_progress
|
Boolean | ✅ | |
pr_status_in_review
|
Boolean | ✅ | |
pr_status_queued
|
Boolean | ✅ | |
pr_ticket_added
|
Boolean | ✅ | |
sprint_card_added
|
Boolean | ✅ | |
sprint_card_removed
|
Boolean | ✅ | |
sprint_created
|
Boolean | ✅ | |
sprint_end_date_changed
|
Boolean | ✅ | |
sprint_start_date_changed
|
Boolean | ✅ | |
sprint_state_changed
|
Boolean | ✅ |
where
clause and order
clause.
| name | type |
|---|---|
created_at
|
timestamp |
id
|
integer |
project_id
|
integer |
title
|
text |
updated_at
|
timestamp |
workspace_id
|
integer |
| name | type | required | notes |
|---|---|---|---|
content
|
Text | ✅ | |
description
|
Text | ||
title
|
Text | ✅ | |
workspace_id
|
Integer | ✅ |
| name | type | required | notes |
|---|---|---|---|
content
|
Text | ✅ | |
description
|
Text | ✅ | |
title
|
Text | ✅ |
Have more questions? Need help setting up your workflow? Get in touch!


Read the rest of the post here.This is a quick blog post to share two new Google Maps themes we produced here at Forgotten Roads, in the event that our readers might want to use these as well. They've got a "retro" feel to them, designed to be extremely simple (for easy viewing in blog posts)...


The end result how our consultancy engagements is neat code which our client should be proud to own and happy to maintain.
Good software comes with good testing and we ensure that everything we ship has suitable automated testing strategy in place.
Front-end, back-end, continuous integration, continous develiry, agile development, DevOps: you name it, we got you covered!
Following years of experience in software development in Italy and London, Andrea starts traiding as software contractor and funds Acal Software Limiter
Our first engagement is through Equal Experts at a big project for Visa Europe.
Continuing our collaboration with Equal Experts, we provided software development services for Home Office.
Collaborating with Guidesmiths, we helped reshaping the software at Tes.
We join 101Ways in helping one of the biggest U.K. online clothing retailer achieving their digital transformation.
Returning to a collaboration with Equal Experts at Acuris.
Joining another Equal Experts project and helping Pret on their digital transformation.


This browser does not have a Java Plug-in. Get the latest Java Plug-in here. This browser does not have a Java Plug-in. Get the latest Java Plug-in here.
Before beginning this test, verify that you have access to the Content Package Test Subject that is to be tested. Use the step-by-step instructions below to complete the test. During testing, messages indicating the test progress and status will be displayed in the Test Suite Log to the right. You may print the log at any time during or after the test. Click the link below each summary section to see the detailed messages from the test.
1
2
3
4
File:
Entering the SCO Test Suite Portion of the test.
5
Indicate the maximum amount of time the Test Suite should wait for a SCO to call Initialize() (default - 20 seconds) SCO Timeout Value:
Indicate the maximum amount of time the Test Suite should wait to verify that an asset does not make any calls to the SCORM API (default - 8 seconds) Asset Timeout Value:
6
If your SCO requires the following data that would normally be provided by an LMS, please enter the data in the appropriate field. If the following data is not needed for the execution of the SCO, leave the fields as is:
7
When SCO testing finishes click Complete Test to end the test. Note: If Terminate("") is called upon an onunload or onbeforeunload event, ensure the SCO is closed before clicking Complete Test The test suite will now attempt to complete the following actions:
You may abort the test at any time by clicking Abort Test.


Diving Into Postgres JSON Operators and Functions
Just as PostgreSQL 9.3 was coming out I had a need to take advantage of the JSON datatype and some of the operators and functions within it. The use case was pretty simple, run a query across a variety of databases, then take the results and store them. We explored doing something more elaborate with the columns/values, but in the end just opted to save the entire result set as JSON then I could use the operators to explore it as desired.
Here’s the general idea in code (using sequel):
result = r.connection { |c| c.fetch(self.query).all }
mymodel.results = result.to_json
As the entire dataset was stored as some compressed JSON I needed to do a bit of manipulation to get it back into a form that was workable. Fortunately all the steps were fairly straightforward.
First you want to unnest each result from the json array, in my case this looked like:
SELECT json_array_elements(result)
The above will unnest all of the array elements so I have an individual result as JSON. A real world example would look something similar to:
SELECT json_array_elements(result)
FROM query_results
LIMIT 2;
json_array_elements
{“column_name”:“data_in_here”} {“column_name_2”:“other_data_in_here”} (2 rows)
From here based on the query I would want to get some specific value. In this case I’m going to search for the text key column_name_2:
SELECT json_array_elements(result)->'column_name_2'
FROM query_results
LIMIT 1;
json_array_elements
-----------------------
"other_data_in_here"
(1 rows)
One gotcha I encountered was when I wanted to search for some value or exclude some value… Expecting I could just compare the result of the above in a where statement I was sadly mistaken because the equals operator didn’t translate. My first attempt at fixing this was to cast in this form:
SELECT json_array_elements(result)->'column_name_2'::text
The sad part is because of the operator the cast doesn’t get applied as I’d expect. Instead you’ll want to do:
SELECT (json_array_elements(result)->'column_name_2')::text
Of course theres plenty more you can do with the JSON operators in the new Postgres 9.3. If you’ve already got JSON in your application give them a look today. And while slightly worse, if you’ve got JSON stored in a text field simply cast it with ::json
to begin using the operators.


{% comment %}
This builds upon nav.html, but feeds it the current directory as the
navigation source. It's intended for use in special layouts that are
assigned by directories, but also can be used in individual files.
TODO: Add filtering and weighted sorting.
{% endcomment %}
{% assign current_dir = site.html_pages | where: "dir", page.dir %}
{% include nav.html nav=current_dir %}


From:
{{email.From}}
To:
{{email.To}}
Subject:
{{email.Subject}}
{% autoescape on %} {{email.Content}} {% endautoescape %}


Gecode::Int::Extensional::Base< View, subscribe > Class Template Reference
[Integer propagators]
#include <extensional.hh>
Inherits Gecode::Propagator.
Detailed Description
template<class View, bool subscribe = true>
class Gecode::Int::Extensional::Base< View, subscribe >
Base for domain consistent extensional propagation.
This class contains support for implementing domain consistent extensional propagation algorithms that use positive tuple sets and a last data structure.
Requires
#include "gecode/int/extensional.hh"
Definition at line 179 of file extensional.hh.
Public Member Functions | |
| virtual PropCost | cost (ModEventDelta med) const |
| Cost function. | |
| virtual size_t | dispose (Space *home) |
| Delete actor and return its size. | |
Protected Member Functions | |
| TupleSet::TupleSetI * | ts (void) |
| Base (Space *home, bool share, Base< View, subscribe > &p) | |
| Constructor for cloning p. | |
| Base (Space *home, ViewArray< View > &x, const TupleSet &t) | |
| Constructor for posting. | |
| void | init_last (Space *home, Tuple **source) |
| Tuple | last (int var, int val) |
| Tuple | last_next (int var, int val) |
| void | init_dom (Space *home, Domain dom) |
| bool | valid (Tuple t, Domain dom) |
| Tuple | find_support (Domain dom, int var, int val) |
Protected Attributes | |
| ViewArray< View > | x |
| Variables. | |
| TupleSet | tupleSet |
| Definition of constraint. | |
| Tuple ** | last_data |
| Last tuple looked at Access real tuple-set. |
Constructor & Destructor Documentation
template<class View, bool subscribe>
| Gecode::Int::Extensional::Base< View, subscribe >::Base | ( | Space * | home, | |
| bool | share, | |||
| Base< View, subscribe > & | p | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| Gecode::Int::Extensional::Base< View, subscribe >::Base | ( | Space * | home, | |
| ViewArray< View > & | x, | |||
| const TupleSet & | t | |||
| ) | [inline, protected] |
Member Function Documentation
template<class View, bool subscribe>
| TupleSet::TupleSetI * Gecode::Int::Extensional::Base< View, subscribe >::ts | ( | void | ) | [inline, protected] |
template<class View, bool subscribe>
| void Gecode::Int::Extensional::Base< View, subscribe >::init_last | ( | Space * | home, | |
| Tuple ** | source | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| Tuple Gecode::Int::Extensional::Base< View, subscribe >::last | ( | int | var, | |
| int | val | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| Tuple Gecode::Int::Extensional::Base< View, subscribe >::last_next | ( | int | var, | |
| int | val | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| void Gecode::Int::Extensional::Base< View, subscribe >::init_dom | ( | Space * | home, | |
| Domain | dom | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| bool Gecode::Int::Extensional::Base< View, subscribe >::valid | ( | Tuple | t, | |
| Domain | dom | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| Tuple Gecode::Int::Extensional::Base< View, subscribe >::find_support | ( | Domain | dom, | |
| int | var, | |||
| int | val | |||
| ) | [inline, protected] |
template<class View, bool subscribe>
| PropCost Gecode::Int::Extensional::Base< View, subscribe >::cost | ( | ModEventDelta | med | ) | const [inline, virtual] |
Cost function.
Implements Gecode::Propagator.
Reimplemented in Gecode::Int::Extensional::Basic< View >, and Gecode::Int::Extensional::Incremental< View >.
template<class View, bool subscribe>
| size_t Gecode::Int::Extensional::Base< View, subscribe >::dispose | ( | Space * | home | ) | [inline, virtual] |
Delete actor and return its size.
Reimplemented from Gecode::Actor.
Reimplemented in Gecode::Int::Extensional::Incremental< View >.
Member Data Documentation
template<class View, bool subscribe = true>
ViewArray<View> Gecode::Int::Extensional::Base< View, subscribe >::x [protected] |
template<class View, bool subscribe = true>
TupleSet Gecode::Int::Extensional::Base< View, subscribe >::tupleSet [protected] |
template<class View, bool subscribe = true>
Tuple** Gecode::Int::Extensional::Base< View, subscribe >::last_data [protected] |
The documentation for this class was generated from the following files:
- gecode/int/extensional.hh (Revision: 7285)
- gecode/int/extensional/base.icc (Revision: 5862)


| DOSE: |
40 mg |
oral |
TMA-6 |
(powder / crystals) |
| |
|
oral |
Alcohol |
(liquid) |
Me and a friend acquired this chemical from an undisclosed internet company, came in 100mg bag and he smoked a little of it one night with a friend, so we had about 80mg left apiece.
At about 2pm we split the dose and ate it.
I felt a little tripped out, I giggled a little bit and felt awesome just like I do on LSD or Mushrooms, colors were bright after maybe 2 hours or so (this takes a little while to kick in, although we had just eaten). I saw a little bit of visual distortions, some things looked a little off for a seccond and then went back to normal, a wall moved on it's own once, I could make stuff move, but I can kinda do that when sober so it doesn't really count. There was a tenseness in our necks and our hearts were beating sort of fast, likly due to the Amphetamine in this compound.
Food tasted exsquisite, music was orgasmic, lights were pretty, I was happy. The ocean looked cool.
I dose pretty high on halucinagens, I do a full 1/8 of shrooms or more, 3 hits of acid or so, this was not very strong feeling, I would have liked it to be stronger It was sort of like 1 hit of good acid.
It does last a long time, at about 11pm we went to a friends party, a drink or two proved to relax the tension built up from the TMA-6, but after 4 or 5 I was just drunk feeling with a little bit of giddyness. Sleep was fine for a little while, woke up after 8 hours and couldn't go back to sleep which is unusual for me though.
I'll probably stick to my LSD.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


This tool is helps visualize similar movies. In training a recommendation engine, we alorithmically learn which movies tend to be watched by the same users. This enables us to quantify how similar one movie is to another.
Begin by clicking a movie!
{% for movie_id, url in movies %}
{% endfor %}
Most similar movies based on customer watch preferences


Forced to undergo a liver transplant because of hepatitis C.
The Montana Mary: beer, tomato juice, and Wild Turkey whiskey.
35 broken bones.
| 17 Oct 1938 |
Robert Craig Knievel is born in the mining community of Butte, Montana. |
| 1953 |
Arrested for stealing hubcaps. |
| 1953 |
The name Evil Knievel is born. A prison guard jokes that he has local gangster "Awful (Bill) Knofeel and "Evil Knievel the hub cap thief in the same cell. The name was later legally changed to Evel to avoid upsetting religious fans. |
| Mar 1962 |
Falling during a motorbike race, Evel breaks his scapula and clavicle. |
| 1965 |
(Lake Washington) Trying to attract attention to his motorcycle dealership, Knievel leaps off a ramp and clear a mountain lion, but lands on a box of rattlesnakes, scattering the venomous snakes and the spectators. |
| 1966 |
Rode through a wall of fire and jumped two trucks in Barstow, California. |
| 30 May 1967 |
Daredevil Evel Knievel jumped 16 automobiles in a row in a motorcycle stunt at Ascot Speedway in Gardena, Georgia. |
| 1 Jan 1968 |
Attempting to clear the fountains at Caesar's Palace, Las Vegas, he lands awkwardly. His rag-doll somersaults leave him in a coma for 29-days with a shattered pelvis, fractured hip, and smashed right femur. Surgeons rebuild his leg with a two foot long, three inches wide strip of steel. |
| 20 Sep 1970 |
Successfully cleared 13 cars in Seattle, WA. |
| 8 Jan 1971 |
Again clearing 13 cars he drew a then record crowd to the Houston Astrodome. |
| 28 Feb 1971 |
Set World record at Ontario, CA by jumping 19 Dodge cars. |
| 10 May 1971 |
Both femurs are snapped after he tumbles clearing 13 Pepsi trucks in Yakima, Washington. |
| 3 Mar 1972 |
Cow Palace, San Francisco. Broken back and concussion. |
| 18 Feb 1973 |
Taking off from the highest ski-style jump ramp ever used he thrilled the crowd of 35,000 by flying over 50 cars stacked in the center of the Los Angeles Colliseum. |
| 20 Aug 1974 |
In his last jump before the famous do-or-die Snake River Canyon attempt, he soared 135 feet over 13 eight foot wide Mack Trucks at the Canadian National Exposition. |
| 8 Sep 1974 |
In Idaho, daredevil Evel Knievel climbs into his X-2 Skycycle (really just a rocket on wheels) and hits the ignition. The vehicle manages to clear the quarter-mile-wide Snake River Canyon, but then the parachute deploys prematurely and prevailing winds push him back into the chasm. Total ripoff. |
| 31 May 1975 |
Wembley Stadium, London. Evel crashes after clearing 13 double decker buses. Despite a broken pelvis, he gets on his feet to reach the microphone and announce he will never jump again. |
| 25 Oct 1975 |
Defiant after the Wembley crash, Evel successfully jumped 14 Greyhound buses at King's Island in Ohio. |
| 1976 |
Evel fails during a practice run over a tank of killer sharks at Chicago Amphitheater. Concussion and two broken arms. A cameraman loses an eye from a flying piece of shrapnel. |
| 1977 |
Evel batters publicist Sheldon Saltman with a baseball bat. Evel said stories of drug use in a book Saltman wrote are lies. "I broke his arms so he couldn't write anymore lies. I should have killed him," Evel said. Evel serves just six months of three years.
I had casts on both arms because they were both broken.  But I only broke his arms to teach him a lesson, to set an example – that you shouldn’t write lies about people. That’s all I did that for. What he said about my mother I should have killed him for. I should have killed that little bastard.
|
| 10 Oct 1994 |
Evel Knievel is arrested in a Sunnyvale, California topless bar for beating 22-year-old girlfriend Krystal Kennedy back at the Comfort Inn motel.
|
| Jan 1998 |
Golf. A tumble near a bunker means Evel finally has to succumb to a hip replacement. |
| Jul 1998 |
Jacuzzi. Slipping on a wet railing, he falls and breaks a rib. |
| 28 Jan 1999 |
Knievel receives a new liver at Tampa General Hospital. |


rioxarray package¶
rioxarray.open_rasterio¶
-
rioxarray.
open_rasterio
(filename, parse_coordinates=None, chunks=None, cache=None, lock=None, masked=False, mask_and_scale=False, variable=None, group=None, default_name=None, **open_kwargs)[source]¶ Open a file with rasterio (experimental).
This should work with any file that rasterio can open (most often: geoTIFF). The x and y coordinates are generated automatically from the file’s geoinformation, shifted to the center of each pixel (see “PixelIsArea” Raster Space for more information).
You can generate 2D coordinates from the file’s attributes with:
from affine import Affine da = xr.open_rasterio('path_to_file.tif') transform = Affine.from_gdal(*da.attrs['transform']) nx, ny = da.sizes['x'], da.sizes['y'] x, y = np.meshgrid(np.arange(nx)+0.5, np.arange(ny)+0.5) * transform
Parameters: - filename (str, rasterio.DatasetReader, or rasterio.WarpedVRT) – Path to the file to open. Or already open rasterio dataset.
- parse_coordinates (bool, optional) – Whether to parse the x and y coordinates out of the file’s
transform
attribute or not. The default is to automatically parse the coordinates only if they are rectilinear (1D). It can be useful to setparse_coordinates=False
if your files are very large or if you don’t need the coordinates. - chunks (int, tuple or dict, optional) – Chunk sizes along each dimension, e.g.,
5
,(5, 5)
or{'x': 5, 'y': 5}
. If chunks is provided, it used to load the new DataArray into a dask array. Chunks can also be set toTrue
or"auto"
to choose sensible chunk sizes according to ``dask.config.get(“array.chunk-size”). - cache (bool, optional) – If True, cache data loaded from the underlying datastore in memory as NumPy arrays when accessed to avoid reading from the underlying data- store multiple times. Defaults to True unless you specify the chunks argument to use dask, in which case it defaults to False.
- lock (False, True or threading.Lock, optional) – If chunks is provided, this argument is passed on to
dask.array.from_array()
. By default, a global lock is used to avoid issues with concurrent access to the same file when using dask’s multithreaded backend. - masked (bool, optional) – If True, read the mask and to set values to NaN. Defaults to False.
- mask_and_scale (bool, optional) – Lazily scale (using scale_factor and add_offset) and mask (using _FillValue). If the _Unsigned attribute is present treat integer arrays as unsigned.
- variable (str or list or tuple, optional) – Variable name or names to use to filter loading.
- group (str or list or tuple, optional) – Group name or names to use to filter loading.
- default_name (str, optional) – The name of the data array if none exists. Default is None.
- **open_kwargs (kwargs, optional) – Optional keyword arguments to pass into rasterio.open().
Returns: data – The newly created DataArray.
Return type: DataArray
rioxarray.rioxarray module¶
This module is an extension for xarray to provide rasterio capabilities to xarray datasets/dataarrays.
Credits: The reproject functionality was adopted from https://github.com/opendatacube/datacube-core # noqa Source file: - https://github.com/opendatacube/datacube-core/blob/084c84d78cb6e1326c7fbbe79c5b5d0bef37c078/datacube/api/geo_xarray.py # noqa datacube is licensed under the Apache License, Version 2.0: - https://github.com/opendatacube/datacube-core/blob/1d345f08a10a13c316f81100936b0ad8b1a374eb/LICENSE # noqa
-
class
rioxarray.rioxarray.
RasterArray
(xarray_obj)[source]¶ Bases:
rioxarray.rioxarray.XRasterBase
This is the GIS extension for
xarray.DataArray
-
bounds
(recalc=False)[source]¶ Determine the bounds of the xarray.DataArray
Parameters: recalc (bool, optional) – Will force the bounds to be recalculated instead of using the transform attribute. Returns: left, bottom, right, top – Outermost coordinates. Return type: float
-
clip
(geometries, crs, all_touched=False, drop=True, invert=False)[source]¶ Crops a
xarray.DataArray
by geojson like geometry dicts.Powered by rasterio.features.geometry_mask.
Parameters: - geometries (list) – A list of geojson geometry dicts.
- crs (
rasterio.crs.CRS
) – The CRS of the input geometries. - all_touched (bool, optional) – If True, all pixels touched by geometries will be burned in. If false, only pixels whose center is within the polygon or that are selected by Bresenham’s line algorithm will be burned in.
- drop (bool, optional) – If True, drop the data outside of the extent of the mask geoemtries Otherwise, it will return the same raster with the data masked. Default is True.
- invert (boolean, optional) – If False, pixels that do not overlap shapes will be set as nodata. Otherwise, pixels that overlap the shapes will be set as nodata. False by default.
Returns: DataArray
Return type: A clipped
xarray.DataArray
object.Examples
>>> geometry = ''' {"type": "Polygon", ... "coordinates": [ ... [[-94.07955380199459, 41.69085871273774], ... [-94.06082436942204, 41.69103313774798], ... [-94.06063203899649, 41.67932439500822], ... [-94.07935807746362, 41.679150041277325], ... [-94.07955380199459, 41.69085871273774]]]}''' >>> cropping_geometries = [geojson.loads(geometry)] >>> xds = xarray.open_rasterio('cool_raster.tif') >>> cropped = xds.rio.clip(geometries=cropping_geometries, crs=4326)
-
clip_box
(minx, miny, maxx, maxy, auto_expand=False, auto_expand_limit=3)[source]¶ Clip the
xarray.DataArray
by a bounding box.Parameters: - minx (float) – Minimum bound for x coordinate.
- miny (float) – Minimum bound for y coordinate.
- maxx (float) – Maximum bound for x coordinate.
- maxy (float) – Maximum bound for y coordinate.
- auto_expand (bool) – If True, it will expand clip search if only 1D raster found with clip.
- auto_expand_limit (int) – maximum number of times the clip will be retried before raising an exception.
Returns: DataArray
Return type: A clipped
xarray.DataArray
object.
-
encoded_nodata
¶ Return the encoded nodata value for the dataset if encoded.
-
interpolate_na
(method='nearest')[source]¶ This method uses scipy.interpolate.griddata to interpolate missing data.
Parameters: method ({‘linear’, ‘nearest’, ‘cubic’}, optional) – The method to use for interpolation in scipy.interpolate.griddata. Returns: :class:`xarray.DataArray` Return type: An interpolated xarray.DataArray
object.
-
isel_window
(window)[source]¶ Use a rasterio.window.Window to select a subset of the data.
Parameters: window ( rasterio.window.Window
) – The window of the dataset to read.Returns: :obj:`xarray.Dataset` | :obj:`xarray.DataArray` Return type: The data in the window.
-
nodata
¶ Get the nodata value for the dataset.
-
reproject
(dst_crs, resolution=None, dst_affine_width_height=None, resampling=<Resampling.nearest: 0>)[source]¶ Reproject
xarray.DataArray
objectsPowered by rasterio.warp.reproject
Note
Only 2D/3D arrays with dimensions ‘x’/’y’ are currently supported. Requires either a grid mapping variable with ‘spatial_ref’ or a ‘crs’ attribute to be set containing a valid CRS. If using a WKT (e.g. from spatiareference.org), make sure it is an OGC WKT.
Parameters: - dst_crs (str) – OGC WKT string or Proj.4 string.
- resolution (float or tuple(float, float), optional) – Size of a destination pixel in destination projection units (e.g. degrees or metres).
- dst_affine_width_height (tuple(dst_affine, dst_width, dst_height), optional) – Tuple with the destination affine, width, and height.
- resampling (Resampling method, optional) – See rasterio.warp.reproject for more details.
Returns: :class:`xarray.DataArray`
Return type: A reprojected DataArray.
-
reproject_match
(match_data_array, resampling=<Resampling.nearest: 0>)[source]¶ Reproject a DataArray object to match the resolution, projection, and region of another DataArray.
Powered by rasterio.warp.reproject
Note
Only 2D/3D arrays with dimensions ‘x’/’y’ are currently supported. Requires either a grid mapping variable with ‘spatial_ref’ or a ‘crs’ attribute to be set containing a valid CRS. If using a WKT (e.g. from spatiareference.org), make sure it is an OGC WKT.
Parameters: - match_data_array (
xarray.DataArray
) – DataArray of the target resolution and projection. - resampling (Resampling method, optional) – See rasterio.warp.reproject for more details.
Returns: Contains the data from the src_data_array, reprojected to match match_data_array.
Return type: xarray.DataArray
- match_data_array (
-
resolution
(recalc=False)[source]¶ Determine the resolution of the xarray.DataArray
Parameters: recalc (bool, optional) – Will force the resolution to be recalculated instead of using the transform attribute.
-
set_nodata
(input_nodata, inplace=True)[source]¶ Set the nodata value for the DataArray without modifying the data array.
Parameters: - input_nodata (object) – Valid nodata for dtype.
- inplace (bool, optional) – If True, it will write to the existing dataset. Default is False.
Returns: xarray.DataArray
Return type: Dataset with nodata attribute set.
-
slice_xy
(minx, miny, maxx, maxy)[source]¶ Slice the array by x,y bounds.
Parameters: - minx (float) – Minimum bound for x coordinate.
- miny (float) – Minimum bound for y coordinate.
- maxx (float) – Maximum bound for x coordinate.
- maxy (float) – Maximum bound for y coordinate.
Returns: DataArray
Return type: A sliced
xarray.DataArray
object.
-
to_raster
(raster_path, driver='GTiff', dtype=None, tags=None, windowed=False, recalc_transform=True, **profile_kwargs)[source]¶ Export the DataArray to a raster file.
Parameters: - raster_path (str) – The path to output the raster to.
- driver (str, optional) – The name of the GDAL/rasterio driver to use to export the raster. Default is “GTiff”.
- dtype (str, optional) – The data type to write the raster to. Default is the datasets dtype.
- tags (dict, optional) – A dictionary of tags to write to the raster.
- windowed (bool, optional) – If True, it will write using the windows of the output raster. This only works if the output raster is tiled. As such, if you set this to True, the output raster will be tiled. Default is False.
- **profile_kwargs – Additional keyword arguments to pass into writing the raster. The nodata, transform, crs, count, width, and height attributes are ignored.
-
transform_bounds
(dst_crs, densify_pts=21, recalc=False)[source]¶ Transform bounds from src_crs to dst_crs.
Optionally densifying the edges (to account for nonlinear transformations along these edges) and extracting the outermost bounds.
Note: this does not account for the antimeridian.
Parameters: - dst_crs (str,
rasterio.crs.CRS
, or dict) – Target coordinate reference system. - densify_pts (uint, optional) – Number of points to add to each edge to account for nonlinear edges produced by the transform process. Large numbers will produce worse performance. Default: 21 (gdal default).
- recalc (bool, optional) – Will force the bounds to be recalculated instead of using the transform attribute.
Returns: left, bottom, right, top – Outermost coordinates in target coordinate reference system.
Return type: float
- dst_crs (str,
-
write_nodata
(input_nodata, inplace=False)[source]¶ Write the nodata to the DataArray in a CF compliant manner.
Parameters: - input_nodata (object) – Nodata value for the DataArray. If input_nodata is None, it will remove the _FillValue attribute.
- inplace (bool, optional) – If True, it will write to the existing DataArray. Default is False.
Returns: xarray.DataArray
Return type: Modified DataArray with CF compliant nodata information.
-
-
class
rioxarray.rioxarray.
RasterDataset
(xarray_obj)[source]¶ Bases:
rioxarray.rioxarray.XRasterBase
This is the GIS extension for
xarray.Dataset
-
clip
(geometries, crs, all_touched=False, drop=True, invert=False)[source]¶ Crops a
xarray.Dataset
by geojson like geometry dicts.Warning
Only works if all variables in the dataset have the same coordinates.
Powered by rasterio.features.geometry_mask.
Parameters: - geometries (list) – A list of geojson geometry dicts.
- crs (
rasterio.crs.CRS
) – The CRS of the input geometries. - all_touched (boolean, optional) – If True, all pixels touched by geometries will be burned in. If false, only pixels whose center is within the polygon or that are selected by Bresenham’s line algorithm will be burned in.
- drop (bool, optional) – If True, drop the data outside of the extent of the mask geoemtries Otherwise, it will return the same raster with the data masked. Default is True.
- invert (boolean, optional) – If False, pixels that do not overlap shapes will be set as nodata. Otherwise, pixels that overlap the shapes will be set as nodata. False by default.
Returns: Dataset
Return type: A clipped
xarray.Dataset
object.Examples
>>> geometry = ''' {"type": "Polygon", ... "coordinates": [ ... [[-94.07955380199459, 41.69085871273774], ... [-94.06082436942204, 41.69103313774798], ... [-94.06063203899649, 41.67932439500822], ... [-94.07935807746362, 41.679150041277325], ... [-94.07955380199459, 41.69085871273774]]]}''' >>> cropping_geometries = [geojson.loads(geometry)] >>> xds = xarray.open_rasterio('cool_raster.tif') >>> cropped = xds.rio.clip(geometries=cropping_geometries, crs=4326)
-
clip_box
(minx, miny, maxx, maxy, auto_expand=False, auto_expand_limit=3)[source]¶ Clip the
xarray.Dataset
by a bounding box.Warning
Only works if all variables in the dataset have the same coordinates.
Parameters: - minx (float) – Minimum bound for x coordinate.
- miny (float) – Minimum bound for y coordinate.
- maxx (float) – Maximum bound for x coordinate.
- maxy (float) – Maximum bound for y coordinate.
- auto_expand (bool) – If True, it will expand clip search if only 1D raster found with clip.
- auto_expand_limit (int) – maximum number of times the clip will be retried before raising an exception.
Returns: DataArray
Return type: A clipped
xarray.Dataset
object.
-
crs
¶ Retrieve projection from xarray.Dataset
Type: rasterio.crs.CRS
-
interpolate_na
(method='nearest')[source]¶ This method uses scipy.interpolate.griddata to interpolate missing data.
Parameters: method ({‘linear’, ‘nearest’, ‘cubic’}, optional) – The method to use for interpolation in scipy.interpolate.griddata. Returns: :class:`xarray.DataArray` Return type: An interpolated xarray.DataArray
object.
-
reproject
(dst_crs, resolution=None, dst_affine_width_height=None, resampling=<Resampling.nearest: 0>)[source]¶ Reproject
xarray.Dataset
objectsNote
Only 2D/3D arrays with dimensions ‘x’/’y’ are currently supported. Requires either a grid mapping variable with ‘spatial_ref’ or a ‘crs’ attribute to be set containing a valid CRS. If using a WKT (e.g. from spatiareference.org), make sure it is an OGC WKT.
Parameters: - dst_crs (str) – OGC WKT string or Proj.4 string.
- resolution (float or tuple(float, float), optional) – Size of a destination pixel in destination projection units (e.g. degrees or metres).
- dst_affine_width_height (tuple(dst_affine, dst_width, dst_height), optional) – Tuple with the destination affine, width, and height.
- resampling (Resampling method, optional) – See rasterio.warp.reproject for more details.
Returns: :class:`xarray.Dataset`
Return type: A reprojected Dataset.
-
reproject_match
(match_data_array, resampling=<Resampling.nearest: 0>)[source]¶ Reproject a Dataset object to match the resolution, projection, and region of another DataArray.
Note
Only 2D/3D arrays with dimensions ‘x’/’y’ are currently supported. Requires either a grid mapping variable with ‘spatial_ref’ or a ‘crs’ attribute to be set containing a valid CRS. If using a WKT (e.g. from spatiareference.org), make sure it is an OGC WKT.
Parameters: - match_data_array (
xarray.DataArray
) – DataArray of the target resolution and projection. - resampling (Resampling method, optional) – See rasterio.warp.reproject for more details.
Returns: Contains the data from the src_data_array, reprojected to match match_data_array.
Return type: xarray.Dataset
- match_data_array (
-
vars
¶ Returns non-coordinate varibles
Type: list
-
-
class
rioxarray.rioxarray.
XRasterBase
(xarray_obj)[source]¶ Bases:
object
This is the base class for the GIS extensions for xarray
-
crs
¶ Retrieve projection from xarray.DataArray or xarray.Dataset
Type: rasterio.crs.CRS
-
height
¶ Returns the height of the dataset (y dimension size)
Type: int
-
set_attrs
(new_attrs, inplace=False)[source]¶ Set the attributes of the dataset/dataarray and reset rioxarray properties to re-search for them.
Parameters: - new_attrs (dict) – A dictionary of new attributes.
- inplace (bool, optional) – If True, it will write to the existing dataset. Default is False.
Returns: - xarray.Dataset or xarray.DataArray
- Modified dataset with new attributes.
-
set_crs
(input_crs, inplace=True)[source]¶ Set the CRS value for the Dataset/DataArray without modifying the dataset/data array.
Parameters: - input_crs (object) – Anything accepted by rasterio.crs.CRS.from_user_input.
- inplace (bool, optional) – If True, it will write to the existing dataset. Default is False.
Returns: - xarray.Dataset or xarray.DataArray
- Dataset with crs attribute.
-
set_spatial_dims
(x_dim, y_dim, inplace=True)[source]¶ This sets the spatial dimensions of the dataset.
Parameters: - x_dim (str) – The name of the x dimension.
- y_dim (str) – The name of the y dimension.
- inplace (bool, optional) – If True, it will modify the dataframe in place. Otherwise it will return a modified copy.
Returns: Dataset with spatial dimensions set.
Return type: xarray.Dataset or xarray.DataArray
-
shape
¶ Returns the shape (width, height)
Type: tuple
-
update_attrs
(new_attrs, inplace=False)[source]¶ Update the attributes of the dataset/dataarray and reset rioxarray properties to re-search for them.
Parameters: - new_attrs (dict) – A dictionary of new attributes to update with.
- inplace (bool, optional) – If True, it will write to the existing dataset. Default is False.
Returns: - xarray.Dataset or xarray.DataArray
- Modified dataset with updated attributes.
-
width
¶ Returns the width of the dataset (x dimension size)
Type: int
-
write_crs
(input_crs=None, grid_mapping_name='spatial_ref', inplace=False)[source]¶ Write the CRS to the dataset in a CF compliant manner.
Parameters: - input_crs (object) – Anything accepted by rasterio.crs.CRS.from_user_input.
- grid_mapping_name (str, optional) – Name of the coordinate to store the CRS information in.
- inplace (bool, optional) – If True, it will write to the existing dataset. Default is False.
Returns: - xarray.Dataset or xarray.DataArray
- Modified dataset with CF compliant CRS information.
-
x_dim
¶
-
y_dim
¶
-
-
rioxarray.rioxarray.
affine_to_coords
(affine, width, height, x_dim='x', y_dim='y')[source]¶ Generate 1d pixel centered coordinates from affine.
Based on code from the xarray rasterio backend.
Parameters: - affine (
affine.Affine
) – The affine of the grid. - width (int) – The width of the grid.
- height (int) – The height of the grid.
- x_dim (str, optional) – The name of the X dimension. Default is ‘x’.
- y_dim (str, optional) – The name of the Y dimension. Default is ‘y’.
Returns: dict
Return type: x and y coordinate arrays.
- affine (
rioxarray.crs module¶
This module contains helper methods for rasterio.crs.CRS.
rioxarray.exceptions module¶
This contains exceptions for rioxarray.
-
exception
rioxarray.exceptions.
DimensionError
[source]¶ Bases:
rioxarray.exceptions.RioXarrayError
This is raised when there are more dimensions than is supported by the method
-
exception
rioxarray.exceptions.
InvalidDimensionOrder
[source]¶ Bases:
rioxarray.exceptions.DimensionError
This is raised when there the dimensions are not ordered correctly.
-
exception
rioxarray.exceptions.
MissingCRS
[source]¶ Bases:
rioxarray.exceptions.RioXarrayError
Missing the CRS in the dataset.
-
exception
rioxarray.exceptions.
NoDataInBounds
[source]¶ Bases:
rioxarray.exceptions.RioXarrayError
This is for when there are no data in the bounds for clipping a raster.
-
exception
rioxarray.exceptions.
OneDimensionalRaster
[source]¶ Bases:
rioxarray.exceptions.DimensionError
This is an error when you have a 1 dimensional raster.
-
exception
rioxarray.exceptions.
RioXarrayError
[source]¶ Bases:
RuntimeError
This is the base exception for errors in the rioxarray extension.
-
exception
rioxarray.exceptions.
SingleVariableDataset
[source]¶ Bases:
rioxarray.exceptions.RioXarrayError
This is for when you have a dataset with a single variable.
-
exception
rioxarray.exceptions.
TooManyDimensions
[source]¶ Bases:
rioxarray.exceptions.DimensionError
This is raised when there are more dimensions than is supported by the method


With aplentybounty and certainty, the people of the county continuously enjoyed a life of abundance and contentment. [G|D]
The dainty figure of the woman, dressed in the jauntyminty dress, gave the air a certain feeling of guaranty and assurance. [G|D]
From the pointy peak of the mountain, there was a panty of plenty, although in certain areas it was quite scanty. [G|D]
With its shanty dwellings, there was a feeling of uncertainty over the sovereignty of the land, but the people still had a warranty of safety and security. [G|D]