Competencies
In this project, you will demonstrate your mastery of the following competencies:
- Apply database systems concepts and principles in the development of a client/server application
- Create a database that can interface with client-side code
Scenario
You work for Global Rain, a software engineering company that
specializes in custom software design and development. Your team has
been assigned to work on a project for an innovative international
rescue-animal training company, Grazioso Salvare. You have been made the
lead developer on this project.
As part of its work, Grazioso Salvare identifies dogs that are good
candidates for search-and-rescue training. When trained, these dogs are
able to find and help to rescue humans or other animals, often in
life-threatening conditions. To help identify dogs for training,
Grazioso Salvare has reached an agreement with a non-profit agency that
operates five animal shelters in the region around Austin, Texas. This
non-profit agency will provide Grazioso Salvare with data from their
shelters.
In meeting with the client, Grazioso Salvare, you have discovered
that they look for certain profiles in dogs to train. For instance,
search-and-rescue training is generally more effective for dogs that are
no more than two years old. Additionally, certain breeds of dogs are
proficient at different types of rescue, such as water rescue, mountain
or wilderness rescue, locating humans after a disaster, or finding a
specific human by tracking their scent.
Grazioso Salvare is seeking a software application that can work with
existing data from the animal shelters to identify and categorize
available dogs. Global Rain has contracted for a full stack development
of this application that will include a database and a client-facing web
application dashboard, through which users at Grazioso Salvare will
access the database. The full stack development will be fully completed
in Projects One and Two.
Grazioso Salvare has also requested that the code for this project be
open source and accessible on GitHub, so that it may be used and
adapted by similar organizations. To that end, they have asked that you
also create a README file to accompany your work.
In Project One, you will complete the first phase of this development
by creating a database in MongoDB that can interact with client-side
code. You will also create an initial README file to accompany your
code. In Project Two, later in this course, you will complete the second
phase of development by updating the database, producing the dashboard,
and updating the README file to explain the full stack development.
Directions
Database Commands and CRUD Python Module
For your work on Project One, you will incorporate two previously
completed milestones. First is the indexing for optimizing queries and
authentication for database security, which you completed in the Module
Three Milestone. Second is the CRUD (Create, Update, Read, and Delete)
functionality for the animal database, which you began in the Module
Four Milestone and will complete in this project.
You have been asked to create a database for the Grazioso Salvare
project that is able to interface with client-side code. In order to do
so, you must complete the following:
- Upload the Austin Animal Center Outcomes data set into MongoDB by inserting a CSV file using the appropriate MongoDB import tool. The data set is located in the Supporting Materials section. Complete the import using the mongoimport tool and take screenshots of both the import command and its execution. These screenshots will later be included in your README file.
Note:
If you completed the Module Three Milestone, you have already completed
this step. Be sure to include your screenshots from the Module Three
Milestone in your README file.
- Create an administrator account and a user account in the mongo shell to ensure user authentication to the database and collection
that was created. Be sure to take a screenshot of the mongo shell
execution command screen that shows your login process with both
accounts. This screenshot will later be included in your README file.
Note:
If you completed the Module Three Milestone, you have already completed
this step. Be sure to include your screenshots from the Module Three
Milestone in your README file.
- Next, you must develop a Python module in a PY file, using
object-oriented programming methodology, to enable CRUD functionality
for the database. To support code reusability, your Python code needs to
be importable as a module by other Python scripts.
Develop a CRUD class that, when instantiated, provides the following functionality:
- A Create method that inserts a document into a specified MongoDB database and collection
- Input -> argument to function will be a set of key/value pairs in
the data type acceptable to the MongoDB driver insert API call. - Return -> “True” if successful insert, else “False”.
- A Read method that queries for document(s) from a specified MongoDB database and specified collection
- Input -> arguments to function should be the key/value lookup pair to use with the MongoDB driver find API call.
- Return -> result in cursor if successful, else MongoDB returned error message.
- An Update method that queries for and changes document(s) from a specified MongoDB database and specified collection
- Input -> arguments to function should be the key/value lookup
pair to use with the MongoDB driver find API call. Last argument to
function will be a set of key/value pairs in the data type acceptable to
the MongoDB driver insert API call. - Return -> result in JSON format if successful, else MongoDB returned error message.
- A Delete method that queries for and removes document(s) from a specified MongoDB database and specified collection
- Input -> arguments to function should be the key/value lookup pair to use with the MongoDB driver find API call.
- Return -> result in JSON format if successful, else MongoDB returned error message.
As you develop your code, be sure to use industry standard best practices
such as proper naming conventions, exception handling, and in-line
comments. This will ensure that your code is easy to read and reusable
for future projects. Refer to the Python Style Guide, located in the
Supporting Materials section, to help with these industry standard best
practices.
Note: If you completed the Module Four Milestone, you have already developed the Create and Read functionality.
- Finally, you must test your Python module to make sure that it works. To do this, create a Python script that imports your CRUD Python module to call and test all instances of CRUD functionality.
This script should be created in a separate Jupyter Notebook (IPYNB)
file, and should import and instantiate an object from your CRUD library
to effect changes in MongoDB. Be sure to use the username and password
for the “aacuser” account for authentication when instantiating the
class. After creating your script, execute it in Jupyter Notebook and
take screenshots of the commands and their execution. These screenshots
will later be included in your README file.
Note: If you
completed the Module Four Milestone, you have already begun this work.
Expand your script to call and test the Update and Delete functionality.
README File
Grazioso Salvare has requested documentation to accompany the CRUD
Python module. This will ensure that they are able to understand the
work that was completed. It will also help them maintain the code for
the database.
To document this project, you must create a README file that includes the following:
- An explanation of the purpose of the CRUD Python module
- An explanation of how the module should be used, including:
- A description of the Python driver for Mongo that was used and why it was chosen
- An explanation of the attributes and working functionality of the CRUD operations
- A demonstration of the module’s functional operations, including:
- Screenshots of the MongoDB import execution. You took these screenshots in Step 1.
- Screenshots of the user authentication execution. You took these screenshots in Step 2.
- Screenshots of the CRUD functionality test execution. You took these screenshots in Step 4.
Note: If you completed the Module Four Milestone, you have already
begun work on your README file. You will need to add more information to
complete your README file and fully document your work in Project One.
What to Submit
To complete this project, you must submit the following:
Database Commands and CRUD Python Module
Submit the IPYNB and PY files containing your code for the project.
This includes the Python module that you developed to enable all CRUD
functionality and the Python script that calls that functionality. All
code files should follow industry standard best practices, including
well-commented code.
README File
Your submission should be a Word (DOC or DOCX) file containing an
explanation of the Python module that you developed to enable CRUD
functionality. In your README file, be sure to include all required
screenshots.
Supporting Materials
The following resource(s) may help support your work on the project:
Data Set: Austin Animal Center Outcomes Spreadsheet
Grazioso
Salvare has provided you with this sample data set (CSV file) of animal
center outcomes. This will become the basis of your database and can be
used to test the functionality of your code. This data set has been
modified for the purposes of this project. Specifically, the following
columns have been added: location_lat (latitude), location_long
(longitude), and age_upon_outcome_in_weeks (the age of the animal, given
in weeks).