Assignment title: Information


psst Home All Pssts Users About Assignment Spec COMP249 Assignment: Psst Microblog Web Application This semester we will be writing a simple micro-blogging application called Psst that allows users to post short messages. Unlike the competition, which limit messages to 140 characters, Psst allows a full 150 characters in each message. We hope that this will give us the edge in this very competitive market. To give you an idea of what the application does, there is a demonstration version at http://comp249.stevecassidy.net/. Since this is your first significant web application, we've cut down the features a bit to make it manageable. However we maintain the core of the application and what you write could be extended to something like a real product. Your application will support logging in users, posting messages, posting replies and viewing messages in various ways. We don't require you to be able to register new users or handle user profile changes etc. You are given a 'starter kit' which contains the bare outline of the application. From this starting point, you will implement the full site in phases according to a detailed set of functional requirements. At the end of each phase, a set of automated tests will be used to see if you have met the criteria for that phase. Some of the marks for this assignment will be based on your passing these automated tests. While this task may seem quite daunting, it should be achievable if you work through the examples we have provided and work on the problem bit by bit. We have run similar tasks in the past in COMP249 and most students have succeeded in getting a working system going. Level 1 The first phase of the project involves writing a basic web application that can serve two pages. Requirements Level 2 In this phase you will interface to a backend database and provide views that list all posts and those for a given user. Requirements Level 3 The next phase of development adds the ability to login to the application and post messages. Requirements Going Further The final phase of development is more open ended. You are free to add new features to the application as you see fit. In doing so you should try to follow the same development process and properly document the functional and unit tests that will give you assurance that you have achieved your desired functionality. Functional tests can be optionally implemented using WebTest but should at least be expressed as a user story ('As a user, when I...'). Starter Kit The starter kit is a zip file containing a set of Python files to get you started on this project. These files provide a framework for you to work within, you will need to add more code of your own and possibly more modules (Python files, templates) to complete the implementation. You can download the starter pack here: comp249-2017-psst-starter. It is also available as a Bitbucket project comp249-2017-psst-starter, if you are a git user you could fork the repository from there - please be sure to keep your own version private if you keep your work on Bitbucket (or Github). The contents of the starter pack are as follows: database.py - python page templating module main.py - main application script with a simple example interface.py - stubs for the level 2 required functions users.py - stubs for the level 3 required functions level1_functional.py - functional tests for Level 1 level2_functional.py - functional tests for Level 2 level2_unit.py - unit tests for Level 2 level3_functional.py - functional tests for Level 3 level3_unit.py - unit tests for Level 3 static - directory containing a sample CSS file The database.py module contains code to create an interface to the database, you should use it to create a database connection rather than using raw SQLite calls. It ensures that you are using the right database file and contains code to generate test data for you to use in development. An example of how you would use this is as follows: from database import COMP249Db db = COMP249Db() cursor = db.cursor() cursor.execute("SELECT nick FROM users") for row in cursor: print(row) The database contains the following tables: users: fields nick (user nickname), password, avatar (URL of an avatar image) sessions: fields sessionid, usernick, where usernick is a reference to the nick field in the users table posts: fields id, timestamp, usernick, content There are also two other tables votes and follows that are not used in the core requirements but that you can use if you wish to implement further features. Each user is identified by a nickname that is stored in the nick field in the users table. This field is used as a foreign key in other tables to refer to the user. To select data from both tables you will need to do a query with a join. The posts table deserves further comment. The id field is an auto-incremented integer id for each post, you don't need to give this a value, it will automatically get a new unique value when you insert a row. The timestamp field will also default to the current time and date in the format '2015-02-20 01:45:06' if you don't provide a value when you add a row. So, to add a row to the posts table you just need: sql = "INSERT INTO posts (usernick, content) VALUES (?, ?)" cursor.execute(sql, ['steve', 'this is my post']) db.commit() The code as provided includes a sample Bottle application which you can run. It doesn't do much other than generate a static page that links to a copy of these notes. This is your starting point for development and you should write your code so that main.py is the main application (when I run your code, this is what I'll look for). You can run the functional and unit tests (level1_functional.py level2_unit.py) to check that you have met the requirements at each level. To do this, open the file in PyCharm and click 'Run', choose to run as "Python unit-test". Alternately, run them from the command line eg. python level1_functional.py. Note that if you follow the written requirements set out in the pages linked above, you should pass the functional tests. A reasonable way to work would be to read and implement each functional requirement in turn and then run the functional tests when you are done as a check. Submission You will submit this work in two parts: after you have completed Level 2, and after you have completed Level 3 or above. The Level 2 submission is intended to check on your progress with the assignment so that we can provide you with feedback and identify anyone who needs support. See iLearn for the dates of these submissions. For each submission you should submit a zip file with the same structure as the starter pack. We will expect to run main.py to see your application. Include any support files that you need for your application to work. A good idea would be to unpack your zip file at a new location and try to run it yourself. Grading the Assignment This assignment is worth 30% of the final marks for COMP249. A total of 18 marks will be entirely based on achieving the stated functional and unit-test requirements and passing the automated tests. The remaining 12 marks will be based on the quality of the code and documentation that you provide, and any additional work that you do beyond the basic requirements. The breakdown of marks for the automated tests is as follows: Level Functional Tests Unit Tests Cumulative Marks 1 2 - 2 2 4 4 10 3 4 4 18 The remaining 12 marks will decide whether you get a Credit or Distinction/High Distinction for the assignment. The criteria are: Features The extra features that you have implemented in the project. For a Credit you don't need to add any extra features, for D/HD you will have added at least one new feature that is well integrated into the application and is well thought out. Code Quality Your code is readable and well structured. For a Credit, we should not have any trouble working out how you implemented a given feature. For a D/HD, you will have thought hard about how the application as a whole fits together and made good use of modules. Documentation You have provided appropriate documentation. For a Credit, you will have used documentation strings and in-line comments where appropriate in your code. For D/HD, you will have provided documentation of your application that would be useful to a future developer, your documentation will include functional tests in the form of user stories for your new features. Your final grade will be calculated based on your performance against the above criteria. It is not necessary to get a distinction against all criteria to get full marks for the assignment. Psst is a class project for COMP249 at Macquarie University Psst uses Twitter Bootstrap Copyright © Steve Cassidy, 2015