Commit 279aa412e31ce6bb325241468b03ec411c267dc0
Committed by
Sergio Oliveira
1 parent
95aa1b8d
Documentation of Trac Data API.
Signed-off-by: Thiago Ribeiro <thiagitosouza@hotmail.com>
Showing
7 changed files
with
271 additions
and
4 deletions
Show diff stats
colab/proxy/trac/data_api.py
| 1 | +# -*- coding: utf-8 -*- | |
| 1 | 2 | from re import match |
| 2 | 3 | |
| 3 | 4 | from django.db import connections |
| ... | ... | @@ -9,6 +10,10 @@ from colab.proxy.utils.proxy_data_api import ProxyDataAPI |
| 9 | 10 | class TracDataAPI(ProxyDataAPI): |
| 10 | 11 | |
| 11 | 12 | def fetch_data(self): |
| 13 | + """ This is the pricipal method whose function is just make the call the | |
| 14 | + other methods. | |
| 15 | + | |
| 16 | + """ | |
| 12 | 17 | connection = connections['trac'] |
| 13 | 18 | cursor = connection.cursor() |
| 14 | 19 | self.fetch_data_wiki(cursor) |
| ... | ... | @@ -17,6 +22,17 @@ class TracDataAPI(ProxyDataAPI): |
| 17 | 22 | self.fetch_data_revision(cursor) |
| 18 | 23 | |
| 19 | 24 | def fetch_data_attachment(self, empty_cursor): |
| 25 | + """ This method is responsible for seeking the attachment data in | |
| 26 | + trac database and transfer them to the colab database. | |
| 27 | + | |
| 28 | + :param empty_cursor: A cursor coming from connectinos, it is necessary | |
| 29 | + import the connections library from django.db, with it we can run | |
| 30 | + sql commands. | |
| 31 | + | |
| 32 | + :returns: Return is an attachment object with your saved data | |
| 33 | + in the colab database. | |
| 34 | + | |
| 35 | + """ | |
| 20 | 36 | attachment = Attachment() |
| 21 | 37 | cursor = self.attachment_cursor(empty_cursor) |
| 22 | 38 | attachment_dict = self.dictfetchall(cursor) |
| ... | ... | @@ -38,6 +54,17 @@ class TracDataAPI(ProxyDataAPI): |
| 38 | 54 | attachment.save() |
| 39 | 55 | |
| 40 | 56 | def fetch_data_revision(self, empty_cursor): |
| 57 | + """ This method is responsible for seeking the revision data in | |
| 58 | + trac database and transfer them to the colab database. | |
| 59 | + | |
| 60 | + :param empty_cursor: A cursor coming from connectinos, it is necessary | |
| 61 | + import the connections library from django.db, with it we can run | |
| 62 | + sql commands. | |
| 63 | + | |
| 64 | + :returns: Return is an revision object with your saved data | |
| 65 | + in the colab database. | |
| 66 | + | |
| 67 | + """ | |
| 41 | 68 | revision = Revision() |
| 42 | 69 | cursor = self.revision_cursor(empty_cursor) |
| 43 | 70 | revision_dict = self.dictfetchall(cursor) |
| ... | ... | @@ -52,6 +79,17 @@ class TracDataAPI(ProxyDataAPI): |
| 52 | 79 | revision.repository_name = repository_dict[line['repos']] |
| 53 | 80 | |
| 54 | 81 | def fetch_data_ticket(self, empty_cursor): |
| 82 | + """ This method is responsible for seeking the ticket data in | |
| 83 | + trac database and transfer them to the colab database. | |
| 84 | + | |
| 85 | + :param empty_cursor: A cursor coming from connectinos, it is necessary | |
| 86 | + import the connections library from django.db, with it we can run | |
| 87 | + sql commands. | |
| 88 | + | |
| 89 | + :returns: Return is an ticker object with your saved data | |
| 90 | + in the colab database. | |
| 91 | + | |
| 92 | + """ | |
| 55 | 93 | ticket = Ticket() |
| 56 | 94 | collaborators = [] |
| 57 | 95 | cursor = self.ticket_cursor(empty_cursor) |
| ... | ... | @@ -80,6 +118,17 @@ class TracDataAPI(ProxyDataAPI): |
| 80 | 118 | ticket.collaborators = collaborators |
| 81 | 119 | |
| 82 | 120 | def fetch_data_wiki(self, empty_cursor): |
| 121 | + """ This method is responsible for seeking the wiki data in | |
| 122 | + trac database and transfer them to the colab database. | |
| 123 | + | |
| 124 | + :param empty_cursor: A cursor coming from connectinos, it is necessary | |
| 125 | + import the connections library from django.db, with it we can run | |
| 126 | + sql commands. | |
| 127 | + | |
| 128 | + :returns: Return is an wiki object with your saved data | |
| 129 | + in the colab database. | |
| 130 | + | |
| 131 | + """ | |
| 83 | 132 | wiki = Wiki() |
| 84 | 133 | cursor = self.wiki_cursor(empty_cursor) |
| 85 | 134 | wiki_dict = self.dictfetchall(cursor) |
| ... | ... | @@ -98,6 +147,19 @@ class TracDataAPI(ProxyDataAPI): |
| 98 | 147 | wiki.save() |
| 99 | 148 | |
| 100 | 149 | def dictfetchall(self, cursor): |
| 150 | + """ This method is responsible for taking the cursor content | |
| 151 | + and turn it into a dictionary. | |
| 152 | + | |
| 153 | + The cursor returns an array of tuples, With this method it will return | |
| 154 | + a list of dictionaries.. | |
| 155 | + | |
| 156 | + :param cursor: A cursor coming from connections, it is necessary | |
| 157 | + import the connections from library django.db, with it we can run | |
| 158 | + sql commands. | |
| 159 | + | |
| 160 | + :returns: Return are cursor.fetchall() in the format of dictionary | |
| 161 | + | |
| 162 | + """ | |
| 101 | 163 | desc = cursor.description |
| 102 | 164 | return [ |
| 103 | 165 | dict(zip([col[0] for col in desc], row)) |
| ... | ... | @@ -105,26 +167,88 @@ class TracDataAPI(ProxyDataAPI): |
| 105 | 167 | ] |
| 106 | 168 | |
| 107 | 169 | def wiki_cursor(self, cursor): |
| 170 | + """ This is the method in charge of getting the wiki table data and | |
| 171 | + put them in the cursor. | |
| 172 | + | |
| 173 | + :param cursor: A cursor coming from connections, it is necessary | |
| 174 | + import the connections from library django.db, with it we can run | |
| 175 | + sql commands. | |
| 176 | + | |
| 177 | + :returns: The return is the result of the desired query | |
| 178 | + | |
| 179 | + """ | |
| 108 | 180 | cursor.execute('''SELECT * FROM wiki;''') |
| 109 | 181 | return cursor |
| 110 | 182 | |
| 111 | 183 | def attachment_cursor(self, cursor): |
| 184 | + """ This is the method in charge of getting the attachment table data and | |
| 185 | + put them in the cursor. | |
| 186 | + | |
| 187 | + :param cursor: A cursor coming from connections, it is necessary | |
| 188 | + import the connections from library django.db, with it we can run | |
| 189 | + sql commands. | |
| 190 | + | |
| 191 | + :returns: The return is the result of the desired query | |
| 192 | + | |
| 193 | + """ | |
| 112 | 194 | cursor.execute('''SELECT * FROM attachment;''') |
| 113 | 195 | return cursor |
| 114 | 196 | |
| 115 | 197 | def ticket_cursor(self, cursor): |
| 198 | + """ This is the method in charge of getting the ticket table data and | |
| 199 | + put them in the cursor. | |
| 200 | + | |
| 201 | + :param cursor: A cursor coming from connections, it is necessary | |
| 202 | + import the connections from library django.db, with it we can run | |
| 203 | + sql commands. | |
| 204 | + | |
| 205 | + :returns: The return is the result of the desired query | |
| 206 | + | |
| 207 | + """ | |
| 116 | 208 | cursor.execute('''SELECT * FROM ticket;''') |
| 117 | 209 | return cursor |
| 118 | 210 | |
| 119 | 211 | def revision_cursor(self, cursor): |
| 212 | + """ This is the method in charge of getting the revision table data and | |
| 213 | + put them in the cursor. | |
| 214 | + | |
| 215 | + :param cursor: A cursor coming from connections, it is necessary | |
| 216 | + import the connections from library django.db, with it we can run | |
| 217 | + sql commands. | |
| 218 | + | |
| 219 | + :returns: The return is the result of the desired query | |
| 220 | + | |
| 221 | + """ | |
| 120 | 222 | cursor.execute('''SELECT * FROM revision;''') |
| 121 | 223 | return cursor |
| 122 | 224 | |
| 123 | 225 | def repository_cursor(self, cursor): |
| 226 | + """ This is the method in charge of getting the repository table data and | |
| 227 | + put them in the cursor. | |
| 228 | + | |
| 229 | + :param cursor: A cursor coming from connections, it is necessary | |
| 230 | + import the connections from library django.db, with it we can run | |
| 231 | + sql commands. | |
| 232 | + | |
| 233 | + :returns: The return is the result of the desired query | |
| 234 | + | |
| 235 | + """ | |
| 124 | 236 | cursor.execute('''SELECT * FROM repository;''') |
| 125 | 237 | return cursor |
| 126 | 238 | |
| 127 | 239 | def get_wiki_modified(self, cursor, wiki_name): |
| 240 | + """ This is the method in charge of getting the datetime in the wiki was | |
| 241 | + modified and put it in GMT format. | |
| 242 | + | |
| 243 | + :param cursor: A cursor coming from connections, it is necessary | |
| 244 | + import the connections from library django.db, with it we can run | |
| 245 | + sql commands. | |
| 246 | + | |
| 247 | + :param wiki_name: is the name of the current wiki. | |
| 248 | + | |
| 249 | + :returns: The return is the result of the desired query | |
| 250 | + | |
| 251 | + """ | |
| 128 | 252 | cursor.execute("""SELECT TIMESTAMP WITH TIME ZONE 'epoch' + \ |
| 129 | 253 | (MAX(wiki.time)/1000000) * INTERVAL '1s', \ |
| 130 | 254 | name from wiki where(name=\'""" + wiki_name + """\') \ |
| ... | ... | @@ -134,6 +258,18 @@ class TracDataAPI(ProxyDataAPI): |
| 134 | 258 | return modified_data |
| 135 | 259 | |
| 136 | 260 | def get_wiki_created(self, cursor, wiki_name): |
| 261 | + """ This is the method in charge of getting the datetime in the wiki was | |
| 262 | + created and put it in GMT format. | |
| 263 | + | |
| 264 | + :param cursor: A cursor coming from connections, it is necessary | |
| 265 | + import the connections from library django.db, with it we can run | |
| 266 | + sql commands. | |
| 267 | + | |
| 268 | + :param wiki_name: is the name of the current wiki. | |
| 269 | + | |
| 270 | + :returns: The return is the result of the desired query | |
| 271 | + | |
| 272 | + """ | |
| 137 | 273 | cursor.execute("""SELECT TIMESTAMP WITH TIME ZONE 'epoch' + \ |
| 138 | 274 | (MIN(wiki.time)/1000000) * INTERVAL '1s', \ |
| 139 | 275 | name from wiki where(name=\'""" + wiki_name + """\') \ |
| ... | ... | @@ -143,6 +279,18 @@ class TracDataAPI(ProxyDataAPI): |
| 143 | 279 | return modified_data |
| 144 | 280 | |
| 145 | 281 | def get_attachment_created(self, cursor, attachment_id): |
| 282 | + """ This is the method in charge of getting the datetime in the | |
| 283 | + attachment was created and put it in GMT format. | |
| 284 | + | |
| 285 | + :param cursor: A cursor coming from connections, it is necessary | |
| 286 | + import the connections from library django.db, with it we can run | |
| 287 | + sql commands. | |
| 288 | + | |
| 289 | + :param attachment_id: is the id of the current attachment. | |
| 290 | + | |
| 291 | + :returns: The return is the result of the desired query | |
| 292 | + | |
| 293 | + """ | |
| 146 | 294 | cursor.execute("""SELECT TIMESTAMP WITH TIME ZONE 'epoch' + \ |
| 147 | 295 | (MIN(attachment.time)/1000000) * INTERVAL '1s', \ |
| 148 | 296 | id from attachment \ |
| ... | ... | @@ -153,6 +301,18 @@ class TracDataAPI(ProxyDataAPI): |
| 153 | 301 | return modified_data |
| 154 | 302 | |
| 155 | 303 | def get_revision_created(self, cursor, revision): |
| 304 | + """ This is the method in charge of getting the datetime in the revision | |
| 305 | + was modified and put it in GMT format. | |
| 306 | + | |
| 307 | + :param cursor: A cursor coming from connections, it is necessary | |
| 308 | + import the connections from library django.db, with it we can run | |
| 309 | + sql commands. | |
| 310 | + | |
| 311 | + :param revision: is the current revision. | |
| 312 | + | |
| 313 | + :returns: The return is the result of the desired query | |
| 314 | + | |
| 315 | + """ | |
| 156 | 316 | cursor.execute("""SELECT TIMESTAMP WITH TIME ZONE 'epoch' + \ |
| 157 | 317 | (MIN(revision.time)/1000000) * INTERVAL '1s', \ |
| 158 | 318 | rev from revision where(rev=\'""" + revision + """\') \ |
| ... | ... | @@ -162,6 +322,18 @@ class TracDataAPI(ProxyDataAPI): |
| 162 | 322 | return modified_data |
| 163 | 323 | |
| 164 | 324 | def get_ticket_created(self, cursor, ticket_id): |
| 325 | + """ This is the method in charge of getting the datetime in the ticket | |
| 326 | + was created and put it in GMT format. | |
| 327 | + | |
| 328 | + :param cursor: A cursor coming from connections, it is necessary | |
| 329 | + import the connections from library django.db, with it we can run | |
| 330 | + sql commands. | |
| 331 | + | |
| 332 | + :param ticket_id: is the id of the current ticket. | |
| 333 | + | |
| 334 | + :returns: The return is the result of the desired query | |
| 335 | + | |
| 336 | + """ | |
| 165 | 337 | cursor.execute("""SELECT TIMESTAMP WITH TIME ZONE 'epoch' + \ |
| 166 | 338 | (MIN(ticket.time)/1000000) * INTERVAL '1s', \ |
| 167 | 339 | id from ticket where(id=""" + str(ticket_id) + """) \ |
| ... | ... | @@ -171,6 +343,17 @@ class TracDataAPI(ProxyDataAPI): |
| 171 | 343 | return modified_data |
| 172 | 344 | |
| 173 | 345 | def get_ticket_modified(self, cursor, ticket_id): |
| 346 | + """ This is the method in charge of getting the datetime in the ticket | |
| 347 | + was modified and put it in GMT format. | |
| 348 | + | |
| 349 | + :param cursor: A cursor coming from connections, it is necessary | |
| 350 | + import the connections from library django.db, with it we can run | |
| 351 | + sql commands. | |
| 352 | + | |
| 353 | + :param ticket_id: is the id of the current ticket. | |
| 354 | + | |
| 355 | + :returns: The return is the result of the desired query | |
| 356 | + """ | |
| 174 | 357 | cursor.execute("""SELECT TIMESTAMP WITH TIME ZONE 'epoch' + \ |
| 175 | 358 | (MAX(ticket.time)/1000000) * INTERVAL '1s', \ |
| 176 | 359 | id from ticket where(id=""" + str(ticket_id) + """) \ | ... | ... |
docs/source/conf.py
| ... | ... | @@ -18,7 +18,9 @@ import os |
| 18 | 18 | # If extensions (or modules to document with autodoc) are in another directory, |
| 19 | 19 | # add these directories to sys.path here. If the directory is relative to the |
| 20 | 20 | # documentation root, use os.path.abspath to make it absolute, like shown here. |
| 21 | -#sys.path.insert(0, os.path.abspath('.')) | |
| 21 | +sys.path.insert(0, os.path.abspath('../../colab/proxy')) | |
| 22 | +from django.conf import settings | |
| 23 | +settings.configure() | |
| 22 | 24 | |
| 23 | 25 | # -- General configuration ------------------------------------------------ |
| 24 | 26 | ... | ... |
docs/source/dev.rst
docs/source/index.rst
docs/source/plugindev.rst
docs/source/user.rst
| ... | ... | @@ -16,6 +16,74 @@ Plugins |
| 16 | 16 | ------- |
| 17 | 17 | .. TODO |
| 18 | 18 | |
| 19 | +Trac | |
| 20 | +++++ | |
| 21 | + | |
| 22 | + | |
| 23 | +Dado que o Trac ja está instalado : | |
| 24 | + | |
| 25 | +- Vocẽ pode instalá-lo facilmente da seguinte maneira: | |
| 26 | + | |
| 27 | +.. code-block:: sh | |
| 28 | + | |
| 29 | + $ pip install trac | |
| 30 | + | |
| 31 | +Para ativar o plugin do Trac deve-se primeiramente configurar o banco de dados | |
| 32 | +do trac em: | |
| 33 | + | |
| 34 | +1. vim /etc/colab/settings.yml | |
| 35 | + | |
| 36 | + | |
| 37 | +.. code-block:: yaml | |
| 38 | + | |
| 39 | + DATABASES: | |
| 40 | + default: | |
| 41 | + ENGINE: django.db.backends.postgresql_psycopg2 | |
| 42 | + HOST: localhost | |
| 43 | + NAME: colab | |
| 44 | + USER: colab | |
| 45 | + PASSWORD: colab | |
| 46 | + trac: | |
| 47 | + ENGINE: django.db.backends.postgresql_psycopg2 | |
| 48 | + HOST: localhost | |
| 49 | + NAME: trac | |
| 50 | + USER: colab | |
| 51 | + PASSWORD: colab | |
| 52 | + | |
| 53 | +2. Ainda no mesmo arquivo descomentar o Trac em PROXIED_APPS | |
| 54 | + | |
| 55 | +.. code-block:: yaml | |
| 56 | + | |
| 57 | + PROXIED_APPS: | |
| 58 | + # gitlab: | |
| 59 | + # upstream: 'http://localhost:8090/gitlab/' | |
| 60 | + # private_token: '' | |
| 61 | + trac: | |
| 62 | + upstream: 'http://localhost:5000/trac/' | |
| 63 | + | |
| 64 | +3. Criar o banco de dados no postgresql com usuário colab | |
| 65 | + | |
| 66 | +.. code-block:: sh | |
| 67 | + | |
| 68 | + $ sudo -u postgres psql | |
| 69 | + $ create database trac owner colab; | |
| 70 | + | |
| 71 | +4. Agora você deve gerar as migrações do trac | |
| 72 | + | |
| 73 | +.. code-block:: sh | |
| 74 | + | |
| 75 | + # Dado que você está na pasta do colab | |
| 76 | + $ workon colab | |
| 77 | + $ colab-admin makemigrations trac | |
| 78 | + $ colab-admin migrate | |
| 79 | + | |
| 80 | +5. Por fim basta importar os dados do trac ( pode levar algumtempo ). | |
| 81 | + | |
| 82 | +.. code-block:: sh | |
| 83 | + | |
| 84 | + # Dado que você está na pasta do colab | |
| 85 | + $ colab-admin import_proxy_data | |
| 86 | + | |
| 19 | 87 | Settings |
| 20 | 88 | -------- |
| 21 | 89 | ... | ... |