Database¶
Database Facade¶
Database Facade.
-
class
db.facade.
DBFacade
(db)¶ A database facade that gives an overall API for any databases.
Currently, we plan on having DynamoDB, but other databases, such as MongoDB or Postgres are also being considered. Please use this class instead of
db/dynamodb.py
, because we might change the databases, but the facade would stay the same.-
__init__
(db)¶ Initialize facade using a given class.
Currently, we can only initialize with
db.dynamodb.DynamoDB
.Parameters: db ( DynamoDB
) – Database class for API calls
-
bulk_retrieve
(Model, ks)¶ Retrieve a list of models from the database.
Keys not found in the database will be skipped.
Parameters: - Model (
Type
[~T]) – the actual class you want to retrieve - ks (
List
[str
]) – retrieve based on this key (or ID)
Return type: List
[~T]Returns: a list of models
Model
- Model (
-
delete
(Model, k)¶ Remove an object from a table.
Parameters: - Model (
Type
[~T]) – table type to remove the object from - k (
str
) – ID or key of the object to remove (must be primary key)
- Model (
-
query
(Model, params=[])¶ Query a table using a list of parameters.
Returns a list of
Model
that have all of the attributes specified in the parameters. Every item in parameters is a tuple, where the first element is the user attribute, and the second is the value.Example:
ddb = DynamoDb(config) users = ddb.query(User, [('platform', 'slack')])
If you try to query a table without any parameters, the function will return all objects of that table.:
projects = ddb.query(Project)
Attributes that are sets (e.g.
team.member
,project.github_urls
) would be treated differently. This function would check to see if the entry contains a certain element. You can specify multiple elements, but they must be in different parameters (one element per tuple).:teams = ddb.query(Team, [('members', 'abc123'), ('members', '231abc')])
Parameters: - Model (
Type
[~T]) – type of list elements you’d want - params (
List
[Tuple
[str
,str
]]) – list of tuples to match
Return type: List
[~T]Returns: a list of
Model
that fit the query parameters- Model (
-
query_or
(Model, params=[])¶ Query a table using a list of parameters.
Returns a list of
Model
that have one of the attributes specified in the parameters. Some might say that this is a union of the parameters. Every item in parameters is a tuple, where the first element is the user attribute, and the second is the value.Example:
ddb = DynamoDb(config) users = ddb.query_or(User, [('platform', 'slack')])
If you try to query a table without any parameters, the function will return all objects of that table.:
projects = ddb.query_or(Project)
Attributes that are sets (e.g.
team.member
,project.github_urls
) would be treated differently. This function would check to see if the entry contains a certain element. You can specify multiple elements, but they must be in different parameters (one element per tuple).:teams = ddb.query_or(Team, [('members', 'abc123'), ('members', '231abc')])
The above would get you the teams that contain either member
abc123
or231abc
.Parameters: - Model (
Type
[~T]) – type of list elements you’d want - params (
List
[Tuple
[str
,str
]]) – list of tuples to match
Return type: List
[~T]Returns: a list of
Model
that fit the query parameters- Model (
-
retrieve
(Model, k)¶ Retrieve a model from the database.
Parameters: - Model (
Type
[~T]) – the actual class you want to retrieve - k (
str
) – retrieve based on this key (or ID)
Raise: LookupError if key is not found
Return type: ~T
Returns: a model
Model
if key is found- Model (
-
store
(obj)¶ Store object into the correct table.
Object can be of type
model.user.User
,model.team.Team
, ormodel.project.Project
.Parameters: obj (~T) – Object to store in database Return type: bool
Returns: True if object was stored, and false otherwise
-
DynamoDB¶
DynamoDB.
-
class
db.dynamodb.
DynamoDB
(config)¶ Handles calls to database through API.
Please do not use this class, and instead use
db.facade.DBFacade
. This class only works on DynamoDB, and should not be used outside of the facade class.-
class
Const
(config)¶ A bunch of static constants and functions.
-
__init__
(config)¶ Initialize the constants.
-
get_key
(table_name)¶ Get primary key of the table name.
Parameters: cls – the name of the table Raise: TypeError if table does not exist Return type: str
Returns: primary key of the table
-
get_set_attrs
(table_name)¶ Get class attributes that are sets.
Parameters: cls – the table name Raise: TypeError if table does not exist Return type: List
[str
]Returns: list of strings of set attributes
-
get_table_name
(cls)¶ Convert class into corresponding table name.
Parameters: cls ( Type
[~T]) – EitherUser
,Team
, orProject
Raise: TypeError if it is not either User, Team, or Project Return type: str
Returns: table name string
-
-
__init__
(config)¶ Initialize facade using DynamoDB settings.
To avoid local tests failure when the DynamoDb server is used, a testing environment variable is set. When testing environmental variable is true, the local dynamodb is run. When testing environmental variable is true, the server dynamodb is run.
boto3.resource() takes in a service_name, region_name, and endpoint_url (only for local dynamodb). service_name: The name of a service, “dynamodb” in this case. region_name: The name of the region associated with the client. A list of different regions can be obtained online. endpoint_url: The complete URL to use for the constructed client.
-
bulk_retrieve
(Model, ks)¶ Retrieve a list of models from the database.
Keys not found in the database will be skipped.
Parameters: - Model (
Type
[~T]) – the actual class you want to retrieve - ks (
List
[str
]) – retrieve based on this key (or ID)
Return type: List
[~T]Returns: a list of models
Model
- Model (
-
check_valid_table
(table_name)¶ Check if table with
table_name
exists.Parameters: table_name ( str
) – table identifierReturn type: bool
Returns: boolean value, true if table exists, false otherwise
-
delete
(Model, k)¶ Remove an object from a table.
Parameters: - Model (
Type
[~T]) – table type to remove the object from - k (
str
) – ID or key of the object to remove (must be primary key)
- Model (
-
query
(Model, params=[])¶ Query a table using a list of parameters.
Returns a list of
Model
that have all of the attributes specified in the parameters. Every item in parameters is a tuple, where the first element is the user attribute, and the second is the value.Example:
ddb = DynamoDb(config) users = ddb.query(User, [('platform', 'slack')])
If you try to query a table without any parameters, the function will return all objects of that table.:
projects = ddb.query(Project)
Attributes that are sets (e.g.
team.member
,project.github_urls
) would be treated differently. This function would check to see if the entry contains a certain element. You can specify multiple elements, but they must be in different parameters (one element per tuple).:teams = ddb.query(Team, [('members', 'abc123'), ('members', '231abc')])
Parameters: - Model (
Type
[~T]) – type of list elements you’d want - params (
List
[Tuple
[str
,str
]]) – list of tuples to match
Return type: List
[~T]Returns: a list of
Model
that fit the query parameters- Model (
-
query_or
(Model, params=[])¶ Query a table using a list of parameters.
Returns a list of
Model
that have one of the attributes specified in the parameters. Some might say that this is a union of the parameters. Every item in parameters is a tuple, where the first element is the user attribute, and the second is the value.Example:
ddb = DynamoDb(config) users = ddb.query_or(User, [('platform', 'slack')])
If you try to query a table without any parameters, the function will return all objects of that table.:
projects = ddb.query_or(Project)
Attributes that are sets (e.g.
team.member
,project.github_urls
) would be treated differently. This function would check to see if the entry contains a certain element. You can specify multiple elements, but they must be in different parameters (one element per tuple).:teams = ddb.query_or(Team, [('members', 'abc123'), ('members', '231abc')])
The above would get you the teams that contain either member
abc123
or231abc
.Parameters: - Model (
Type
[~T]) – type of list elements you’d want - params (
List
[Tuple
[str
,str
]]) – list of tuples to match
Return type: List
[~T]Returns: a list of
Model
that fit the query parameters- Model (
-
retrieve
(Model, k)¶ Retrieve a model from the database.
Parameters: - Model (
Type
[~T]) – the actual class you want to retrieve - k (
str
) – retrieve based on this key (or ID)
Raise: LookupError if key is not found
Return type: ~T
Returns: a model
Model
if key is found- Model (
-
store
(obj)¶ Store object into the correct table.
Object can be of type
model.user.User
,model.team.Team
, ormodel.project.Project
.Parameters: obj (~T) – Object to store in database Return type: bool
Returns: True if object was stored, and false otherwise
-
class