~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to Code_python/DocServer/docserver.txt

  • Committer: Dave Kuhlman
  • Date: 2015-10-03 18:25:17 UTC
  • mfrom: (35.1.5 Materials)
  • Revision ID: dkuhlman@davekuhlman.org-20151003182517-b2m7eltjdapw46zh
Review for Cisco.  Merged checkpoint 10

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
Document server
3
3
=================
4
4
 
 
5
Preliminaries
 
6
===============
 
7
 
 
8
We will be building an application to retrieve and store documents.
 
9
We will implement an access library/module, several servers, and
 
10
several clients.
 
11
 
 
12
The document store is an SQLite relational database.  It is file
 
13
based.
 
14
 
 
15
The document store will contain the following information:
 
16
 
 
17
1. The ``documents`` table:
 
18
 
 
19
   1. id
 
20
   2. tags
 
21
   3. description
 
22
   4. body -- The document (body) itself.
 
23
 
 
24
2. The ``config`` table:
 
25
 
 
26
   1. latest_id
 
27
 
 
28
There is a sample database containing a few documents (records) in
 
29
``./Data/documents01.sqlite``.
 
30
 
 
31
You can create a new, empty database by running
 
32
``create_doc_database.py``.
 
33
 
 
34
Here are some SQL queries that you will find useful::
 
35
 
 
36
    # Get and update config (latest_id).
 
37
    sql = 'select latest_id from config'
 
38
    sql = 'update config set latest_id={}'.format(new_id)
 
39
    #
 
40
    # Get id, tags, and description for all documents.
 
41
    sql = 'select id, tags, description from documents'
 
42
    #
 
43
    # Get all fields for a specific document by ID.
 
44
    sql = 'select * from documents where id = {}'.format(id)
 
45
    #
 
46
    # Insert a new document into the database.
 
47
    sql = 'insert into documents values ({}, "{}", "{}", "{}")'.format(
 
48
        new_id, tags, description, body)
 
49
 
 
50
 
 
51
Exercises
 
52
===========
 
53
 
 
54
Now, do each of the following:
 
55
 
5
56
1. Implement a module/library to access and add records to a
6
57
   document repository stored in a SQLite relational file/database.
7
58
   Support the following API:
20
71
   The file ``create_doc_database.py`` can be used to create and
21
72
   initialize a new empty SQLite document database file.
22
73
 
23
 
2. Implement a REST-ful document server.  Your document server
24
 
   should provide these capabilities:
 
74
2. Implement a REST-ful document server.  Build your server on
 
75
   ZeroMQ.
 
76
   
 
77
   Your document server should provide these capabilities:
25
78
 
26
79
   - Store (save) a document in the data store.  Return a new
27
80
     document ID.
31
84
 
32
85
   - Retrieve a document by ID.
33
86
 
34
 
   The document store should contain the following information
35
 
   (fields) for each document:
36
 
 
37
 
   1. ID
38
 
   2. Document name
39
 
   3. Description
40
 
   4. Tags
41
 
   5. The document itself.
42
 
 
43
 
2. Implement a client for your document server.  The client should
44
 
   be able to perform these functions:
 
87
   - Add a new document given tags, description, and the name of a
 
88
     file to store in the database.
 
89
 
 
90
   You can find templates for the ZeroMQ parts in
 
91
   ``Templates/hwserver.py`` and ``Templates/hwclient.py``
 
92
 
 
93
3. Implement a ZeroMQ client for your document server.  The client
 
94
   should be able to perform these functions:
45
95
 
46
96
   1. Store a new document
47
97
   2. Search a set of documents, given a tag.
48
98
   3. Retrieve a document, given its ID.
49
 
 
50
 
Consider storing your documents in an Sqlite file-based database.
51
 
You can create you database with the Python script
52
 
``create_doc_database.py`` in this directory.
 
99
   4. Add a new document, given the tags, description, and name of a
 
100
      file to be stored.
 
101
 
 
102
4. Implement a command line shell as a client for the document
 
103
   store.  Use the ``cmd`` module from the standard Python library.
 
104
   Your command line shell can either (1) access your library/module
 
105
   directly or (2) use your ZeroMQ client.
 
106
 
 
107
   In your command line shell, implement the same commands: list,
 
108
   search, get, and add.
 
109
 
 
110
4. Implement a Web application server that provides access to the
 
111
   documents in our document store.  Build your Web application with
 
112
   Pyramid.
 
113
 
 
114
   Your Web application server should support these operations
 
115
   (URLs)::
 
116
 
 
117
       /help -- Show this help.
 
118
       /list -- List all documents.
 
119
       /search/{tag} -- Search for and show documents by tag.
 
120
       /get/{id} -- Get and show document by ID.
 
121
 
 
122
   You can create a starter Pyramid application with the following
 
123
   commands::
 
124
 
 
125
       $ pcreate --help
 
126
       $ pcreate --list
 
127
       $ pcreate --scaffold=starter my_doc_server
 
128
       $ cd my_doc_server
 
129
       $ python setup.py develop
 
130
 
 
131
   Now start the server with the following::
 
132
 
 
133
       $ pserve development.ini
 
134
 
 
135
   Then visit ``http://localhost:6543`` in your Web browser to see
 
136
   whether your application is good.
 
137
 
 
138
.. vim:ft=rst: